@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/queries/buildOrderBy.ts"],"sourcesContent":["import type { Field, Sort } from 'payload'\n\nimport { asc, desc } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases, BuildQueryResult } from './buildQuery.js'\n\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n fields: Field[]\n joins: BuildQueryJoinAliases\n locale?: string\n selectFields: Record<string, GenericColumn>\n sort?: Sort\n tableName: string\n}\n\n/**\n * Gets the order by column and direction constructed from the sort argument adds the column to the select fields and joins if necessary\n */\nexport const buildOrderBy = ({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n sort,\n tableName,\n}: Args): BuildQueryResult['orderBy'] => {\n const orderBy: BuildQueryResult['orderBy'] = []\n\n if (!sort) {\n const createdAt = adapter.tables[tableName]?.createdAt\n if (createdAt) {\n sort = '-createdAt'\n } else {\n sort = '-id'\n }\n }\n\n if (typeof sort === 'string') {\n sort = [sort]\n }\n\n for (const sortItem of sort) {\n let sortProperty: string\n let sortDirection: 'asc' | 'desc'\n if (sortItem[0] === '-') {\n sortProperty = sortItem.substring(1)\n sortDirection = 'desc'\n } else {\n sortProperty = sortItem\n sortDirection = 'asc'\n }\n try {\n const { columnName: sortTableColumnName, table: sortTable } = getTableColumnFromPath({\n adapter,\n collectionPath: sortProperty,\n fields,\n joins,\n locale,\n pathSegments: sortProperty.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: sortProperty,\n })\n if (sortTable?.[sortTableColumnName]) {\n orderBy.push({\n column: sortTable[sortTableColumnName],\n order: sortDirection === 'asc' ? asc : desc,\n })\n\n selectFields[sortTableColumnName] = sortTable[sortTableColumnName]\n }\n } catch (err) {\n // continue\n }\n }\n\n return orderBy\n}\n"],"names":["asc","desc","getTableColumnFromPath","buildOrderBy","adapter","fields","joins","locale","selectFields","sort","tableName","orderBy","createdAt","tables","sortItem","sortProperty","sortDirection","substring","columnName","sortTableColumnName","table","sortTable","collectionPath","pathSegments","replace","split","value","push","column","order","err"],"mappings":"AAEA,SAASA,GAAG,EAAEC,IAAI,QAAQ,cAAa;AAKvC,SAASC,sBAAsB,QAAQ,8BAA6B;AAYpE;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,OAAO,EACPC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,YAAY,EACZC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,UAAuC,EAAE;IAE/C,IAAI,CAACF,MAAM;QACT,MAAMG,YAAYR,QAAQS,MAAM,CAACH,UAAU,EAAEE;QAC7C,IAAIA,WAAW;YACbH,OAAO;QACT,OAAO;YACLA,OAAO;QACT;IACF;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5BA,OAAO;YAACA;SAAK;IACf;IAEA,KAAK,MAAMK,YAAYL,KAAM;QAC3B,IAAIM;QACJ,IAAIC;QACJ,IAAIF,QAAQ,CAAC,EAAE,KAAK,KAAK;YACvBC,eAAeD,SAASG,SAAS,CAAC;YAClCD,gBAAgB;QAClB,OAAO;YACLD,eAAeD;YACfE,gBAAgB;QAClB;QACA,IAAI;YACF,MAAM,EAAEE,YAAYC,mBAAmB,EAAEC,OAAOC,SAAS,EAAE,GAAGnB,uBAAuB;gBACnFE;gBACAkB,gBAAgBP;gBAChBV;gBACAC;gBACAC;gBACAgB,cAAcR,aAAaS,OAAO,CAAC,OAAO,KAAKC,KAAK,CAAC;gBACrDjB;gBACAE;gBACAgB,OAAOX;YACT;YACA,IAAIM,WAAW,CAACF,oBAAoB,EAAE;gBACpCR,QAAQgB,IAAI,CAAC;oBACXC,QAAQP,SAAS,CAACF,oBAAoB;oBACtCU,OAAOb,kBAAkB,QAAQhB,MAAMC;gBACzC;gBAEAO,YAAY,CAACW,oBAAoB,GAAGE,SAAS,CAACF,oBAAoB;YACpE;QACF,EAAE,OAAOW,KAAK;QACZ,WAAW;QACb;IACF;IAEA,OAAOnB;AACT,EAAC"}
@@ -1,29 +1,30 @@
1
- import type { SQL } from 'drizzle-orm';
1
+ import type { asc, desc, SQL } from 'drizzle-orm';
2
2
  import type { PgTableWithColumns } from 'drizzle-orm/pg-core';
3
- import type { Field, Where } from 'payload';
4
- import { asc, desc } from 'drizzle-orm';
3
+ import type { Field, Sort, Where } from 'payload';
5
4
  import type { DrizzleAdapter, GenericColumn, GenericTable } from '../types.js';
6
5
  export type BuildQueryJoinAliases = {
7
6
  condition: SQL;
8
7
  table: GenericTable | PgTableWithColumns<any>;
8
+ type?: 'innerJoin' | 'leftJoin' | 'rightJoin';
9
9
  }[];
10
10
  type BuildQueryArgs = {
11
11
  adapter: DrizzleAdapter;
12
12
  fields: Field[];
13
+ joins?: BuildQueryJoinAliases;
13
14
  locale?: string;
14
- sort?: string;
15
+ sort?: Sort;
15
16
  tableName: string;
16
17
  where: Where;
17
18
  };
18
- type Result = {
19
+ export type BuildQueryResult = {
19
20
  joins: BuildQueryJoinAliases;
20
21
  orderBy: {
21
22
  column: GenericColumn;
22
23
  order: typeof asc | typeof desc;
23
- };
24
+ }[];
24
25
  selectFields: Record<string, GenericColumn>;
25
26
  where: SQL;
26
27
  };
27
- declare const buildQuery: ({ adapter, fields, locale, sort, tableName, where: incomingWhere, }: BuildQueryArgs) => Promise<Result>;
28
+ declare const buildQuery: ({ adapter, fields, joins, locale, sort, tableName, where: incomingWhere, }: BuildQueryArgs) => BuildQueryResult;
28
29
  export default buildQuery;
29
30
  //# sourceMappingURL=buildQuery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildQuery.d.ts","sourceRoot":"","sources":["../../src/queries/buildQuery.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,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE3C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,GAAG,CAAA;IACd,KAAK,EAAE,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;CAC9C,EAAE,CAAA;AAEH,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,KAAK,EAAE,qBAAqB,CAAA;IAC5B,OAAO,EAAE;QACP,MAAM,EAAE,aAAa,CAAA;QACrB,KAAK,EAAE,OAAO,GAAG,GAAG,OAAO,IAAI,CAAA;KAChC,CAAA;IACD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,KAAK,EAAE,GAAG,CAAA;CACX,CAAA;AACD,QAAA,MAAM,UAAU,wEAOb,cAAc,KAAG,OAAO,CAAC,MAAM,CA2EjC,CAAA;AAED,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"buildQuery.d.ts","sourceRoot":"","sources":["../../src/queries/buildQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,GAAG,CAAA;IACd,KAAK,EAAE,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAC7C,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,CAAA;CAC9C,EAAE,CAAA;AAEH,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,qBAAqB,CAAA;IAC5B,OAAO,EAAE;QACP,MAAM,EAAE,aAAa,CAAA;QACrB,KAAK,EAAE,OAAO,GAAG,GAAG,OAAO,IAAI,CAAA;KAChC,EAAE,CAAA;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,KAAK,EAAE,GAAG,CAAA;CACX,CAAA;AACD,QAAA,MAAM,UAAU,+EAQb,cAAc,KAAG,gBAmCnB,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -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),
@@ -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}`,