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.
@@ -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((res) => res[1], pqb.noop);
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 if (column.data.isOfCustomType) {
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
- changeEnum(ast, dbEnum, codeEnum2);
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
- changeEnum(ast, dbEnum, codeEnum);
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
- names.push(name);
1975
- types.push(getColumnDbTypeQuoted(column, currentSchema));
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
- await processDomains(ast, adapter, domainsMap, dbStructure, params);
2126
- await processEnums(ast, dbStructure, params);
2127
- await processTables(ast, domainsMap, adapter, dbStructure, config, params);
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