orchid-orm 1.58.3 → 1.58.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/migrations/node-postgres.js +61 -19
- package/dist/migrations/node-postgres.js.map +1 -1
- package/dist/migrations/node-postgres.mjs +62 -20
- package/dist/migrations/node-postgres.mjs.map +1 -1
- package/dist/migrations/postgres-js.js +61 -19
- package/dist/migrations/postgres-js.js.map +1 -1
- package/dist/migrations/postgres-js.mjs +62 -20
- package/dist/migrations/postgres-js.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -24,7 +24,14 @@ const compareSqlExpressions = async (tableExpressions, adapter) => {
|
|
|
24
24
|
`SELECT pg_get_viewdef('${viewName}') v`,
|
|
25
25
|
`DROP VIEW ${viewName}`
|
|
26
26
|
].join("; ");
|
|
27
|
-
const result = await adapter.query(combinedQueries, values).then(
|
|
27
|
+
const result = await adapter.query(combinedQueries, values).then(
|
|
28
|
+
(res) => res[1],
|
|
29
|
+
(err) => {
|
|
30
|
+
if (err.code !== "42704") {
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
);
|
|
28
35
|
if (!result) {
|
|
29
36
|
handle();
|
|
30
37
|
return;
|
|
@@ -606,15 +613,13 @@ const getColumnDbType = (column, currentSchema) => {
|
|
|
606
613
|
let type = item instanceof pqb.EnumColumn ? item.enumName : item.dataType;
|
|
607
614
|
type = type.startsWith(currentSchema + ".") ? type.slice(currentSchema.length + 1) : type;
|
|
608
615
|
return type + "[]".repeat(column.data.arrayDims);
|
|
609
|
-
} else
|
|
616
|
+
} else {
|
|
610
617
|
let type = column.dataType;
|
|
611
618
|
const i = type.indexOf("(");
|
|
612
619
|
if (i !== -1) {
|
|
613
620
|
type = type.slice(0, i);
|
|
614
621
|
}
|
|
615
|
-
return type.includes(".") ? type : currentSchema + "." + type;
|
|
616
|
-
} else {
|
|
617
|
-
return column.dataType;
|
|
622
|
+
return column.data.isOfCustomType ? type.includes(".") ? type : currentSchema + "." + type : type;
|
|
618
623
|
}
|
|
619
624
|
};
|
|
620
625
|
const getColumnDbTypeQuoted = (column, currentSchema) => {
|
|
@@ -636,7 +641,7 @@ const processDomains = async (ast, adapter, domainsMap, dbStructure, {
|
|
|
636
641
|
structureToAstCtx,
|
|
637
642
|
currentSchema,
|
|
638
643
|
internal: { generatorIgnore }
|
|
639
|
-
}) => {
|
|
644
|
+
}, pendingDbTypes) => {
|
|
640
645
|
const codeDomains = [];
|
|
641
646
|
if (domains) {
|
|
642
647
|
for (const { schemaName, name, column } of domains) {
|
|
@@ -723,6 +728,7 @@ const processDomains = async (ast, adapter, domainsMap, dbStructure, {
|
|
|
723
728
|
toSchema: first.schemaName,
|
|
724
729
|
to: first.name
|
|
725
730
|
});
|
|
731
|
+
pendingDbTypes.add(first.schemaName, first.name);
|
|
726
732
|
}
|
|
727
733
|
codeDomains.splice(i, 1);
|
|
728
734
|
} else {
|
|
@@ -732,6 +738,7 @@ const processDomains = async (ast, adapter, domainsMap, dbStructure, {
|
|
|
732
738
|
for (const codeDomain of codeDomains) {
|
|
733
739
|
if (!holdCodeDomains.has(codeDomain)) {
|
|
734
740
|
ast.push(createAst(codeDomain));
|
|
741
|
+
pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);
|
|
735
742
|
}
|
|
736
743
|
}
|
|
737
744
|
if (tableExpressions.length) {
|
|
@@ -739,6 +746,7 @@ const processDomains = async (ast, adapter, domainsMap, dbStructure, {
|
|
|
739
746
|
if (holdCodeDomains.size) {
|
|
740
747
|
for (const codeDomain of holdCodeDomains.keys()) {
|
|
741
748
|
ast.push(createAst(codeDomain));
|
|
749
|
+
pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);
|
|
742
750
|
}
|
|
743
751
|
}
|
|
744
752
|
}
|
|
@@ -821,7 +829,7 @@ const processEnums = async (ast, dbStructure, {
|
|
|
821
829
|
currentSchema,
|
|
822
830
|
verifying,
|
|
823
831
|
internal: { generatorIgnore }
|
|
824
|
-
}) => {
|
|
832
|
+
}, pendingDbTypes) => {
|
|
825
833
|
const createEnums = [];
|
|
826
834
|
const dropEnums = [];
|
|
827
835
|
for (const [, codeEnum] of enums) {
|
|
@@ -839,7 +847,7 @@ const processEnums = async (ast, dbStructure, {
|
|
|
839
847
|
}
|
|
840
848
|
const codeEnum = enums.get(`${dbEnum.schemaName}.${dbEnum.name}`);
|
|
841
849
|
if (codeEnum) {
|
|
842
|
-
changeEnum(ast, dbEnum, codeEnum);
|
|
850
|
+
changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);
|
|
843
851
|
continue;
|
|
844
852
|
}
|
|
845
853
|
const i = createEnums.findIndex((x) => x.name === dbEnum.name);
|
|
@@ -857,7 +865,8 @@ const processEnums = async (ast, dbStructure, {
|
|
|
857
865
|
toSchema,
|
|
858
866
|
to: dbEnum.name
|
|
859
867
|
});
|
|
860
|
-
|
|
868
|
+
pendingDbTypes.add(toSchema, dbEnum.name);
|
|
869
|
+
changeEnum(ast, dbEnum, codeEnum2, pendingDbTypes);
|
|
861
870
|
continue;
|
|
862
871
|
}
|
|
863
872
|
dropEnums.push(dbEnum);
|
|
@@ -895,7 +904,8 @@ const processEnums = async (ast, dbStructure, {
|
|
|
895
904
|
toSchema,
|
|
896
905
|
to
|
|
897
906
|
});
|
|
898
|
-
|
|
907
|
+
pendingDbTypes.add(toSchema, to);
|
|
908
|
+
changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);
|
|
899
909
|
continue;
|
|
900
910
|
}
|
|
901
911
|
}
|
|
@@ -904,6 +914,7 @@ const processEnums = async (ast, dbStructure, {
|
|
|
904
914
|
action: "create",
|
|
905
915
|
...codeEnum
|
|
906
916
|
});
|
|
917
|
+
pendingDbTypes.add(codeEnum.schema, codeEnum.name);
|
|
907
918
|
}
|
|
908
919
|
for (const dbEnum of dropEnums) {
|
|
909
920
|
ast.push({
|
|
@@ -915,7 +926,7 @@ const processEnums = async (ast, dbStructure, {
|
|
|
915
926
|
});
|
|
916
927
|
}
|
|
917
928
|
};
|
|
918
|
-
const changeEnum = (ast, dbEnum, codeEnum) => {
|
|
929
|
+
const changeEnum = (ast, dbEnum, codeEnum, pendingDbTypes) => {
|
|
919
930
|
const { values: dbValues } = dbEnum;
|
|
920
931
|
const { values: codeValues, schema, name } = codeEnum;
|
|
921
932
|
if (dbValues.length < codeValues.length) {
|
|
@@ -927,6 +938,7 @@ const changeEnum = (ast, dbEnum, codeEnum) => {
|
|
|
927
938
|
name,
|
|
928
939
|
values: codeValues.filter((value) => !dbValues.includes(value))
|
|
929
940
|
});
|
|
941
|
+
pendingDbTypes.add(schema, name);
|
|
930
942
|
return;
|
|
931
943
|
}
|
|
932
944
|
} else if (dbValues.length > codeValues.length) {
|
|
@@ -938,6 +950,7 @@ const changeEnum = (ast, dbEnum, codeEnum) => {
|
|
|
938
950
|
name,
|
|
939
951
|
values: dbValues.filter((value) => !codeValues.includes(value))
|
|
940
952
|
});
|
|
953
|
+
pendingDbTypes.add(schema, name);
|
|
941
954
|
return;
|
|
942
955
|
}
|
|
943
956
|
} else if (!dbValues.some((value) => !codeValues.includes(value))) {
|
|
@@ -950,6 +963,7 @@ const changeEnum = (ast, dbEnum, codeEnum) => {
|
|
|
950
963
|
fromValues: dbValues,
|
|
951
964
|
toValues: codeValues
|
|
952
965
|
});
|
|
966
|
+
pendingDbTypes.add(schema, name);
|
|
953
967
|
};
|
|
954
968
|
const renameColumnsTypeSchema = (dbStructure, from, to) => {
|
|
955
969
|
for (const table of dbStructure.tables) {
|
|
@@ -1828,7 +1842,7 @@ const processTables = async (ast, domainsMap, adapter, dbStructure, config, {
|
|
|
1828
1842
|
currentSchema,
|
|
1829
1843
|
internal: { generatorIgnore },
|
|
1830
1844
|
verifying
|
|
1831
|
-
}) => {
|
|
1845
|
+
}, pendingDbTypes) => {
|
|
1832
1846
|
const createTables = collectCreateTables(
|
|
1833
1847
|
tables,
|
|
1834
1848
|
dbStructure,
|
|
@@ -1866,7 +1880,8 @@ const processTables = async (ast, domainsMap, adapter, dbStructure, config, {
|
|
|
1866
1880
|
config,
|
|
1867
1881
|
compareSql,
|
|
1868
1882
|
tableExpressions,
|
|
1869
|
-
verifying
|
|
1883
|
+
verifying,
|
|
1884
|
+
pendingDbTypes
|
|
1870
1885
|
);
|
|
1871
1886
|
processForeignKeys(config, ast, changeTables, currentSchema, tableShapes);
|
|
1872
1887
|
await Promise.all([
|
|
@@ -1944,7 +1959,7 @@ const applyChangeTableSchemas = (changeTableSchemas, currentSchema, ast) => {
|
|
|
1944
1959
|
});
|
|
1945
1960
|
}
|
|
1946
1961
|
};
|
|
1947
|
-
const applyChangeTables = async (adapter, changeTables, structureToAstCtx, dbStructure, domainsMap, ast, currentSchema, config, compareSql, tableExpressions, verifying) => {
|
|
1962
|
+
const applyChangeTables = async (adapter, changeTables, structureToAstCtx, dbStructure, domainsMap, ast, currentSchema, config, compareSql, tableExpressions, verifying, pendingDbTypes) => {
|
|
1948
1963
|
const compareExpressions = [];
|
|
1949
1964
|
const typeCastsCache = {};
|
|
1950
1965
|
for (const changeTableData of changeTables) {
|
|
@@ -1971,8 +1986,11 @@ const applyChangeTables = async (adapter, changeTables, structureToAstCtx, dbStr
|
|
|
1971
1986
|
const column = codeTable.shape[key];
|
|
1972
1987
|
if (!column.dataType) continue;
|
|
1973
1988
|
const name = column.data.name ?? key;
|
|
1974
|
-
|
|
1975
|
-
|
|
1989
|
+
const type = getColumnDbTypeQuoted(column, currentSchema);
|
|
1990
|
+
if (!pendingDbTypes.set.has(type)) {
|
|
1991
|
+
names.push(name);
|
|
1992
|
+
types.push(type);
|
|
1993
|
+
}
|
|
1976
1994
|
}
|
|
1977
1995
|
const tableName = codeTable.table;
|
|
1978
1996
|
const source = `(VALUES (${types.map((x) => `NULL::${x}`).join(", ")})) "${tableName}"(${names.map((x) => `"${x}"`).join(", ")})`;
|
|
@@ -2117,14 +2135,38 @@ const processTableChange = async (adapter, structureToAstCtx, dbStructure, domai
|
|
|
2117
2135
|
}
|
|
2118
2136
|
};
|
|
2119
2137
|
|
|
2138
|
+
class PendingDbTypes {
|
|
2139
|
+
constructor() {
|
|
2140
|
+
this.set = /* @__PURE__ */ new Set();
|
|
2141
|
+
}
|
|
2142
|
+
add(schemaName = "public", name) {
|
|
2143
|
+
this.set.add(`"${schemaName}"."${name}"`);
|
|
2144
|
+
}
|
|
2145
|
+
}
|
|
2120
2146
|
const composeMigration = async (adapter, config, ast, dbStructure, params) => {
|
|
2121
2147
|
const { structureToAstCtx, currentSchema } = params;
|
|
2122
2148
|
const domainsMap = rakeDb.makeDomainsMap(structureToAstCtx, dbStructure);
|
|
2123
2149
|
await processSchemas(ast, dbStructure, params);
|
|
2124
2150
|
processExtensions(ast, dbStructure, params);
|
|
2125
|
-
|
|
2126
|
-
await
|
|
2127
|
-
|
|
2151
|
+
const pendingDbTypes = new PendingDbTypes();
|
|
2152
|
+
await processDomains(
|
|
2153
|
+
ast,
|
|
2154
|
+
adapter,
|
|
2155
|
+
domainsMap,
|
|
2156
|
+
dbStructure,
|
|
2157
|
+
params,
|
|
2158
|
+
pendingDbTypes
|
|
2159
|
+
);
|
|
2160
|
+
await processEnums(ast, dbStructure, params, pendingDbTypes);
|
|
2161
|
+
await processTables(
|
|
2162
|
+
ast,
|
|
2163
|
+
domainsMap,
|
|
2164
|
+
adapter,
|
|
2165
|
+
dbStructure,
|
|
2166
|
+
config,
|
|
2167
|
+
params,
|
|
2168
|
+
pendingDbTypes
|
|
2169
|
+
);
|
|
2128
2170
|
return rakeDb.astToMigration(currentSchema, config, ast);
|
|
2129
2171
|
};
|
|
2130
2172
|
|