Skip to content

Commit 3394cdb

Browse files
committed
fix mysql diff
1 parent 8710ec1 commit 3394cdb

File tree

3 files changed

+24
-32
lines changed

3 files changed

+24
-32
lines changed

drizzle-kit/src/dialects/mysql/diff.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,11 @@ export const ddlDiff = async (
285285
).map((it) => prepareStatement('drop_index', { index: it }));
286286

287287
const dropFKStatements = fksDiff.filter((it) => it.$diffType === 'drop')
288-
.filter((it) => !deletedTables.some((x) => x.name === it.table))
288+
.filter((it) => {
289+
const tableDeteled = deletedTables.some((x) => x.name === it.table);
290+
const tableToDeleted = deletedTables.some((x) => x.name === it.tableTo);
291+
return !(tableDeteled && !tableToDeleted);
292+
})
289293
.map((it) => prepareStatement('drop_constraint', { table: it.table, constraint: it.name }));
290294

291295
const dropPKStatements = pksDiff.filter((it) => it.$diffType === 'drop')
@@ -440,6 +444,7 @@ export const ddlDiff = async (
440444

441445
const statements = [
442446
...createTableStatements,
447+
...dropFKStatements,
443448
...dropTableStatements,
444449
...renameTableStatements,
445450

@@ -450,16 +455,16 @@ export const ddlDiff = async (
450455
...alterViewStatements,
451456

452457
...dropCheckStatements,
453-
...dropFKStatements,
458+
454459
...dropIndexeStatements,
455460
...dropPKStatements,
456461

457462
...columnAlterStatements,
458463
...columnRecreateStatatements,
459464

465+
...addColumnsStatemets,
460466
...createPKStatements,
461467

462-
...addColumnsStatemets,
463468
...createIndexesStatements,
464469
...createFKsStatements,
465470
...createCheckStatements,

drizzle-kit/tests/mysql/constraints.test.ts

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -859,18 +859,10 @@ test('drop column with pk and add pk to another column #2', async () => {
859859
// https://github.com/drizzle-team/drizzle-orm/issues/4456
860860
test('drop column with pk and add pk to another column #3', async () => {
861861
const schema1 = {
862-
authors: mysqlTable(
863-
'authors',
864-
{
865-
publicationId: varchar('publication_id', { length: 64 }),
866-
authorID: varchar('author_id', { length: 10 }),
867-
},
868-
(table) => {
869-
return {
870-
pk: primaryKey(table.publicationId, table.authorID),
871-
};
872-
},
873-
),
862+
authors: mysqlTable('authors', {
863+
publicationId: varchar('publication_id', { length: 64 }),
864+
authorID: varchar('author_id', { length: 10 }),
865+
}, (table) => [primaryKey({ columns: [table.publicationId, table.authorID] })]),
874866
};
875867

876868
const { sqlStatements: st1, next: n1 } = await diff({}, schema1, []);
@@ -883,19 +875,13 @@ test('drop column with pk and add pk to another column #3', async () => {
883875
expect(pst1).toStrictEqual(expectedSt1);
884876

885877
const schema2 = {
886-
authors: mysqlTable(
887-
'authors',
888-
{
889-
publicationId: varchar('publication_id', { length: 64 }),
890-
authorID: varchar('author_id', { length: 10 }),
891-
orcidId: varchar('orcid_id', { length: 64 }),
892-
},
893-
(table) => {
894-
return {
895-
pk: primaryKey(table.publicationId, table.authorID, table.orcidId),
896-
};
897-
},
898-
),
878+
authors: mysqlTable('authors', {
879+
publicationId: varchar('publication_id', { length: 64 }),
880+
authorID: varchar('author_id', { length: 10 }),
881+
orcidId: varchar('orcid_id', { length: 64 }),
882+
}, (table) => [
883+
primaryKey({ columns: [table.publicationId, table.authorID, table.orcidId] }),
884+
]),
899885
};
900886

901887
const { sqlStatements: st2 } = await diff(n1, schema2, []);

drizzle-kit/tests/mysql/mysql.test.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ test('drop tables with fk constraint', async () => {
242242
const table1 = mysqlTable('table1', {
243243
column1: int().primaryKey(),
244244
});
245-
const table2 = mysqlTable('table1', {
245+
const table2 = mysqlTable('table2', {
246246
column1: int().primaryKey(),
247247
column2: int().references(() => table1.column1),
248248
});
@@ -252,8 +252,8 @@ test('drop tables with fk constraint', async () => {
252252
const { sqlStatements: pst1 } = await push({ db, to: schema1 });
253253
const expectedSt1 = [
254254
'CREATE TABLE `table1` (\n\t`column1` int PRIMARY KEY\n);\n',
255-
'CREATE TABLE `table2` (\n\t`column1` int PRIMARY KEY,\n\t`column2` int,'
256-
+ '\n\tCONSTRAINT `table1_column2_table1_column1_fkey` FOREIGN KEY (`column2`) REFERENCES `table1`(`column1`)\n);\n',
255+
'CREATE TABLE `table2` (\n\t`column1` int PRIMARY KEY,\n\t`column2` int\n);\n',
256+
'ALTER TABLE \`table2\` ADD CONSTRAINT `table2_column2_table1_column1_fkey` FOREIGN KEY (`column2`) REFERENCES `table1`(`column1`);',
257257
];
258258
expect(st1).toStrictEqual(expectedSt1);
259259
expect(pst1).toStrictEqual(expectedSt1);
@@ -262,8 +262,9 @@ test('drop tables with fk constraint', async () => {
262262
const { sqlStatements: pst2 } = await push({ db, to: {} });
263263

264264
const expectedSt2 = [
265-
'DROP TABLE `table2`;',
265+
'ALTER TABLE `table2` DROP CONSTRAINT `table2_column2_table1_column1_fkey`;',
266266
'DROP TABLE `table1`;',
267+
'DROP TABLE `table2`;',
267268
];
268269
expect(st2).toStrictEqual(expectedSt2);
269270
expect(pst2).toStrictEqual(expectedSt2);

0 commit comments

Comments
 (0)