Skip to content

Commit e6f2a19

Browse files
committed
ignore commutative
1 parent 7e68218 commit e6f2a19

File tree

14 files changed

+150
-70
lines changed

14 files changed

+150
-70
lines changed

drizzle-kit/src/cli/commands/pull-cockroach.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import type {
1919
Sequence,
2020
View,
2121
} from '../../dialects/cockroach/ddl';
22-
import { createDDL, interimToDDL } from '../../dialects/cockroach/ddl';
22+
import { cockroachToRelationsPull, createDDL, interimToDDL } from '../../dialects/cockroach/ddl';
2323
import { ddlDiff } from '../../dialects/cockroach/diff';
2424
import { fromDatabaseForDrizzle } from '../../dialects/cockroach/introspect';
2525
import { ddlToTypeScript as cockroachSequenceSchemaToTypeScript } from '../../dialects/cockroach/typescript';
@@ -66,7 +66,7 @@ export const handle = async (
6666
}
6767

6868
const ts = cockroachSequenceSchemaToTypeScript(ddl2, res.viewColumns, casing);
69-
const relationsTs = relationsToTypeScript(ddl2.fks.list(), casing);
69+
const relationsTs = relationsToTypeScript(cockroachToRelationsPull(ddl2), casing);
7070

7171
const schemaFile = join(out, 'schema.ts');
7272
writeFileSync(schemaFile, ts.file);

drizzle-kit/src/cli/commands/pull-common.ts

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import { plural, singular } from 'pluralize';
2-
import { tableFromDDL } from 'src/dialects/postgres/ddl';
3-
import type { PostgresDDL } from 'src/ext/mover-postgres';
42
import { paramNameFor } from '../../dialects/postgres/typescript';
53
import { assertUnreachable } from '../../utils';
64
import type { Casing } from '../validations/common';
@@ -19,15 +17,15 @@ const withCasing = (value: string, casing: Casing) => {
1917
export type SchemaForPull = {
2018
schema?: string;
2119
foreignKeys: {
22-
schema: string;
20+
schema?: string;
2321
table: string;
2422
nameExplicit: boolean;
2523
columns: string[];
26-
schemaTo: string;
24+
schemaTo?: string;
2725
tableTo: string;
2826
columnsTo: string[];
29-
onUpdate: 'NO ACTION' | 'RESTRICT' | 'SET NULL' | 'CASCADE' | 'SET DEFAULT' | null;
30-
onDelete: 'NO ACTION' | 'RESTRICT' | 'SET NULL' | 'CASCADE' | 'SET DEFAULT' | null;
27+
onUpdate?: 'NO ACTION' | 'RESTRICT' | 'SET NULL' | 'CASCADE' | 'SET DEFAULT' | string | null;
28+
onDelete?: 'NO ACTION' | 'RESTRICT' | 'SET NULL' | 'CASCADE' | 'SET DEFAULT' | string | null;
3129
name: string;
3230
entityType: 'fks';
3331
}[];
@@ -37,34 +35,10 @@ export type SchemaForPull = {
3735
}[];
3836
}[];
3937

40-
function postgresToRelationsPull(schema: PostgresDDL): SchemaForPull {
41-
return Object.values(schema.tables.list()).map((table) => {
42-
const rawTable = tableFromDDL(table, schema);
43-
return {
44-
schema: rawTable.schema,
45-
foreignKeys: rawTable.fks,
46-
uniques: [
47-
...Object.values(rawTable.uniques).map((unq) => ({
48-
columns: unq.columns,
49-
})),
50-
...Object.values(rawTable.indexes).map((idx) => ({
51-
columns: idx.columns.map((idxc) => {
52-
if (!idxc.isExpression && idx.isUnique) {
53-
return idxc.value;
54-
}
55-
}).filter((item) => item !== undefined),
56-
})),
57-
],
58-
};
59-
});
60-
}
61-
62-
// TODO: take from beta
6338
export const relationsToTypeScript = (
64-
schemaInput: PostgresDDL,
39+
schema: SchemaForPull,
6540
casing: Casing,
6641
) => {
67-
const schema = postgresToRelationsPull(schemaInput);
6842
const imports: string[] = [];
6943
const tableRelations: Record<
7044
string,

drizzle-kit/src/cli/commands/pull-gel.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import chalk from 'chalk';
22
import { writeFileSync } from 'fs';
33
import { render, renderWithTask } from 'hanji';
44
import { join } from 'path';
5-
import { interimToDDL } from 'src/dialects/postgres/ddl';
5+
import { interimToDDL, postgresToRelationsPull } from 'src/dialects/postgres/ddl';
66
import { ddlToTypeScript } from 'src/dialects/postgres/typescript';
77
import { prepareEntityFilter } from 'src/dialects/pull-utils';
88
import { fromDatabase } from '../../dialects/postgres/introspect';
@@ -44,7 +44,7 @@ export const handle = async (
4444
}
4545

4646
const ts = ddlToTypeScript(ddl2, res.viewColumns, casing, 'gel');
47-
const relationsTs = relationsToTypeScript(ddl2.fks.list(), casing);
47+
const relationsTs = relationsToTypeScript(postgresToRelationsPull(ddl2), casing);
4848

4949
const schemaFile = join(out, 'schema.ts');
5050
writeFileSync(schemaFile, ts.file);

drizzle-kit/src/cli/commands/pull-mysql.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { render } from 'hanji';
66
import { join } from 'path';
77
import type { EntityFilter } from 'src/dialects/pull-utils';
88
import { prepareEntityFilter } from 'src/dialects/pull-utils';
9-
import { createDDL, interimToDDL } from '../../dialects/mysql/ddl';
9+
import { createDDL, interimToDDL, mysqlToRelationsPull } from '../../dialects/mysql/ddl';
1010
import { ddlDiff } from '../../dialects/mysql/diff';
1111
import { fromDatabaseForDrizzle } from '../../dialects/mysql/introspect';
1212
import { toJsonSnapshot } from '../../dialects/mysql/snapshot';
@@ -51,7 +51,7 @@ export const handle = async (
5151
const { ddl } = interimToDDL(schema);
5252

5353
const ts = ddlToTypeScript(ddl, schema.viewColumns, casing, 'mysql');
54-
const relations = relationsToTypeScript(ddl.fks.list(), casing);
54+
const relations = relationsToTypeScript(mysqlToRelationsPull(ddl), casing);
5555

5656
const schemaFile = join(out, 'schema.ts');
5757
writeFileSync(schemaFile, ts.file);

drizzle-kit/src/cli/commands/pull-postgres.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import type {
2222
UniqueConstraint,
2323
View,
2424
} from '../../dialects/postgres/ddl';
25-
import { createDDL, interimToDDL } from '../../dialects/postgres/ddl';
25+
import { createDDL, interimToDDL, postgresToRelationsPull } from '../../dialects/postgres/ddl';
2626
import { ddlDiff } from '../../dialects/postgres/diff';
2727
import { fromDatabaseForDrizzle } from '../../dialects/postgres/introspect';
2828
import { ddlToTypeScript as postgresSchemaToTypeScript } from '../../dialects/postgres/typescript';
@@ -72,7 +72,7 @@ export const handle = async (
7272
}
7373

7474
const ts = postgresSchemaToTypeScript(ddl2, res.viewColumns, casing, 'pg');
75-
const relationsTs = relationsToTypeScript(ddl2, casing);
75+
const relationsTs = relationsToTypeScript(postgresToRelationsPull(ddl2), casing);
7676

7777
const schemaFile = join(out, 'schema.ts');
7878
writeFileSync(schemaFile, ts.file);

drizzle-kit/src/cli/commands/pull-singlestore.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import chalk from 'chalk';
22
import { writeFileSync } from 'fs';
33
import { render, renderWithTask } from 'hanji';
44
import { join } from 'path';
5-
import { createDDL, interimToDDL } from 'src/dialects/mysql/ddl';
5+
import { createDDL, interimToDDL, mysqlToRelationsPull } from 'src/dialects/mysql/ddl';
66
import { fromDatabaseForDrizzle } from 'src/dialects/mysql/introspect';
77
import { ddlToTypeScript } from 'src/dialects/mysql/typescript';
88
import { prepareEntityFilter } from 'src/dialects/pull-utils';
@@ -43,7 +43,7 @@ export const handle = async (
4343
const { ddl } = interimToDDL(res);
4444

4545
const ts = ddlToTypeScript(ddl, res.viewColumns, casing, 'singlestore');
46-
const relations = relationsToTypeScript(ddl.fks.list(), casing);
46+
const relations = relationsToTypeScript(mysqlToRelationsPull(ddl), casing);
4747

4848
const schemaFile = join(out, 'schema.ts');
4949
writeFileSync(schemaFile, ts.file);

drizzle-kit/src/cli/commands/pull-sqlite.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { render, renderWithTask } from 'hanji';
55
import { join } from 'path';
66
import type { EntityFilter } from 'src/dialects/pull-utils';
77
import { prepareEntityFilter } from 'src/dialects/pull-utils';
8-
import { createDDL, interimToDDL } from 'src/dialects/sqlite/ddl';
8+
import { createDDL, interimToDDL, sqliteToRelationsPull } from 'src/dialects/sqlite/ddl';
99
import { toJsonSnapshot } from 'src/dialects/sqlite/snapshot';
1010
import { ddlDiffDry } from '../../dialects/sqlite/diff';
1111
import { fromDatabaseForDrizzle } from '../../dialects/sqlite/introspect';
@@ -43,7 +43,7 @@ export const handle = async (
4343
});
4444

4545
const ts = ddlToTypeScript(ddl, casing, viewColumns, type);
46-
const relationsTs = relationsToTypeScript(ddl.fks.list(), casing);
46+
const relationsTs = relationsToTypeScript(sqliteToRelationsPull(ddl), casing);
4747

4848
// check orm and orm-pg api version
4949
const schemaFile = join(out, 'schema.ts');

drizzle-kit/src/dialects/cockroach/ddl.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { SchemaForPull } from 'src/cli/commands/pull-common';
12
import { create } from '../dialect';
23
import { defaultNameForPK, defaultNameForUnique } from './grammar';
34
import { defaults } from './grammar';
@@ -481,3 +482,20 @@ export const interimToDDL = (
481482

482483
return { ddl, errors };
483484
};
485+
486+
export function cockroachToRelationsPull(schema: CockroachDDL): SchemaForPull {
487+
return Object.values(schema.tables.list()).map((table) => {
488+
const rawTable = tableFromDDL(table, schema);
489+
return {
490+
schema: rawTable.schema,
491+
foreignKeys: rawTable.fks,
492+
uniques: Object.values(rawTable.indexes).map((idx) => ({
493+
columns: idx.columns.map((idxc) => {
494+
if (!idxc.isExpression && idx.isUnique) {
495+
return idxc.value;
496+
}
497+
}).filter((item) => item !== undefined),
498+
})),
499+
};
500+
});
501+
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,8 @@ const footprintMap: Record<JsonStatement['type'], JsonStatement['type'][]> = {
6262
drop_index: ['create_index', 'drop_index'],
6363

6464
// Primary key operations
65-
drop_pk: ['drop_pk', 'create_pk', 'recreate_pk'],
66-
create_pk: ['drop_pk', 'create_pk', 'recreate_pk'],
67-
recreate_pk: ['drop_pk', 'create_pk', 'recreate_pk'],
65+
drop_pk: ['drop_pk', 'create_pk'],
66+
create_pk: ['drop_pk', 'create_pk'],
6867

6968
// Foreign key operations
7069
create_fk: ['create_fk'],
@@ -135,9 +134,6 @@ function extractStatementInfo(
135134
case 'create_pk':
136135
objectName = statement.pk.table;
137136
break;
138-
case 'recreate_pk':
139-
objectName = statement.pk.table;
140-
break;
141137

142138
// Foreign key operations
143139
case 'create_fk':

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { SchemaForPull } from 'src/cli/commands/pull-common';
12
import { create } from '../dialect';
23
import { nameForUnique } from './grammar';
34

@@ -269,3 +270,40 @@ export const interimToDDL = (interim: InterimSchema): { ddl: MysqlDDL; errors: S
269270

270271
return { ddl, errors };
271272
};
273+
274+
export const tableFromDDL = (
275+
table: MysqlEntities['tables'],
276+
ddl: MysqlDDL,
277+
) => {
278+
const filter = { table: table.name } as const;
279+
const columns = ddl.columns.list(filter);
280+
const pk = ddl.pks.one(filter);
281+
const fks = ddl.fks.list(filter);
282+
const checks = ddl.checks.list(filter);
283+
const indexes = ddl.indexes.list(filter);
284+
285+
return {
286+
...table,
287+
columns,
288+
pk,
289+
fks,
290+
checks,
291+
indexes,
292+
};
293+
};
294+
295+
export function mysqlToRelationsPull(schema: MysqlDDL): SchemaForPull {
296+
return Object.values(schema.tables.list()).map((table) => {
297+
const rawTable = tableFromDDL(table, schema);
298+
return {
299+
foreignKeys: rawTable.fks,
300+
uniques: Object.values(rawTable.indexes).map((idx) => ({
301+
columns: idx.columns.map((idxc) => {
302+
if (!idxc.isExpression && idx.isUnique) {
303+
return idxc.value;
304+
}
305+
}).filter((item) => item !== undefined),
306+
})),
307+
};
308+
});
309+
}

0 commit comments

Comments
 (0)