@payloadcms/drizzle 3.0.0-canary.b8dd0db → 3.0.0-canary.bb00d64

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.
Files changed (283) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +1 -1
  3. package/dist/count.js.map +1 -1
  4. package/dist/countGlobalVersions.d.ts +3 -0
  5. package/dist/countGlobalVersions.d.ts.map +1 -0
  6. package/dist/countGlobalVersions.js +27 -0
  7. package/dist/countGlobalVersions.js.map +1 -0
  8. package/dist/countVersions.d.ts +3 -0
  9. package/dist/countVersions.d.ts.map +1 -0
  10. package/dist/countVersions.js +27 -0
  11. package/dist/countVersions.js.map +1 -0
  12. package/dist/create.d.ts.map +1 -1
  13. package/dist/create.js +2 -1
  14. package/dist/create.js.map +1 -1
  15. package/dist/createGlobalVersion.d.ts +1 -1
  16. package/dist/createGlobalVersion.d.ts.map +1 -1
  17. package/dist/createGlobalVersion.js +7 -2
  18. package/dist/createGlobalVersion.js.map +1 -1
  19. package/dist/createTableName.d.ts.map +1 -1
  20. package/dist/createTableName.js +6 -2
  21. package/dist/createTableName.js.map +1 -1
  22. package/dist/createVersion.d.ts +1 -1
  23. package/dist/createVersion.d.ts.map +1 -1
  24. package/dist/createVersion.js +22 -14
  25. package/dist/createVersion.js.map +1 -1
  26. package/dist/deleteOne.d.ts.map +1 -1
  27. package/dist/deleteOne.js +6 -3
  28. package/dist/deleteOne.js.map +1 -1
  29. package/dist/deleteVersions.js +1 -1
  30. package/dist/deleteVersions.js.map +1 -1
  31. package/dist/destroy.d.ts.map +1 -1
  32. package/dist/destroy.js +3 -1
  33. package/dist/destroy.js.map +1 -1
  34. package/dist/exports/postgres.d.ts +2 -0
  35. package/dist/exports/postgres.d.ts.map +1 -1
  36. package/dist/exports/postgres.js +2 -0
  37. package/dist/exports/postgres.js.map +1 -1
  38. package/dist/find/buildFindManyArgs.d.ts +15 -7
  39. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  40. package/dist/find/buildFindManyArgs.js +40 -17
  41. package/dist/find/buildFindManyArgs.js.map +1 -1
  42. package/dist/find/findMany.d.ts +2 -1
  43. package/dist/find/findMany.d.ts.map +1 -1
  44. package/dist/find/findMany.js +12 -7
  45. package/dist/find/findMany.js.map +1 -1
  46. package/dist/find/traverseFields.d.ts +18 -4
  47. package/dist/find/traverseFields.d.ts.map +1 -1
  48. package/dist/find/traverseFields.js +352 -62
  49. package/dist/find/traverseFields.js.map +1 -1
  50. package/dist/find.d.ts.map +1 -1
  51. package/dist/find.js +4 -2
  52. package/dist/find.js.map +1 -1
  53. package/dist/findGlobal.d.ts.map +1 -1
  54. package/dist/findGlobal.js +2 -1
  55. package/dist/findGlobal.js.map +1 -1
  56. package/dist/findGlobalVersions.d.ts.map +1 -1
  57. package/dist/findGlobalVersions.js +4 -3
  58. package/dist/findGlobalVersions.js.map +1 -1
  59. package/dist/findMigrationDir.d.ts.map +1 -1
  60. package/dist/findMigrationDir.js +3 -1
  61. package/dist/findMigrationDir.js.map +1 -1
  62. package/dist/findOne.d.ts +1 -1
  63. package/dist/findOne.d.ts.map +1 -1
  64. package/dist/findOne.js +3 -1
  65. package/dist/findOne.js.map +1 -1
  66. package/dist/findVersions.d.ts.map +1 -1
  67. package/dist/findVersions.js +4 -3
  68. package/dist/findVersions.js.map +1 -1
  69. package/dist/index.d.ts +5 -0
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +5 -0
  72. package/dist/index.js.map +1 -1
  73. package/dist/migrate.d.ts.map +1 -1
  74. package/dist/migrate.js +4 -0
  75. package/dist/migrate.js.map +1 -1
  76. package/dist/migrateDown.d.ts.map +1 -1
  77. package/dist/migrateDown.js +1 -1
  78. package/dist/migrateDown.js.map +1 -1
  79. package/dist/migrateFresh.d.ts.map +1 -1
  80. package/dist/migrateFresh.js +4 -0
  81. package/dist/migrateFresh.js.map +1 -1
  82. package/dist/migrateRefresh.d.ts.map +1 -1
  83. package/dist/migrateRefresh.js +2 -1
  84. package/dist/migrateRefresh.js.map +1 -1
  85. package/dist/migrateReset.d.ts.map +1 -1
  86. package/dist/migrateReset.js +5 -3
  87. package/dist/migrateReset.js.map +1 -1
  88. package/dist/migrateStatus.js +0 -1
  89. package/dist/migrateStatus.js.map +1 -1
  90. package/dist/postgres/countDistinct.d.ts.map +1 -1
  91. package/dist/postgres/countDistinct.js +2 -3
  92. package/dist/postgres/countDistinct.js.map +1 -1
  93. package/dist/postgres/createDatabase.d.ts +14 -0
  94. package/dist/postgres/createDatabase.d.ts.map +1 -0
  95. package/dist/postgres/createDatabase.js +76 -0
  96. package/dist/postgres/createDatabase.js.map +1 -0
  97. package/dist/postgres/createExtensions.d.ts +3 -0
  98. package/dist/postgres/createExtensions.d.ts.map +1 -0
  99. package/dist/postgres/createExtensions.js +16 -0
  100. package/dist/postgres/createExtensions.js.map +1 -0
  101. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -1
  102. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js +3 -1
  103. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  104. package/dist/postgres/defaultSnapshot.d.ts.map +1 -1
  105. package/dist/postgres/defaultSnapshot.js +4 -1
  106. package/dist/postgres/defaultSnapshot.js.map +1 -1
  107. package/dist/postgres/init.d.ts.map +1 -1
  108. package/dist/postgres/init.js +12 -3
  109. package/dist/postgres/init.js.map +1 -1
  110. package/dist/postgres/schema/build.d.ts +12 -2
  111. package/dist/postgres/schema/build.d.ts.map +1 -1
  112. package/dist/postgres/schema/build.js +45 -10
  113. package/dist/postgres/schema/build.js.map +1 -1
  114. package/dist/postgres/schema/createIndex.d.ts +2 -3
  115. package/dist/postgres/schema/createIndex.d.ts.map +1 -1
  116. package/dist/postgres/schema/createIndex.js +5 -3
  117. package/dist/postgres/schema/createIndex.js.map +1 -1
  118. package/dist/postgres/schema/geometryColumn.d.ts +12 -0
  119. package/dist/postgres/schema/geometryColumn.d.ts.map +1 -0
  120. package/dist/postgres/schema/geometryColumn.js +18 -0
  121. package/dist/postgres/schema/geometryColumn.js.map +1 -0
  122. package/dist/postgres/schema/traverseFields.d.ts +9 -2
  123. package/dist/postgres/schema/traverseFields.d.ts.map +1 -1
  124. package/dist/postgres/schema/traverseFields.js +199 -71
  125. package/dist/postgres/schema/traverseFields.js.map +1 -1
  126. package/dist/postgres/schema/withDefault.d.ts.map +1 -1
  127. package/dist/postgres/schema/withDefault.js +6 -1
  128. package/dist/postgres/schema/withDefault.js.map +1 -1
  129. package/dist/postgres/types.d.ts +37 -7
  130. package/dist/postgres/types.d.ts.map +1 -1
  131. package/dist/postgres/types.js.map +1 -1
  132. package/dist/queries/addJoinTable.d.ts +11 -0
  133. package/dist/queries/addJoinTable.d.ts.map +1 -0
  134. package/dist/queries/addJoinTable.js +13 -0
  135. package/dist/queries/addJoinTable.js.map +1 -0
  136. package/dist/queries/buildAndOrConditions.d.ts +1 -1
  137. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  138. package/dist/queries/buildAndOrConditions.js +2 -4
  139. package/dist/queries/buildAndOrConditions.js.map +1 -1
  140. package/dist/queries/buildOrderBy.d.ts +18 -0
  141. package/dist/queries/buildOrderBy.d.ts.map +1 -0
  142. package/dist/queries/buildOrderBy.js +56 -0
  143. package/dist/queries/buildOrderBy.js.map +1 -0
  144. package/dist/queries/buildQuery.d.ts +8 -7
  145. package/dist/queries/buildQuery.d.ts.map +1 -1
  146. package/dist/queries/buildQuery.js +12 -47
  147. package/dist/queries/buildQuery.js.map +1 -1
  148. package/dist/queries/getTableColumnFromPath.d.ts +6 -2
  149. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  150. package/dist/queries/getTableColumnFromPath.js +133 -86
  151. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  152. package/dist/queries/operatorMap.d.ts.map +1 -1
  153. package/dist/queries/operatorMap.js +0 -4
  154. package/dist/queries/operatorMap.js.map +1 -1
  155. package/dist/queries/parseParams.d.ts +1 -1
  156. package/dist/queries/parseParams.d.ts.map +1 -1
  157. package/dist/queries/parseParams.js +79 -6
  158. package/dist/queries/parseParams.js.map +1 -1
  159. package/dist/queries/sanitizeQueryValue.d.ts +12 -1
  160. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  161. package/dist/queries/sanitizeQueryValue.js +89 -25
  162. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  163. package/dist/queries/selectDistinct.d.ts +3 -4
  164. package/dist/queries/selectDistinct.d.ts.map +1 -1
  165. package/dist/queries/selectDistinct.js.map +1 -1
  166. package/dist/queryDrafts.d.ts.map +1 -1
  167. package/dist/queryDrafts.js +6 -6
  168. package/dist/queryDrafts.js.map +1 -1
  169. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  170. package/dist/transactions/beginTransaction.js +5 -1
  171. package/dist/transactions/beginTransaction.js.map +1 -1
  172. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  173. package/dist/transactions/commitTransaction.js +3 -1
  174. package/dist/transactions/commitTransaction.js.map +1 -1
  175. package/dist/transform/read/hasManyNumber.d.ts +2 -1
  176. package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
  177. package/dist/transform/read/hasManyNumber.js +12 -2
  178. package/dist/transform/read/hasManyNumber.js.map +1 -1
  179. package/dist/transform/read/hasManyText.d.ts +2 -1
  180. package/dist/transform/read/hasManyText.d.ts.map +1 -1
  181. package/dist/transform/read/hasManyText.js +12 -2
  182. package/dist/transform/read/hasManyText.js.map +1 -1
  183. package/dist/transform/read/index.d.ts +3 -2
  184. package/dist/transform/read/index.d.ts.map +1 -1
  185. package/dist/transform/read/index.js +3 -2
  186. package/dist/transform/read/index.js.map +1 -1
  187. package/dist/transform/read/relationship.d.ts +2 -1
  188. package/dist/transform/read/relationship.d.ts.map +1 -1
  189. package/dist/transform/read/relationship.js +15 -6
  190. package/dist/transform/read/relationship.js.map +1 -1
  191. package/dist/transform/read/traverseFields.d.ts +10 -2
  192. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  193. package/dist/transform/read/traverseFields.js +170 -56
  194. package/dist/transform/read/traverseFields.js.map +1 -1
  195. package/dist/transform/write/array.d.ts +6 -1
  196. package/dist/transform/write/array.d.ts.map +1 -1
  197. package/dist/transform/write/array.js +7 -3
  198. package/dist/transform/write/array.js.map +1 -1
  199. package/dist/transform/write/blocks.d.ts +8 -3
  200. package/dist/transform/write/blocks.d.ts.map +1 -1
  201. package/dist/transform/write/blocks.js +19 -7
  202. package/dist/transform/write/blocks.js.map +1 -1
  203. package/dist/transform/write/index.d.ts.map +1 -1
  204. package/dist/transform/write/index.js +1 -1
  205. package/dist/transform/write/index.js.map +1 -1
  206. package/dist/transform/write/relationships.d.ts.map +1 -1
  207. package/dist/transform/write/relationships.js +6 -2
  208. package/dist/transform/write/relationships.js.map +1 -1
  209. package/dist/transform/write/selects.d.ts.map +1 -1
  210. package/dist/transform/write/selects.js +1 -1
  211. package/dist/transform/write/selects.js.map +1 -1
  212. package/dist/transform/write/traverseFields.d.ts +6 -1
  213. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  214. package/dist/transform/write/traverseFields.js +62 -19
  215. package/dist/transform/write/traverseFields.js.map +1 -1
  216. package/dist/types.d.ts +3 -2
  217. package/dist/types.d.ts.map +1 -1
  218. package/dist/types.js.map +1 -1
  219. package/dist/update.d.ts.map +1 -1
  220. package/dist/update.js +4 -2
  221. package/dist/update.js.map +1 -1
  222. package/dist/updateGlobal.d.ts +1 -1
  223. package/dist/updateGlobal.d.ts.map +1 -1
  224. package/dist/updateGlobal.js +2 -1
  225. package/dist/updateGlobal.js.map +1 -1
  226. package/dist/updateGlobalVersion.d.ts +1 -1
  227. package/dist/updateGlobalVersion.d.ts.map +1 -1
  228. package/dist/updateGlobalVersion.js +4 -3
  229. package/dist/updateGlobalVersion.js.map +1 -1
  230. package/dist/updateVersion.d.ts +1 -1
  231. package/dist/updateVersion.d.ts.map +1 -1
  232. package/dist/updateVersion.js +4 -3
  233. package/dist/updateVersion.js.map +1 -1
  234. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  235. package/dist/upsertRow/deleteExistingRowsByPath.js +6 -2
  236. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  237. package/dist/upsertRow/index.d.ts +1 -1
  238. package/dist/upsertRow/index.d.ts.map +1 -1
  239. package/dist/upsertRow/index.js +51 -13
  240. package/dist/upsertRow/index.js.map +1 -1
  241. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  242. package/dist/upsertRow/insertArrays.js +5 -2
  243. package/dist/upsertRow/insertArrays.js.map +1 -1
  244. package/dist/upsertRow/types.d.ts +10 -5
  245. package/dist/upsertRow/types.d.ts.map +1 -1
  246. package/dist/upsertRow/types.js.map +1 -1
  247. package/dist/utilities/buildIndexName.d.ts +7 -0
  248. package/dist/utilities/buildIndexName.d.ts.map +1 -0
  249. package/dist/utilities/buildIndexName.js +14 -0
  250. package/dist/utilities/buildIndexName.js.map +1 -0
  251. package/dist/utilities/createBlocksMap.d.ts.map +1 -1
  252. package/dist/utilities/createBlocksMap.js +4 -2
  253. package/dist/utilities/createBlocksMap.js.map +1 -1
  254. package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
  255. package/dist/utilities/createRelationshipMap.js +3 -1
  256. package/dist/utilities/createRelationshipMap.js.map +1 -1
  257. package/dist/utilities/executeSchemaHooks.d.ts +24 -0
  258. package/dist/utilities/executeSchemaHooks.d.ts.map +1 -0
  259. package/dist/utilities/executeSchemaHooks.js +21 -0
  260. package/dist/utilities/executeSchemaHooks.js.map +1 -0
  261. package/dist/utilities/extendDrizzleTable.d.ts +19 -0
  262. package/dist/utilities/extendDrizzleTable.d.ts.map +1 -0
  263. package/dist/utilities/extendDrizzleTable.js +38 -0
  264. package/dist/utilities/extendDrizzleTable.js.map +1 -0
  265. package/dist/utilities/getCollectionIdType.d.ts +7 -0
  266. package/dist/utilities/getCollectionIdType.d.ts.map +1 -0
  267. package/dist/utilities/getCollectionIdType.js +11 -0
  268. package/dist/utilities/getCollectionIdType.js.map +1 -0
  269. package/dist/utilities/getNameFromDrizzleTable.d.ts +3 -0
  270. package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -0
  271. package/dist/utilities/getNameFromDrizzleTable.js +6 -0
  272. package/dist/utilities/getNameFromDrizzleTable.js.map +1 -0
  273. package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
  274. package/dist/utilities/hasLocalesTable.js +12 -4
  275. package/dist/utilities/hasLocalesTable.js.map +1 -1
  276. package/dist/utilities/isPolymorphicRelationship.d.ts +6 -0
  277. package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -0
  278. package/dist/utilities/isPolymorphicRelationship.js +5 -0
  279. package/dist/utilities/isPolymorphicRelationship.js.map +1 -0
  280. package/dist/utilities/pushDevSchema.d.ts.map +1 -1
  281. package/dist/utilities/pushDevSchema.js +5 -0
  282. package/dist/utilities/pushDevSchema.js.map +1 -1
  283. package/package.json +10 -8
@@ -1,11 +1,10 @@
1
1
  import type { GenericColumn } from '../types.js';
2
2
  type CreateIndexArgs = {
3
- columnName: string;
3
+ indexName: string;
4
4
  name: string | string[];
5
- tableName: string;
6
5
  unique?: boolean;
7
6
  };
8
- export declare const createIndex: ({ name, columnName, tableName, unique }: CreateIndexArgs) => (table: {
7
+ export declare const createIndex: ({ name, indexName, unique }: CreateIndexArgs) => (table: {
9
8
  [x: string]: GenericColumn;
10
9
  }) => import("drizzle-orm/pg-core").IndexBuilder;
11
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"createIndex.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/createIndex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,KAAK,eAAe,GAAG;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,WAAW,4CAA6C,eAAe,aACnE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,+CAc9C,CAAA"}
1
+ {"version":3,"file":"createIndex.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/createIndex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,KAAK,eAAe,GAAG;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,WAAW,gCAAiC,eAAe,aACvD;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,+CAe9C,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { index, uniqueIndex } from 'drizzle-orm/pg-core';
2
- export const createIndex = ({ name, columnName, tableName, unique })=>{
2
+ export const createIndex = ({ name, indexName, unique })=>{
3
3
  return (table)=>{
4
4
  let columns;
5
5
  if (Array.isArray(name)) {
@@ -10,8 +10,10 @@ export const createIndex = ({ name, columnName, tableName, unique })=>{
10
10
  table[name]
11
11
  ];
12
12
  }
13
- if (unique) return uniqueIndex(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1));
14
- return index(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1));
13
+ if (unique) {
14
+ return uniqueIndex(indexName).on(columns[0], ...columns.slice(1));
15
+ }
16
+ return index(indexName).on(columns[0], ...columns.slice(1));
15
17
  };
16
18
  };
17
19
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/postgres/schema/createIndex.ts"],"sourcesContent":["import { index, uniqueIndex } from 'drizzle-orm/pg-core'\n\nimport type { GenericColumn } from '../types.js'\n\ntype CreateIndexArgs = {\n columnName: string\n name: string | string[]\n tableName: string\n unique?: boolean\n}\n\nexport const createIndex = ({ name, columnName, tableName, unique }: CreateIndexArgs) => {\n return (table: { [x: string]: GenericColumn }) => {\n let columns\n if (Array.isArray(name)) {\n columns = name\n .map((columnName) => table[columnName])\n // exclude fields were included in compound indexes but do not exist on the table\n .filter((col) => typeof col !== 'undefined')\n } else {\n columns = [table[name]]\n }\n if (unique)\n return uniqueIndex(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1))\n return index(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1))\n }\n}\n"],"names":["index","uniqueIndex","createIndex","name","columnName","tableName","unique","table","columns","Array","isArray","map","filter","col","on","slice"],"mappings":"AAAA,SAASA,KAAK,EAAEC,WAAW,QAAQ,sBAAqB;AAWxD,OAAO,MAAMC,cAAc,CAAC,EAAEC,IAAI,EAAEC,UAAU,EAAEC,SAAS,EAAEC,MAAM,EAAmB;IAClF,OAAO,CAACC;QACN,IAAIC;QACJ,IAAIC,MAAMC,OAAO,CAACP,OAAO;YACvBK,UAAUL,KACPQ,GAAG,CAAC,CAACP,aAAeG,KAAK,CAACH,WAAW,CACtC,iFAAiF;aAChFQ,MAAM,CAAC,CAACC,MAAQ,OAAOA,QAAQ;QACpC,OAAO;YACLL,UAAU;gBAACD,KAAK,CAACJ,KAAK;aAAC;QACzB;QACA,IAAIG,QACF,OAAOL,YAAY,CAAC,EAAEI,UAAU,CAAC,EAAED,WAAW,IAAI,CAAC,EAAEU,EAAE,CAACN,OAAO,CAAC,EAAE,KAAKA,QAAQO,KAAK,CAAC;QACvF,OAAOf,MAAM,CAAC,EAAEK,UAAU,CAAC,EAAED,WAAW,IAAI,CAAC,EAAEU,EAAE,CAACN,OAAO,CAAC,EAAE,KAAKA,QAAQO,KAAK,CAAC;IACjF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/postgres/schema/createIndex.ts"],"sourcesContent":["import { index, uniqueIndex } from 'drizzle-orm/pg-core'\n\nimport type { GenericColumn } from '../types.js'\n\ntype CreateIndexArgs = {\n indexName: string\n name: string | string[]\n unique?: boolean\n}\n\nexport const createIndex = ({ name, indexName, unique }: CreateIndexArgs) => {\n return (table: { [x: string]: GenericColumn }) => {\n let columns\n if (Array.isArray(name)) {\n columns = name\n .map((columnName) => table[columnName])\n // exclude fields were included in compound indexes but do not exist on the table\n .filter((col) => typeof col !== 'undefined')\n } else {\n columns = [table[name]]\n }\n if (unique) {\n return uniqueIndex(indexName).on(columns[0], ...columns.slice(1))\n }\n return index(indexName).on(columns[0], ...columns.slice(1))\n }\n}\n"],"names":["index","uniqueIndex","createIndex","name","indexName","unique","table","columns","Array","isArray","map","columnName","filter","col","on","slice"],"mappings":"AAAA,SAASA,KAAK,EAAEC,WAAW,QAAQ,sBAAqB;AAUxD,OAAO,MAAMC,cAAc,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAEC,MAAM,EAAmB;IACtE,OAAO,CAACC;QACN,IAAIC;QACJ,IAAIC,MAAMC,OAAO,CAACN,OAAO;YACvBI,UAAUJ,KACPO,GAAG,CAAC,CAACC,aAAeL,KAAK,CAACK,WAAW,CACtC,iFAAiF;aAChFC,MAAM,CAAC,CAACC,MAAQ,OAAOA,QAAQ;QACpC,OAAO;YACLN,UAAU;gBAACD,KAAK,CAACH,KAAK;aAAC;QACzB;QACA,IAAIE,QAAQ;YACV,OAAOJ,YAAYG,WAAWU,EAAE,CAACP,OAAO,CAAC,EAAE,KAAKA,QAAQQ,KAAK,CAAC;QAChE;QACA,OAAOf,MAAMI,WAAWU,EAAE,CAACP,OAAO,CAAC,EAAE,KAAKA,QAAQQ,KAAK,CAAC;IAC1D;AACF,EAAC"}
@@ -0,0 +1,12 @@
1
+ type Point = [number, number];
2
+ export declare const geometryColumn: (name: string) => import("drizzle-orm/pg-core").PgCustomColumnBuilder<{
3
+ name: string;
4
+ dataType: "custom";
5
+ columnType: "PgCustomColumn";
6
+ data: Point;
7
+ driverParam: string;
8
+ enumValues: undefined;
9
+ generated: undefined;
10
+ }>;
11
+ export {};
12
+ //# sourceMappingURL=geometryColumn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometryColumn.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/geometryColumn.ts"],"names":[],"mappings":"AAMA,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE7B,eAAO,MAAM,cAAc,SAAU,MAAM;;;;;;;;EAWjC,CAAA"}
@@ -0,0 +1,18 @@
1
+ // Uses custom one instead of geometry() from drizzle-orm/pg-core because it's broken on pushDevSchema
2
+ // Why?
3
+ // It tries to give us a prompt "you're about to change.. from geometry(Point) to geometry(point)"
4
+ import { customType } from 'drizzle-orm/pg-core';
5
+ import { parseEWKB } from 'drizzle-orm/pg-core/columns/postgis_extension/utils';
6
+ export const geometryColumn = (name)=>customType({
7
+ dataType () {
8
+ return `geometry(Point)`;
9
+ },
10
+ fromDriver (value) {
11
+ return parseEWKB(value);
12
+ },
13
+ toDriver (value) {
14
+ return `SRID=4326;point(${value[0]} ${value[1]})`;
15
+ }
16
+ })(name);
17
+
18
+ //# sourceMappingURL=geometryColumn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/postgres/schema/geometryColumn.ts"],"sourcesContent":["// Uses custom one instead of geometry() from drizzle-orm/pg-core because it's broken on pushDevSchema\n// Why?\n// It tries to give us a prompt \"you're about to change.. from geometry(Point) to geometry(point)\"\nimport { customType } from 'drizzle-orm/pg-core'\nimport { parseEWKB } from 'drizzle-orm/pg-core/columns/postgis_extension/utils'\n\ntype Point = [number, number]\n\nexport const geometryColumn = (name: string) =>\n customType<{ data: Point; driverData: string }>({\n dataType() {\n return `geometry(Point)`\n },\n fromDriver(value: string) {\n return parseEWKB(value)\n },\n toDriver(value: Point) {\n return `SRID=4326;point(${value[0]} ${value[1]})`\n },\n })(name)\n"],"names":["customType","parseEWKB","geometryColumn","name","dataType","fromDriver","value","toDriver"],"mappings":"AAAA,sGAAsG;AACtG,OAAO;AACP,kGAAkG;AAClG,SAASA,UAAU,QAAQ,sBAAqB;AAChD,SAASC,SAAS,QAAQ,sDAAqD;AAI/E,OAAO,MAAMC,iBAAiB,CAACC,OAC7BH,WAAgD;QAC9CI;YACE,OAAO,CAAC,eAAe,CAAC;QAC1B;QACAC,YAAWC,KAAa;YACtB,OAAOL,UAAUK;QACnB;QACAC,UAASD,KAAY;YACnB,OAAO,CAAC,gBAAgB,EAAEA,KAAK,CAAC,EAAE,CAAC,CAAC,EAAEA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD;IACF,GAAGH,MAAK"}
@@ -6,6 +6,7 @@ type Args = {
6
6
  columnPrefix?: string;
7
7
  columns: Record<string, PgColumnBuilder>;
8
8
  disableNotNull: boolean;
9
+ disableRelsTableUnique?: boolean;
9
10
  disableUnique?: boolean;
10
11
  fieldPrefix?: string;
11
12
  fields: (Field | TabAsField)[];
@@ -15,12 +16,18 @@ type Args = {
15
16
  localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>;
16
17
  newTableName: string;
17
18
  parentTableName: string;
18
- relationsToBuild: RelationMap;
19
19
  relationships: Set<string>;
20
+ relationsToBuild: RelationMap;
20
21
  rootRelationsToBuild?: RelationMap;
21
22
  rootTableIDColType: string;
22
23
  rootTableName: string;
24
+ uniqueRelationships: Set<string>;
23
25
  versions: boolean;
26
+ /**
27
+ * Tracks whether or not this table is built
28
+ * from the result of a localized array or block field at some point
29
+ */
30
+ withinLocalizedArrayOrBlock?: boolean;
24
31
  };
25
32
  type Result = {
26
33
  hasLocalizedField: boolean;
@@ -30,6 +37,6 @@ type Result = {
30
37
  hasManyNumberField: 'index' | boolean;
31
38
  hasManyTextField: 'index' | boolean;
32
39
  };
33
- export declare const traverseFields: ({ adapter, columnPrefix, columns, disableNotNull, disableUnique, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationsToBuild, relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, versions, }: Args) => Result;
40
+ export declare const traverseFields: ({ adapter, columnPrefix, columns, disableNotNull, disableRelsTableUnique, disableUnique, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, uniqueRelationships, versions, withinLocalizedArrayOrBlock, }: Args) => Result;
34
41
  export {};
35
42
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAqBhD,OAAO,KAAK,EAEV,mBAAmB,EACnB,cAAc,EAEd,WAAW,EACZ,MAAM,aAAa,CAAA;AAWpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,WAAW,CAAA;IAC7B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,wRAoBxB,IAAI,KAAG,MA+rBT,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,KAAK,EAAkB,UAAU,EAAE,MAAM,SAAS,CAAA;AAsBhE,OAAO,KAAK,EAEV,mBAAmB,EACnB,cAAc,EAEd,WAAW,EACZ,MAAM,aAAa,CAAA;AAapB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,gBAAgB,EAAE,WAAW,CAAA;IAC7B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,kWAuBxB,IAAI,KAAG,MA21BT,CAAA"}
@@ -1,17 +1,19 @@
1
1
  import { relations } from 'drizzle-orm';
2
- import { PgNumericBuilder, PgUUIDBuilder, PgVarcharBuilder, boolean, foreignKey, index, integer, jsonb, numeric, text, timestamp, varchar } from 'drizzle-orm/pg-core';
2
+ import { boolean, foreignKey, index, integer, jsonb, numeric, PgNumericBuilder, PgUUIDBuilder, PgVarcharBuilder, text, timestamp, varchar } from 'drizzle-orm/pg-core';
3
3
  import { InvalidConfiguration } from 'payload';
4
- import { fieldAffectsData, optionIsObject } from 'payload/shared';
4
+ import { fieldAffectsData, fieldIsVirtual, optionIsObject } from 'payload/shared';
5
5
  import toSnakeCase from 'to-snake-case';
6
6
  import { createTableName } from '../../createTableName.js';
7
+ import { buildIndexName } from '../../utilities/buildIndexName.js';
7
8
  import { hasLocalesTable } from '../../utilities/hasLocalesTable.js';
8
9
  import { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js';
9
10
  import { buildTable } from './build.js';
10
11
  import { createIndex } from './createIndex.js';
12
+ import { geometryColumn } from './geometryColumn.js';
11
13
  import { idToUUID } from './idToUUID.js';
12
14
  import { parentIDColumnMap } from './parentIDColumnMap.js';
13
15
  import { withDefault } from './withDefault.js';
14
- export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationsToBuild, relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, versions })=>{
16
+ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull, disableRelsTableUnique, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, uniqueRelationships, versions, withinLocalizedArrayOrBlock })=>{
15
17
  const throwValidationError = true;
16
18
  let hasLocalizedField = false;
17
19
  let hasLocalizedRelationshipField = false;
@@ -20,11 +22,22 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
20
22
  let hasManyNumberField = false;
21
23
  let hasLocalizedManyNumberField = false;
22
24
  let parentIDColType = 'integer';
23
- if (columns.id instanceof PgUUIDBuilder) parentIDColType = 'uuid';
24
- if (columns.id instanceof PgNumericBuilder) parentIDColType = 'numeric';
25
- if (columns.id instanceof PgVarcharBuilder) parentIDColType = 'varchar';
25
+ if (columns.id instanceof PgUUIDBuilder) {
26
+ parentIDColType = 'uuid';
27
+ }
28
+ if (columns.id instanceof PgNumericBuilder) {
29
+ parentIDColType = 'numeric';
30
+ }
31
+ if (columns.id instanceof PgVarcharBuilder) {
32
+ parentIDColType = 'varchar';
33
+ }
26
34
  fields.forEach((field)=>{
27
- if ('name' in field && field.name === 'id') return;
35
+ if ('name' in field && field.name === 'id') {
36
+ return;
37
+ }
38
+ if (fieldIsVirtual(field)) {
39
+ return;
40
+ }
28
41
  let columnName;
29
42
  let fieldName;
30
43
  let targetTable = columns;
@@ -39,14 +52,14 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
39
52
  targetTable = localesColumns;
40
53
  targetIndexes = localesIndexes;
41
54
  }
42
- if ((field.unique || field.index) && ![
43
- 'array',
44
- 'blocks',
45
- 'group',
46
- 'point',
55
+ if ((field.unique || field.index || [
47
56
  'relationship',
48
57
  'upload'
49
- ].includes(field.type) && !('hasMany' in field && field.hasMany === true)) {
58
+ ].includes(field.type)) && ![
59
+ 'array',
60
+ 'blocks',
61
+ 'group'
62
+ ].includes(field.type) && !('hasMany' in field && field.hasMany === true) && !('relationTo' in field && Array.isArray(field.relationTo))) {
50
63
  const unique = disableUnique !== true && field.unique;
51
64
  if (unique) {
52
65
  const constraintValue = `${fieldPrefix || ''}${field.name}`;
@@ -55,10 +68,16 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
55
68
  }
56
69
  adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue;
57
70
  }
58
- targetIndexes[`${newTableName}_${field.name}Idx`] = createIndex({
59
- name: fieldName,
60
- columnName,
61
- tableName: newTableName,
71
+ const indexName = buildIndexName({
72
+ name: `${newTableName}_${columnName}`,
73
+ adapter
74
+ });
75
+ targetIndexes[indexName] = createIndex({
76
+ name: field.localized ? [
77
+ fieldName,
78
+ '_locale'
79
+ ] : fieldName,
80
+ indexName,
62
81
  unique
63
82
  });
64
83
  }
@@ -67,7 +86,8 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
67
86
  case 'text':
68
87
  {
69
88
  if (field.hasMany) {
70
- if (field.localized) {
89
+ const isLocalized = Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock || forceLocalized;
90
+ if (isLocalized) {
71
91
  hasLocalizedManyTextField = true;
72
92
  }
73
93
  if (field.index) {
@@ -93,7 +113,8 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
93
113
  case 'number':
94
114
  {
95
115
  if (field.hasMany) {
96
- if (field.localized) {
116
+ const isLocalized = Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock || forceLocalized;
117
+ if (isLocalized) {
97
118
  hasLocalizedManyNumberField = true;
98
119
  }
99
120
  if (field.index) {
@@ -126,6 +147,10 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
126
147
  }
127
148
  case 'point':
128
149
  {
150
+ targetTable[fieldName] = withDefault(geometryColumn(columnName), field);
151
+ if (!adapter.extensions.postgis) {
152
+ adapter.extensions.postgis = true;
153
+ }
129
154
  break;
130
155
  }
131
156
  case 'radio':
@@ -172,7 +197,8 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
172
197
  }).onDelete('cascade'),
173
198
  parentIdx: (cols)=>index(`${selectTableName}_parent_idx`).on(cols.parent)
174
199
  };
175
- if (field.localized) {
200
+ const isLocalized = Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock || forceLocalized;
201
+ if (isLocalized) {
176
202
  baseColumns.locale = adapter.enums.enum__locales('locale').notNull();
177
203
  baseExtraConfig.localeIdx = (cols)=>index(`${selectTableName}_locale_idx`).on(cols.locale);
178
204
  }
@@ -208,7 +234,7 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
208
234
  })
209
235
  }));
210
236
  } else {
211
- targetTable[fieldName] = withDefault(adapter.enums[enumName](fieldName), field);
237
+ targetTable[fieldName] = withDefault(adapter.enums[enumName](columnName), field);
212
238
  }
213
239
  break;
214
240
  }
@@ -245,29 +271,46 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
245
271
  }).onDelete('cascade'),
246
272
  _parentIDIdx: (cols)=>index(`${arrayTableName}_parent_id_idx`).on(cols._parentID)
247
273
  };
248
- if (field.localized && adapter.payload.config.localization) {
274
+ const isLocalized = Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock || forceLocalized;
275
+ if (isLocalized) {
249
276
  baseColumns._locale = adapter.enums.enum__locales('_locale').notNull();
250
277
  baseExtraConfig._localeIdx = (cols)=>index(`${arrayTableName}_locale_idx`).on(cols._locale);
251
278
  }
252
- const { hasManyNumberField: subHasManyNumberField, hasManyTextField: subHasManyTextField, relationsToBuild: subRelationsToBuild } = buildTable({
279
+ const { hasLocalizedManyNumberField: subHasLocalizedManyNumberField, hasLocalizedManyTextField: subHasLocalizedManyTextField, hasLocalizedRelationshipField: subHasLocalizedRelationshipField, hasManyNumberField: subHasManyNumberField, hasManyTextField: subHasManyTextField, relationsToBuild: subRelationsToBuild } = buildTable({
253
280
  adapter,
254
281
  baseColumns,
255
282
  baseExtraConfig,
256
283
  disableNotNull: disableNotNullFromHere,
284
+ disableRelsTableUnique: true,
257
285
  disableUnique,
258
286
  fields: disableUnique ? idToUUID(field.fields) : field.fields,
259
- rootRelationsToBuild,
260
287
  rootRelationships: relationships,
288
+ rootRelationsToBuild,
261
289
  rootTableIDColType,
262
290
  rootTableName,
291
+ rootUniqueRelationships: uniqueRelationships,
263
292
  tableName: arrayTableName,
264
- versions
293
+ versions,
294
+ withinLocalizedArrayOrBlock: isLocalized
265
295
  });
296
+ if (subHasLocalizedManyNumberField) {
297
+ hasLocalizedManyNumberField = subHasLocalizedManyNumberField;
298
+ }
299
+ if (subHasLocalizedRelationshipField) {
300
+ hasLocalizedRelationshipField = subHasLocalizedRelationshipField;
301
+ }
302
+ if (subHasLocalizedManyTextField) {
303
+ hasLocalizedManyTextField = subHasLocalizedManyTextField;
304
+ }
266
305
  if (subHasManyTextField) {
267
- if (!hasManyTextField || subHasManyTextField === 'index') hasManyTextField = subHasManyTextField;
306
+ if (!hasManyTextField || subHasManyTextField === 'index') {
307
+ hasManyTextField = subHasManyTextField;
308
+ }
268
309
  }
269
310
  if (subHasManyNumberField) {
270
- if (!hasManyNumberField || subHasManyNumberField === 'index') hasManyNumberField = subHasManyNumberField;
311
+ if (!hasManyNumberField || subHasManyNumberField === 'index') {
312
+ hasManyNumberField = subHasManyNumberField;
313
+ }
271
314
  }
272
315
  relationsToBuild.set(fieldName, {
273
316
  type: 'many',
@@ -335,7 +378,6 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
335
378
  };
336
379
  const baseExtraConfig = {
337
380
  _orderIdx: (cols)=>index(`${blockTableName}_order_idx`).on(cols._order),
338
- _parentIDIdx: (cols)=>index(`${blockTableName}_parent_id_idx`).on(cols._parentID),
339
381
  _parentIdFk: (cols)=>foreignKey({
340
382
  name: `${blockTableName}_parent_id_fk`,
341
383
  columns: [
@@ -345,31 +387,49 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
345
387
  adapter.tables[rootTableName].id
346
388
  ]
347
389
  }).onDelete('cascade'),
390
+ _parentIDIdx: (cols)=>index(`${blockTableName}_parent_id_idx`).on(cols._parentID),
348
391
  _pathIdx: (cols)=>index(`${blockTableName}_path_idx`).on(cols._path)
349
392
  };
350
- if (field.localized && adapter.payload.config.localization) {
393
+ const isLocalized = Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock || forceLocalized;
394
+ if (isLocalized) {
351
395
  baseColumns._locale = adapter.enums.enum__locales('_locale').notNull();
352
396
  baseExtraConfig._localeIdx = (cols)=>index(`${blockTableName}_locale_idx`).on(cols._locale);
353
397
  }
354
- const { hasManyNumberField: subHasManyNumberField, hasManyTextField: subHasManyTextField, relationsToBuild: subRelationsToBuild } = buildTable({
398
+ const { hasLocalizedManyNumberField: subHasLocalizedManyNumberField, hasLocalizedManyTextField: subHasLocalizedManyTextField, hasLocalizedRelationshipField: subHasLocalizedRelationshipField, hasManyNumberField: subHasManyNumberField, hasManyTextField: subHasManyTextField, relationsToBuild: subRelationsToBuild } = buildTable({
355
399
  adapter,
356
400
  baseColumns,
357
401
  baseExtraConfig,
358
402
  disableNotNull: disableNotNullFromHere,
403
+ disableRelsTableUnique: true,
359
404
  disableUnique,
360
405
  fields: disableUnique ? idToUUID(block.fields) : block.fields,
361
- rootRelationsToBuild,
362
406
  rootRelationships: relationships,
407
+ rootRelationsToBuild,
363
408
  rootTableIDColType,
364
409
  rootTableName,
410
+ rootUniqueRelationships: uniqueRelationships,
365
411
  tableName: blockTableName,
366
- versions
412
+ versions,
413
+ withinLocalizedArrayOrBlock: isLocalized
367
414
  });
415
+ if (subHasLocalizedManyNumberField) {
416
+ hasLocalizedManyNumberField = subHasLocalizedManyNumberField;
417
+ }
418
+ if (subHasLocalizedRelationshipField) {
419
+ hasLocalizedRelationshipField = subHasLocalizedRelationshipField;
420
+ }
421
+ if (subHasLocalizedManyTextField) {
422
+ hasLocalizedManyTextField = subHasLocalizedManyTextField;
423
+ }
368
424
  if (subHasManyTextField) {
369
- if (!hasManyTextField || subHasManyTextField === 'index') hasManyTextField = subHasManyTextField;
425
+ if (!hasManyTextField || subHasManyTextField === 'index') {
426
+ hasManyTextField = subHasManyTextField;
427
+ }
370
428
  }
371
429
  if (subHasManyNumberField) {
372
- if (!hasManyNumberField || subHasManyNumberField === 'index') hasManyNumberField = subHasManyNumberField;
430
+ if (!hasManyNumberField || subHasManyNumberField === 'index') {
431
+ hasManyNumberField = subHasManyNumberField;
432
+ }
373
433
  }
374
434
  adapter.relations[`relations_${blockTableName}`] = relations(adapter.tables[blockTableName], ({ many, one })=>{
375
435
  const result = {
@@ -446,19 +506,33 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
446
506
  localesIndexes,
447
507
  newTableName,
448
508
  parentTableName,
449
- relationsToBuild,
450
509
  relationships,
510
+ relationsToBuild,
451
511
  rootRelationsToBuild,
452
512
  rootTableIDColType,
453
513
  rootTableName,
454
- versions
514
+ uniqueRelationships,
515
+ versions,
516
+ withinLocalizedArrayOrBlock
455
517
  });
456
- if (groupHasLocalizedField) hasLocalizedField = true;
457
- if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
458
- if (groupHasManyTextField) hasManyTextField = true;
459
- if (groupHasLocalizedManyTextField) hasLocalizedManyTextField = true;
460
- if (groupHasManyNumberField) hasManyNumberField = true;
461
- if (groupHasLocalizedManyNumberField) hasLocalizedManyNumberField = true;
518
+ if (groupHasLocalizedField) {
519
+ hasLocalizedField = true;
520
+ }
521
+ if (groupHasLocalizedRelationshipField) {
522
+ hasLocalizedRelationshipField = true;
523
+ }
524
+ if (groupHasManyTextField) {
525
+ hasManyTextField = true;
526
+ }
527
+ if (groupHasLocalizedManyTextField) {
528
+ hasLocalizedManyTextField = true;
529
+ }
530
+ if (groupHasManyNumberField) {
531
+ hasManyNumberField = true;
532
+ }
533
+ if (groupHasLocalizedManyNumberField) {
534
+ hasLocalizedManyNumberField = true;
535
+ }
462
536
  break;
463
537
  }
464
538
  const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
@@ -476,19 +550,33 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
476
550
  localesIndexes,
477
551
  newTableName: `${parentTableName}_${columnName}`,
478
552
  parentTableName,
479
- relationsToBuild,
480
553
  relationships,
554
+ relationsToBuild,
481
555
  rootRelationsToBuild,
482
556
  rootTableIDColType,
483
557
  rootTableName,
484
- versions
558
+ uniqueRelationships,
559
+ versions,
560
+ withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized
485
561
  });
486
- if (groupHasLocalizedField) hasLocalizedField = true;
487
- if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
488
- if (groupHasManyTextField) hasManyTextField = true;
489
- if (groupHasLocalizedManyTextField) hasLocalizedManyTextField = true;
490
- if (groupHasManyNumberField) hasManyNumberField = true;
491
- if (groupHasLocalizedManyNumberField) hasLocalizedManyNumberField = true;
562
+ if (groupHasLocalizedField) {
563
+ hasLocalizedField = true;
564
+ }
565
+ if (groupHasLocalizedRelationshipField) {
566
+ hasLocalizedRelationshipField = true;
567
+ }
568
+ if (groupHasManyTextField) {
569
+ hasManyTextField = true;
570
+ }
571
+ if (groupHasLocalizedManyTextField) {
572
+ hasLocalizedManyTextField = true;
573
+ }
574
+ if (groupHasManyNumberField) {
575
+ hasManyNumberField = true;
576
+ }
577
+ if (groupHasLocalizedManyNumberField) {
578
+ hasLocalizedManyNumberField = true;
579
+ }
492
580
  break;
493
581
  }
494
582
  case 'tabs':
@@ -511,19 +599,33 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
511
599
  localesIndexes,
512
600
  newTableName,
513
601
  parentTableName,
514
- relationsToBuild,
515
602
  relationships,
603
+ relationsToBuild,
516
604
  rootRelationsToBuild,
517
605
  rootTableIDColType,
518
606
  rootTableName,
519
- versions
607
+ uniqueRelationships,
608
+ versions,
609
+ withinLocalizedArrayOrBlock
520
610
  });
521
- if (tabHasLocalizedField) hasLocalizedField = true;
522
- if (tabHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
523
- if (tabHasManyTextField) hasManyTextField = true;
524
- if (tabHasLocalizedManyTextField) hasLocalizedManyTextField = true;
525
- if (tabHasManyNumberField) hasManyNumberField = true;
526
- if (tabHasLocalizedManyNumberField) hasLocalizedManyNumberField = true;
611
+ if (tabHasLocalizedField) {
612
+ hasLocalizedField = true;
613
+ }
614
+ if (tabHasLocalizedRelationshipField) {
615
+ hasLocalizedRelationshipField = true;
616
+ }
617
+ if (tabHasManyTextField) {
618
+ hasManyTextField = true;
619
+ }
620
+ if (tabHasLocalizedManyTextField) {
621
+ hasLocalizedManyTextField = true;
622
+ }
623
+ if (tabHasManyNumberField) {
624
+ hasManyNumberField = true;
625
+ }
626
+ if (tabHasLocalizedManyNumberField) {
627
+ hasLocalizedManyNumberField = true;
628
+ }
527
629
  break;
528
630
  }
529
631
  case 'row':
@@ -544,27 +646,49 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
544
646
  localesIndexes,
545
647
  newTableName,
546
648
  parentTableName,
547
- relationsToBuild,
548
649
  relationships,
650
+ relationsToBuild,
549
651
  rootRelationsToBuild,
550
652
  rootTableIDColType,
551
653
  rootTableName,
552
- versions
654
+ uniqueRelationships,
655
+ versions,
656
+ withinLocalizedArrayOrBlock
553
657
  });
554
- if (rowHasLocalizedField) hasLocalizedField = true;
555
- if (rowHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
556
- if (rowHasManyTextField) hasManyTextField = true;
557
- if (rowHasLocalizedManyTextField) hasLocalizedManyTextField = true;
558
- if (rowHasManyNumberField) hasManyNumberField = true;
559
- if (rowHasLocalizedManyNumberField) hasLocalizedManyNumberField = true;
658
+ if (rowHasLocalizedField) {
659
+ hasLocalizedField = true;
660
+ }
661
+ if (rowHasLocalizedRelationshipField) {
662
+ hasLocalizedRelationshipField = true;
663
+ }
664
+ if (rowHasManyTextField) {
665
+ hasManyTextField = true;
666
+ }
667
+ if (rowHasLocalizedManyTextField) {
668
+ hasLocalizedManyTextField = true;
669
+ }
670
+ if (rowHasManyNumberField) {
671
+ hasManyNumberField = true;
672
+ }
673
+ if (rowHasLocalizedManyNumberField) {
674
+ hasLocalizedManyNumberField = true;
675
+ }
560
676
  break;
561
677
  }
562
678
  case 'relationship':
563
679
  case 'upload':
564
680
  if (Array.isArray(field.relationTo)) {
565
- field.relationTo.forEach((relation)=>relationships.add(relation));
681
+ field.relationTo.forEach((relation)=>{
682
+ relationships.add(relation);
683
+ if (field.unique && !disableUnique && !disableRelsTableUnique) {
684
+ uniqueRelationships.add(relation);
685
+ }
686
+ });
566
687
  } else if (field.hasMany) {
567
688
  relationships.add(field.relationTo);
689
+ if (field.unique && !disableUnique && !disableRelsTableUnique) {
690
+ uniqueRelationships.add(field.relationTo);
691
+ }
568
692
  } else {
569
693
  // simple relationships get a column on the targetTable with a foreign key to the relationTo table
570
694
  const relationshipConfig = adapter.payload.collections[field.relationTo].config;
@@ -572,8 +696,12 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
572
696
  // get the id type of the related collection
573
697
  let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer';
574
698
  const relatedCollectionCustomID = relationshipConfig.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
575
- if (relatedCollectionCustomID?.type === 'number') colType = 'numeric';
576
- if (relatedCollectionCustomID?.type === 'text') colType = 'varchar';
699
+ if (relatedCollectionCustomID?.type === 'number') {
700
+ colType = 'numeric';
701
+ }
702
+ if (relatedCollectionCustomID?.type === 'text') {
703
+ colType = 'varchar';
704
+ }
577
705
  // make the foreign key column for relationship using the correct id column type
578
706
  targetTable[fieldName] = parentIDColumnMap[colType](`${columnName}_id`).references(()=>adapter.tables[tableName].id, {
579
707
  onDelete: 'set null'
@@ -581,7 +709,7 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
581
709
  // add relationship to table
582
710
  relationsToBuild.set(fieldName, {
583
711
  type: 'one',
584
- localized: adapter.payload.config.localization && field.localized,
712
+ localized: adapter.payload.config.localization && (field.localized || forceLocalized),
585
713
  target: tableName
586
714
  });
587
715
  // add notNull when not required
@@ -590,7 +718,7 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
590
718
  }
591
719
  break;
592
720
  }
593
- if (adapter.payload.config.localization && field.localized) {
721
+ if (Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock) {
594
722
  hasLocalizedRelationshipField = true;
595
723
  }
596
724
  break;