orchid-orm 1.58.3 → 1.58.4

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.
@@ -636,7 +636,7 @@ const processDomains = async (ast, adapter, domainsMap, dbStructure, {
636
636
  structureToAstCtx,
637
637
  currentSchema,
638
638
  internal: { generatorIgnore }
639
- }) => {
639
+ }, pendingDbTypes) => {
640
640
  const codeDomains = [];
641
641
  if (domains) {
642
642
  for (const { schemaName, name, column } of domains) {
@@ -723,6 +723,7 @@ const processDomains = async (ast, adapter, domainsMap, dbStructure, {
723
723
  toSchema: first.schemaName,
724
724
  to: first.name
725
725
  });
726
+ pendingDbTypes.add(first.schemaName, first.name);
726
727
  }
727
728
  codeDomains.splice(i, 1);
728
729
  } else {
@@ -732,6 +733,7 @@ const processDomains = async (ast, adapter, domainsMap, dbStructure, {
732
733
  for (const codeDomain of codeDomains) {
733
734
  if (!holdCodeDomains.has(codeDomain)) {
734
735
  ast.push(createAst(codeDomain));
736
+ pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);
735
737
  }
736
738
  }
737
739
  if (tableExpressions.length) {
@@ -739,6 +741,7 @@ const processDomains = async (ast, adapter, domainsMap, dbStructure, {
739
741
  if (holdCodeDomains.size) {
740
742
  for (const codeDomain of holdCodeDomains.keys()) {
741
743
  ast.push(createAst(codeDomain));
744
+ pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);
742
745
  }
743
746
  }
744
747
  }
@@ -821,7 +824,7 @@ const processEnums = async (ast, dbStructure, {
821
824
  currentSchema,
822
825
  verifying,
823
826
  internal: { generatorIgnore }
824
- }) => {
827
+ }, pendingDbTypes) => {
825
828
  const createEnums = [];
826
829
  const dropEnums = [];
827
830
  for (const [, codeEnum] of enums) {
@@ -839,7 +842,7 @@ const processEnums = async (ast, dbStructure, {
839
842
  }
840
843
  const codeEnum = enums.get(`${dbEnum.schemaName}.${dbEnum.name}`);
841
844
  if (codeEnum) {
842
- changeEnum(ast, dbEnum, codeEnum);
845
+ changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);
843
846
  continue;
844
847
  }
845
848
  const i = createEnums.findIndex((x) => x.name === dbEnum.name);
@@ -857,7 +860,8 @@ const processEnums = async (ast, dbStructure, {
857
860
  toSchema,
858
861
  to: dbEnum.name
859
862
  });
860
- changeEnum(ast, dbEnum, codeEnum2);
863
+ pendingDbTypes.add(toSchema, dbEnum.name);
864
+ changeEnum(ast, dbEnum, codeEnum2, pendingDbTypes);
861
865
  continue;
862
866
  }
863
867
  dropEnums.push(dbEnum);
@@ -895,7 +899,8 @@ const processEnums = async (ast, dbStructure, {
895
899
  toSchema,
896
900
  to
897
901
  });
898
- changeEnum(ast, dbEnum, codeEnum);
902
+ pendingDbTypes.add(toSchema, to);
903
+ changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);
899
904
  continue;
900
905
  }
901
906
  }
@@ -904,6 +909,7 @@ const processEnums = async (ast, dbStructure, {
904
909
  action: "create",
905
910
  ...codeEnum
906
911
  });
912
+ pendingDbTypes.add(codeEnum.schema, codeEnum.name);
907
913
  }
908
914
  for (const dbEnum of dropEnums) {
909
915
  ast.push({
@@ -915,7 +921,7 @@ const processEnums = async (ast, dbStructure, {
915
921
  });
916
922
  }
917
923
  };
918
- const changeEnum = (ast, dbEnum, codeEnum) => {
924
+ const changeEnum = (ast, dbEnum, codeEnum, pendingDbTypes) => {
919
925
  const { values: dbValues } = dbEnum;
920
926
  const { values: codeValues, schema, name } = codeEnum;
921
927
  if (dbValues.length < codeValues.length) {
@@ -927,6 +933,7 @@ const changeEnum = (ast, dbEnum, codeEnum) => {
927
933
  name,
928
934
  values: codeValues.filter((value) => !dbValues.includes(value))
929
935
  });
936
+ pendingDbTypes.add(schema, name);
930
937
  return;
931
938
  }
932
939
  } else if (dbValues.length > codeValues.length) {
@@ -938,6 +945,7 @@ const changeEnum = (ast, dbEnum, codeEnum) => {
938
945
  name,
939
946
  values: dbValues.filter((value) => !codeValues.includes(value))
940
947
  });
948
+ pendingDbTypes.add(schema, name);
941
949
  return;
942
950
  }
943
951
  } else if (!dbValues.some((value) => !codeValues.includes(value))) {
@@ -950,6 +958,7 @@ const changeEnum = (ast, dbEnum, codeEnum) => {
950
958
  fromValues: dbValues,
951
959
  toValues: codeValues
952
960
  });
961
+ pendingDbTypes.add(schema, name);
953
962
  };
954
963
  const renameColumnsTypeSchema = (dbStructure, from, to) => {
955
964
  for (const table of dbStructure.tables) {
@@ -1828,7 +1837,7 @@ const processTables = async (ast, domainsMap, adapter, dbStructure, config, {
1828
1837
  currentSchema,
1829
1838
  internal: { generatorIgnore },
1830
1839
  verifying
1831
- }) => {
1840
+ }, pendingDbTypes) => {
1832
1841
  const createTables = collectCreateTables(
1833
1842
  tables,
1834
1843
  dbStructure,
@@ -1866,7 +1875,8 @@ const processTables = async (ast, domainsMap, adapter, dbStructure, config, {
1866
1875
  config,
1867
1876
  compareSql,
1868
1877
  tableExpressions,
1869
- verifying
1878
+ verifying,
1879
+ pendingDbTypes
1870
1880
  );
1871
1881
  processForeignKeys(config, ast, changeTables, currentSchema, tableShapes);
1872
1882
  await Promise.all([
@@ -1944,7 +1954,7 @@ const applyChangeTableSchemas = (changeTableSchemas, currentSchema, ast) => {
1944
1954
  });
1945
1955
  }
1946
1956
  };
1947
- const applyChangeTables = async (adapter, changeTables, structureToAstCtx, dbStructure, domainsMap, ast, currentSchema, config, compareSql, tableExpressions, verifying) => {
1957
+ const applyChangeTables = async (adapter, changeTables, structureToAstCtx, dbStructure, domainsMap, ast, currentSchema, config, compareSql, tableExpressions, verifying, pendingDbTypes) => {
1948
1958
  const compareExpressions = [];
1949
1959
  const typeCastsCache = {};
1950
1960
  for (const changeTableData of changeTables) {
@@ -1971,8 +1981,11 @@ const applyChangeTables = async (adapter, changeTables, structureToAstCtx, dbStr
1971
1981
  const column = codeTable.shape[key];
1972
1982
  if (!column.dataType) continue;
1973
1983
  const name = column.data.name ?? key;
1974
- names.push(name);
1975
- types.push(getColumnDbTypeQuoted(column, currentSchema));
1984
+ const type = getColumnDbTypeQuoted(column, currentSchema);
1985
+ if (!pendingDbTypes.set.has(type)) {
1986
+ names.push(name);
1987
+ types.push(type);
1988
+ }
1976
1989
  }
1977
1990
  const tableName = codeTable.table;
1978
1991
  const source = `(VALUES (${types.map((x) => `NULL::${x}`).join(", ")})) "${tableName}"(${names.map((x) => `"${x}"`).join(", ")})`;
@@ -2117,14 +2130,38 @@ const processTableChange = async (adapter, structureToAstCtx, dbStructure, domai
2117
2130
  }
2118
2131
  };
2119
2132
 
2133
+ class PendingDbTypes {
2134
+ constructor() {
2135
+ this.set = /* @__PURE__ */ new Set();
2136
+ }
2137
+ add(schemaName = "public", name) {
2138
+ this.set.add(`"${schemaName}"."${name}"`);
2139
+ }
2140
+ }
2120
2141
  const composeMigration = async (adapter, config, ast, dbStructure, params) => {
2121
2142
  const { structureToAstCtx, currentSchema } = params;
2122
2143
  const domainsMap = rakeDb.makeDomainsMap(structureToAstCtx, dbStructure);
2123
2144
  await processSchemas(ast, dbStructure, params);
2124
2145
  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);
2146
+ const pendingDbTypes = new PendingDbTypes();
2147
+ await processDomains(
2148
+ ast,
2149
+ adapter,
2150
+ domainsMap,
2151
+ dbStructure,
2152
+ params,
2153
+ pendingDbTypes
2154
+ );
2155
+ await processEnums(ast, dbStructure, params, pendingDbTypes);
2156
+ await processTables(
2157
+ ast,
2158
+ domainsMap,
2159
+ adapter,
2160
+ dbStructure,
2161
+ config,
2162
+ params,
2163
+ pendingDbTypes
2164
+ );
2128
2165
  return rakeDb.astToMigration(currentSchema, config, ast);
2129
2166
  };
2130
2167