@payloadcms/drizzle 4.0.0-internal.a6582c6 → 4.0.0-internal.a9d2e4e

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 (305) 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/countGlobalVersions.js +8 -3
  5. package/dist/countGlobalVersions.js.map +1 -1
  6. package/dist/countVersions.d.ts.map +1 -1
  7. package/dist/countVersions.js +29 -4
  8. package/dist/countVersions.js.map +1 -1
  9. package/dist/createGlobalVersion.d.ts.map +1 -1
  10. package/dist/createGlobalVersion.js +17 -2
  11. package/dist/createGlobalVersion.js.map +1 -1
  12. package/dist/createTableName.d.ts.map +1 -1
  13. package/dist/createTableName.js +2 -7
  14. package/dist/createTableName.js.map +1 -1
  15. package/dist/createVersion.d.ts.map +1 -1
  16. package/dist/createVersion.js +12 -1
  17. package/dist/createVersion.js.map +1 -1
  18. package/dist/deleteBranchGlobal.d.ts +10 -0
  19. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  20. package/dist/deleteBranchGlobal.js +27 -0
  21. package/dist/deleteBranchGlobal.js.map +1 -0
  22. package/dist/deleteOne.d.ts.map +1 -1
  23. package/dist/deleteOne.js +25 -1
  24. package/dist/deleteOne.js.map +1 -1
  25. package/dist/exports/postgres.d.ts +4 -1
  26. package/dist/exports/postgres.d.ts.map +1 -1
  27. package/dist/exports/postgres.js +4 -1
  28. package/dist/exports/postgres.js.map +1 -1
  29. package/dist/exports/sqlite.d.ts +2 -1
  30. package/dist/exports/sqlite.d.ts.map +1 -1
  31. package/dist/exports/sqlite.js +2 -1
  32. package/dist/exports/sqlite.js.map +1 -1
  33. package/dist/find/buildFindManyArgs.d.ts +3 -2
  34. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  35. package/dist/find/buildFindManyArgs.js +2 -1
  36. package/dist/find/buildFindManyArgs.js.map +1 -1
  37. package/dist/find/buildPolymorphicJoinQuery.d.ts +40 -0
  38. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  39. package/dist/find/buildPolymorphicJoinQuery.js +163 -0
  40. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  41. package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
  42. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  43. package/dist/find/buildPolymorphicJoinWhere.js +301 -0
  44. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  45. package/dist/find/createPolymorphicJoinWherePlan.d.ts +38 -0
  46. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  47. package/dist/find/createPolymorphicJoinWherePlan.js +200 -0
  48. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  49. package/dist/find/findMany.d.ts +6 -1
  50. package/dist/find/findMany.d.ts.map +1 -1
  51. package/dist/find/findMany.js +16 -3
  52. package/dist/find/findMany.js.map +1 -1
  53. package/dist/find/traverseFields.d.ts +3 -2
  54. package/dist/find/traverseFields.d.ts.map +1 -1
  55. package/dist/find/traverseFields.js +82 -198
  56. package/dist/find/traverseFields.js.map +1 -1
  57. package/dist/find.d.ts.map +1 -1
  58. package/dist/find.js +32 -4
  59. package/dist/find.js.map +1 -1
  60. package/dist/findDistinct.d.ts.map +1 -1
  61. package/dist/findDistinct.js +104 -8
  62. package/dist/findDistinct.js.map +1 -1
  63. package/dist/findGlobal.d.ts.map +1 -1
  64. package/dist/findGlobal.js +24 -5
  65. package/dist/findGlobal.js.map +1 -1
  66. package/dist/findGlobalVersions.js +8 -3
  67. package/dist/findGlobalVersions.js.map +1 -1
  68. package/dist/findOne.d.ts +1 -1
  69. package/dist/findOne.d.ts.map +1 -1
  70. package/dist/findOne.js +30 -3
  71. package/dist/findOne.js.map +1 -1
  72. package/dist/findVersions.d.ts.map +1 -1
  73. package/dist/findVersions.js +32 -5
  74. package/dist/findVersions.js.map +1 -1
  75. package/dist/index.d.ts +6 -10
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +4 -8
  78. package/dist/index.js.map +1 -1
  79. package/dist/migrate.d.ts.map +1 -1
  80. package/dist/migrate.js +41 -15
  81. package/dist/migrate.js.map +1 -1
  82. package/dist/migrateDown.d.ts +2 -1
  83. package/dist/migrateDown.d.ts.map +1 -1
  84. package/dist/migrateDown.js +17 -4
  85. package/dist/migrateDown.js.map +1 -1
  86. package/dist/migrateFresh.d.ts +4 -2
  87. package/dist/migrateFresh.d.ts.map +1 -1
  88. package/dist/migrateFresh.js +26 -9
  89. package/dist/migrateFresh.js.map +1 -1
  90. package/dist/migrateRefresh.d.ts +2 -1
  91. package/dist/migrateRefresh.d.ts.map +1 -1
  92. package/dist/migrateRefresh.js +20 -5
  93. package/dist/migrateRefresh.js.map +1 -1
  94. package/dist/migrateReset.d.ts +2 -1
  95. package/dist/migrateReset.d.ts.map +1 -1
  96. package/dist/migrateReset.js +18 -4
  97. package/dist/migrateReset.js.map +1 -1
  98. package/dist/migrateStatus.d.ts +2 -1
  99. package/dist/migrateStatus.d.ts.map +1 -1
  100. package/dist/migrateStatus.js +11 -6
  101. package/dist/migrateStatus.js.map +1 -1
  102. package/dist/postgres/createJSONQuery/index.js +3 -3
  103. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  104. package/dist/postgres/init.d.ts.map +1 -1
  105. package/dist/postgres/init.js +6 -0
  106. package/dist/postgres/init.js.map +1 -1
  107. package/dist/postgres/insert.d.ts.map +1 -1
  108. package/dist/postgres/insert.js +4 -2
  109. package/dist/postgres/insert.js.map +1 -1
  110. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  111. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  112. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  113. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  114. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  115. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  116. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  117. package/dist/postgres/predefinedMigrations/v2-v3/index.js +2 -2
  118. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  119. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  120. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  121. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  122. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  123. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  124. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  125. package/dist/postgres/query/postgresUnaccent.js +40 -0
  126. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  127. package/dist/postgres/requireDrizzleKit.d.ts +4 -0
  128. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
  129. package/dist/postgres/requireDrizzleKit.js +16 -10
  130. package/dist/postgres/requireDrizzleKit.js.map +1 -1
  131. package/dist/postgres/types.d.ts +17 -2
  132. package/dist/postgres/types.d.ts.map +1 -1
  133. package/dist/postgres/types.js.map +1 -1
  134. package/dist/queries/buildAndOrConditions.d.ts +3 -2
  135. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  136. package/dist/queries/buildAndOrConditions.js +2 -1
  137. package/dist/queries/buildAndOrConditions.js.map +1 -1
  138. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  139. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  140. package/dist/queries/buildBranchVisibility.js +48 -0
  141. package/dist/queries/buildBranchVisibility.js.map +1 -0
  142. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  143. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  144. package/dist/queries/buildOperatorConstraint.js +63 -0
  145. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  146. package/dist/queries/buildOrderBy.d.ts +3 -2
  147. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  148. package/dist/queries/buildOrderBy.js +2 -1
  149. package/dist/queries/buildOrderBy.js.map +1 -1
  150. package/dist/queries/buildQuery.d.ts +3 -2
  151. package/dist/queries/buildQuery.d.ts.map +1 -1
  152. package/dist/queries/buildQuery.js +4 -2
  153. package/dist/queries/buildQuery.js.map +1 -1
  154. package/dist/queries/getTableColumnFromPath.d.ts +15 -5
  155. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  156. package/dist/queries/getTableColumnFromPath.js +226 -56
  157. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  158. package/dist/queries/operatorMap.d.ts +7 -3
  159. package/dist/queries/operatorMap.d.ts.map +1 -1
  160. package/dist/queries/operatorMap.js.map +1 -1
  161. package/dist/queries/parseParams.d.ts +3 -2
  162. package/dist/queries/parseParams.d.ts.map +1 -1
  163. package/dist/queries/parseParams.js +266 -11
  164. package/dist/queries/parseParams.js.map +1 -1
  165. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  166. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  167. package/dist/queries/resolveRelationshipPath.js +66 -0
  168. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  169. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  170. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  171. package/dist/queries/validateOperatorHandlers.js +30 -0
  172. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  173. package/dist/queryDrafts.d.ts.map +1 -1
  174. package/dist/queryDrafts.js +27 -5
  175. package/dist/queryDrafts.js.map +1 -1
  176. package/dist/schema/build.d.ts.map +1 -1
  177. package/dist/schema/build.js +28 -20
  178. package/dist/schema/build.js.map +1 -1
  179. package/dist/schema/traverseFields.js +5 -5
  180. package/dist/schema/traverseFields.js.map +1 -1
  181. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  182. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  183. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  184. package/dist/sqlite/createJSONQuery/index.js +6 -5
  185. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  186. package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
  187. package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
  188. package/dist/sqlite/createRequireDrizzleKit.js +15 -0
  189. package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
  190. package/dist/sqlite/execute.js.map +1 -1
  191. package/dist/sqlite/insert.d.ts.map +1 -1
  192. package/dist/sqlite/insert.js +9 -4
  193. package/dist/sqlite/insert.js.map +1 -1
  194. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  195. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  196. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  197. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  198. package/dist/sqlite/types.d.ts +4 -0
  199. package/dist/sqlite/types.d.ts.map +1 -1
  200. package/dist/sqlite/types.js.map +1 -1
  201. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  202. package/dist/transactions/beginTransaction.js +13 -5
  203. package/dist/transactions/beginTransaction.js.map +1 -1
  204. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  205. package/dist/transactions/commitTransaction.js +1 -5
  206. package/dist/transactions/commitTransaction.js.map +1 -1
  207. package/dist/transform/read/traverseFields.js.map +1 -1
  208. package/dist/transform/write/array.d.ts +3 -2
  209. package/dist/transform/write/array.d.ts.map +1 -1
  210. package/dist/transform/write/array.js +2 -1
  211. package/dist/transform/write/array.js.map +1 -1
  212. package/dist/transform/write/blocks.d.ts +3 -2
  213. package/dist/transform/write/blocks.d.ts.map +1 -1
  214. package/dist/transform/write/blocks.js +2 -1
  215. package/dist/transform/write/blocks.js.map +1 -1
  216. package/dist/transform/write/index.d.ts.map +1 -1
  217. package/dist/transform/write/index.js +2 -0
  218. package/dist/transform/write/index.js.map +1 -1
  219. package/dist/transform/write/traverseFields.d.ts +2 -1
  220. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  221. package/dist/transform/write/traverseFields.js +51 -21
  222. package/dist/transform/write/traverseFields.js.map +1 -1
  223. package/dist/transform/write/types.d.ts +7 -0
  224. package/dist/transform/write/types.d.ts.map +1 -1
  225. package/dist/transform/write/types.js.map +1 -1
  226. package/dist/types.d.ts +53 -4
  227. package/dist/types.d.ts.map +1 -1
  228. package/dist/types.js.map +1 -1
  229. package/dist/updateGlobal.d.ts +5 -1
  230. package/dist/updateGlobal.d.ts.map +1 -1
  231. package/dist/updateGlobal.js +96 -4
  232. package/dist/updateGlobal.js.map +1 -1
  233. package/dist/updateOne.d.ts.map +1 -1
  234. package/dist/updateOne.js +93 -4
  235. package/dist/updateOne.js.map +1 -1
  236. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  237. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  238. package/dist/upsertBranchGlobalChange.js +35 -0
  239. package/dist/upsertBranchGlobalChange.js.map +1 -0
  240. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  241. package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
  242. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  243. package/dist/upsertRow/index.d.ts +1 -1
  244. package/dist/upsertRow/index.d.ts.map +1 -1
  245. package/dist/upsertRow/index.js +156 -46
  246. package/dist/upsertRow/index.js.map +1 -1
  247. package/dist/upsertRow/types.d.ts +3 -0
  248. package/dist/upsertRow/types.d.ts.map +1 -1
  249. package/dist/upsertRow/types.js.map +1 -1
  250. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  251. package/dist/utilities/blocksToJsonMigrator.js +7 -18
  252. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  253. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  254. package/dist/utilities/buildCreateMigration.js +13 -9
  255. package/dist/utilities/buildCreateMigration.js.map +1 -1
  256. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  257. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  258. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  259. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  260. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  261. package/dist/utilities/buildForeignKeyName.js +3 -2
  262. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  263. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  264. package/dist/utilities/buildIndexName.js +3 -2
  265. package/dist/utilities/buildIndexName.js.map +1 -1
  266. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  267. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  268. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  269. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  270. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  271. package/dist/utilities/createSchemaGenerator.js +10 -12
  272. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  273. package/dist/utilities/executeSchemaHooks.js +1 -1
  274. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  275. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  276. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  277. package/dist/utilities/formatGeneratedFile.js +58 -0
  278. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  279. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  280. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  281. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  282. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  283. package/dist/utilities/getTransaction.js.map +1 -1
  284. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  285. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  286. package/dist/utilities/parseJSONPathSegment.js +17 -0
  287. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  288. package/dist/utilities/pushDevSchema.js +1 -1
  289. package/dist/utilities/pushDevSchema.js.map +1 -1
  290. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
  291. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  292. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  293. package/dist/utilities/validateIdentifierLength.d.ts +12 -0
  294. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
  295. package/dist/utilities/validateIdentifierLength.js +18 -0
  296. package/dist/utilities/validateIdentifierLength.js.map +1 -0
  297. package/package.json +17 -19
  298. package/dist/sqlite/requireDrizzleKit.d.ts +0 -3
  299. package/dist/sqlite/requireDrizzleKit.d.ts.map +0 -1
  300. package/dist/sqlite/requireDrizzleKit.js +0 -12
  301. package/dist/sqlite/requireDrizzleKit.js.map +0 -1
  302. package/dist/upsertRow/handleUpsertError.spec.js +0 -42
  303. package/dist/upsertRow/handleUpsertError.spec.js.map +0 -1
  304. package/dist/utilities/isValidStringID.spec.js +0 -15
  305. package/dist/utilities/isValidStringID.spec.js.map +0 -1
@@ -1,11 +1,12 @@
1
- import { asc, desc, inArray, max, min } from 'drizzle-orm';
1
+ import { and, asc, desc, inArray, max, min, sql } from 'drizzle-orm';
2
+ import { buildBranchVisibility } from '../queries/buildBranchVisibility.js';
2
3
  import { buildQuery } from '../queries/buildQuery.js';
3
4
  import { selectDistinct } from '../queries/selectDistinct.js';
4
5
  import { transform } from '../transform/read/index.js';
5
6
  import { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js';
6
7
  import { getTransaction } from '../utilities/getTransaction.js';
7
8
  import { buildFindManyArgs } from './buildFindManyArgs.js';
8
- export const findMany = async function find({ adapter, collectionSlug, draftsEnabled, fields, joins: joinQuery, limit: limitArg, locale, page = 1, pagination, req, select, sort, tableName, versions, where: whereArg }) {
9
+ export const findMany = async function find({ adapter, branchVisibility, collectionSlug, draftsEnabled, fields, joins: joinQuery, limit: limitArg, locale, page = 1, pagination, req, select, sort, tableName, versions, where: whereArg }) {
9
10
  let limit = limitArg;
10
11
  let totalDocs;
11
12
  let totalPages;
@@ -17,14 +18,25 @@ export const findMany = async function find({ adapter, collectionSlug, draftsEna
17
18
  pagination = false;
18
19
  limit = undefined;
19
20
  }
20
- const { joins, orderBy, selectFields, where } = buildQuery({
21
+ const { joins, orderBy, selectFields, where: queryWhere } = buildQuery({
21
22
  adapter,
22
23
  fields,
23
24
  locale,
25
+ req,
24
26
  sort,
25
27
  tableName,
26
28
  where: whereArg
27
29
  });
30
+ const table = adapter.tables[tableName];
31
+ const branchVisibilityWhere = branchVisibility ? buildBranchVisibility({
32
+ adapter,
33
+ branch: branchVisibility.branch,
34
+ canonicalIDExpression: versions ? sql`COALESCE(${table._branchParent}, ${table.parent})` : undefined,
35
+ collectionSlug: branchVisibility.collectionSlug,
36
+ mode: branchVisibility.mode,
37
+ table
38
+ }) : undefined;
39
+ const where = branchVisibilityWhere ? and(queryWhere, branchVisibilityWhere) : queryWhere;
28
40
  const orderedIDMap = {};
29
41
  let orderedIDs;
30
42
  const findManyArgs = buildFindManyArgs({
@@ -36,6 +48,7 @@ export const findMany = async function find({ adapter, collectionSlug, draftsEna
36
48
  joinQuery,
37
49
  joins,
38
50
  locale,
51
+ req,
39
52
  select,
40
53
  tableName,
41
54
  versions
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/find/findMany.ts"],"sourcesContent":["import type { FindArgs, FlattenedField, TypeWithID } from 'payload'\n\nimport { asc, desc, inArray, max, min } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { buildQuery } from '../queries/buildQuery.js'\nimport { selectDistinct } from '../queries/selectDistinct.js'\nimport { transform } from '../transform/read/index.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTransaction } from '../utilities/getTransaction.js'\nimport { buildFindManyArgs } from './buildFindManyArgs.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n fields: FlattenedField[]\n tableName: string\n versions?: boolean\n} & Omit<FindArgs, 'collection'>\n\nexport const findMany = async function find({\n adapter,\n collectionSlug,\n draftsEnabled,\n fields,\n joins: joinQuery,\n limit: limitArg,\n locale,\n page = 1,\n pagination,\n req,\n select,\n sort,\n tableName,\n versions,\n where: whereArg,\n}: Args) {\n let limit = limitArg\n let totalDocs: number\n let totalPages: number\n let hasPrevPage: boolean\n let hasNextPage: boolean\n let pagingCounter: number\n const offset = (page - 1) * limit\n\n if (limit === 0) {\n pagination = false\n limit = undefined\n }\n\n const { joins, orderBy, selectFields, where } = buildQuery({\n adapter,\n fields,\n locale,\n sort,\n tableName,\n where: whereArg,\n })\n\n const orderedIDMap: Record<number | string, number> = {}\n let orderedIDs: (number | string)[]\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n collectionSlug,\n depth: 0,\n draftsEnabled,\n fields,\n joinQuery,\n joins,\n locale,\n select,\n tableName,\n versions,\n })\n\n if (orderBy) {\n for (const key in selectFields) {\n const column = selectFields[key]\n if (!column || column.primary) {\n continue\n }\n\n if (\n !orderBy.some(\n (col) =>\n col.column.name === column.name &&\n getNameFromDrizzleTable(col.column.table) === getNameFromDrizzleTable(column.table),\n )\n ) {\n delete selectFields[key]\n }\n }\n }\n\n const db = await getTransaction(adapter, req)\n\n const oneToManyJoinedTableNames = new Set(\n joins.filter((j) => j.isOneToMany).map((j) => getNameFromDrizzleTable(j.table)),\n )\n\n const hasSortOnOneToMany =\n oneToManyJoinedTableNames.size > 0 &&\n orderBy?.some(({ column }) =>\n oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table)),\n )\n\n let selectDistinctResult: { id: number | string }[] | undefined\n\n // avoid duplicate results by using a group query instead of select distinct when there is a sort on a one-to-many joined table\n if (hasSortOnOneToMany) {\n const mainTable = adapter.tables[tableName]\n let groupQuery = (db as any).select({ id: mainTable.id }).from(mainTable).$dynamic()\n\n if (where) {\n groupQuery = groupQuery.where(where)\n }\n\n joins.forEach(({ type, condition, table }) => {\n groupQuery = groupQuery[type ?? 'leftJoin'](table, condition)\n })\n\n groupQuery = groupQuery.groupBy(mainTable.id)\n\n groupQuery = groupQuery.orderBy(() =>\n orderBy.map(({ column, order }) => {\n if (oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table))) {\n return order === asc ? asc(min(column)) : desc(max(column))\n }\n return order(column)\n }),\n )\n\n selectDistinctResult = await groupQuery.offset(offset).limit(limit)\n } else {\n selectDistinctResult = await selectDistinct({\n adapter,\n db,\n joins,\n query: ({ query }) => {\n if (orderBy) {\n query = query.orderBy(() => orderBy.map(({ column, order }) => order(column)))\n }\n return query.offset(offset).limit(limit)\n },\n selectFields,\n tableName,\n where,\n })\n }\n\n if (selectDistinctResult) {\n if (selectDistinctResult.length === 0) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 0,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n }\n } else {\n // set the id in an object for sorting later\n selectDistinctResult.forEach(({ id }, i) => {\n orderedIDMap[id] = i\n })\n orderedIDs = Object.keys(orderedIDMap)\n findManyArgs.where = inArray(adapter.tables[tableName].id, orderedIDs)\n }\n } else {\n findManyArgs.limit = limit\n findManyArgs.offset = offset\n findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column))\n\n if (where) {\n findManyArgs.where = where\n }\n }\n\n const findPromise = db.query[tableName].findMany(findManyArgs)\n\n if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) {\n totalDocs = await adapter.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n totalPages = typeof limit === 'number' && limit !== 0 ? Math.ceil(totalDocs / limit) : 1\n hasPrevPage = page > 1\n hasNextPage = totalPages > page\n pagingCounter = (page - 1) * limit + 1\n }\n\n const rawDocs = await findPromise\n // sort rawDocs from selectQuery\n if (Object.keys(orderedIDMap).length > 0) {\n rawDocs.sort((a, b) => orderedIDMap[a.id] - orderedIDMap[b.id])\n }\n\n if (pagination === false || !totalDocs) {\n totalDocs = rawDocs.length\n totalPages = 1\n pagingCounter = 1\n hasPrevPage = false\n hasNextPage = false\n }\n\n const docs = rawDocs.map((data: TypeWithID) => {\n return transform({\n adapter,\n config: adapter.payload.config,\n data,\n fields,\n joinQuery,\n tableName,\n })\n })\n\n return {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limitArg,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n"],"names":["asc","desc","inArray","max","min","buildQuery","selectDistinct","transform","getNameFromDrizzleTable","getTransaction","buildFindManyArgs","findMany","find","adapter","collectionSlug","draftsEnabled","fields","joins","joinQuery","limit","limitArg","locale","page","pagination","req","select","sort","tableName","versions","where","whereArg","totalDocs","totalPages","hasPrevPage","hasNextPage","pagingCounter","offset","undefined","orderBy","selectFields","orderedIDMap","orderedIDs","findManyArgs","depth","key","column","primary","some","col","name","table","db","oneToManyJoinedTableNames","Set","filter","j","isOneToMany","map","hasSortOnOneToMany","size","has","selectDistinctResult","mainTable","tables","groupQuery","id","from","$dynamic","forEach","type","condition","groupBy","order","query","length","docs","nextPage","prevPage","i","Object","keys","findPromise","countDistinct","Math","ceil","rawDocs","a","b","data","config","payload"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/find/findMany.ts"],"sourcesContent":["import type { FindArgs, FlattenedField, TypeWithID } from 'payload'\n\nimport { and, asc, desc, inArray, max, min, sql } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { buildBranchVisibility } from '../queries/buildBranchVisibility.js'\nimport { buildQuery } from '../queries/buildQuery.js'\nimport { selectDistinct } from '../queries/selectDistinct.js'\nimport { transform } from '../transform/read/index.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTransaction } from '../utilities/getTransaction.js'\nimport { buildFindManyArgs } from './buildFindManyArgs.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n branchVisibility?: {\n branch: string\n collectionSlug: string\n mode?: 'documents' | 'history'\n }\n collectionSlug?: string\n fields: FlattenedField[]\n tableName: string\n versions?: boolean\n} & Omit<FindArgs, 'collection'>\n\nexport const findMany = async function find({\n adapter,\n branchVisibility,\n collectionSlug,\n draftsEnabled,\n fields,\n joins: joinQuery,\n limit: limitArg,\n locale,\n page = 1,\n pagination,\n req,\n select,\n sort,\n tableName,\n versions,\n where: whereArg,\n}: Args) {\n let limit = limitArg\n let totalDocs: number\n let totalPages: number\n let hasPrevPage: boolean\n let hasNextPage: boolean\n let pagingCounter: number\n const offset = (page - 1) * limit\n\n if (limit === 0) {\n pagination = false\n limit = undefined\n }\n\n const {\n joins,\n orderBy,\n selectFields,\n where: queryWhere,\n } = buildQuery({\n adapter,\n fields,\n locale,\n req,\n sort,\n tableName,\n where: whereArg,\n })\n const table = adapter.tables[tableName]\n const branchVisibilityWhere = branchVisibility\n ? buildBranchVisibility({\n adapter,\n branch: branchVisibility.branch,\n canonicalIDExpression: versions\n ? sql`COALESCE(${table._branchParent}, ${table.parent})`\n : undefined,\n collectionSlug: branchVisibility.collectionSlug,\n mode: branchVisibility.mode,\n table,\n })\n : undefined\n const where = branchVisibilityWhere ? and(queryWhere, branchVisibilityWhere) : queryWhere\n\n const orderedIDMap: Record<number | string, number> = {}\n let orderedIDs: (number | string)[]\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n collectionSlug,\n depth: 0,\n draftsEnabled,\n fields,\n joinQuery,\n joins,\n locale,\n req,\n select,\n tableName,\n versions,\n })\n\n if (orderBy) {\n for (const key in selectFields) {\n const column = selectFields[key]\n if (!column || column.primary) {\n continue\n }\n\n if (\n !orderBy.some(\n (col) =>\n col.column.name === column.name &&\n getNameFromDrizzleTable(col.column.table) === getNameFromDrizzleTable(column.table),\n )\n ) {\n delete selectFields[key]\n }\n }\n }\n\n const db = await getTransaction(adapter, req)\n\n const oneToManyJoinedTableNames = new Set(\n joins.filter((j) => j.isOneToMany).map((j) => getNameFromDrizzleTable(j.table)),\n )\n\n const hasSortOnOneToMany =\n oneToManyJoinedTableNames.size > 0 &&\n orderBy?.some(({ column }) =>\n oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table)),\n )\n\n let selectDistinctResult: { id: number | string }[] | undefined\n\n // avoid duplicate results by using a group query instead of select distinct when there is a sort on a one-to-many joined table\n if (hasSortOnOneToMany) {\n const mainTable = adapter.tables[tableName]\n let groupQuery = (db as any).select({ id: mainTable.id }).from(mainTable).$dynamic()\n\n if (where) {\n groupQuery = groupQuery.where(where)\n }\n\n joins.forEach(({ type, condition, table }) => {\n groupQuery = groupQuery[type ?? 'leftJoin'](table, condition)\n })\n\n groupQuery = groupQuery.groupBy(mainTable.id)\n\n groupQuery = groupQuery.orderBy(() =>\n orderBy.map(({ column, order }) => {\n if (oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table))) {\n return order === asc ? asc(min(column)) : desc(max(column))\n }\n return order(column)\n }),\n )\n\n selectDistinctResult = await groupQuery.offset(offset).limit(limit)\n } else {\n selectDistinctResult = await selectDistinct({\n adapter,\n db,\n joins,\n query: ({ query }) => {\n if (orderBy) {\n query = query.orderBy(() => orderBy.map(({ column, order }) => order(column)))\n }\n return query.offset(offset).limit(limit)\n },\n selectFields,\n tableName,\n where,\n })\n }\n\n if (selectDistinctResult) {\n if (selectDistinctResult.length === 0) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 0,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n }\n } else {\n // set the id in an object for sorting later\n selectDistinctResult.forEach(({ id }, i) => {\n orderedIDMap[id] = i\n })\n orderedIDs = Object.keys(orderedIDMap)\n findManyArgs.where = inArray(adapter.tables[tableName].id, orderedIDs)\n }\n } else {\n findManyArgs.limit = limit\n findManyArgs.offset = offset\n findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column))\n\n if (where) {\n findManyArgs.where = where\n }\n }\n\n const findPromise = db.query[tableName].findMany(findManyArgs)\n\n if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) {\n totalDocs = await adapter.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n totalPages = typeof limit === 'number' && limit !== 0 ? Math.ceil(totalDocs / limit) : 1\n hasPrevPage = page > 1\n hasNextPage = totalPages > page\n pagingCounter = (page - 1) * limit + 1\n }\n\n const rawDocs = await findPromise\n // sort rawDocs from selectQuery\n if (Object.keys(orderedIDMap).length > 0) {\n rawDocs.sort((a, b) => orderedIDMap[a.id] - orderedIDMap[b.id])\n }\n\n if (pagination === false || !totalDocs) {\n totalDocs = rawDocs.length\n totalPages = 1\n pagingCounter = 1\n hasPrevPage = false\n hasNextPage = false\n }\n\n const docs = rawDocs.map((data: TypeWithID) => {\n return transform({\n adapter,\n config: adapter.payload.config,\n data,\n fields,\n joinQuery,\n tableName,\n })\n })\n\n return {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limitArg,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n"],"names":["and","asc","desc","inArray","max","min","sql","buildBranchVisibility","buildQuery","selectDistinct","transform","getNameFromDrizzleTable","getTransaction","buildFindManyArgs","findMany","find","adapter","branchVisibility","collectionSlug","draftsEnabled","fields","joins","joinQuery","limit","limitArg","locale","page","pagination","req","select","sort","tableName","versions","where","whereArg","totalDocs","totalPages","hasPrevPage","hasNextPage","pagingCounter","offset","undefined","orderBy","selectFields","queryWhere","table","tables","branchVisibilityWhere","branch","canonicalIDExpression","_branchParent","parent","mode","orderedIDMap","orderedIDs","findManyArgs","depth","key","column","primary","some","col","name","db","oneToManyJoinedTableNames","Set","filter","j","isOneToMany","map","hasSortOnOneToMany","size","has","selectDistinctResult","mainTable","groupQuery","id","from","$dynamic","forEach","type","condition","groupBy","order","query","length","docs","nextPage","prevPage","i","Object","keys","findPromise","countDistinct","Math","ceil","rawDocs","a","b","data","config","payload"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type FlattenedField, type JoinQuery, type SelectMode, type SelectType } from 'payload';
1
+ import type { FlattenedField, JoinQuery, PayloadRequest, SelectMode, SelectType } from 'payload';
2
2
  import type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js';
3
3
  import type { Result } from './buildFindManyArgs.js';
4
4
  type TraverseFieldArgs = {
@@ -16,6 +16,7 @@ type TraverseFieldArgs = {
16
16
  locale?: string;
17
17
  parentIsLocalized?: boolean;
18
18
  path: string;
19
+ req?: Partial<PayloadRequest>;
19
20
  select?: SelectType;
20
21
  selectAllOnCurrentLevel?: boolean;
21
22
  selectMode?: SelectMode;
@@ -29,6 +30,6 @@ type TraverseFieldArgs = {
29
30
  texts?: boolean;
30
31
  };
31
32
  };
32
- export declare const traverseFields: ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, draftsEnabled, fields, forceWithFields, joinQuery, joins, locale, parentIsLocalized, path, select, selectAllOnCurrentLevel, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields, }: TraverseFieldArgs) => Record<string, unknown>;
33
+ export declare const traverseFields: ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, draftsEnabled, fields, forceWithFields, joinQuery, joins, locale, parentIsLocalized, path, req, select, selectAllOnCurrentLevel, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields, }: TraverseFieldArgs) => Record<string, unknown>;
33
34
  export {};
34
35
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,cAAc,EAGnB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AA6EpD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE;QAChB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,cAAc,iSAuBxB,iBAAiB,4BAkyBnB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,EAEX,MAAM,SAAS,CAAA;AAgBhB,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAA;AACvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAepD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE;QAChB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,cAAc,sSAwBxB,iBAAiB,4BAitBnB,CAAA"}
@@ -1,75 +1,17 @@
1
- import { and, asc, count, desc, eq, getTableName, or, sql } from 'drizzle-orm';
2
- import { appendVersionToQueryKey, buildVersionCollectionFields, combineQueries, getFieldByPath, getQueryDraftsSort } from 'payload';
1
+ import { and, count, sql } from 'drizzle-orm';
2
+ import { appendVersionToQueryKey, buildVersionCollectionFields, combineQueries, getBranchPredicateSync, getQueryDraftsSort, resolveBranchReadState, resolveBranchVersionQuerySync, rewriteBranchVersionParents } from 'payload';
3
3
  import { fieldIsVirtual, fieldShouldBeLocalized, hasDraftsEnabled } from 'payload/shared';
4
4
  import toSnakeCase from 'to-snake-case';
5
+ import { buildBranchVisibility } from '../queries/buildBranchVisibility.js';
5
6
  import { buildQuery } from '../queries/buildQuery.js';
6
7
  import { getTableAlias } from '../queries/getTableAlias.js';
7
- import { operatorMap } from '../queries/operatorMap.js';
8
8
  import { getArrayRelationName } from '../utilities/getArrayRelationName.js';
9
9
  import { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js';
10
10
  import { jsonAggBuildObject } from '../utilities/json.js';
11
11
  import { rawConstraint } from '../utilities/rawConstraint.js';
12
- import { sanitizePathSegment } from '../utilities/sanitizePathSegment.js';
13
12
  import { InternalBlockTableNameIndex, resolveBlockTableName } from '../utilities/validateExistingBlockIsIdentical.js';
14
- const flattenAllWherePaths = (where, paths)=>{
15
- for(const k in where){
16
- if ([
17
- 'AND',
18
- 'OR'
19
- ].includes(k.toUpperCase())) {
20
- if (Array.isArray(where[k])) {
21
- for (const whereField of where[k]){
22
- flattenAllWherePaths(whereField, paths);
23
- }
24
- }
25
- } else {
26
- // TODO: explore how to support arrays/relationship querying.
27
- paths.push({
28
- path: k.split('.').join('_'),
29
- ref: where
30
- });
31
- }
32
- }
33
- };
34
- const buildSQLWhere = (where, alias)=>{
35
- for(const k in where){
36
- if ([
37
- 'AND',
38
- 'OR'
39
- ].includes(k.toUpperCase())) {
40
- if (Array.isArray(where[k])) {
41
- const op = 'AND' === k.toUpperCase() ? and : or;
42
- const accumulated = [];
43
- for (const whereField of where[k]){
44
- accumulated.push(buildSQLWhere(whereField, alias));
45
- }
46
- return op(...accumulated);
47
- }
48
- } else {
49
- let payloadOperator = Object.keys(where[k])[0];
50
- const value = where[k][payloadOperator];
51
- if (payloadOperator === '$raw') {
52
- if (typeof value !== 'string') {
53
- return undefined;
54
- }
55
- return sql.raw(value);
56
- }
57
- // Handle exists: false -> use isNull instead of isNotNull
58
- // This logic is duplicated from sanitizeQueryValue.ts because buildSQLWhere
59
- // is a simplified WHERE builder for polymorphic joins that doesn't have access
60
- // to field definitions needed by sanitizeQueryValue
61
- if (payloadOperator === 'exists' && value === false) {
62
- payloadOperator = 'isNull';
63
- }
64
- if (!(payloadOperator in operatorMap)) {
65
- return undefined;
66
- }
67
- const sanitizedColumnName = k.split('.').map((s)=>sanitizePathSegment(s)).join('_');
68
- return operatorMap[payloadOperator](sql.raw(`"${alias}"."${sanitizedColumnName}"`), value);
69
- }
70
- }
71
- };
72
- export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, draftsEnabled, fields, forceWithFields, joinQuery = {}, joins, locale, parentIsLocalized = false, path, select, selectAllOnCurrentLevel = false, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields })=>{
13
+ import { buildPolymorphicJoinQuery } from './buildPolymorphicJoinQuery.js';
14
+ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, draftsEnabled, fields, forceWithFields, joinQuery = {}, joins, locale, parentIsLocalized = false, path, req, select, selectAllOnCurrentLevel = false, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields })=>{
73
15
  fields.forEach((field)=>{
74
16
  if (fieldIsVirtual(field)) {
75
17
  return;
@@ -147,6 +89,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
147
89
  locale,
148
90
  parentIsLocalized: parentIsLocalized || field.localized,
149
91
  path: '',
92
+ req,
150
93
  select: typeof arraySelect === 'object' ? arraySelect : undefined,
151
94
  selectMode,
152
95
  tablePath: '',
@@ -243,6 +186,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
243
186
  locale,
244
187
  parentIsLocalized: parentIsLocalized || field.localized,
245
188
  path: '',
189
+ req,
246
190
  select: typeof blockSelect === 'object' ? blockSelect : undefined,
247
191
  selectMode: blockSelectMode,
248
192
  tablePath: '',
@@ -279,6 +223,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
279
223
  locale,
280
224
  parentIsLocalized: parentIsLocalized || field.localized,
281
225
  path: `${path}${field.name}_`,
226
+ req,
282
227
  select: typeof fieldSelect === 'object' ? fieldSelect : undefined,
283
228
  selectAllOnCurrentLevel: selectAllOnCurrentLevel || fieldSelect === true || selectMode === 'exclude' && typeof fieldSelect === 'undefined',
284
229
  selectMode,
@@ -309,145 +254,42 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
309
254
  // get an additional document and slice it later to determine if there is a next page
310
255
  limit += 1;
311
256
  }
312
- const columnName = `${path.replaceAll('.', '_')}${field.name}`;
313
- const db = adapter.drizzle;
314
257
  if (Array.isArray(field.collection)) {
315
- let currentQuery = null;
316
- const onPath = field.on.split('.').join('_');
317
- if (Array.isArray(sort)) {
318
- throw new Error('Not implemented');
319
- }
320
- let sanitizedSort = sort;
321
- if (!sanitizedSort) {
322
- if (field.collection.some((collection)=>adapter.payload.collections[collection].config.fields.some((f)=>f.type === 'date' && f.name === 'createdAt'))) {
323
- sanitizedSort = '-createdAt';
324
- } else {
325
- sanitizedSort = 'id';
326
- }
327
- }
328
- const sortOrder = sanitizedSort.startsWith('-') ? desc : asc;
329
- sanitizedSort = sanitizedSort.replace('-', '');
330
- const sortPath = sanitizedSort.split('.').join('_');
331
- const wherePaths = [];
332
- if (where) {
333
- flattenAllWherePaths(where, wherePaths);
334
- }
335
- for (const collection of field.collection){
336
- const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(collection));
337
- const table = adapter.tables[joinCollectionTableName];
338
- const sortColumn = table[sortPath];
339
- const selectFields = {
340
- id: adapter.tables[joinCollectionTableName].id,
341
- parent: sql`${adapter.tables[joinCollectionTableName][onPath]}`.as(onPath),
342
- relationTo: sql`${collection}`.as('relationTo'),
343
- sortPath: sql`${sortColumn ? sortColumn : null}`.as('sortPath')
344
- };
345
- const collectionQueryWhere = [];
346
- // Select for WHERE and Fallback NULL
347
- for (const { path, ref } of wherePaths){
348
- const collectioConfig = adapter.payload.collections[collection].config;
349
- const field = getFieldByPath({
350
- fields: collectioConfig.flattenedFields,
351
- path
352
- });
353
- if (field && field.field.type === 'select' && field.field.hasMany) {
354
- let tableName = adapter.tableNameMap.get(`${toSnakeCase(collection)}_${toSnakeCase(path)}`);
355
- let parentTable = getTableName(table);
356
- if (adapter.schemaName) {
357
- tableName = `"${adapter.schemaName}"."${tableName}"`;
358
- parentTable = `"${adapter.schemaName}"."${parentTable}"`;
359
- }
360
- if (adapter.name === 'postgres') {
361
- selectFields[path] = sql.raw(`(select jsonb_agg(${tableName}.value) from ${tableName} where ${tableName}.parent_id = ${parentTable}.id)`).as(path);
362
- } else {
363
- selectFields[path] = sql.raw(`(select json_group_array(${tableName}.value) from ${tableName} where ${tableName}.parent_id = ${parentTable}.id)`).as(path);
364
- }
365
- const constraint = ref[path];
366
- const operator = Object.keys(constraint)[0];
367
- const value = Object.values(constraint)[0];
368
- const query = adapter.createJSONQuery({
369
- column: `"${path}"`,
370
- operator,
371
- pathSegments: [
372
- field.field.name
373
- ],
374
- table: parentTable,
375
- value
376
- });
377
- ref[path] = {
378
- $raw: query
379
- };
380
- } else if (adapter.tables[joinCollectionTableName][path]) {
381
- selectFields[path] = sql`${adapter.tables[joinCollectionTableName][path]}`.as(path);
382
- // Allow to filter by collectionSlug
383
- } else if (path !== 'relationTo') {
384
- // For timestamp fields like deletedAt, we need to cast to timestamp in Postgres
385
- // SQLite doesn't require explicit type casting for UNION queries
386
- if (path === 'deletedAt' && adapter.name === 'postgres') {
387
- selectFields[path] = sql`null::timestamp with time zone`.as(path);
388
- } else {
389
- selectFields[path] = sql`null`.as(path);
390
- }
391
- }
392
- }
393
- let query = db.select(selectFields).from(adapter.tables[joinCollectionTableName]);
394
- if (collectionQueryWhere.length) {
395
- query = query.where(and(...collectionQueryWhere));
396
- }
397
- if (currentQuery === null) {
398
- currentQuery = query;
399
- } else {
400
- currentQuery = currentQuery.unionAll(query);
401
- }
402
- }
403
- const subQueryAlias = `${columnName}_subquery`;
404
- let sqlWhere = eq(sql.raw(`"${currentTableName}"."id"`), sql.raw(`"${subQueryAlias}"."${onPath}"`));
405
- if (where && Object.keys(where).length > 0) {
406
- sqlWhere = and(sqlWhere, buildSQLWhere(where, subQueryAlias));
407
- }
408
- if (shouldCount) {
409
- currentArgs.extras[`${columnName}_count`] = sql`${db.select({
410
- count: count()
411
- }).from(sql`${currentQuery.as(subQueryAlias)}`).where(sqlWhere)}`.as(`${columnName}_count`);
412
- }
413
- currentQuery = currentQuery.orderBy(sortOrder(sql`"sortPath"`));
414
- const sortedUnionAlias = `${columnName}_sorted`;
415
- let limitOffsetSQL = sql.empty();
416
- if (limit) {
417
- limitOffsetSQL = sql` LIMIT ${limit}`;
418
- }
419
- if (page && limit !== 0) {
420
- const offset = (page - 1) * limit;
421
- if (offset > 0) {
422
- limitOffsetSQL = sql`${limitOffsetSQL} OFFSET ${offset}`;
423
- }
424
- }
425
- // Correlate to parent row + apply any join where filters
426
- let innerWhere = sql.raw(`"${sortedUnionAlias}"."${onPath}" = "${currentTableName}"."id"`);
427
- if (where && Object.keys(where).length > 0) {
428
- const additionalWhere = buildSQLWhere(where, sortedUnionAlias);
429
- innerWhere = sql`${innerWhere} AND ${additionalWhere}`;
258
+ const polymorphicJoinQuery = buildPolymorphicJoinQuery({
259
+ adapter,
260
+ currentTableName,
261
+ field,
262
+ limit,
263
+ locale,
264
+ page,
265
+ pageSize: limitArg,
266
+ path,
267
+ req,
268
+ shouldCount,
269
+ sort,
270
+ where
271
+ });
272
+ currentArgs.extras[polymorphicJoinQuery.columnName] = polymorphicJoinQuery.documents;
273
+ if (polymorphicJoinQuery.count) {
274
+ currentArgs.extras[`${polymorphicJoinQuery.columnName}_count`] = polymorphicJoinQuery.count;
430
275
  }
431
- // IMPORTANT: For polymorphic joins, LIMIT must be applied AFTER correlating to the parent row.
432
- // Otherwise, the limit applies globally across ALL parents, not per-parent.
433
- currentArgs.extras[columnName] = sql`(
434
- SELECT ${jsonAggBuildObject(adapter, {
435
- id: sql.raw(`"${subQueryAlias}"."id"`),
436
- relationTo: sql.raw(`"${subQueryAlias}"."relationTo"`)
437
- })}
438
- FROM (
439
- SELECT * FROM ${sql`${currentQuery.as(sortedUnionAlias)}`}
440
- WHERE ${innerWhere}${limitOffsetSQL}
441
- ) AS ${sql.raw(`"${subQueryAlias}"`)}
442
- )`.as(columnName);
443
276
  } else {
277
+ const db = adapter.drizzle;
444
278
  const useDrafts = (versions || draftsEnabled) && hasDraftsEnabled(adapter.payload.collections[field.collection].config);
445
279
  const fields = useDrafts ? buildVersionCollectionFields(adapter.payload.config, adapter.payload.collections[field.collection].config, true) : adapter.payload.collections[field.collection].config.flattenedFields;
446
280
  const joinCollectionTableName = adapter.tableNameMap.get(useDrafts ? `_${toSnakeCase(field.collection)}${adapter.versionsSuffix}` : toSnakeCase(field.collection));
447
281
  const joins = [];
448
282
  const currentIDColumn = versions ? adapter.tables[currentTableName].parent : adapter.tables[currentTableName].id;
449
283
  let joinQueryWhere;
450
- const currentIDRaw = sql.raw(`"${getNameFromDrizzleTable(currentIDColumn.table)}"."${currentIDColumn.name}"`);
284
+ const parentUsesBranching = collectionSlug ? resolveBranchReadState({
285
+ collectionSlug,
286
+ req
287
+ }).useBranching : false;
288
+ const canonicalIDColumn = parentUsesBranching ? adapter.tables[currentTableName][versions ? '_branchParent' : '_branchDocID'] : undefined;
289
+ // Correlated constraints must reference the outer query's alias, without its schema.
290
+ const currentTableIdentifier = sql.identifier(getNameFromDrizzleTable(currentIDColumn.table));
291
+ const currentIDExpression = sql`${currentTableIdentifier}.${sql.identifier(currentIDColumn.name)}`;
292
+ const currentIDRaw = canonicalIDColumn ? sql`COALESCE(${currentTableIdentifier}.${sql.identifier(canonicalIDColumn.name)}, ${currentIDExpression})` : currentIDExpression;
451
293
  if (Array.isArray(field.targetField.relationTo)) {
452
294
  joinQueryWhere = {
453
295
  [field.on]: {
@@ -472,12 +314,35 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
472
314
  ]
473
315
  };
474
316
  }
317
+ // A join subquery must carry the same branch predicate as the
318
+ // top-level read, or a branch would see main's related documents.
319
+ const branchReadState = resolveBranchReadState({
320
+ collectionSlug: field.collection,
321
+ req
322
+ });
323
+ const joinBranchPredicate = branchReadState.useBranching ? null : getBranchPredicateSync({
324
+ collectionSlug: field.collection,
325
+ req
326
+ });
475
327
  if (useDrafts) {
476
- joinQueryWhere = combineQueries(appendVersionToQueryKey(joinQueryWhere), {
328
+ const versionWhere = appendVersionToQueryKey(joinQueryWhere);
329
+ const branchVersionWhere = branchReadState.useBranching ? rewriteBranchVersionParents(versionWhere) : resolveBranchVersionQuerySync({
330
+ collectionSlug: field.collection,
331
+ req,
332
+ where: versionWhere
333
+ });
334
+ joinQueryWhere = combineQueries(branchVersionWhere ?? {}, {
477
335
  latest: {
478
336
  equals: true
479
337
  }
480
338
  });
339
+ } else if (!branchReadState.useBranching && joinBranchPredicate) {
340
+ joinQueryWhere = {
341
+ and: [
342
+ joinQueryWhere,
343
+ joinBranchPredicate
344
+ ]
345
+ };
481
346
  }
482
347
  const columnName = `${path.replaceAll('.', '_')}${field.name}`;
483
348
  const subQueryAlias = `${columnName}_alias`;
@@ -492,6 +357,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
492
357
  joins,
493
358
  locale,
494
359
  parentIsLocalized,
360
+ req,
495
361
  selectLocale: true,
496
362
  sort: useDrafts ? getQueryDraftsSort({
497
363
  collectionConfig: adapter.payload.collections[field.collection].config,
@@ -500,6 +366,14 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
500
366
  tableName: joinCollectionTableName,
501
367
  where: joinQueryWhere
502
368
  });
369
+ const nativeBranchVisibility = branchReadState.useBranching ? buildBranchVisibility({
370
+ adapter,
371
+ branch: branchReadState.branch,
372
+ canonicalIDExpression: useDrafts ? sql`COALESCE(${newAliasTable._branchParent}, ${newAliasTable.parent})` : undefined,
373
+ collectionSlug: field.collection,
374
+ table: newAliasTable
375
+ }) : undefined;
376
+ const visibleSubQueryWhere = nativeBranchVisibility ? and(subQueryWhere, nativeBranchVisibility) : subQueryWhere;
503
377
  for(let key in selectFields){
504
378
  const val = selectFields[key];
505
379
  if (val.table && getNameFromDrizzleTable(val.table) === joinCollectionTableName) {
@@ -509,9 +383,19 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
509
383
  }
510
384
  }
511
385
  if (useDrafts) {
512
- selectFields.parent = newAliasTable.parent;
513
- }
514
- let query = db.select(selectFields).from(newAliasTable).where(subQueryWhere).orderBy(()=>orderBy.map(({ column, order })=>order(column))).$dynamic();
386
+ delete selectFields[`${joinCollectionTableName}.parent`];
387
+ selectFields.parent = newAliasTable._branchParent ? sql`COALESCE(${newAliasTable._branchParent}, ${newAliasTable.parent})`.as(newAliasTable.parent.name) : newAliasTable.parent;
388
+ }
389
+ // Surface the canonical document ID rather than the shadow row's own
390
+ // primary key, so join results address documents the same way every
391
+ // other read does.
392
+ if ((branchReadState.useBranching || joinBranchPredicate) && newAliasTable._branchDocID) {
393
+ // `selectFields` is typed as a column map, but Drizzle accepts an
394
+ // aliased expression in the same position — as the sibling
395
+ // `sql\`...\`.as()` assignments above already rely on.
396
+ selectFields.id = sql`COALESCE(${newAliasTable._branchDocID}, ${newAliasTable.id})`.as('id');
397
+ }
398
+ let query = db.select(selectFields).from(newAliasTable).where(visibleSubQueryWhere).orderBy(()=>orderBy.map(({ column, order })=>order(column))).$dynamic();
515
399
  joins.forEach(({ type, condition, table })=>{
516
400
  query = query[type ?? 'leftJoin'](table, condition);
517
401
  });
@@ -526,7 +410,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
526
410
  }
527
411
  const subQuery = query.as(subQueryAlias);
528
412
  if (shouldCount) {
529
- let countSubquery = db.select(selectFields).from(newAliasTable).where(subQueryWhere).$dynamic();
413
+ let countSubquery = db.select(selectFields).from(newAliasTable).where(visibleSubQueryWhere).$dynamic();
530
414
  joins.forEach(({ type, condition, table })=>{
531
415
  countSubquery = countSubquery[type ?? 'leftJoin'](table, condition);
532
416
  });