@@ -322,7 +322,12 @@ func (m Migrator) ColumnTypes(value interface{}) ([]gorm.ColumnType, error) {
322322 {
323323 _ , schemaName , tableName := splitFullQualifiedName (stmt .Table )
324324
325- query := "SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, IS_NULLABLE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_PRECISION_RADIX, NUMERIC_SCALE, DATETIME_PRECISION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_CATALOG = ? AND TABLE_NAME = ?"
325+ query := strings .TrimSpace (`
326+ SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, c.IS_NULLABLE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_PRECISION_RADIX, NUMERIC_SCALE, DATETIME_PRECISION, AUTO_INCREMENT = c2.is_identity
327+ FROM INFORMATION_SCHEMA.COLUMNS c
328+ LEFT JOIN sys.tables t ON c.TABLE_NAME = t.[name]
329+ LEFT JOIN sys.columns c2 ON t.object_id = c2.object_id AND c2.[name] = c.COLUMN_NAME
330+ WHERE TABLE_CATALOG = ? AND TABLE_NAME = ?` )
326331
327332 queryParameters := []interface {}{m .CurrentDatabase (), tableName }
328333
@@ -346,11 +351,12 @@ func (m Migrator) ColumnTypes(value interface{}) ([]gorm.ColumnType, error) {
346351 PrimaryKeyValue : sql.NullBool {Valid : true },
347352 UniqueValue : sql.NullBool {Valid : true },
348353 }
349- datetimePrecision sql.NullInt64
350- radixValue sql.NullInt64
351- nullableValue sql.NullString
352- values = []interface {}{
353- & column .NameValue , & column .ColumnTypeValue , & column .DefaultValueValue , & nullableValue , & column .LengthValue , & column .DecimalSizeValue , & radixValue , & column .ScaleValue , & datetimePrecision ,
354+ datetimePrecision sql.NullInt64
355+ radixValue sql.NullInt64
356+ nullableValue sql.NullString
357+ autoIncrementValue sql.NullBool
358+ values = []interface {}{
359+ & column .NameValue , & column .ColumnTypeValue , & column .DefaultValueValue , & nullableValue , & column .LengthValue , & column .DecimalSizeValue , & radixValue , & column .ScaleValue , & datetimePrecision , & autoIncrementValue ,
354360 }
355361 )
356362
@@ -366,6 +372,10 @@ func (m Migrator) ColumnTypes(value interface{}) ([]gorm.ColumnType, error) {
366372 column .DecimalSizeValue = datetimePrecision
367373 }
368374
375+ if autoIncrementValue .Valid && autoIncrementValue .Bool {
376+ column .AutoIncrementValue = autoIncrementValue
377+ }
378+
369379 if column .DefaultValueValue .Valid {
370380 matches := defaultValueTrimRegexp .FindStringSubmatch (column .DefaultValueValue .String )
371381 for len (matches ) > 1 {
0 commit comments