dialect/sql/schema: more code de-duplication from mysql test (#421)

This commit is contained in:
Ariel Mashraki
2020-04-06 12:31:54 +03:00
committed by GitHub
parent ff26e5ff7d
commit 3c03ed00a8

View File

@@ -134,9 +134,7 @@ func TestMySQL_Create(t *testing.T) {
mock.tableExists("pets", false)
mock.ExpectExec(escape("CREATE TABLE IF NOT EXISTS `pets`(`id` bigint AUTO_INCREMENT NOT NULL, `name` varchar(255) NOT NULL, `owner_id` bigint NULL, PRIMARY KEY(`id`)) CHARACTER SET utf8mb4")).
WillReturnResult(sqlmock.NewResult(0, 1))
mock.ExpectQuery(escape("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE `TABLE_SCHEMA` = (SELECT DATABASE()) AND `CONSTRAINT_TYPE` = ? AND `CONSTRAINT_NAME` = ?")).
WithArgs("FOREIGN KEY", "pets_owner").
WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(0))
mock.fkExists("pets_owner", false)
mock.ExpectExec(escape("ALTER TABLE `pets` ADD CONSTRAINT `pets_owner` FOREIGN KEY(`owner_id`) REFERENCES `users`(`id`) ON DELETE CASCADE")).
WillReturnResult(sqlmock.NewResult(0, 1))
mock.ExpectCommit()
@@ -686,9 +684,7 @@ func TestMySQL_Create(t *testing.T) {
AddRow("PRIMARY", "id", "0", "1").
AddRow("old_index", "old", "0", "1").
AddRow("parent_id", "parent_id", "0", "1"))
mock.ExpectQuery(escape("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE `TABLE_SCHEMA` = (SELECT DATABASE()) AND `CONSTRAINT_TYPE` = ? AND `CONSTRAINT_NAME` = ?")).
WithArgs("FOREIGN KEY", "parent_id").
WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(1))
mock.fkExists("parent_id", true)
mock.ExpectQuery(escape("SELECT `column_name` FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS t1 JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS t2 ON `t1`.`constraint_name` = `t2`.`constraint_name` WHERE (`t2`.`constraint_type` = 'FOREIGN KEY') AND (`t2`.`table_schema` = (SELECT DATABASE())) AND (`t1`.`table_schema` = (SELECT DATABASE())) AND (`t2`.`constraint_name` = ?)")).
WithArgs("parent_id").
WillReturnRows(sqlmock.NewRows([]string{"COLUMN_NAME"}).
@@ -697,8 +693,7 @@ func TestMySQL_Create(t *testing.T) {
mock.ExpectExec(escape("DROP INDEX `old_index` ON `users`")).
WillReturnResult(sqlmock.NewResult(0, 1))
// foreign key already exist.
mock.ExpectQuery(escape("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE `TABLE_SCHEMA` = (SELECT DATABASE()) AND `CONSTRAINT_TYPE` = ? AND `CONSTRAINT_NAME` = ?")).
WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(1))
mock.fkExists("parent_id", true)
mock.ExpectCommit()
},
},
@@ -823,14 +818,10 @@ func TestMySQL_Create(t *testing.T) {
WithArgs("users").
WillReturnRows(sqlmock.NewRows([]string{"index_name", "column_name", "non_unique", "seq_in_index"}).
AddRow("PRIMARY", "id", "0", "1"))
mock.ExpectQuery(escape("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE `TABLE_SCHEMA` = (SELECT DATABASE()) AND `CONSTRAINT_TYPE` = ? AND `CONSTRAINT_NAME` = ?")).
WithArgs("FOREIGN KEY", "user_spouse_____________________390ed76f91d3c57cd3516e7690f621dc").
WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(0))
mock.fkExists("user_spouse_____________________390ed76f91d3c57cd3516e7690f621dc", false)
mock.ExpectExec(escape("ALTER TABLE `users` ADD COLUMN `spouse_id` bigint")).
WillReturnResult(sqlmock.NewResult(0, 1))
mock.ExpectQuery(escape("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE `TABLE_SCHEMA` = (SELECT DATABASE()) AND `CONSTRAINT_TYPE` = ? AND `CONSTRAINT_NAME` = ?")).
WithArgs("FOREIGN KEY", "user_spouse_____________________390ed76f91d3c57cd3516e7690f621dc").
WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(0))
mock.fkExists("user_spouse_____________________390ed76f91d3c57cd3516e7690f621dc", false)
mock.ExpectExec("ALTER TABLE `users` ADD CONSTRAINT `.{64}` FOREIGN KEY\\(`spouse_id`\\) REFERENCES `users`\\(`id`\\) ON DELETE CASCADE").
WillReturnResult(sqlmock.NewResult(0, 1))
mock.ExpectCommit()
@@ -1010,6 +1001,16 @@ func (m mysqlMock) tableExists(table string, exists bool) {
WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(count))
}
func (m mysqlMock) fkExists(fk string, exists bool) {
count := 0
if exists {
count = 1
}
m.ExpectQuery(escape("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE `TABLE_SCHEMA` = (SELECT DATABASE()) AND `CONSTRAINT_TYPE` = ? AND `CONSTRAINT_NAME` = ?")).
WithArgs("FOREIGN KEY", fk).
WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(count))
}
func escape(query string) string {
rows := strings.Split(query, "\n")
for i := range rows {