generateAddEnumConstraintAlterTableSQL method

AlterTableSQL generateAddEnumConstraintAlterTableSQL(
  1. String table,
  2. String fieldName,
  3. TypeInfo fieldType, {
  4. List<EntityField>? entityFieldAnnotations,
})

Implementation

AlterTableSQL generateAddEnumConstraintAlterTableSQL(
  String table,
  String fieldName,
  TypeInfo fieldType, {
  List<EntityField>? entityFieldAnnotations,
}) {
  var q = dialect.elementQuote;
  var columnName = normalizeColumnName(fieldName);

  var constraintName = '${table}_${columnName}__check';

  var fieldSQLType = typeToSQLType(
    fieldType,
    columnName,
    entityFieldAnnotations: entityFieldAnnotations,
  );

  var enumType = enumTypeToSQLType(
    fieldType.type,
    columnName,
    entityFieldAnnotations: entityFieldAnnotations,
  );

  if (enumType == null) {
    throw StateError(
      "Can't find column `$table`.`$columnName` `EnumReflection` for type: $fieldType",
    );
  }

  var type = enumType.key;
  var values = enumType.value;

  fieldSQLType = _buildEnumSQLType(
    type,
    fieldSQLType,
    values,
    q,
    columnName,
    withSqlType: false,
  );

  var comment =
      '${fieldType.toString(withT: false)} $fieldName enum(${values.join(', ')})';

  var columnEntry = SQLEntry(
    'ADD',
    ' ADD CONSTRAINT $q$constraintName$q $fieldSQLType',
    comment: comment,
  );

  var alterTableSQL = AlterTableSQL(dialect, table, [columnEntry]);

  return alterTableSQL;
}