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}_${fieldName}_check';

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

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

  if (enumType == null) {
    throw StateError("Can't find `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;
}