Skip to content

Commit e4296ac

Browse files
authored
feat: 🎸 aware table schema on function ColumnTypes (#144)
1 parent dd0e76a commit e4296ac

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

‎migrator.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,9 +320,20 @@ func (m Migrator) ColumnTypes(value interface{}) ([]gorm.ColumnType, error) {
320320
rows.Close()
321321

322322
{
323+
_, schemaName, tableName := splitFullQualifiedName(stmt.Table)
324+
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 = ?"
326+
327+
queryParameters := []interface{}{m.CurrentDatabase(), tableName}
328+
329+
if schemaName != "" {
330+
query += " AND TABLE_SCHEMA = ?"
331+
queryParameters = append(queryParameters, schemaName)
332+
}
333+
323334
var (
324-
columnTypeSQL = "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-
columns, rowErr = m.DB.Raw(columnTypeSQL, m.CurrentDatabase(), stmt.Table).Rows()
335+
columnTypeSQL = query
336+
columns, rowErr = m.DB.Raw(columnTypeSQL, queryParameters...).Rows()
326337
)
327338

328339
if rowErr != nil {
@@ -377,7 +388,17 @@ func (m Migrator) ColumnTypes(value interface{}) ([]gorm.ColumnType, error) {
377388
}
378389

379390
{
380-
columnTypeRows, err := m.DB.Raw("SELECT c.COLUMN_NAME, t.CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS t JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE c ON c.CONSTRAINT_NAME=t.CONSTRAINT_NAME WHERE t.CONSTRAINT_TYPE IN ('PRIMARY KEY', 'UNIQUE') AND c.TABLE_CATALOG = ? AND c.TABLE_NAME = ?", m.CurrentDatabase(), stmt.Table).Rows()
391+
_, schemaName, tableName := splitFullQualifiedName(stmt.Table)
392+
query := "SELECT c.COLUMN_NAME, t.CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS t JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE c ON c.CONSTRAINT_NAME=t.CONSTRAINT_NAME WHERE t.CONSTRAINT_TYPE IN ('PRIMARY KEY', 'UNIQUE') AND c.TABLE_CATALOG = ? AND c.TABLE_NAME = ?"
393+
394+
queryParameters := []interface{}{m.CurrentDatabase(), tableName}
395+
396+
if schemaName != "" {
397+
query += " AND c.TABLE_SCHEMA = ?"
398+
queryParameters = append(queryParameters, schemaName)
399+
}
400+
401+
columnTypeRows, err := m.DB.Raw(query, queryParameters...).Rows()
381402
if err != nil {
382403
return err
383404
}

0 commit comments

Comments
 (0)