@payloadcms/drizzle 3.0.0-canary.b922438 → 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 (337) 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 +16 -0
  35. package/dist/exports/postgres.d.ts.map +1 -0
  36. package/dist/exports/postgres.js +17 -0
  37. package/dist/exports/postgres.js.map +1 -0
  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 +353 -63
  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 +3 -0
  91. package/dist/postgres/countDistinct.d.ts.map +1 -0
  92. package/dist/postgres/countDistinct.js +23 -0
  93. package/dist/postgres/countDistinct.js.map +1 -0
  94. package/dist/postgres/createDatabase.d.ts +14 -0
  95. package/dist/postgres/createDatabase.d.ts.map +1 -0
  96. package/dist/postgres/createDatabase.js +76 -0
  97. package/dist/postgres/createDatabase.js.map +1 -0
  98. package/dist/postgres/createExtensions.d.ts +3 -0
  99. package/dist/postgres/createExtensions.d.ts.map +1 -0
  100. package/dist/postgres/createExtensions.js +16 -0
  101. package/dist/postgres/createExtensions.js.map +1 -0
  102. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts +2 -0
  103. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -0
  104. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js +16 -0
  105. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js.map +1 -0
  106. package/dist/postgres/createJSONQuery/formatJSONPathSegment.d.ts +2 -0
  107. package/dist/postgres/createJSONQuery/formatJSONPathSegment.d.ts.map +1 -0
  108. package/dist/postgres/createJSONQuery/formatJSONPathSegment.js +5 -0
  109. package/dist/postgres/createJSONQuery/formatJSONPathSegment.js.map +1 -0
  110. package/dist/postgres/createJSONQuery/index.d.ts +10 -0
  111. package/dist/postgres/createJSONQuery/index.d.ts.map +1 -0
  112. package/dist/postgres/createJSONQuery/index.js +54 -0
  113. package/dist/postgres/createJSONQuery/index.js.map +1 -0
  114. package/dist/postgres/createMigration.d.ts +3 -0
  115. package/dist/postgres/createMigration.d.ts.map +1 -0
  116. package/dist/postgres/createMigration.js +92 -0
  117. package/dist/postgres/createMigration.js.map +1 -0
  118. package/dist/postgres/defaultSnapshot.d.ts +3 -0
  119. package/dist/postgres/defaultSnapshot.d.ts.map +1 -0
  120. package/dist/postgres/defaultSnapshot.js +20 -0
  121. package/dist/postgres/defaultSnapshot.js.map +1 -0
  122. package/dist/postgres/deleteWhere.d.ts +3 -0
  123. package/dist/postgres/deleteWhere.d.ts.map +1 -0
  124. package/dist/postgres/deleteWhere.js +6 -0
  125. package/dist/postgres/deleteWhere.js.map +1 -0
  126. package/dist/postgres/dropDatabase.d.ts +3 -0
  127. package/dist/postgres/dropDatabase.d.ts.map +1 -0
  128. package/dist/postgres/dropDatabase.js +9 -0
  129. package/dist/postgres/dropDatabase.js.map +1 -0
  130. package/dist/postgres/execute.d.ts +3 -0
  131. package/dist/postgres/execute.d.ts.map +1 -0
  132. package/dist/postgres/execute.js +11 -0
  133. package/dist/postgres/execute.js.map +1 -0
  134. package/dist/postgres/getMigrationTemplate.d.ts +4 -0
  135. package/dist/postgres/getMigrationTemplate.d.ts.map +1 -0
  136. package/dist/postgres/getMigrationTemplate.js +13 -0
  137. package/dist/postgres/getMigrationTemplate.js.map +1 -0
  138. package/dist/postgres/init.d.ts +3 -0
  139. package/dist/postgres/init.d.ts.map +1 -0
  140. package/dist/postgres/init.js +104 -0
  141. package/dist/postgres/init.js.map +1 -0
  142. package/dist/postgres/insert.d.ts +3 -0
  143. package/dist/postgres/insert.d.ts.map +1 -0
  144. package/dist/postgres/insert.js +12 -0
  145. package/dist/postgres/insert.js.map +1 -0
  146. package/dist/postgres/requireDrizzleKit.d.ts +3 -0
  147. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -0
  148. package/dist/postgres/requireDrizzleKit.js +5 -0
  149. package/dist/postgres/requireDrizzleKit.js.map +1 -0
  150. package/dist/postgres/schema/build.d.ts +42 -0
  151. package/dist/postgres/schema/build.d.ts.map +1 -0
  152. package/dist/postgres/schema/build.js +404 -0
  153. package/dist/postgres/schema/build.js.map +1 -0
  154. package/dist/postgres/schema/createIndex.d.ts +11 -0
  155. package/dist/postgres/schema/createIndex.d.ts.map +1 -0
  156. package/dist/postgres/schema/createIndex.js +20 -0
  157. package/dist/postgres/schema/createIndex.js.map +1 -0
  158. package/dist/postgres/schema/geometryColumn.d.ts +12 -0
  159. package/dist/postgres/schema/geometryColumn.d.ts.map +1 -0
  160. package/dist/postgres/schema/geometryColumn.js +18 -0
  161. package/dist/postgres/schema/geometryColumn.js.map +1 -0
  162. package/dist/postgres/schema/idToUUID.d.ts +3 -0
  163. package/dist/postgres/schema/idToUUID.d.ts.map +1 -0
  164. package/dist/postgres/schema/idToUUID.js +11 -0
  165. package/dist/postgres/schema/idToUUID.js.map +1 -0
  166. package/dist/postgres/schema/parentIDColumnMap.d.ts +4 -0
  167. package/dist/postgres/schema/parentIDColumnMap.d.ts.map +1 -0
  168. package/dist/postgres/schema/parentIDColumnMap.js +9 -0
  169. package/dist/postgres/schema/parentIDColumnMap.js.map +1 -0
  170. package/dist/postgres/schema/setColumnID.d.ts +11 -0
  171. package/dist/postgres/schema/setColumnID.d.ts.map +1 -0
  172. package/dist/postgres/schema/setColumnID.js +24 -0
  173. package/dist/postgres/schema/setColumnID.js.map +1 -0
  174. package/dist/postgres/schema/traverseFields.d.ts +42 -0
  175. package/dist/postgres/schema/traverseFields.d.ts.map +1 -0
  176. package/dist/postgres/schema/traverseFields.js +743 -0
  177. package/dist/postgres/schema/traverseFields.js.map +1 -0
  178. package/dist/postgres/schema/withDefault.d.ts +4 -0
  179. package/dist/postgres/schema/withDefault.d.ts.map +1 -0
  180. package/dist/postgres/schema/withDefault.js +15 -0
  181. package/dist/postgres/schema/withDefault.js.map +1 -0
  182. package/dist/postgres/types.d.ts +142 -0
  183. package/dist/postgres/types.d.ts.map +1 -0
  184. package/dist/postgres/types.js +3 -0
  185. package/dist/postgres/types.js.map +1 -0
  186. package/dist/queries/addJoinTable.d.ts +11 -0
  187. package/dist/queries/addJoinTable.d.ts.map +1 -0
  188. package/dist/queries/addJoinTable.js +13 -0
  189. package/dist/queries/addJoinTable.js.map +1 -0
  190. package/dist/queries/buildAndOrConditions.d.ts +1 -1
  191. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  192. package/dist/queries/buildAndOrConditions.js +2 -4
  193. package/dist/queries/buildAndOrConditions.js.map +1 -1
  194. package/dist/queries/buildOrderBy.d.ts +18 -0
  195. package/dist/queries/buildOrderBy.d.ts.map +1 -0
  196. package/dist/queries/buildOrderBy.js +56 -0
  197. package/dist/queries/buildOrderBy.js.map +1 -0
  198. package/dist/queries/buildQuery.d.ts +8 -7
  199. package/dist/queries/buildQuery.d.ts.map +1 -1
  200. package/dist/queries/buildQuery.js +12 -47
  201. package/dist/queries/buildQuery.js.map +1 -1
  202. package/dist/queries/getTableColumnFromPath.d.ts +6 -2
  203. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  204. package/dist/queries/getTableColumnFromPath.js +134 -87
  205. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  206. package/dist/queries/operatorMap.d.ts.map +1 -1
  207. package/dist/queries/operatorMap.js +0 -4
  208. package/dist/queries/operatorMap.js.map +1 -1
  209. package/dist/queries/parseParams.d.ts +1 -1
  210. package/dist/queries/parseParams.d.ts.map +1 -1
  211. package/dist/queries/parseParams.js +79 -6
  212. package/dist/queries/parseParams.js.map +1 -1
  213. package/dist/queries/sanitizeQueryValue.d.ts +12 -1
  214. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  215. package/dist/queries/sanitizeQueryValue.js +89 -25
  216. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  217. package/dist/queries/selectDistinct.d.ts +3 -4
  218. package/dist/queries/selectDistinct.d.ts.map +1 -1
  219. package/dist/queries/selectDistinct.js.map +1 -1
  220. package/dist/queryDrafts.d.ts.map +1 -1
  221. package/dist/queryDrafts.js +6 -6
  222. package/dist/queryDrafts.js.map +1 -1
  223. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  224. package/dist/transactions/beginTransaction.js +5 -1
  225. package/dist/transactions/beginTransaction.js.map +1 -1
  226. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  227. package/dist/transactions/commitTransaction.js +3 -1
  228. package/dist/transactions/commitTransaction.js.map +1 -1
  229. package/dist/transform/read/hasManyNumber.d.ts +2 -1
  230. package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
  231. package/dist/transform/read/hasManyNumber.js +12 -2
  232. package/dist/transform/read/hasManyNumber.js.map +1 -1
  233. package/dist/transform/read/hasManyText.d.ts +2 -1
  234. package/dist/transform/read/hasManyText.d.ts.map +1 -1
  235. package/dist/transform/read/hasManyText.js +12 -2
  236. package/dist/transform/read/hasManyText.js.map +1 -1
  237. package/dist/transform/read/index.d.ts +3 -2
  238. package/dist/transform/read/index.d.ts.map +1 -1
  239. package/dist/transform/read/index.js +3 -2
  240. package/dist/transform/read/index.js.map +1 -1
  241. package/dist/transform/read/relationship.d.ts +2 -1
  242. package/dist/transform/read/relationship.d.ts.map +1 -1
  243. package/dist/transform/read/relationship.js +15 -6
  244. package/dist/transform/read/relationship.js.map +1 -1
  245. package/dist/transform/read/traverseFields.d.ts +10 -2
  246. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  247. package/dist/transform/read/traverseFields.js +170 -56
  248. package/dist/transform/read/traverseFields.js.map +1 -1
  249. package/dist/transform/write/array.d.ts +6 -1
  250. package/dist/transform/write/array.d.ts.map +1 -1
  251. package/dist/transform/write/array.js +7 -3
  252. package/dist/transform/write/array.js.map +1 -1
  253. package/dist/transform/write/blocks.d.ts +8 -3
  254. package/dist/transform/write/blocks.d.ts.map +1 -1
  255. package/dist/transform/write/blocks.js +19 -7
  256. package/dist/transform/write/blocks.js.map +1 -1
  257. package/dist/transform/write/index.d.ts.map +1 -1
  258. package/dist/transform/write/index.js +1 -1
  259. package/dist/transform/write/index.js.map +1 -1
  260. package/dist/transform/write/relationships.d.ts.map +1 -1
  261. package/dist/transform/write/relationships.js +6 -2
  262. package/dist/transform/write/relationships.js.map +1 -1
  263. package/dist/transform/write/selects.d.ts.map +1 -1
  264. package/dist/transform/write/selects.js +1 -1
  265. package/dist/transform/write/selects.js.map +1 -1
  266. package/dist/transform/write/traverseFields.d.ts +6 -1
  267. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  268. package/dist/transform/write/traverseFields.js +62 -19
  269. package/dist/transform/write/traverseFields.js.map +1 -1
  270. package/dist/types.d.ts +3 -2
  271. package/dist/types.d.ts.map +1 -1
  272. package/dist/types.js.map +1 -1
  273. package/dist/update.d.ts.map +1 -1
  274. package/dist/update.js +4 -2
  275. package/dist/update.js.map +1 -1
  276. package/dist/updateGlobal.d.ts +1 -1
  277. package/dist/updateGlobal.d.ts.map +1 -1
  278. package/dist/updateGlobal.js +2 -1
  279. package/dist/updateGlobal.js.map +1 -1
  280. package/dist/updateGlobalVersion.d.ts +1 -1
  281. package/dist/updateGlobalVersion.d.ts.map +1 -1
  282. package/dist/updateGlobalVersion.js +4 -3
  283. package/dist/updateGlobalVersion.js.map +1 -1
  284. package/dist/updateVersion.d.ts +1 -1
  285. package/dist/updateVersion.d.ts.map +1 -1
  286. package/dist/updateVersion.js +4 -3
  287. package/dist/updateVersion.js.map +1 -1
  288. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  289. package/dist/upsertRow/deleteExistingRowsByPath.js +6 -2
  290. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  291. package/dist/upsertRow/index.d.ts +1 -1
  292. package/dist/upsertRow/index.d.ts.map +1 -1
  293. package/dist/upsertRow/index.js +51 -12
  294. package/dist/upsertRow/index.js.map +1 -1
  295. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  296. package/dist/upsertRow/insertArrays.js +5 -2
  297. package/dist/upsertRow/insertArrays.js.map +1 -1
  298. package/dist/upsertRow/types.d.ts +10 -5
  299. package/dist/upsertRow/types.d.ts.map +1 -1
  300. package/dist/upsertRow/types.js.map +1 -1
  301. package/dist/utilities/buildIndexName.d.ts +7 -0
  302. package/dist/utilities/buildIndexName.d.ts.map +1 -0
  303. package/dist/utilities/buildIndexName.js +14 -0
  304. package/dist/utilities/buildIndexName.js.map +1 -0
  305. package/dist/utilities/createBlocksMap.d.ts.map +1 -1
  306. package/dist/utilities/createBlocksMap.js +4 -2
  307. package/dist/utilities/createBlocksMap.js.map +1 -1
  308. package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
  309. package/dist/utilities/createRelationshipMap.js +3 -1
  310. package/dist/utilities/createRelationshipMap.js.map +1 -1
  311. package/dist/utilities/executeSchemaHooks.d.ts +24 -0
  312. package/dist/utilities/executeSchemaHooks.d.ts.map +1 -0
  313. package/dist/utilities/executeSchemaHooks.js +21 -0
  314. package/dist/utilities/executeSchemaHooks.js.map +1 -0
  315. package/dist/utilities/extendDrizzleTable.d.ts +19 -0
  316. package/dist/utilities/extendDrizzleTable.d.ts.map +1 -0
  317. package/dist/utilities/extendDrizzleTable.js +38 -0
  318. package/dist/utilities/extendDrizzleTable.js.map +1 -0
  319. package/dist/utilities/getCollectionIdType.d.ts +7 -0
  320. package/dist/utilities/getCollectionIdType.d.ts.map +1 -0
  321. package/dist/utilities/getCollectionIdType.js +11 -0
  322. package/dist/utilities/getCollectionIdType.js.map +1 -0
  323. package/dist/utilities/getNameFromDrizzleTable.d.ts +3 -0
  324. package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -0
  325. package/dist/utilities/getNameFromDrizzleTable.js +6 -0
  326. package/dist/utilities/getNameFromDrizzleTable.js.map +1 -0
  327. package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
  328. package/dist/utilities/hasLocalesTable.js +12 -4
  329. package/dist/utilities/hasLocalesTable.js.map +1 -1
  330. package/dist/utilities/isPolymorphicRelationship.d.ts +6 -0
  331. package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -0
  332. package/dist/utilities/isPolymorphicRelationship.js +5 -0
  333. package/dist/utilities/isPolymorphicRelationship.js.map +1 -0
  334. package/dist/utilities/pushDevSchema.d.ts.map +1 -1
  335. package/dist/utilities/pushDevSchema.js +5 -0
  336. package/dist/utilities/pushDevSchema.js.map +1 -1
  337. package/package.json +19 -10
@@ -1,56 +1,21 @@
1
- import { asc, desc } from 'drizzle-orm';
2
- import { getTableColumnFromPath } from './getTableColumnFromPath.js';
1
+ import { buildOrderBy } from './buildOrderBy.js';
3
2
  import { parseParams } from './parseParams.js';
4
- const buildQuery = async function buildQuery({ adapter, fields, locale, sort, tableName, where: incomingWhere }) {
3
+ const buildQuery = function buildQuery({ adapter, fields, joins = [], locale, sort, tableName, where: incomingWhere }) {
5
4
  const selectFields = {
6
5
  id: adapter.tables[tableName].id
7
6
  };
8
- const joins = [];
9
- const orderBy = {
10
- column: null,
11
- order: null
12
- };
13
- if (sort) {
14
- let sortPath;
15
- if (sort[0] === '-') {
16
- sortPath = sort.substring(1);
17
- orderBy.order = desc;
18
- } else {
19
- sortPath = sort;
20
- orderBy.order = asc;
21
- }
22
- try {
23
- const { columnName: sortTableColumnName, table: sortTable } = getTableColumnFromPath({
24
- adapter,
25
- collectionPath: sortPath,
26
- fields,
27
- joins,
28
- locale,
29
- pathSegments: sortPath.replace(/__/g, '.').split('.'),
30
- selectFields,
31
- tableName,
32
- value: sortPath
33
- });
34
- orderBy.column = sortTable?.[sortTableColumnName];
35
- } catch (err) {
36
- // continue
37
- }
38
- }
39
- if (!orderBy?.column) {
40
- orderBy.order = desc;
41
- const createdAt = adapter.tables[tableName]?.createdAt;
42
- if (createdAt) {
43
- orderBy.column = createdAt;
44
- } else {
45
- orderBy.column = adapter.tables[tableName].id;
46
- }
47
- }
48
- if (orderBy.column) {
49
- selectFields.sort = orderBy.column;
50
- }
7
+ const orderBy = buildOrderBy({
8
+ adapter,
9
+ fields,
10
+ joins,
11
+ locale,
12
+ selectFields,
13
+ sort,
14
+ tableName
15
+ });
51
16
  let where;
52
17
  if (incomingWhere && Object.keys(incomingWhere).length > 0) {
53
- where = await parseParams({
18
+ where = parseParams({
54
19
  adapter,
55
20
  fields,
56
21
  joins,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildQuery.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport type { Field, Where } from 'payload'\n\nimport { asc, desc } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, GenericColumn, GenericTable } from '../types.js'\n\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\nimport { parseParams } from './parseParams.js'\n\nexport type BuildQueryJoinAliases = {\n condition: SQL\n table: GenericTable | PgTableWithColumns<any>\n}[]\n\ntype BuildQueryArgs = {\n adapter: DrizzleAdapter\n fields: Field[]\n locale?: string\n sort?: string\n tableName: string\n where: Where\n}\n\ntype Result = {\n joins: BuildQueryJoinAliases\n orderBy: {\n column: GenericColumn\n order: typeof asc | typeof desc\n }\n selectFields: Record<string, GenericColumn>\n where: SQL\n}\nconst buildQuery = async function buildQuery({\n adapter,\n fields,\n locale,\n sort,\n tableName,\n where: incomingWhere,\n}: BuildQueryArgs): Promise<Result> {\n const selectFields: Record<string, GenericColumn> = {\n id: adapter.tables[tableName].id,\n }\n const joins: BuildQueryJoinAliases = []\n\n const orderBy: Result['orderBy'] = {\n column: null,\n order: null,\n }\n\n if (sort) {\n let sortPath\n\n if (sort[0] === '-') {\n sortPath = sort.substring(1)\n orderBy.order = desc\n } else {\n sortPath = sort\n orderBy.order = asc\n }\n\n try {\n const { columnName: sortTableColumnName, table: sortTable } = getTableColumnFromPath({\n adapter,\n collectionPath: sortPath,\n fields,\n joins,\n locale,\n pathSegments: sortPath.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: sortPath,\n })\n orderBy.column = sortTable?.[sortTableColumnName]\n } catch (err) {\n // continue\n }\n }\n\n if (!orderBy?.column) {\n orderBy.order = desc\n const createdAt = adapter.tables[tableName]?.createdAt\n\n if (createdAt) {\n orderBy.column = createdAt\n } else {\n orderBy.column = adapter.tables[tableName].id\n }\n }\n\n if (orderBy.column) {\n selectFields.sort = orderBy.column\n }\n\n let where: SQL\n\n if (incomingWhere && Object.keys(incomingWhere).length > 0) {\n where = await parseParams({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n tableName,\n where: incomingWhere,\n })\n }\n\n return {\n joins,\n orderBy,\n selectFields,\n where,\n }\n}\n\nexport default buildQuery\n"],"names":["asc","desc","getTableColumnFromPath","parseParams","buildQuery","adapter","fields","locale","sort","tableName","where","incomingWhere","selectFields","id","tables","joins","orderBy","column","order","sortPath","substring","columnName","sortTableColumnName","table","sortTable","collectionPath","pathSegments","replace","split","value","err","createdAt","Object","keys","length"],"mappings":"AAIA,SAASA,GAAG,EAAEC,IAAI,QAAQ,cAAa;AAIvC,SAASC,sBAAsB,QAAQ,8BAA6B;AACpE,SAASC,WAAW,QAAQ,mBAAkB;AAyB9C,MAAMC,aAAa,eAAeA,WAAW,EAC3CC,OAAO,EACPC,MAAM,EACNC,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,OAAOC,aAAa,EACL;IACf,MAAMC,eAA8C;QAClDC,IAAIR,QAAQS,MAAM,CAACL,UAAU,CAACI,EAAE;IAClC;IACA,MAAME,QAA+B,EAAE;IAEvC,MAAMC,UAA6B;QACjCC,QAAQ;QACRC,OAAO;IACT;IAEA,IAAIV,MAAM;QACR,IAAIW;QAEJ,IAAIX,IAAI,CAAC,EAAE,KAAK,KAAK;YACnBW,WAAWX,KAAKY,SAAS,CAAC;YAC1BJ,QAAQE,KAAK,GAAGjB;QAClB,OAAO;YACLkB,WAAWX;YACXQ,QAAQE,KAAK,GAAGlB;QAClB;QAEA,IAAI;YACF,MAAM,EAAEqB,YAAYC,mBAAmB,EAAEC,OAAOC,SAAS,EAAE,GAAGtB,uBAAuB;gBACnFG;gBACAoB,gBAAgBN;gBAChBb;gBACAS;gBACAR;gBACAmB,cAAcP,SAASQ,OAAO,CAAC,OAAO,KAAKC,KAAK,CAAC;gBACjDhB;gBACAH;gBACAoB,OAAOV;YACT;YACAH,QAAQC,MAAM,GAAGO,WAAW,CAACF,oBAAoB;QACnD,EAAE,OAAOQ,KAAK;QACZ,WAAW;QACb;IACF;IAEA,IAAI,CAACd,SAASC,QAAQ;QACpBD,QAAQE,KAAK,GAAGjB;QAChB,MAAM8B,YAAY1B,QAAQS,MAAM,CAACL,UAAU,EAAEsB;QAE7C,IAAIA,WAAW;YACbf,QAAQC,MAAM,GAAGc;QACnB,OAAO;YACLf,QAAQC,MAAM,GAAGZ,QAAQS,MAAM,CAACL,UAAU,CAACI,EAAE;QAC/C;IACF;IAEA,IAAIG,QAAQC,MAAM,EAAE;QAClBL,aAAaJ,IAAI,GAAGQ,QAAQC,MAAM;IACpC;IAEA,IAAIP;IAEJ,IAAIC,iBAAiBqB,OAAOC,IAAI,CAACtB,eAAeuB,MAAM,GAAG,GAAG;QAC1DxB,QAAQ,MAAMP,YAAY;YACxBE;YACAC;YACAS;YACAR;YACAK;YACAH;YACAC,OAAOC;QACT;IACF;IAEA,OAAO;QACLI;QACAC;QACAJ;QACAF;IACF;AACF;AAEA,eAAeN,WAAU"}
1
+ {"version":3,"sources":["../../src/queries/buildQuery.ts"],"sourcesContent":["import type { asc, desc, SQL } from 'drizzle-orm'\nimport type { PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport type { Field, Sort, Where } from 'payload'\n\nimport type { DrizzleAdapter, GenericColumn, GenericTable } from '../types.js'\n\nimport { buildOrderBy } from './buildOrderBy.js'\nimport { parseParams } from './parseParams.js'\n\nexport type BuildQueryJoinAliases = {\n condition: SQL\n table: GenericTable | PgTableWithColumns<any>\n type?: 'innerJoin' | 'leftJoin' | 'rightJoin'\n}[]\n\ntype BuildQueryArgs = {\n adapter: DrizzleAdapter\n fields: Field[]\n joins?: BuildQueryJoinAliases\n locale?: string\n sort?: Sort\n tableName: string\n where: Where\n}\n\nexport type BuildQueryResult = {\n joins: BuildQueryJoinAliases\n orderBy: {\n column: GenericColumn\n order: typeof asc | typeof desc\n }[]\n selectFields: Record<string, GenericColumn>\n where: SQL\n}\nconst buildQuery = function buildQuery({\n adapter,\n fields,\n joins = [],\n locale,\n sort,\n tableName,\n where: incomingWhere,\n}: BuildQueryArgs): BuildQueryResult {\n const selectFields: Record<string, GenericColumn> = {\n id: adapter.tables[tableName].id,\n }\n\n const orderBy = buildOrderBy({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n sort,\n tableName,\n })\n\n let where: SQL\n\n if (incomingWhere && Object.keys(incomingWhere).length > 0) {\n where = parseParams({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n tableName,\n where: incomingWhere,\n })\n }\n\n return {\n joins,\n orderBy,\n selectFields,\n where,\n }\n}\n\nexport default buildQuery\n"],"names":["buildOrderBy","parseParams","buildQuery","adapter","fields","joins","locale","sort","tableName","where","incomingWhere","selectFields","id","tables","orderBy","Object","keys","length"],"mappings":"AAMA,SAASA,YAAY,QAAQ,oBAAmB;AAChD,SAASC,WAAW,QAAQ,mBAAkB;AA2B9C,MAAMC,aAAa,SAASA,WAAW,EACrCC,OAAO,EACPC,MAAM,EACNC,QAAQ,EAAE,EACVC,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,OAAOC,aAAa,EACL;IACf,MAAMC,eAA8C;QAClDC,IAAIT,QAAQU,MAAM,CAACL,UAAU,CAACI,EAAE;IAClC;IAEA,MAAME,UAAUd,aAAa;QAC3BG;QACAC;QACAC;QACAC;QACAK;QACAJ;QACAC;IACF;IAEA,IAAIC;IAEJ,IAAIC,iBAAiBK,OAAOC,IAAI,CAACN,eAAeO,MAAM,GAAG,GAAG;QAC1DR,QAAQR,YAAY;YAClBE;YACAC;YACAC;YACAC;YACAK;YACAH;YACAC,OAAOC;QACT;IACF;IAEA,OAAO;QACLL;QACAS;QACAH;QACAF;IACF;AACF;AAEA,eAAeP,WAAU"}
@@ -1,7 +1,7 @@
1
1
  import type { SQL } from 'drizzle-orm';
2
- import type { PgTableWithColumns } from 'drizzle-orm/pg-core';
3
2
  import type { SQLiteTableWithColumns } from 'drizzle-orm/sqlite-core';
4
3
  import type { Field, FieldAffectingData, TabAsField } from 'payload';
4
+ import { type PgTableWithColumns } from 'drizzle-orm/pg-core';
5
5
  import type { DrizzleAdapter, GenericColumn } from '../types.js';
6
6
  import type { BuildQueryJoinAliases } from './buildQuery.js';
7
7
  type Constraint = {
@@ -11,6 +11,10 @@ type Constraint = {
11
11
  };
12
12
  type TableColumn = {
13
13
  columnName?: string;
14
+ columns?: {
15
+ idType: 'number' | 'text' | 'uuid';
16
+ rawColumn: SQL<unknown>;
17
+ }[];
14
18
  constraints: Constraint[];
15
19
  field: FieldAffectingData;
16
20
  getNotNullColumnByValue?: (val: unknown) => string;
@@ -42,7 +46,7 @@ type Args = {
42
46
  value: unknown;
43
47
  };
44
48
  /**
45
- * Transforms path to table and column name
49
+ * Transforms path to table and column name or to a list of OR columns
46
50
  * Adds tables to `join`
47
51
  * @returns TableColumn
48
52
  */
@@ -1 +1 @@
1
- {"version":3,"file":"getTableColumnFromPath.d.ts","sourceRoot":"","sources":["../../src/queries/getTableColumnFromPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAe,UAAU,EAAa,MAAM,SAAS,CAAA;AAO5F,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAI5D,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAC5D,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,KAAK,EAAE,kBAAkB,CAAA;IACzB,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;CAC7D,CAAA;AAED,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAClE,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AACD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,8QAgBhC,IAAI,KAAG,WA8kBT,CAAA"}
1
+ {"version":3,"file":"getTableColumnFromPath.d.ts","sourceRoot":"","sources":["../../src/queries/getTableColumnFromPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAe,UAAU,EAAa,MAAM,SAAS,CAAA;AAG5F,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAM7D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAM5D,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAC5D,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;QAClC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KACxB,EAAE,CAAA;IACH,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,KAAK,EAAE,kBAAkB,CAAA;IACzB,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;CAC7D,CAAA;AAED,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAClE,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AACD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,8QAgBhC,IAAI,KAAG,WAopBT,CAAA"}
@@ -2,9 +2,12 @@ import { and, eq, like, sql } from 'drizzle-orm';
2
2
  import { APIError, flattenTopLevelFields } from 'payload';
3
3
  import { fieldAffectsData, tabHasName } from 'payload/shared';
4
4
  import toSnakeCase from 'to-snake-case';
5
+ import { validate as uuidValidate } from 'uuid';
6
+ import { isPolymorphicRelationship } from '../utilities/isPolymorphicRelationship.js';
7
+ import { addJoinTable } from './addJoinTable.js';
5
8
  import { getTableAlias } from './getTableAlias.js';
6
9
  /**
7
- * Transforms path to table and column name
10
+ * Transforms path to table and column name or to a list of OR columns
8
11
  * Adds tables to `join`
9
12
  * @returns TableColumn
10
13
  */ export const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraintPath: incomingConstraintPath, constraints = [], fields, joins, locale: incomingLocale, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, tableName, tableNameSuffix = '', value })=>{
@@ -106,17 +109,15 @@ import { getTableAlias } from './getTableAlias.js';
106
109
  {
107
110
  if (locale && field.localized && adapter.payload.config.localization) {
108
111
  newTableName = `${tableName}${adapter.localesSuffix}`;
109
- joins.push({
110
- condition: eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID),
111
- table: adapter.tables[newTableName]
112
- });
112
+ let condition = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
113
113
  if (locale !== 'all') {
114
- constraints.push({
115
- columnName: '_locale',
116
- table: adapter.tables[newTableName],
117
- value: locale
118
- });
114
+ condition = and(condition, eq(adapter.tables[newTableName]._locale, locale));
119
115
  }
116
+ addJoinTable({
117
+ condition,
118
+ joins,
119
+ table: adapter.tables[newTableName]
120
+ });
120
121
  }
121
122
  return getTableColumnFromPath({
122
123
  adapter,
@@ -141,20 +142,22 @@ import { getTableAlias } from './getTableAlias.js';
141
142
  if (field.hasMany) {
142
143
  const newTableName = adapter.tableNameMap.get(`${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`);
143
144
  if (locale && field.localized && adapter.payload.config.localization) {
144
- joins.push({
145
- condition: and(eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent), eq(adapter.tables[newTableName]._locale, locale)),
146
- table: adapter.tables[newTableName]
147
- });
145
+ const conditions = [
146
+ eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent),
147
+ eq(adapter.tables[newTableName]._locale, locale)
148
+ ];
148
149
  if (locale !== 'all') {
149
- constraints.push({
150
- columnName: '_locale',
151
- table: adapter.tables[newTableName],
152
- value: locale
153
- });
150
+ conditions.push(eq(adapter.tables[newTableName]._locale, locale));
154
151
  }
152
+ addJoinTable({
153
+ condition: and(...conditions),
154
+ joins,
155
+ table: adapter.tables[newTableName]
156
+ });
155
157
  } else {
156
- joins.push({
158
+ addJoinTable({
157
159
  condition: eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent),
160
+ joins,
158
161
  table: adapter.tables[newTableName]
159
162
  });
160
163
  }
@@ -177,26 +180,27 @@ import { getTableAlias } from './getTableAlias.js';
177
180
  tableType = 'numbers';
178
181
  columnName = 'number';
179
182
  }
180
- newTableName = `${tableName}_${tableType}`;
183
+ newTableName = `${rootTableName}_${tableType}`;
181
184
  const joinConstraints = [
182
- eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent),
183
- eq(adapter.tables[newTableName].path, `${constraintPath}${field.name}`)
185
+ eq(adapter.tables[rootTableName].id, adapter.tables[newTableName].parent),
186
+ like(adapter.tables[newTableName].path, `${constraintPath}${field.name}`)
184
187
  ];
185
188
  if (locale && field.localized && adapter.payload.config.localization) {
186
- joins.push({
187
- condition: and(...joinConstraints, eq(adapter.tables[newTableName]._locale, locale)),
188
- table: adapter.tables[newTableName]
189
- });
189
+ const conditions = [
190
+ ...joinConstraints
191
+ ];
190
192
  if (locale !== 'all') {
191
- constraints.push({
192
- columnName: 'locale',
193
- table: adapter.tables[newTableName],
194
- value: locale
195
- });
193
+ conditions.push(eq(adapter.tables[newTableName]._locale, locale));
196
194
  }
195
+ addJoinTable({
196
+ condition: and(...conditions),
197
+ joins,
198
+ table: adapter.tables[newTableName]
199
+ });
197
200
  } else {
198
- joins.push({
201
+ addJoinTable({
199
202
  condition: and(...joinConstraints),
203
+ joins,
200
204
  table: adapter.tables[newTableName]
201
205
  });
202
206
  }
@@ -212,22 +216,24 @@ import { getTableAlias } from './getTableAlias.js';
212
216
  case 'array':
213
217
  {
214
218
  newTableName = adapter.tableNameMap.get(`${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`);
219
+ const arrayParentTable = aliasTable || adapter.tables[tableName];
215
220
  constraintPath = `${constraintPath}${field.name}.%.`;
216
221
  if (locale && field.localized && adapter.payload.config.localization) {
217
- joins.push({
218
- condition: and(eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID), eq(adapter.tables[newTableName]._locale, locale)),
219
- table: adapter.tables[newTableName]
220
- });
222
+ const conditions = [
223
+ eq(arrayParentTable.id, adapter.tables[newTableName]._parentID)
224
+ ];
221
225
  if (locale !== 'all') {
222
- constraints.push({
223
- columnName: '_locale',
224
- table: adapter.tables[newTableName],
225
- value: locale
226
- });
226
+ conditions.push(eq(adapter.tables[newTableName]._locale, locale));
227
227
  }
228
+ addJoinTable({
229
+ condition: and(...conditions),
230
+ joins,
231
+ table: adapter.tables[newTableName]
232
+ });
228
233
  } else {
229
- joins.push({
230
- condition: eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID),
234
+ addJoinTable({
235
+ condition: eq(arrayParentTable.id, adapter.tables[newTableName]._parentID),
236
+ joins,
231
237
  table: adapter.tables[newTableName]
232
238
  });
233
239
  }
@@ -314,17 +320,16 @@ import { getTableAlias } from './getTableAlias.js';
314
320
  ...blockSelectFields
315
321
  };
316
322
  if (field.localized && adapter.payload.config.localization) {
323
+ const conditions = [
324
+ eq((aliasTable || adapter.tables[tableName]).id, adapter.tables[newTableName]._parentID)
325
+ ];
326
+ if (locale !== 'all') {
327
+ conditions.push(eq(adapter.tables[newTableName]._locale, locale));
328
+ }
317
329
  joins.push({
318
- condition: and(eq((aliasTable || adapter.tables[tableName]).id, adapter.tables[newTableName]._parentID), eq(adapter.tables[newTableName]._locale, locale)),
330
+ condition: and(...conditions),
319
331
  table: adapter.tables[newTableName]
320
332
  });
321
- if (locale) {
322
- constraints.push({
323
- columnName: '_locale',
324
- table: adapter.tables[newTableName],
325
- value: locale
326
- });
327
- }
328
333
  } else {
329
334
  joins.push({
330
335
  condition: eq((aliasTable || adapter.tables[tableName]).id, adapter.tables[newTableName]._parentID),
@@ -349,7 +354,7 @@ import { getTableAlias } from './getTableAlias.js';
349
354
  case 'upload':
350
355
  {
351
356
  const newCollectionPath = pathSegments.slice(1).join('.');
352
- if (Array.isArray(field.relationTo) || field.type === 'relationship' && field.hasMany) {
357
+ if (Array.isArray(field.relationTo) || field.hasMany) {
353
358
  let relationshipFields;
354
359
  const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`;
355
360
  const { newAliasTable: aliasRelationshipTable, newAliasTableName: aliasRelationshipTableName } = getTableAlias({
@@ -358,17 +363,17 @@ import { getTableAlias } from './getTableAlias.js';
358
363
  });
359
364
  // Join in the relationships table
360
365
  if (locale && field.localized && adapter.payload.config.localization) {
366
+ const conditions = [
367
+ eq((aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent),
368
+ like(aliasRelationshipTable.path, `${constraintPath}${field.name}`)
369
+ ];
370
+ if (locale !== 'all') {
371
+ conditions.push(eq(aliasRelationshipTable.locale, locale));
372
+ }
361
373
  joins.push({
362
- condition: and(eq((aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent), eq(aliasRelationshipTable.locale, locale), like(aliasRelationshipTable.path, `${constraintPath}${field.name}`)),
374
+ condition: and(...conditions),
363
375
  table: aliasRelationshipTable
364
376
  });
365
- if (locale !== 'all') {
366
- constraints.push({
367
- columnName: 'locale',
368
- table: aliasRelationshipTable,
369
- value: locale
370
- });
371
- }
372
377
  } else {
373
378
  // Join in the relationships table
374
379
  joins.push({
@@ -400,20 +405,43 @@ import { getTableAlias } from './getTableAlias.js';
400
405
  };
401
406
  }
402
407
  } else if (newCollectionPath === 'value') {
403
- const tableColumnsNames = field.relationTo.map((relationTo)=>{
408
+ const hasCustomCollectionWithCustomID = field.relationTo.some((relationTo)=>!!adapter.payload.collections[relationTo].customIDType);
409
+ const columns = field.relationTo.map((relationTo)=>{
410
+ let idType = adapter.idType === 'uuid' ? 'uuid' : 'number';
411
+ const { customIDType } = adapter.payload.collections[relationTo];
412
+ if (customIDType) {
413
+ idType = customIDType;
414
+ }
415
+ const idTypeTextOrUuid = idType === 'text' || idType === 'uuid';
416
+ // Do not add the column to OR if we know that it can't match by the type
417
+ // We can't do the same with idType: 'number' because `value` can be from the REST search query params
418
+ if (typeof value === 'number' && idTypeTextOrUuid) {
419
+ return null;
420
+ }
421
+ if (Array.isArray(value) && value.every((val)=>typeof val === 'number') && idTypeTextOrUuid) {
422
+ return null;
423
+ }
424
+ // Do not add the UUID type column if incoming query value doesn't match UUID. If there aren't any collections with
425
+ // a custom ID type, we skip this check
426
+ // We need this because Postgres throws an error if querying by UUID column with a value that isn't a valid UUID.
427
+ if (value && !Array.isArray(value) && idType === 'uuid' && hasCustomCollectionWithCustomID) {
428
+ if (!uuidValidate(value)) {
429
+ return null;
430
+ }
431
+ }
432
+ if (Array.isArray(value) && idType === 'uuid' && hasCustomCollectionWithCustomID && !value.some((val)=>uuidValidate(val))) {
433
+ return null;
434
+ }
404
435
  const relationTableName = adapter.tableNameMap.get(toSnakeCase(adapter.payload.collections[relationTo].config.slug));
405
- return `"${aliasRelationshipTableName}"."${relationTableName}_id"`;
406
- });
407
- let column;
408
- if (tableColumnsNames.length === 1) {
409
- column = tableColumnsNames[0];
410
- } else {
411
- column = `COALESCE(${tableColumnsNames.join(', ')})`;
412
- }
436
+ return {
437
+ idType,
438
+ rawColumn: sql.raw(`"${aliasRelationshipTableName}"."${relationTableName}_id"`)
439
+ };
440
+ }).filter(Boolean);
413
441
  return {
442
+ columns,
414
443
  constraints,
415
444
  field,
416
- rawColumn: sql.raw(`${column}`),
417
445
  table: aliasRelationshipTable
418
446
  };
419
447
  } else if (newCollectionPath === 'relationTo') {
@@ -425,11 +453,22 @@ import { getTableAlias } from './getTableAlias.js';
425
453
  field,
426
454
  getNotNullColumnByValue: (val)=>{
427
455
  const matchedRelation = relationTo.find((relation)=>relation === val);
428
- if (matchedRelation) return `${matchedRelation}ID`;
456
+ if (matchedRelation) {
457
+ return `${matchedRelation}ID`;
458
+ }
429
459
  return undefined;
430
460
  },
431
461
  table: aliasRelationshipTable
432
462
  };
463
+ } else if (isPolymorphicRelationship(value)) {
464
+ const { relationTo } = value;
465
+ const relationTableName = adapter.tableNameMap.get(toSnakeCase(adapter.payload.collections[relationTo].config.slug));
466
+ return {
467
+ constraints,
468
+ field,
469
+ rawColumn: sql.raw(`"${aliasRelationshipTableName}"."${relationTableName}_id"`),
470
+ table: aliasRelationshipTable
471
+ };
433
472
  } else {
434
473
  throw new APIError('Not supported');
435
474
  }
@@ -460,12 +499,20 @@ import { getTableAlias } from './getTableAlias.js';
460
499
  adapter,
461
500
  tableName: `${rootTableName}${adapter.localesSuffix}`
462
501
  });
463
- joins.push({
464
- condition: and(eq(aliasLocaleTable._parentID, adapter.tables[rootTableName].id), eq(aliasLocaleTable._locale, locale)),
465
- table: aliasLocaleTable
502
+ const condtions = [
503
+ eq(aliasLocaleTable._parentID, adapter.tables[rootTableName].id)
504
+ ];
505
+ if (locale !== 'all') {
506
+ condtions.push(eq(aliasLocaleTable._locale, locale));
507
+ }
508
+ const localesTable = adapter.tables[`${rootTableName}${adapter.localesSuffix}`];
509
+ addJoinTable({
510
+ condition: and(...condtions),
511
+ joins,
512
+ table: localesTable
466
513
  });
467
514
  joins.push({
468
- condition: eq(aliasLocaleTable[columnName], newAliasTable.id),
515
+ condition: eq(localesTable[columnName], newAliasTable.id),
469
516
  table: newAliasTable
470
517
  });
471
518
  } else {
@@ -497,25 +544,25 @@ import { getTableAlias } from './getTableAlias.js';
497
544
  }
498
545
  }
499
546
  if (fieldAffectsData(field)) {
547
+ let newTable = adapter.tables[newTableName];
500
548
  if (field.localized && adapter.payload.config.localization) {
501
549
  // If localized, we go to localized table and set aliasTable to undefined
502
550
  // so it is not picked up below to be used as targetTable
503
551
  const parentTable = aliasTable || adapter.tables[tableName];
504
552
  newTableName = `${tableName}${adapter.localesSuffix}`;
505
- joins.push({
506
- condition: eq(parentTable.id, adapter.tables[newTableName]._parentID),
507
- table: adapter.tables[newTableName]
508
- });
509
- aliasTable = undefined;
553
+ newTable = adapter.tables[newTableName];
554
+ let condition = eq(parentTable.id, newTable._parentID);
510
555
  if (locale !== 'all') {
511
- constraints.push({
512
- columnName: '_locale',
513
- table: adapter.tables[newTableName],
514
- value: locale
515
- });
556
+ condition = and(condition, eq(newTable._locale, locale));
516
557
  }
558
+ addJoinTable({
559
+ condition,
560
+ joins,
561
+ table: newTable
562
+ });
563
+ aliasTable = undefined;
517
564
  }
518
- const targetTable = aliasTable || adapter.tables[newTableName];
565
+ const targetTable = aliasTable || newTable;
519
566
  selectFields[`${newTableName}.${columnPrefix}${field.name}`] = targetTable[`${columnPrefix}${field.name}`];
520
567
  return {
521
568
  columnName: `${columnPrefix}${field.name}`,