@payloadcms/drizzle 4.0.0-internal.77191e5 → 4.0.0-internal.7b53b6d

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 (229) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +25 -3
  3. package/dist/count.js.map +1 -1
  4. package/dist/countVersions.d.ts.map +1 -1
  5. package/dist/countVersions.js +28 -4
  6. package/dist/countVersions.js.map +1 -1
  7. package/dist/createGlobalVersion.d.ts.map +1 -1
  8. package/dist/createGlobalVersion.js +15 -2
  9. package/dist/createGlobalVersion.js.map +1 -1
  10. package/dist/createVersion.d.ts.map +1 -1
  11. package/dist/createVersion.js +12 -1
  12. package/dist/createVersion.js.map +1 -1
  13. package/dist/deleteBranchGlobal.d.ts +10 -0
  14. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  15. package/dist/deleteBranchGlobal.js +27 -0
  16. package/dist/deleteBranchGlobal.js.map +1 -0
  17. package/dist/deleteOne.d.ts.map +1 -1
  18. package/dist/deleteOne.js +18 -1
  19. package/dist/deleteOne.js.map +1 -1
  20. package/dist/exports/postgres.d.ts +2 -1
  21. package/dist/exports/postgres.d.ts.map +1 -1
  22. package/dist/exports/postgres.js +2 -1
  23. package/dist/exports/postgres.js.map +1 -1
  24. package/dist/exports/sqlite.d.ts +2 -1
  25. package/dist/exports/sqlite.d.ts.map +1 -1
  26. package/dist/exports/sqlite.js +2 -1
  27. package/dist/exports/sqlite.js.map +1 -1
  28. package/dist/find/buildFindManyArgs.d.ts +3 -2
  29. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  30. package/dist/find/buildFindManyArgs.js +2 -1
  31. package/dist/find/buildFindManyArgs.js.map +1 -1
  32. package/dist/find/buildPolymorphicJoinQuery.d.ts +5 -3
  33. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -1
  34. package/dist/find/buildPolymorphicJoinQuery.js +43 -15
  35. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -1
  36. package/dist/find/buildPolymorphicJoinWhere.js +1 -1
  37. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -1
  38. package/dist/find/createPolymorphicJoinWherePlan.d.ts +2 -1
  39. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -1
  40. package/dist/find/createPolymorphicJoinWherePlan.js +14 -5
  41. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -1
  42. package/dist/find/findMany.d.ts +6 -1
  43. package/dist/find/findMany.d.ts.map +1 -1
  44. package/dist/find/findMany.js +16 -3
  45. package/dist/find/findMany.js.map +1 -1
  46. package/dist/find/traverseFields.d.ts +3 -2
  47. package/dist/find/traverseFields.d.ts.map +1 -1
  48. package/dist/find/traverseFields.js +55 -7
  49. package/dist/find/traverseFields.js.map +1 -1
  50. package/dist/find.d.ts.map +1 -1
  51. package/dist/find.js +32 -4
  52. package/dist/find.js.map +1 -1
  53. package/dist/findDistinct.d.ts.map +1 -1
  54. package/dist/findDistinct.js +107 -8
  55. package/dist/findDistinct.js.map +1 -1
  56. package/dist/findGlobal.d.ts.map +1 -1
  57. package/dist/findGlobal.js +22 -5
  58. package/dist/findGlobal.js.map +1 -1
  59. package/dist/findGlobalVersions.js +8 -3
  60. package/dist/findGlobalVersions.js.map +1 -1
  61. package/dist/findOne.d.ts +1 -1
  62. package/dist/findOne.d.ts.map +1 -1
  63. package/dist/findOne.js +30 -3
  64. package/dist/findOne.js.map +1 -1
  65. package/dist/findVersions.d.ts.map +1 -1
  66. package/dist/findVersions.js +32 -5
  67. package/dist/findVersions.js.map +1 -1
  68. package/dist/index.d.ts +3 -8
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +3 -8
  71. package/dist/index.js.map +1 -1
  72. package/dist/migrate.d.ts.map +1 -1
  73. package/dist/migrate.js +6 -2
  74. package/dist/migrate.js.map +1 -1
  75. package/dist/migrateDown.d.ts.map +1 -1
  76. package/dist/migrateDown.js +5 -2
  77. package/dist/migrateDown.js.map +1 -1
  78. package/dist/migrateFresh.d.ts.map +1 -1
  79. package/dist/migrateFresh.js +5 -2
  80. package/dist/migrateFresh.js.map +1 -1
  81. package/dist/migrateRefresh.d.ts.map +1 -1
  82. package/dist/migrateRefresh.js +6 -2
  83. package/dist/migrateRefresh.js.map +1 -1
  84. package/dist/migrateReset.d.ts.map +1 -1
  85. package/dist/migrateReset.js +6 -2
  86. package/dist/migrateReset.js.map +1 -1
  87. package/dist/postgres/insert.d.ts.map +1 -1
  88. package/dist/postgres/insert.js +4 -2
  89. package/dist/postgres/insert.js.map +1 -1
  90. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  91. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  92. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  93. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  94. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  95. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  96. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  97. package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
  98. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  99. package/dist/postgres/requireDrizzleKit.d.ts +4 -0
  100. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
  101. package/dist/postgres/requireDrizzleKit.js +16 -10
  102. package/dist/postgres/requireDrizzleKit.js.map +1 -1
  103. package/dist/postgres/types.d.ts +4 -0
  104. package/dist/postgres/types.d.ts.map +1 -1
  105. package/dist/postgres/types.js.map +1 -1
  106. package/dist/queries/buildAndOrConditions.d.ts +3 -2
  107. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  108. package/dist/queries/buildAndOrConditions.js +2 -1
  109. package/dist/queries/buildAndOrConditions.js.map +1 -1
  110. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  111. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  112. package/dist/queries/buildBranchVisibility.js +48 -0
  113. package/dist/queries/buildBranchVisibility.js.map +1 -0
  114. package/dist/queries/buildOrderBy.d.ts +3 -2
  115. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  116. package/dist/queries/buildOrderBy.js +2 -1
  117. package/dist/queries/buildOrderBy.js.map +1 -1
  118. package/dist/queries/buildQuery.d.ts +3 -2
  119. package/dist/queries/buildQuery.d.ts.map +1 -1
  120. package/dist/queries/buildQuery.js +4 -2
  121. package/dist/queries/buildQuery.js.map +1 -1
  122. package/dist/queries/getTableColumnFromPath.d.ts +3 -2
  123. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  124. package/dist/queries/getTableColumnFromPath.js +166 -27
  125. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  126. package/dist/queries/parseParams.d.ts +3 -2
  127. package/dist/queries/parseParams.d.ts.map +1 -1
  128. package/dist/queries/parseParams.js +4 -1
  129. package/dist/queries/parseParams.js.map +1 -1
  130. package/dist/queryDrafts.d.ts.map +1 -1
  131. package/dist/queryDrafts.js +23 -4
  132. package/dist/queryDrafts.js.map +1 -1
  133. package/dist/schema/build.d.ts.map +1 -1
  134. package/dist/schema/build.js +23 -20
  135. package/dist/schema/build.js.map +1 -1
  136. package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
  137. package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
  138. package/dist/sqlite/createRequireDrizzleKit.js +15 -0
  139. package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
  140. package/dist/sqlite/execute.js.map +1 -1
  141. package/dist/sqlite/insert.d.ts.map +1 -1
  142. package/dist/sqlite/insert.js +9 -4
  143. package/dist/sqlite/insert.js.map +1 -1
  144. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  145. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  146. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  147. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  148. package/dist/sqlite/types.d.ts +4 -0
  149. package/dist/sqlite/types.d.ts.map +1 -1
  150. package/dist/sqlite/types.js.map +1 -1
  151. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  152. package/dist/transactions/beginTransaction.js +13 -5
  153. package/dist/transactions/beginTransaction.js.map +1 -1
  154. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  155. package/dist/transactions/commitTransaction.js +1 -5
  156. package/dist/transactions/commitTransaction.js.map +1 -1
  157. package/dist/transform/read/traverseFields.js.map +1 -1
  158. package/dist/transform/write/array.d.ts +3 -2
  159. package/dist/transform/write/array.d.ts.map +1 -1
  160. package/dist/transform/write/array.js +2 -1
  161. package/dist/transform/write/array.js.map +1 -1
  162. package/dist/transform/write/blocks.d.ts +3 -2
  163. package/dist/transform/write/blocks.d.ts.map +1 -1
  164. package/dist/transform/write/blocks.js +2 -1
  165. package/dist/transform/write/blocks.js.map +1 -1
  166. package/dist/transform/write/index.d.ts.map +1 -1
  167. package/dist/transform/write/index.js +2 -0
  168. package/dist/transform/write/index.js.map +1 -1
  169. package/dist/transform/write/traverseFields.d.ts +2 -1
  170. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  171. package/dist/transform/write/traverseFields.js +32 -6
  172. package/dist/transform/write/traverseFields.js.map +1 -1
  173. package/dist/transform/write/types.d.ts +7 -0
  174. package/dist/transform/write/types.d.ts.map +1 -1
  175. package/dist/transform/write/types.js.map +1 -1
  176. package/dist/types.d.ts +3 -2
  177. package/dist/types.d.ts.map +1 -1
  178. package/dist/types.js.map +1 -1
  179. package/dist/updateGlobal.d.ts +5 -1
  180. package/dist/updateGlobal.d.ts.map +1 -1
  181. package/dist/updateGlobal.js +96 -4
  182. package/dist/updateGlobal.js.map +1 -1
  183. package/dist/updateOne.d.ts.map +1 -1
  184. package/dist/updateOne.js +47 -5
  185. package/dist/updateOne.js.map +1 -1
  186. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  187. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  188. package/dist/upsertBranchGlobalChange.js +35 -0
  189. package/dist/upsertBranchGlobalChange.js.map +1 -0
  190. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  191. package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
  192. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  193. package/dist/upsertRow/index.d.ts +1 -1
  194. package/dist/upsertRow/index.d.ts.map +1 -1
  195. package/dist/upsertRow/index.js +132 -42
  196. package/dist/upsertRow/index.js.map +1 -1
  197. package/dist/upsertRow/types.d.ts +3 -0
  198. package/dist/upsertRow/types.d.ts.map +1 -1
  199. package/dist/upsertRow/types.js.map +1 -1
  200. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  201. package/dist/utilities/blocksToJsonMigrator.js +7 -18
  202. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  203. package/dist/utilities/buildCreateMigration.js +1 -1
  204. package/dist/utilities/buildCreateMigration.js.map +1 -1
  205. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  206. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  207. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  208. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  209. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  210. package/dist/utilities/createSchemaGenerator.js +7 -12
  211. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  212. package/dist/utilities/executeSchemaHooks.js +1 -1
  213. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  214. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  215. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  216. package/dist/utilities/formatGeneratedFile.js +58 -0
  217. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  218. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  219. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  220. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  221. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  222. package/dist/utilities/getTransaction.js.map +1 -1
  223. package/dist/utilities/pushDevSchema.js +1 -1
  224. package/dist/utilities/pushDevSchema.js.map +1 -1
  225. package/package.json +17 -19
  226. package/dist/sqlite/requireDrizzleKit.d.ts +0 -3
  227. package/dist/sqlite/requireDrizzleKit.d.ts.map +0 -1
  228. package/dist/sqlite/requireDrizzleKit.js +0 -12
  229. package/dist/sqlite/requireDrizzleKit.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildOrderBy.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { FlattenedField, 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 { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized: boolean\n rawSort?: SQL\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 aliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n rawSort,\n selectFields,\n sort,\n tableName,\n}: Args): BuildQueryResult['orderBy'] => {\n const orderBy: BuildQueryResult['orderBy'] = []\n\n const createdAt = adapter.tables[tableName]?.createdAt\n\n if (!sort) {\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 // In the case of Mongo, when sorting by a field that is not unique, the results are not guaranteed to be in the same order each time.\n // So we add a fallback sort to ensure that the results are always in the same order.\n let fallbackSort = '-id'\n\n if (createdAt) {\n fallbackSort = '-createdAt'\n }\n\n if (!(sort.includes(fallbackSort) || sort.includes(fallbackSort.replace('-', '')))) {\n sort.push(fallbackSort)\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 parentIsLocalized,\n pathSegments: sortProperty.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: sortProperty,\n })\n if (sortTable?.[sortTableColumnName]) {\n let order = sortDirection === 'asc' ? asc : desc\n\n if (rawSort) {\n order = () => rawSort\n }\n\n orderBy.push({\n column:\n aliasTable && tableName === getNameFromDrizzleTable(sortTable)\n ? aliasTable[sortTableColumnName]\n : sortTable[sortTableColumnName],\n order,\n })\n\n // Only add to selectFields if not already present (avoid duplicates from getTableColumnFromPath)\n const columnToAdd = sortTable[sortTableColumnName]\n const alreadyExists = Object.values(selectFields).some((col) => col === columnToAdd)\n if (!alreadyExists) {\n selectFields[sortTableColumnName] = columnToAdd\n }\n }\n } catch (_) {\n // continue\n }\n }\n\n return orderBy\n}\n"],"names":["asc","desc","getNameFromDrizzleTable","getTableColumnFromPath","buildOrderBy","adapter","aliasTable","fields","joins","locale","parentIsLocalized","rawSort","selectFields","sort","tableName","orderBy","createdAt","tables","fallbackSort","includes","replace","push","sortItem","sortProperty","sortDirection","substring","columnName","sortTableColumnName","table","sortTable","collectionPath","pathSegments","split","value","order","column","columnToAdd","alreadyExists","Object","values","some","col","_"],"mappings":"AAGA,SAASA,GAAG,EAAEC,IAAI,QAAQ,cAAa;AAKvC,SAASC,uBAAuB,QAAQ,0CAAyC;AACjF,SAASC,sBAAsB,QAAQ,8BAA6B;AAepE;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,YAAY,EACZC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,UAAuC,EAAE;IAE/C,MAAMC,YAAYX,QAAQY,MAAM,CAACH,UAAU,EAAEE;IAE7C,IAAI,CAACH,MAAM;QACT,IAAIG,WAAW;YACbH,OAAO;QACT,OAAO;YACLA,OAAO;QACT;IACF;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5BA,OAAO;YAACA;SAAK;IACf;IAEA,sIAAsI;IACtI,qFAAqF;IACrF,IAAIK,eAAe;IAEnB,IAAIF,WAAW;QACbE,eAAe;IACjB;IAEA,IAAI,CAAEL,CAAAA,KAAKM,QAAQ,CAACD,iBAAiBL,KAAKM,QAAQ,CAACD,aAAaE,OAAO,CAAC,KAAK,IAAG,GAAI;QAClFP,KAAKQ,IAAI,CAACH;IACZ;IAEA,KAAK,MAAMI,YAAYT,KAAM;QAC3B,IAAIU;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,GAAG1B,uBAAuB;gBACnFE;gBACAyB,gBAAgBP;gBAChBhB;gBACAC;gBACAC;gBACAC;gBACAqB,cAAcR,aAAaH,OAAO,CAAC,OAAO,KAAKY,KAAK,CAAC;gBACrDpB;gBACAE;gBACAmB,OAAOV;YACT;YACA,IAAIM,WAAW,CAACF,oBAAoB,EAAE;gBACpC,IAAIO,QAAQV,kBAAkB,QAAQxB,MAAMC;gBAE5C,IAAIU,SAAS;oBACXuB,QAAQ,IAAMvB;gBAChB;gBAEAI,QAAQM,IAAI,CAAC;oBACXc,QACE7B,cAAcQ,cAAcZ,wBAAwB2B,aAChDvB,UAAU,CAACqB,oBAAoB,GAC/BE,SAAS,CAACF,oBAAoB;oBACpCO;gBACF;gBAEA,iGAAiG;gBACjG,MAAME,cAAcP,SAAS,CAACF,oBAAoB;gBAClD,MAAMU,gBAAgBC,OAAOC,MAAM,CAAC3B,cAAc4B,IAAI,CAAC,CAACC,MAAQA,QAAQL;gBACxE,IAAI,CAACC,eAAe;oBAClBzB,YAAY,CAACe,oBAAoB,GAAGS;gBACtC;YACF;QACF,EAAE,OAAOM,GAAG;QACV,WAAW;QACb;IACF;IAEA,OAAO3B;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/queries/buildOrderBy.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { FlattenedField, PayloadRequest, 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 { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized: boolean\n rawSort?: SQL\n req?: Partial<PayloadRequest>\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 aliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n rawSort,\n req,\n selectFields,\n sort,\n tableName,\n}: Args): BuildQueryResult['orderBy'] => {\n const orderBy: BuildQueryResult['orderBy'] = []\n\n const createdAt = adapter.tables[tableName]?.createdAt\n\n if (!sort) {\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 // In the case of Mongo, when sorting by a field that is not unique, the results are not guaranteed to be in the same order each time.\n // So we add a fallback sort to ensure that the results are always in the same order.\n let fallbackSort = '-id'\n\n if (createdAt) {\n fallbackSort = '-createdAt'\n }\n\n if (!(sort.includes(fallbackSort) || sort.includes(fallbackSort.replace('-', '')))) {\n sort.push(fallbackSort)\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 parentIsLocalized,\n pathSegments: sortProperty.replace(/__/g, '.').split('.'),\n req,\n selectFields,\n tableName,\n value: sortProperty,\n })\n if (sortTable?.[sortTableColumnName]) {\n let order = sortDirection === 'asc' ? asc : desc\n\n if (rawSort) {\n order = () => rawSort\n }\n\n orderBy.push({\n column:\n aliasTable && tableName === getNameFromDrizzleTable(sortTable)\n ? aliasTable[sortTableColumnName]\n : sortTable[sortTableColumnName],\n order,\n })\n\n // Only add to selectFields if not already present (avoid duplicates from getTableColumnFromPath)\n const columnToAdd = sortTable[sortTableColumnName]\n const alreadyExists = Object.values(selectFields).some((col) => col === columnToAdd)\n if (!alreadyExists) {\n selectFields[sortTableColumnName] = columnToAdd\n }\n }\n } catch (_) {\n // continue\n }\n }\n\n return orderBy\n}\n"],"names":["asc","desc","getNameFromDrizzleTable","getTableColumnFromPath","buildOrderBy","adapter","aliasTable","fields","joins","locale","parentIsLocalized","rawSort","req","selectFields","sort","tableName","orderBy","createdAt","tables","fallbackSort","includes","replace","push","sortItem","sortProperty","sortDirection","substring","columnName","sortTableColumnName","table","sortTable","collectionPath","pathSegments","split","value","order","column","columnToAdd","alreadyExists","Object","values","some","col","_"],"mappings":"AAGA,SAASA,GAAG,EAAEC,IAAI,QAAQ,cAAa;AAKvC,SAASC,uBAAuB,QAAQ,0CAAyC;AACjF,SAASC,sBAAsB,QAAQ,8BAA6B;AAgBpE;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,GAAG,EACHC,YAAY,EACZC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,UAAuC,EAAE;IAE/C,MAAMC,YAAYZ,QAAQa,MAAM,CAACH,UAAU,EAAEE;IAE7C,IAAI,CAACH,MAAM;QACT,IAAIG,WAAW;YACbH,OAAO;QACT,OAAO;YACLA,OAAO;QACT;IACF;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5BA,OAAO;YAACA;SAAK;IACf;IAEA,sIAAsI;IACtI,qFAAqF;IACrF,IAAIK,eAAe;IAEnB,IAAIF,WAAW;QACbE,eAAe;IACjB;IAEA,IAAI,CAAEL,CAAAA,KAAKM,QAAQ,CAACD,iBAAiBL,KAAKM,QAAQ,CAACD,aAAaE,OAAO,CAAC,KAAK,IAAG,GAAI;QAClFP,KAAKQ,IAAI,CAACH;IACZ;IAEA,KAAK,MAAMI,YAAYT,KAAM;QAC3B,IAAIU;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,GAAG3B,uBAAuB;gBACnFE;gBACA0B,gBAAgBP;gBAChBjB;gBACAC;gBACAC;gBACAC;gBACAsB,cAAcR,aAAaH,OAAO,CAAC,OAAO,KAAKY,KAAK,CAAC;gBACrDrB;gBACAC;gBACAE;gBACAmB,OAAOV;YACT;YACA,IAAIM,WAAW,CAACF,oBAAoB,EAAE;gBACpC,IAAIO,QAAQV,kBAAkB,QAAQzB,MAAMC;gBAE5C,IAAIU,SAAS;oBACXwB,QAAQ,IAAMxB;gBAChB;gBAEAK,QAAQM,IAAI,CAAC;oBACXc,QACE9B,cAAcS,cAAcb,wBAAwB4B,aAChDxB,UAAU,CAACsB,oBAAoB,GAC/BE,SAAS,CAACF,oBAAoB;oBACpCO;gBACF;gBAEA,iGAAiG;gBACjG,MAAME,cAAcP,SAAS,CAACF,oBAAoB;gBAClD,MAAMU,gBAAgBC,OAAOC,MAAM,CAAC3B,cAAc4B,IAAI,CAAC,CAACC,MAAQA,QAAQL;gBACxE,IAAI,CAACC,eAAe;oBAClBzB,YAAY,CAACe,oBAAoB,GAAGS;gBACtC;YACF;QACF,EAAE,OAAOM,GAAG;QACV,WAAW;QACb;IACF;IAEA,OAAO3B;AACT,EAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { asc, desc, SQL, Table } from 'drizzle-orm';
2
2
  import type { PgTableWithColumns } from 'drizzle-orm/pg-core';
3
- import type { FlattenedField, Sort, Where } from 'payload';
3
+ import type { FlattenedField, PayloadRequest, Sort, Where } from 'payload';
4
4
  import type { DrizzleAdapter, GenericColumn, GenericTable } from '../types.js';
5
5
  export type BuildQueryJoinAliases = {
6
6
  condition: SQL;
@@ -16,6 +16,7 @@ type BuildQueryArgs = {
16
16
  joins?: BuildQueryJoinAliases;
17
17
  locale?: string;
18
18
  parentIsLocalized?: boolean;
19
+ req?: Partial<PayloadRequest>;
19
20
  selectLocale?: boolean;
20
21
  sort?: Sort;
21
22
  tableName: string;
@@ -30,6 +31,6 @@ export type BuildQueryResult = {
30
31
  selectFields: Record<string, GenericColumn>;
31
32
  where: SQL;
32
33
  };
33
- export declare const buildQuery: ({ adapter, aliasTable, fields, joins, locale, parentIsLocalized, selectLocale, sort, tableName, where: incomingWhere, }: BuildQueryArgs) => BuildQueryResult;
34
+ export declare const buildQuery: ({ adapter, aliasTable, fields, joins, locale, parentIsLocalized, req, selectLocale, sort, tableName, where: incomingWhere, }: BuildQueryArgs) => BuildQueryResult;
34
35
  export {};
35
36
  //# 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,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAM9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,GAAG,CAAA;IAEd,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,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,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,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;AAED,eAAO,MAAM,UAAU,4HAWpB,cAAc,KAAG,gBA2CnB,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,KAAK,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAM9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,GAAG,CAAA;IAEd,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,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,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,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;AAED,eAAO,MAAM,UAAU,iIAYpB,cAAc,KAAG,gBA6CnB,CAAA"}
@@ -1,8 +1,8 @@
1
1
  import { buildOrderBy } from './buildOrderBy.js';
2
2
  import { parseParams } from './parseParams.js';
3
- export const buildQuery = function buildQuery({ adapter, aliasTable, fields, joins = [], locale, parentIsLocalized, selectLocale, sort, tableName, where: incomingWhere }) {
3
+ export const buildQuery = function buildQuery({ adapter, aliasTable, fields, joins = [], locale, parentIsLocalized, req, selectLocale, sort, tableName, where: incomingWhere }) {
4
4
  const selectFields = {
5
- id: adapter.tables[tableName].id
5
+ id: (aliasTable ?? adapter.tables[tableName])['id']
6
6
  };
7
7
  let where;
8
8
  const context = {
@@ -17,6 +17,7 @@ export const buildQuery = function buildQuery({ adapter, aliasTable, fields, joi
17
17
  joins,
18
18
  locale,
19
19
  parentIsLocalized,
20
+ req,
20
21
  selectFields,
21
22
  selectLocale,
22
23
  tableName,
@@ -31,6 +32,7 @@ export const buildQuery = function buildQuery({ adapter, aliasTable, fields, joi
31
32
  locale,
32
33
  parentIsLocalized,
33
34
  rawSort: context.rawSort,
35
+ req,
34
36
  selectFields,
35
37
  sort: context.sort,
36
38
  tableName
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildQuery.ts"],"sourcesContent":["import type { asc, desc, SQL, Table } from 'drizzle-orm'\nimport type { PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport type { FlattenedField, Sort, Where } from 'payload'\n\nimport type { DrizzleAdapter, GenericColumn, GenericTable } from '../types.js'\nimport type { QueryContext } from './parseParams.js'\n\nimport { buildOrderBy } from './buildOrderBy.js'\nimport { parseParams } from './parseParams.js'\n\nexport type BuildQueryJoinAliases = {\n condition: SQL\n // with parent\n isOneToMany?: boolean\n queryPath?: string\n table: GenericTable | PgTableWithColumns<any>\n type?: 'innerJoin' | 'leftJoin' | 'rightJoin'\n}[]\n\ntype BuildQueryArgs = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n joins?: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized?: boolean\n selectLocale?: boolean\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}\n\nexport const buildQuery = function buildQuery({\n adapter,\n aliasTable,\n fields,\n joins = [],\n locale,\n parentIsLocalized,\n selectLocale,\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 let where: SQL\n\n const context: QueryContext = { sort }\n if (incomingWhere && Object.keys(incomingWhere).length > 0) {\n where = parseParams({\n adapter,\n aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n selectFields,\n selectLocale,\n tableName,\n where: incomingWhere,\n })\n }\n\n const orderBy = buildOrderBy({\n adapter,\n aliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n rawSort: context.rawSort,\n selectFields,\n sort: context.sort,\n tableName,\n })\n\n return {\n joins,\n orderBy,\n selectFields,\n where,\n }\n}\n"],"names":["buildOrderBy","parseParams","buildQuery","adapter","aliasTable","fields","joins","locale","parentIsLocalized","selectLocale","sort","tableName","where","incomingWhere","selectFields","id","tables","context","Object","keys","length","orderBy","rawSort"],"mappings":"AAOA,SAASA,YAAY,QAAQ,oBAAmB;AAChD,SAASC,WAAW,QAAQ,mBAAkB;AAkC9C,OAAO,MAAMC,aAAa,SAASA,WAAW,EAC5CC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,QAAQ,EAAE,EACVC,MAAM,EACNC,iBAAiB,EACjBC,YAAY,EACZC,IAAI,EACJC,SAAS,EACTC,OAAOC,aAAa,EACL;IACf,MAAMC,eAA8C;QAClDC,IAAIZ,QAAQa,MAAM,CAACL,UAAU,CAACI,EAAE;IAClC;IAEA,IAAIH;IAEJ,MAAMK,UAAwB;QAAEP;IAAK;IACrC,IAAIG,iBAAiBK,OAAOC,IAAI,CAACN,eAAeO,MAAM,GAAG,GAAG;QAC1DR,QAAQX,YAAY;YAClBE;YACAC;YACAa;YACAZ;YACAC;YACAC;YACAC;YACAM;YACAL;YACAE;YACAC,OAAOC;QACT;IACF;IAEA,MAAMQ,UAAUrB,aAAa;QAC3BG;QACAC;QACAC;QACAC;QACAC;QACAC;QACAc,SAASL,QAAQK,OAAO;QACxBR;QACAJ,MAAMO,QAAQP,IAAI;QAClBC;IACF;IAEA,OAAO;QACLL;QACAe;QACAP;QACAF;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/queries/buildQuery.ts"],"sourcesContent":["import type { asc, desc, SQL, Table } from 'drizzle-orm'\nimport type { PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport type { FlattenedField, PayloadRequest, Sort, Where } from 'payload'\n\nimport type { DrizzleAdapter, GenericColumn, GenericTable } from '../types.js'\nimport type { QueryContext } from './parseParams.js'\n\nimport { buildOrderBy } from './buildOrderBy.js'\nimport { parseParams } from './parseParams.js'\n\nexport type BuildQueryJoinAliases = {\n condition: SQL\n // with parent\n isOneToMany?: boolean\n queryPath?: string\n table: GenericTable | PgTableWithColumns<any>\n type?: 'innerJoin' | 'leftJoin' | 'rightJoin'\n}[]\n\ntype BuildQueryArgs = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n joins?: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized?: boolean\n req?: Partial<PayloadRequest>\n selectLocale?: boolean\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}\n\nexport const buildQuery = function buildQuery({\n adapter,\n aliasTable,\n fields,\n joins = [],\n locale,\n parentIsLocalized,\n req,\n selectLocale,\n sort,\n tableName,\n where: incomingWhere,\n}: BuildQueryArgs): BuildQueryResult {\n const selectFields: Record<string, GenericColumn> = {\n id: (aliasTable ?? adapter.tables[tableName])['id'],\n }\n\n let where: SQL\n\n const context: QueryContext = { sort }\n if (incomingWhere && Object.keys(incomingWhere).length > 0) {\n where = parseParams({\n adapter,\n aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n req,\n selectFields,\n selectLocale,\n tableName,\n where: incomingWhere,\n })\n }\n\n const orderBy = buildOrderBy({\n adapter,\n aliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n rawSort: context.rawSort,\n req,\n selectFields,\n sort: context.sort,\n tableName,\n })\n\n return {\n joins,\n orderBy,\n selectFields,\n where,\n }\n}\n"],"names":["buildOrderBy","parseParams","buildQuery","adapter","aliasTable","fields","joins","locale","parentIsLocalized","req","selectLocale","sort","tableName","where","incomingWhere","selectFields","id","tables","context","Object","keys","length","orderBy","rawSort"],"mappings":"AAOA,SAASA,YAAY,QAAQ,oBAAmB;AAChD,SAASC,WAAW,QAAQ,mBAAkB;AAmC9C,OAAO,MAAMC,aAAa,SAASA,WAAW,EAC5CC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,QAAQ,EAAE,EACVC,MAAM,EACNC,iBAAiB,EACjBC,GAAG,EACHC,YAAY,EACZC,IAAI,EACJC,SAAS,EACTC,OAAOC,aAAa,EACL;IACf,MAAMC,eAA8C;QAClDC,IAAI,AAACZ,CAAAA,cAAcD,QAAQc,MAAM,CAACL,UAAU,AAAD,CAAE,CAAC,KAAK;IACrD;IAEA,IAAIC;IAEJ,MAAMK,UAAwB;QAAEP;IAAK;IACrC,IAAIG,iBAAiBK,OAAOC,IAAI,CAACN,eAAeO,MAAM,GAAG,GAAG;QAC1DR,QAAQZ,YAAY;YAClBE;YACAC;YACAc;YACAb;YACAC;YACAC;YACAC;YACAC;YACAM;YACAL;YACAE;YACAC,OAAOC;QACT;IACF;IAEA,MAAMQ,UAAUtB,aAAa;QAC3BG;QACAC;QACAC;QACAC;QACAC;QACAC;QACAe,SAASL,QAAQK,OAAO;QACxBd;QACAM;QACAJ,MAAMO,QAAQP,IAAI;QAClBC;IACF;IAEA,OAAO;QACLN;QACAgB;QACAP;QACAF;IACF;AACF,EAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { SQL } from 'drizzle-orm';
2
2
  import type { SQLiteTableWithColumns } from 'drizzle-orm/sqlite-core';
3
- import type { FlattenedField } from 'payload';
3
+ import type { FlattenedField, PayloadRequest } from 'payload';
4
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';
@@ -37,6 +37,7 @@ type Args = {
37
37
  parentAliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>;
38
38
  parentIsLocalized: boolean;
39
39
  pathSegments: string[];
40
+ req?: Partial<PayloadRequest>;
40
41
  rootTableName?: string;
41
42
  selectFields: Record<string, GenericColumn>;
42
43
  selectLocale?: boolean;
@@ -62,6 +63,6 @@ type Args = {
62
63
  *
63
64
  * @returns The final field and column, plus any extra constraints discovered while resolving it.
64
65
  */
65
- export declare const getTableColumnFromPath: ({ adapter, aliasTable, collectionPath, columnPrefix, constraintPath: incomingConstraintPath, constraints, fields, joins, locale: incomingLocale, parentAliasTable, parentIsLocalized, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, selectLocale, tableName, tableNameSuffix, value, }: Args) => TableColumn;
66
+ export declare const getTableColumnFromPath: ({ adapter, aliasTable, collectionPath, columnPrefix, constraintPath: incomingConstraintPath, constraints, fields, joins, locale: incomingLocale, parentAliasTable, parentIsLocalized, pathSegments: incomingSegments, req, rootTableName: incomingRootTableName, selectFields, selectLocale, tableName, tableNameSuffix, value, }: Args) => TableColumn;
66
67
  export {};
67
68
  //# sourceMappingURL=getTableColumnFromPath.d.ts.map
@@ -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,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,KAAK,EAEV,cAAc,EAIf,MAAM,SAAS,CAAA;AAGhB,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;AAW5D,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,cAAc,CAAA;IACrB,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,8FAA8F;IAC9F,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,EAAE,CAAA;IACxB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IACxE,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AACD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,iUAmBhC,IAAI,KAAG,WAy9BT,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,EAEV,cAAc,EAEd,cAAc,EAIf,MAAM,SAAS,CAAA;AAGhB,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;AAY5D,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,cAAc,CAAA;IACrB,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,8FAA8F;IAC9F,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,EAAE,CAAA;IACxB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IACxE,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAsGD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,sUAoBhC,IAAI,KAAG,WAwiCT,CAAA"}
@@ -1,5 +1,5 @@
1
- import { and, eq, getTableName, like, sql } from 'drizzle-orm';
2
- import { APIError, getFieldByPath } from 'payload';
1
+ import { and, eq, getTableName, isNull, like, notInArray, or, sql } from 'drizzle-orm';
2
+ import { APIError, getBranchPredicateSync, getFieldByPath, resolveBranchReadState } from 'payload';
3
3
  import { fieldShouldBeLocalized, tabHasName } from 'payload/shared';
4
4
  import toSnakeCase from 'to-snake-case';
5
5
  import { validate as uuidValidate } from 'uuid';
@@ -9,8 +9,77 @@ import { jsonBuildObject } from '../utilities/json.js';
9
9
  import { DistinctSymbol } from '../utilities/rawConstraint.js';
10
10
  import { resolveBlockTableName } from '../utilities/validateExistingBlockIsIdentical.js';
11
11
  import { addJoinTable } from './addJoinTable.js';
12
+ import { buildBranchVisibility } from './buildBranchVisibility.js';
12
13
  import { getTableAlias } from './getTableAlias.js';
13
14
  import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRelationshipPath.js';
15
+ const getRelationshipJoinCondition = ({ adapter, collectionSlug, relationshipID, req, table, value })=>{
16
+ const branchReadState = resolveBranchReadState({
17
+ collectionSlug,
18
+ req
19
+ });
20
+ const branchPredicate = branchReadState.useBranching ? null : getBranchPredicateSync({
21
+ collectionSlug,
22
+ req
23
+ });
24
+ const shouldMatchCanonicalID = Boolean(table._branchDocID && (branchReadState.useBranching || branchPredicate || value === DistinctSymbol));
25
+ const identityCondition = shouldMatchCanonicalID ? or(eq(table.id, relationshipID), eq(table._branchDocID, relationshipID)) : eq(table.id, relationshipID);
26
+ const branchCondition = getBranchTableCondition({
27
+ adapter,
28
+ collectionSlug,
29
+ req,
30
+ table
31
+ });
32
+ return branchCondition ? and(identityCondition, branchCondition) : identityCondition;
33
+ };
34
+ const getBranchTableCondition = ({ adapter, collectionSlug, req, table })=>{
35
+ const branchReadState = resolveBranchReadState({
36
+ collectionSlug,
37
+ req
38
+ });
39
+ if (branchReadState.useBranching) {
40
+ return buildBranchVisibility({
41
+ adapter,
42
+ branch: branchReadState.branch,
43
+ collectionSlug,
44
+ table
45
+ });
46
+ }
47
+ const branchPredicate = getBranchPredicateSync({
48
+ collectionSlug,
49
+ req
50
+ });
51
+ return branchPredicate ? buildBranchPredicateCondition({
52
+ table,
53
+ where: branchPredicate
54
+ }) : undefined;
55
+ };
56
+ const buildBranchPredicateCondition = ({ table, where })=>{
57
+ const conditions = [];
58
+ for (const [fieldName, condition] of Object.entries(where)){
59
+ if ((fieldName === 'and' || fieldName === 'or') && Array.isArray(condition)) {
60
+ const nestedConditions = condition.map((nestedWhere)=>buildBranchPredicateCondition({
61
+ table,
62
+ where: nestedWhere
63
+ })).filter((nestedCondition)=>Boolean(nestedCondition));
64
+ const nestedResult = fieldName === 'and' ? and(...nestedConditions) : or(...nestedConditions);
65
+ if (nestedResult) {
66
+ conditions.push(nestedResult);
67
+ }
68
+ continue;
69
+ }
70
+ const column = table[fieldName];
71
+ if (!column || !condition || typeof condition !== 'object') {
72
+ continue;
73
+ }
74
+ if ('equals' in condition) {
75
+ conditions.push(condition.equals === null ? isNull(column) : eq(column, condition.equals));
76
+ }
77
+ if ('not_in' in condition && Array.isArray(condition.not_in) && condition.not_in.length > 0) {
78
+ conditions.push(notInArray(column, condition.not_in));
79
+ }
80
+ }
81
+ return conditions.length === 1 ? conditions[0] : and(...conditions);
82
+ };
14
83
  /**
15
84
  * Resolves a field path to the database table and column that store its value.
16
85
  *
@@ -22,7 +91,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
22
91
  * to the `movies` table. The returned column is `movies.name`.
23
92
  *
24
93
  * @returns The final field and column, plus any extra constraints discovered while resolving it.
25
- */ export const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraintPath: incomingConstraintPath, constraints = [], fields, joins, locale: incomingLocale, parentAliasTable, parentIsLocalized, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, selectLocale, tableName, tableNameSuffix = '', value })=>{
94
+ */ export const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraintPath: incomingConstraintPath, constraints = [], fields, joins, locale: incomingLocale, parentAliasTable, parentIsLocalized, pathSegments: incomingSegments, req, rootTableName: incomingRootTableName, selectFields, selectLocale, tableName, tableNameSuffix = '', value })=>{
26
95
  const fieldPath = incomingSegments[0];
27
96
  let locale = incomingLocale;
28
97
  const rootTableName = incomingRootTableName || tableName;
@@ -31,7 +100,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
31
100
  const field = fields.find((fieldToFind)=>fieldToFind.name === fieldPath);
32
101
  let newTableName = tableName;
33
102
  if (!field && fieldPath === 'id') {
34
- selectFields.id = adapter.tables[newTableName].id;
103
+ const idTable = aliasTable ?? adapter.tables[newTableName];
35
104
  return {
36
105
  columnName: 'id',
37
106
  constraints,
@@ -39,7 +108,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
39
108
  name: 'id',
40
109
  type: isUUIDType(adapter.idType) ? 'text' : 'number'
41
110
  },
42
- table: adapter.tables[newTableName]
111
+ table: idTable
43
112
  };
44
113
  }
45
114
  let localizedPathQuery = false;
@@ -106,6 +175,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
106
175
  parentAliasTable: aliasTable,
107
176
  parentIsLocalized: parentIsLocalized || field.localized,
108
177
  pathSegments: pathSegments.slice(1),
178
+ req,
109
179
  rootTableName,
110
180
  selectFields,
111
181
  selectLocale,
@@ -189,6 +259,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
189
259
  locale,
190
260
  parentIsLocalized: parentIsLocalized || field.localized,
191
261
  pathSegments: pathSegments.slice(1),
262
+ req,
192
263
  rootTableName,
193
264
  selectFields: blockSelectFields,
194
265
  selectLocale,
@@ -255,6 +326,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
255
326
  locale,
256
327
  parentIsLocalized: parentIsLocalized || field.localized,
257
328
  pathSegments: pathSegments.slice(1),
329
+ req,
258
330
  rootTableName,
259
331
  selectFields,
260
332
  selectLocale,
@@ -321,8 +393,15 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
321
393
  tableName: relationshipTableName
322
394
  }).newAliasTable;
323
395
  if (!existingMainTable) {
396
+ const branchCondition = getBranchTableCondition({
397
+ adapter,
398
+ collectionSlug: field.collection,
399
+ req,
400
+ table: relationshipTable
401
+ });
402
+ const relationshipCondition = eq(aliasRelationshipTable.parent, relationshipTable.id);
324
403
  joins.push({
325
- condition: eq(aliasRelationshipTable.parent, relationshipTable.id),
404
+ condition: branchCondition ? and(relationshipCondition, branchCondition) : relationshipCondition,
326
405
  queryPath: `${constraintPath}${field.name}`,
327
406
  table: relationshipTable
328
407
  });
@@ -338,6 +417,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
338
417
  // A join reads from a different collection, so localization does not carry over
339
418
  parentIsLocalized: false,
340
419
  pathSegments: pathSegments.slice(1),
420
+ req,
341
421
  rootTableName: relationshipTableName,
342
422
  selectFields,
343
423
  selectLocale,
@@ -368,13 +448,29 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
368
448
  table: arrayAliasTable
369
449
  });
370
450
  joins.push({
371
- condition: eq(newAliasTable.id, arrayAliasTable._parentID),
451
+ condition: (()=>{
452
+ const relationshipCondition = eq(newAliasTable['id'], arrayAliasTable._parentID);
453
+ const branchCondition = getBranchTableCondition({
454
+ adapter,
455
+ collectionSlug: field.collection,
456
+ req,
457
+ table: newAliasTable
458
+ });
459
+ return branchCondition ? and(relationshipCondition, branchCondition) : relationshipCondition;
460
+ })(),
372
461
  queryPath: `${constraintPath}${field.name}`,
373
462
  table: newAliasTable
374
463
  });
375
464
  } else {
465
+ const relationshipCondition = eq(newAliasTable[field.on.replaceAll('.', '_')], aliasTable ? aliasTable.id : adapter.tables[tableName].id);
466
+ const branchCondition = getBranchTableCondition({
467
+ adapter,
468
+ collectionSlug: field.collection,
469
+ req,
470
+ table: newAliasTable
471
+ });
376
472
  joins.push({
377
- condition: eq(newAliasTable[field.on.replaceAll('.', '_')], aliasTable ? aliasTable.id : adapter.tables[tableName].id),
473
+ condition: branchCondition ? and(relationshipCondition, branchCondition) : relationshipCondition,
378
474
  queryPath: `${constraintPath}${field.name}`,
379
475
  table: newAliasTable
380
476
  });
@@ -403,6 +499,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
403
499
  // A join reads from a different collection, so localization does not carry over
404
500
  parentIsLocalized: false,
405
501
  pathSegments: pathSegments.slice(1),
502
+ req,
406
503
  selectFields,
407
504
  tableName: newTableName,
408
505
  value
@@ -463,6 +560,8 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
463
560
  case 'upload':
464
561
  {
465
562
  const newCollectionPath = pathSegments.slice(1).join('.');
563
+ const relationshipQueryPath = `${getTableName(tableContainingField)}.${fieldStoragePath}._rels`;
564
+ const targetQueryPath = `${getTableName(tableContainingField)}.${fieldStoragePath}._target`;
466
565
  if (Array.isArray(field.relationTo) || field.hasMany) {
467
566
  const relationshipPath = resolveRelationshipPath({
468
567
  adapter,
@@ -477,7 +576,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
477
576
  }
478
577
  let relationshipFields;
479
578
  const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`;
480
- const existingJoin = joins.find((e)=>e.queryPath === `${constraintPath}.${field.name}`);
579
+ const existingJoin = joins.find((e)=>e.queryPath === relationshipQueryPath);
481
580
  let aliasRelationshipTable;
482
581
  let aliasRelationshipTableName;
483
582
  if (existingJoin) {
@@ -504,7 +603,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
504
603
  addJoinTable({
505
604
  condition: and(...conditions),
506
605
  joins,
507
- queryPath: `${constraintPath}.${field.name}`,
606
+ queryPath: relationshipQueryPath,
508
607
  table: aliasRelationshipTable
509
608
  });
510
609
  } else {
@@ -512,7 +611,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
512
611
  addJoinTable({
513
612
  condition: and(eq(tableContainingField.id, aliasRelationshipTable.parent), like(aliasRelationshipTable.path, relationshipPath.path)),
514
613
  joins,
515
- queryPath: `${constraintPath}.${field.name}`,
614
+ queryPath: relationshipQueryPath,
516
615
  table: aliasRelationshipTable
517
616
  });
518
617
  }
@@ -523,15 +622,31 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
523
622
  newTableName = adapter.tableNameMap.get(toSnakeCase(relationshipConfig.slug));
524
623
  // parent to relationship join table
525
624
  relationshipFields = relationshipConfig.flattenedFields;
526
- ({ newAliasTable } = getTableAlias({
527
- adapter,
528
- tableName: newTableName
529
- }));
530
- joins.push({
531
- condition: eq(newAliasTable.id, aliasRelationshipTable[`${field.relationTo}ID`]),
532
- table: newAliasTable
533
- });
534
- if (newCollectionPath === '' || newCollectionPath === 'id') {
625
+ const existingTargetJoin = joins.find((join)=>join.queryPath === targetQueryPath);
626
+ if (existingTargetJoin) {
627
+ newAliasTable = existingTargetJoin.table;
628
+ } else {
629
+ ;
630
+ ({ newAliasTable } = getTableAlias({
631
+ adapter,
632
+ tableName: newTableName
633
+ }));
634
+ const relationshipID = aliasRelationshipTable[`${field.relationTo}ID`];
635
+ const condition = getRelationshipJoinCondition({
636
+ adapter,
637
+ collectionSlug: field.relationTo,
638
+ relationshipID,
639
+ req,
640
+ table: newAliasTable,
641
+ value
642
+ });
643
+ joins.push({
644
+ condition,
645
+ queryPath: targetQueryPath,
646
+ table: newAliasTable
647
+ });
648
+ }
649
+ if (newCollectionPath === '' || newCollectionPath === 'id' && !existingTargetJoin) {
535
650
  return {
536
651
  columnName: `${field.relationTo}ID`,
537
652
  constraints,
@@ -634,21 +749,23 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
634
749
  // A relationship jumps to a different collection, so localization does not carry over
635
750
  parentIsLocalized: false,
636
751
  pathSegments: pathSegments.slice(1),
752
+ req,
637
753
  rootTableName: newTableName,
638
754
  selectFields,
639
755
  selectLocale,
640
756
  tableName: newTableName,
641
757
  value
642
758
  });
643
- } else if (pathSegments.length > 1 && !(pathSegments.length === 2 && pathSegments[1] === 'id')) {
759
+ } else if (pathSegments.length > 1 && (!(pathSegments.length === 2 && pathSegments[1] === 'id') || joins.some((join)=>join.queryPath === targetQueryPath))) {
644
760
  // simple relationships
645
761
  const columnName = `${columnPrefix}${field.name}`;
646
762
  const newTableName = adapter.tableNameMap.get(toSnakeCase(adapter.payload.collections[field.relationTo].config.slug));
647
- const { newAliasTable } = getTableAlias({
763
+ const existingTargetJoin = joins.find((join)=>join.queryPath === targetQueryPath);
764
+ const newAliasTable = existingTargetJoin?.table ?? getTableAlias({
648
765
  adapter,
649
766
  tableName: newTableName
650
- });
651
- if (isFieldLocalized && adapter.payload.config.localization) {
767
+ }).newAliasTable;
768
+ if (!existingTargetJoin && isFieldLocalized && adapter.payload.config.localization) {
652
769
  const { newAliasTable: aliasLocaleTable } = getTableAlias({
653
770
  adapter,
654
771
  tableName: `${rootTableName}${adapter.localesSuffix}`
@@ -668,13 +785,32 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
668
785
  joins,
669
786
  table: localesTable
670
787
  });
788
+ const condition = getRelationshipJoinCondition({
789
+ adapter,
790
+ collectionSlug: field.relationTo,
791
+ relationshipID: localesTable[columnName],
792
+ req,
793
+ table: newAliasTable,
794
+ value
795
+ });
671
796
  joins.push({
672
- condition: eq(localesTable[columnName], newAliasTable.id),
797
+ condition,
798
+ queryPath: targetQueryPath,
673
799
  table: newAliasTable
674
800
  });
675
- } else {
801
+ } else if (!existingTargetJoin) {
802
+ const relationshipID = aliasTable ? aliasTable[columnName] : adapter.tables[tableName][columnName];
803
+ const condition = getRelationshipJoinCondition({
804
+ adapter,
805
+ collectionSlug: field.relationTo,
806
+ relationshipID,
807
+ req,
808
+ table: newAliasTable,
809
+ value
810
+ });
676
811
  joins.push({
677
- condition: eq(newAliasTable.id, aliasTable ? aliasTable[columnName] : adapter.tables[tableName][columnName]),
812
+ condition,
813
+ queryPath: targetQueryPath,
678
814
  table: newAliasTable
679
815
  });
680
816
  }
@@ -690,6 +826,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
690
826
  // A relationship jumps to a different collection, so localization does not carry over
691
827
  parentIsLocalized: false,
692
828
  pathSegments: pathSegments.slice(1),
829
+ req,
693
830
  selectFields,
694
831
  tableName: newTableName,
695
832
  value
@@ -746,6 +883,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
746
883
  locale,
747
884
  parentIsLocalized: parentIsLocalized || field.localized,
748
885
  pathSegments: pathSegments.slice(1),
886
+ req,
749
887
  rootTableName,
750
888
  selectFields,
751
889
  selectLocale,
@@ -766,6 +904,7 @@ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRela
766
904
  locale,
767
905
  parentIsLocalized: parentIsLocalized || field.localized,
768
906
  pathSegments: pathSegments.slice(1),
907
+ req,
769
908
  rootTableName,
770
909
  selectFields,
771
910
  selectLocale,