diff --git a/dialect/sql/schema/mysql.go b/dialect/sql/schema/mysql.go index dd931b8c3..8a2c9de12 100644 --- a/dialect/sql/schema/mysql.go +++ b/dialect/sql/schema/mysql.go @@ -604,7 +604,7 @@ func parseColumn(typ string) (parts []string, size int64, unsigned bool, err err // fkNames returns the foreign-key names of a column. func fkNames(ctx context.Context, tx dialect.Tx, table, column string) ([]string, error) { - query, args := sql.Select("CONSTRAINT_NAME").From(sql.Table("INFORMATION_SCHEMA.KEY_COLUMN_USAGE").Unquote()). + query, args := sql.Select("CONSTRAINT_NAME").From(sql.Table("KEY_COLUMN_USAGE").Schema("INFORMATION_SCHEMA")). Where(sql.And( sql.EQ("TABLE_NAME", table), sql.EQ("COLUMN_NAME", column), diff --git a/dialect/sql/schema/mysql_test.go b/dialect/sql/schema/mysql_test.go index 301b39241..0412f333e 100644 --- a/dialect/sql/schema/mysql_test.go +++ b/dialect/sql/schema/mysql_test.go @@ -709,7 +709,7 @@ func TestMySQL_Create(t *testing.T) { AddRow("PRIMARY", "id", "0", "1"). AddRow("age", "age", "0", "1")) // check if a foreign-key needs to be dropped. - mock.ExpectQuery(escape("SELECT `CONSTRAINT_NAME` FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE `TABLE_NAME` = ? AND `COLUMN_NAME` = ? AND `POSITION_IN_UNIQUE_CONSTRAINT` IS NOT NULL AND `TABLE_SCHEMA` = (SELECT DATABASE())")). + mock.ExpectQuery(escape("SELECT `CONSTRAINT_NAME` FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` WHERE `TABLE_NAME` = ? AND `COLUMN_NAME` = ? AND `POSITION_IN_UNIQUE_CONSTRAINT` IS NOT NULL AND `TABLE_SCHEMA` = (SELECT DATABASE())")). WithArgs("users", "age"). WillReturnRows(sqlmock.NewRows([]string{"CONSTRAINT_NAME"})) // drop the unique index. @@ -791,7 +791,7 @@ func TestMySQL_Create(t *testing.T) { AddRow("PRIMARY", "id", "0", "1"). AddRow("parent_id", "parent_id", "0", "1")) // check if a foreign-key needs to be dropped. - mock.ExpectQuery(escape("SELECT `CONSTRAINT_NAME` FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE `TABLE_NAME` = ? AND `COLUMN_NAME` = ? AND `POSITION_IN_UNIQUE_CONSTRAINT` IS NOT NULL AND `TABLE_SCHEMA` = (SELECT DATABASE())")). + mock.ExpectQuery(escape("SELECT `CONSTRAINT_NAME` FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` WHERE `TABLE_NAME` = ? AND `COLUMN_NAME` = ? AND `POSITION_IN_UNIQUE_CONSTRAINT` IS NOT NULL AND `TABLE_SCHEMA` = (SELECT DATABASE())")). WithArgs("users", "parent_id"). WillReturnRows(sqlmock.NewRows([]string{"CONSTRAINT_NAME"}).AddRow("users_parent_id")) mock.ExpectExec(escape("ALTER TABLE `users` DROP FOREIGN KEY `users_parent_id`")). @@ -834,7 +834,7 @@ func TestMySQL_Create(t *testing.T) { AddRow("PRIMARY", "id", "0", "1"). AddRow("parent_id", "parent_id", "0", "1")) // check if there's a foreign-key that is associated with this index. - mock.ExpectQuery(escape("SELECT `CONSTRAINT_NAME` FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE `TABLE_NAME` = ? AND `COLUMN_NAME` = ? AND `POSITION_IN_UNIQUE_CONSTRAINT` IS NOT NULL AND `TABLE_SCHEMA` = (SELECT DATABASE())")). + mock.ExpectQuery(escape("SELECT `CONSTRAINT_NAME` FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` WHERE `TABLE_NAME` = ? AND `COLUMN_NAME` = ? AND `POSITION_IN_UNIQUE_CONSTRAINT` IS NOT NULL AND `TABLE_SCHEMA` = (SELECT DATABASE())")). WithArgs("users", "parent_id"). WillReturnRows(sqlmock.NewRows([]string{"CONSTRAINT_NAME"}).AddRow("users_parent_id")) // create a new index, to replace the old one (that needs to be dropped).