@payloadcms/drizzle 3.24.0-canary.f229d8d → 3.24.0

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 (71) hide show
  1. package/dist/find/traverseFields.d.ts +2 -2
  2. package/dist/find/traverseFields.d.ts.map +1 -1
  3. package/dist/find/traverseFields.js +216 -89
  4. package/dist/find/traverseFields.js.map +1 -1
  5. package/dist/postgres/countDistinct.d.ts.map +1 -1
  6. package/dist/postgres/countDistinct.js +14 -13
  7. package/dist/postgres/countDistinct.js.map +1 -1
  8. package/dist/queries/buildAndOrConditions.d.ts +2 -1
  9. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  10. package/dist/queries/buildAndOrConditions.js +2 -1
  11. package/dist/queries/buildAndOrConditions.js.map +1 -1
  12. package/dist/queries/buildOrderBy.d.ts +2 -1
  13. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  14. package/dist/queries/buildOrderBy.js +2 -1
  15. package/dist/queries/buildOrderBy.js.map +1 -1
  16. package/dist/queries/buildQuery.d.ts +2 -1
  17. package/dist/queries/buildQuery.d.ts.map +1 -1
  18. package/dist/queries/buildQuery.js +3 -1
  19. package/dist/queries/buildQuery.js.map +1 -1
  20. package/dist/queries/getTableColumnFromPath.d.ts +2 -1
  21. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  22. package/dist/queries/getTableColumnFromPath.js +52 -27
  23. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  24. package/dist/queries/parseParams.d.ts +2 -1
  25. package/dist/queries/parseParams.d.ts.map +1 -1
  26. package/dist/queries/parseParams.js +3 -1
  27. package/dist/queries/parseParams.js.map +1 -1
  28. package/dist/schema/build.d.ts +2 -1
  29. package/dist/schema/build.d.ts.map +1 -1
  30. package/dist/schema/build.js +2 -1
  31. package/dist/schema/build.js.map +1 -1
  32. package/dist/schema/buildRawSchema.d.ts.map +1 -1
  33. package/dist/schema/buildRawSchema.js +4 -0
  34. package/dist/schema/buildRawSchema.js.map +1 -1
  35. package/dist/schema/traverseFields.d.ts +2 -1
  36. package/dist/schema/traverseFields.d.ts.map +1 -1
  37. package/dist/schema/traverseFields.js +30 -15
  38. package/dist/schema/traverseFields.js.map +1 -1
  39. package/dist/transform/read/index.d.ts +2 -1
  40. package/dist/transform/read/index.d.ts.map +1 -1
  41. package/dist/transform/read/index.js +2 -1
  42. package/dist/transform/read/index.js.map +1 -1
  43. package/dist/transform/read/traverseFields.d.ts +2 -1
  44. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  45. package/dist/transform/read/traverseFields.js +33 -16
  46. package/dist/transform/read/traverseFields.js.map +1 -1
  47. package/dist/transform/write/array.d.ts +2 -1
  48. package/dist/transform/write/array.d.ts.map +1 -1
  49. package/dist/transform/write/array.js +7 -2
  50. package/dist/transform/write/array.js.map +1 -1
  51. package/dist/transform/write/blocks.d.ts +2 -1
  52. package/dist/transform/write/blocks.d.ts.map +1 -1
  53. package/dist/transform/write/blocks.js +7 -2
  54. package/dist/transform/write/blocks.js.map +1 -1
  55. package/dist/transform/write/index.d.ts +2 -1
  56. package/dist/transform/write/index.d.ts.map +1 -1
  57. package/dist/transform/write/index.js +2 -1
  58. package/dist/transform/write/index.js.map +1 -1
  59. package/dist/transform/write/traverseFields.d.ts +2 -1
  60. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  61. package/dist/transform/write/traverseFields.js +22 -12
  62. package/dist/transform/write/traverseFields.js.map +1 -1
  63. package/dist/utilities/hasLocalesTable.d.ts +7 -1
  64. package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
  65. package/dist/utilities/hasLocalesTable.js +14 -5
  66. package/dist/utilities/hasLocalesTable.js.map +1 -1
  67. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +5 -1
  68. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  69. package/dist/utilities/validateExistingBlockIsIdentical.js +22 -7
  70. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  71. package/package.json +3 -3
@@ -12,6 +12,7 @@ type TraverseFieldArgs = {
12
12
  joinQuery: JoinQuery;
13
13
  joins?: BuildQueryJoinAliases;
14
14
  locale?: string;
15
+ parentIsLocalized?: boolean;
15
16
  path: string;
16
17
  select?: SelectType;
17
18
  selectAllOnCurrentLevel?: boolean;
@@ -20,13 +21,12 @@ type TraverseFieldArgs = {
20
21
  topLevelArgs: Record<string, unknown>;
21
22
  topLevelTableName: string;
22
23
  versions?: boolean;
23
- withinLocalizedField?: boolean;
24
24
  withTabledFields: {
25
25
  numbers?: boolean;
26
26
  rels?: boolean;
27
27
  texts?: boolean;
28
28
  };
29
29
  };
30
- export declare const traverseFields: ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, fields, joinQuery, joins, locale, path, select, selectAllOnCurrentLevel, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withinLocalizedField, withTabledFields, }: TraverseFieldArgs) => Record<string, unknown>;
30
+ export declare const traverseFields: ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, fields, joinQuery, joins, locale, parentIsLocalized, path, select, selectAllOnCurrentLevel, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields, }: TraverseFieldArgs) => Record<string, unknown>;
31
31
  export {};
32
32
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAS,MAAM,SAAS,CAAA;AAMvF,OAAO,KAAK,EAAE,qBAAqB,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AASpD,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,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,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,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,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,oQAqBxB,iBAAiB,4BAugBnB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAS,MAAM,SAAS,CAAA;AAMvF,OAAO,KAAK,EAAE,qBAAqB,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AA+CpD,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,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,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,iQAqBxB,iBAAiB,4BAkoBnB,CAAA"}
@@ -1,20 +1,63 @@
1
- import { sql } from 'drizzle-orm';
2
- import { fieldIsVirtual } from 'payload/shared';
1
+ import { and, asc, desc, eq, or, sql } from 'drizzle-orm';
2
+ import { fieldIsVirtual, fieldShouldBeLocalized } from 'payload/shared';
3
3
  import toSnakeCase from 'to-snake-case';
4
4
  import buildQuery from '../queries/buildQuery.js';
5
5
  import { getTableAlias } from '../queries/getTableAlias.js';
6
+ import { operatorMap } from '../queries/operatorMap.js';
6
7
  import { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js';
7
8
  import { jsonAggBuildObject } from '../utilities/json.js';
8
9
  import { rawConstraint } from '../utilities/rawConstraint.js';
9
10
  import { chainMethods } from './chainMethods.js';
10
- export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, fields, joinQuery = {}, joins, locale, path, select, selectAllOnCurrentLevel = false, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withinLocalizedField = false, withTabledFields })=>{
11
+ const flattenAllWherePaths = (where, paths)=>{
12
+ for(const k in where){
13
+ if ([
14
+ 'AND',
15
+ 'OR'
16
+ ].includes(k.toUpperCase())) {
17
+ if (Array.isArray(where[k])) {
18
+ for (const whereField of where[k]){
19
+ flattenAllWherePaths(whereField, paths);
20
+ }
21
+ }
22
+ } else {
23
+ // TODO: explore how to support arrays/relationship querying.
24
+ paths.push(k.split('.').join('_'));
25
+ }
26
+ }
27
+ };
28
+ const buildSQLWhere = (where, alias)=>{
29
+ for(const k in where){
30
+ if ([
31
+ 'AND',
32
+ 'OR'
33
+ ].includes(k.toUpperCase())) {
34
+ if (Array.isArray(where[k])) {
35
+ const op = 'AND' === k.toUpperCase() ? and : or;
36
+ const accumulated = [];
37
+ for (const whereField of where[k]){
38
+ accumulated.push(buildSQLWhere(whereField, alias));
39
+ }
40
+ return op(...accumulated);
41
+ }
42
+ } else {
43
+ const payloadOperator = Object.keys(where[k])[0];
44
+ const value = where[k][payloadOperator];
45
+ return operatorMap[payloadOperator](sql.raw(`"${alias}"."${k.split('.').join('_')}"`), value);
46
+ }
47
+ }
48
+ };
49
+ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, fields, joinQuery = {}, joins, locale, parentIsLocalized = false, path, select, selectAllOnCurrentLevel = false, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields })=>{
11
50
  fields.forEach((field)=>{
12
51
  if (fieldIsVirtual(field)) {
13
52
  return;
14
53
  }
54
+ const isFieldLocalized = fieldShouldBeLocalized({
55
+ field,
56
+ parentIsLocalized
57
+ });
15
58
  // handle simple relationship
16
59
  if (depth > 0 && (field.type === 'upload' || field.type === 'relationship') && !field.hasMany && typeof field.relationTo === 'string') {
17
- if (field.localized) {
60
+ if (isFieldLocalized) {
18
61
  _locales.with[`${path}${field.name}`] = true;
19
62
  } else {
20
63
  currentArgs.with[`${path}${field.name}`] = true;
@@ -72,13 +115,13 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
72
115
  fields: field.flattenedFields,
73
116
  joinQuery,
74
117
  locale,
118
+ parentIsLocalized: parentIsLocalized || field.localized,
75
119
  path: '',
76
120
  select: typeof arraySelect === 'object' ? arraySelect : undefined,
77
121
  selectMode,
78
122
  tablePath: '',
79
123
  topLevelArgs,
80
124
  topLevelTableName,
81
- withinLocalizedField: withinLocalizedField || field.localized,
82
125
  withTabledFields
83
126
  });
84
127
  if (typeof arraySelect === 'object' && withArray.with._locales && Object.keys(withArray.with._locales).length === 1) {
@@ -156,13 +199,13 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
156
199
  fields: block.flattenedFields,
157
200
  joinQuery,
158
201
  locale,
202
+ parentIsLocalized: parentIsLocalized || field.localized,
159
203
  path: '',
160
204
  select: typeof blockSelect === 'object' ? blockSelect : undefined,
161
205
  selectMode: blockSelectMode,
162
206
  tablePath: '',
163
207
  topLevelArgs,
164
208
  topLevelTableName,
165
- withinLocalizedField: withinLocalizedField || field.localized,
166
209
  withTabledFields
167
210
  });
168
211
  if (typeof blockSelect === 'object' && withBlock.with._locales && Object.keys(withBlock.with._locales.columns).length === 1) {
@@ -190,6 +233,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
190
233
  joinQuery,
191
234
  joins,
192
235
  locale,
236
+ parentIsLocalized: parentIsLocalized || field.localized,
193
237
  path: `${path}${field.name}_`,
194
238
  select: typeof fieldSelect === 'object' ? fieldSelect : undefined,
195
239
  selectAllOnCurrentLevel: selectAllOnCurrentLevel || fieldSelect === true || selectMode === 'exclude' && typeof fieldSelect === 'undefined',
@@ -198,7 +242,6 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
198
242
  topLevelArgs,
199
243
  topLevelTableName,
200
244
  versions,
201
- withinLocalizedField: withinLocalizedField || field.localized,
202
245
  withTabledFields
203
246
  });
204
247
  break;
@@ -216,97 +259,181 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
216
259
  if (joinQuery[joinSchemaPath] === false) {
217
260
  break;
218
261
  }
219
- const { limit: limitArg = field.defaultLimit ?? 10, sort = field.defaultSort, where } = joinQuery[joinSchemaPath] || {};
262
+ const { limit: limitArg = field.defaultLimit ?? 10, page, sort = field.defaultSort, where } = joinQuery[joinSchemaPath] || {};
220
263
  let limit = limitArg;
221
264
  if (limit !== 0) {
222
265
  // get an additional document and slice it later to determine if there is a next page
223
266
  limit += 1;
224
267
  }
225
- const fields = adapter.payload.collections[field.collection].config.flattenedFields;
226
- const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(field.collection));
227
- const joins = [];
228
- const currentIDColumn = versions ? adapter.tables[currentTableName].parent : adapter.tables[currentTableName].id;
229
- let joinQueryWhere;
230
- if (Array.isArray(field.targetField.relationTo)) {
231
- joinQueryWhere = {
232
- [field.on]: {
233
- equals: {
234
- relationTo: collectionSlug,
235
- value: rawConstraint(currentIDColumn)
268
+ const columnName = `${path.replaceAll('.', '_')}${field.name}`;
269
+ const db = adapter.drizzle;
270
+ if (Array.isArray(field.collection)) {
271
+ let currentQuery = null;
272
+ const onPath = field.on.split('.').join('_');
273
+ if (Array.isArray(sort)) {
274
+ throw new Error('Not implemented');
275
+ }
276
+ let sanitizedSort = sort;
277
+ if (!sanitizedSort) {
278
+ if (field.collection.some((collection)=>adapter.payload.collections[collection].config.fields.some((f)=>f.type === 'date' && f.name === 'createdAt'))) {
279
+ sanitizedSort = '-createdAt';
280
+ } else {
281
+ sanitizedSort = 'id';
282
+ }
283
+ }
284
+ const sortOrder = sanitizedSort.startsWith('-') ? desc : asc;
285
+ sanitizedSort = sanitizedSort.replace('-', '');
286
+ const sortPath = sanitizedSort.split('.').join('_');
287
+ const wherePaths = [];
288
+ if (where) {
289
+ flattenAllWherePaths(where, wherePaths);
290
+ }
291
+ for (const collection of field.collection){
292
+ const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(collection));
293
+ const table = adapter.tables[joinCollectionTableName];
294
+ const sortColumn = table[sortPath];
295
+ const selectFields = {
296
+ id: adapter.tables[joinCollectionTableName].id,
297
+ parent: sql`${adapter.tables[joinCollectionTableName][onPath]}`.as(onPath),
298
+ relationTo: sql`${collection}`.as('relationTo'),
299
+ sortPath: sql`${sortColumn ? sortColumn : null}`.as('sortPath')
300
+ };
301
+ // Select for WHERE and Fallback NULL
302
+ for (const path of wherePaths){
303
+ if (adapter.tables[joinCollectionTableName][path]) {
304
+ selectFields[path] = sql`${adapter.tables[joinCollectionTableName][path]}`.as(path);
305
+ // Allow to filter by collectionSlug
306
+ } else if (path !== 'relationTo') {
307
+ selectFields[path] = sql`null`.as(path);
236
308
  }
237
309
  }
238
- };
239
- } else {
240
- joinQueryWhere = {
241
- [field.on]: {
242
- equals: rawConstraint(currentIDColumn)
310
+ const query = db.select(selectFields).from(adapter.tables[joinCollectionTableName]);
311
+ if (currentQuery === null) {
312
+ currentQuery = query;
313
+ } else {
314
+ currentQuery = currentQuery.unionAll(query);
243
315
  }
244
- };
245
- }
246
- if (where && Object.keys(where).length) {
247
- joinQueryWhere = {
248
- and: [
249
- joinQueryWhere,
250
- where
251
- ]
252
- };
253
- }
254
- const columnName = `${path.replaceAll('.', '_')}${field.name}`;
255
- const subQueryAlias = `${columnName}_alias`;
256
- const { newAliasTable } = getTableAlias({
257
- adapter,
258
- tableName: joinCollectionTableName
259
- });
260
- const { orderBy, selectFields, where: subQueryWhere } = buildQuery({
261
- adapter,
262
- aliasTable: newAliasTable,
263
- fields,
264
- joins,
265
- locale,
266
- selectLocale: true,
267
- sort,
268
- tableName: joinCollectionTableName,
269
- where: joinQueryWhere
270
- });
271
- const chainedMethods = [];
272
- joins.forEach(({ type, condition, table })=>{
273
- chainedMethods.push({
274
- args: [
275
- table,
276
- condition
277
- ],
278
- method: type ?? 'leftJoin'
316
+ }
317
+ const subQueryAlias = `${columnName}_subquery`;
318
+ let sqlWhere = eq(adapter.tables[currentTableName].id, sql.raw(`"${subQueryAlias}"."${onPath}"`));
319
+ if (where && Object.keys(where).length > 0) {
320
+ sqlWhere = and(sqlWhere, buildSQLWhere(where, subQueryAlias));
321
+ }
322
+ currentQuery = currentQuery.orderBy(sortOrder(sql`"sortPath"`));
323
+ if (page && limit !== 0) {
324
+ const offset = (page - 1) * limit;
325
+ if (offset > 0) {
326
+ currentQuery = currentQuery.offset(offset);
327
+ }
328
+ }
329
+ if (limit) {
330
+ currentQuery = currentQuery.limit(limit);
331
+ }
332
+ currentArgs.extras[columnName] = sql`${db.select({
333
+ id: jsonAggBuildObject(adapter, {
334
+ id: sql.raw(`"${subQueryAlias}"."id"`),
335
+ relationTo: sql.raw(`"${subQueryAlias}"."relationTo"`)
336
+ })
337
+ }).from(sql`${currentQuery.as(subQueryAlias)}`).where(sqlWhere)}`.as(columnName);
338
+ } else {
339
+ const fields = adapter.payload.collections[field.collection].config.flattenedFields;
340
+ const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(field.collection));
341
+ const joins = [];
342
+ const currentIDColumn = versions ? adapter.tables[currentTableName].parent : adapter.tables[currentTableName].id;
343
+ let joinQueryWhere;
344
+ if (Array.isArray(field.targetField.relationTo)) {
345
+ joinQueryWhere = {
346
+ [field.on]: {
347
+ equals: {
348
+ relationTo: collectionSlug,
349
+ value: rawConstraint(currentIDColumn)
350
+ }
351
+ }
352
+ };
353
+ } else {
354
+ joinQueryWhere = {
355
+ [field.on]: {
356
+ equals: rawConstraint(currentIDColumn)
357
+ }
358
+ };
359
+ }
360
+ if (where && Object.keys(where).length) {
361
+ joinQueryWhere = {
362
+ and: [
363
+ joinQueryWhere,
364
+ where
365
+ ]
366
+ };
367
+ }
368
+ const columnName = `${path.replaceAll('.', '_')}${field.name}`;
369
+ const subQueryAlias = `${columnName}_alias`;
370
+ const { newAliasTable } = getTableAlias({
371
+ adapter,
372
+ tableName: joinCollectionTableName
279
373
  });
280
- });
281
- if (limit !== 0) {
282
- chainedMethods.push({
283
- args: [
284
- limit
285
- ],
286
- method: 'limit'
374
+ const { orderBy, selectFields, where: subQueryWhere } = buildQuery({
375
+ adapter,
376
+ aliasTable: newAliasTable,
377
+ fields,
378
+ joins,
379
+ locale,
380
+ parentIsLocalized,
381
+ selectLocale: true,
382
+ sort,
383
+ tableName: joinCollectionTableName,
384
+ where: joinQueryWhere
287
385
  });
288
- }
289
- const db = adapter.drizzle;
290
- for(let key in selectFields){
291
- const val = selectFields[key];
292
- if (val.table && getNameFromDrizzleTable(val.table) === joinCollectionTableName) {
293
- delete selectFields[key];
294
- key = key.split('.').pop();
295
- selectFields[key] = newAliasTable[key];
386
+ const chainedMethods = [];
387
+ joins.forEach(({ type, condition, table })=>{
388
+ chainedMethods.push({
389
+ args: [
390
+ table,
391
+ condition
392
+ ],
393
+ method: type ?? 'leftJoin'
394
+ });
395
+ });
396
+ if (page && limit !== 0) {
397
+ const offset = (page - 1) * limit - 1;
398
+ if (offset > 0) {
399
+ chainedMethods.push({
400
+ args: [
401
+ offset
402
+ ],
403
+ method: 'offset'
404
+ });
405
+ }
296
406
  }
297
- }
298
- const subQuery = chainMethods({
299
- methods: chainedMethods,
300
- query: db.select(selectFields).from(newAliasTable).where(subQueryWhere).orderBy(()=>orderBy.map(({ column, order })=>order(column)))
301
- }).as(subQueryAlias);
302
- currentArgs.extras[columnName] = sql`${db.select({
303
- result: jsonAggBuildObject(adapter, {
304
- id: sql.raw(`"${subQueryAlias}".id`),
305
- ...selectFields._locale && {
306
- locale: sql.raw(`"${subQueryAlias}".${selectFields._locale.name}`)
407
+ if (limit !== 0) {
408
+ chainedMethods.push({
409
+ args: [
410
+ limit
411
+ ],
412
+ method: 'limit'
413
+ });
414
+ }
415
+ const db = adapter.drizzle;
416
+ for(let key in selectFields){
417
+ const val = selectFields[key];
418
+ if (val.table && getNameFromDrizzleTable(val.table) === joinCollectionTableName) {
419
+ delete selectFields[key];
420
+ key = key.split('.').pop();
421
+ selectFields[key] = newAliasTable[key];
307
422
  }
308
- })
309
- }).from(sql`${subQuery}`)}`.as(subQueryAlias);
423
+ }
424
+ const subQuery = chainMethods({
425
+ methods: chainedMethods,
426
+ query: db.select(selectFields).from(newAliasTable).where(subQueryWhere).orderBy(()=>orderBy.map(({ column, order })=>order(column)))
427
+ }).as(subQueryAlias);
428
+ currentArgs.extras[columnName] = sql`${db.select({
429
+ result: jsonAggBuildObject(adapter, {
430
+ id: sql.raw(`"${subQueryAlias}".id`),
431
+ ...selectFields._locale && {
432
+ locale: sql.raw(`"${subQueryAlias}".${selectFields._locale.name}`)
433
+ }
434
+ })
435
+ }).from(sql`${subQuery}`)}`.as(subQueryAlias);
436
+ }
310
437
  break;
311
438
  }
312
439
  case 'point':
@@ -314,7 +441,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
314
441
  if (adapter.name === 'sqlite') {
315
442
  break;
316
443
  }
317
- const args = field.localized ? _locales : currentArgs;
444
+ const args = isFieldLocalized ? _locales : currentArgs;
318
445
  if (!args.columns) {
319
446
  args.columns = {};
320
447
  }
@@ -361,7 +488,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
361
488
  }
362
489
  if (select || selectAllOnCurrentLevel) {
363
490
  const fieldPath = `${path}${field.name}`;
364
- if ((field.localized || withinLocalizedField) && _locales) {
491
+ if ((isFieldLocalized || parentIsLocalized) && _locales) {
365
492
  _locales.columns[fieldPath] = true;
366
493
  } else if (adapter.tables[currentTableName]?.[fieldPath]) {
367
494
  currentArgs.columns[fieldPath] = true;
@@ -376,7 +503,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
376
503
  }
377
504
  if (selectAllOnCurrentLevel || selectMode === 'include' && select[field.name] === true || selectMode === 'exclude' && typeof select[field.name] === 'undefined') {
378
505
  const fieldPath = `${path}${field.name}`;
379
- if ((field.localized || withinLocalizedField) && _locales) {
506
+ if ((isFieldLocalized || parentIsLocalized) && _locales) {
380
507
  _locales.columns[fieldPath] = true;
381
508
  } else if (adapter.tables[currentTableName]?.[fieldPath]) {
382
509
  currentArgs.columns[fieldPath] = true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/find/traverseFields.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { FlattenedField, JoinQuery, SelectMode, SelectType, Where } from 'payload'\n\nimport { sql } from 'drizzle-orm'\nimport { fieldIsVirtual } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BuildQueryJoinAliases, ChainedMethods, DrizzleAdapter } from '../types.js'\nimport type { Result } from './buildFindManyArgs.js'\n\nimport buildQuery from '../queries/buildQuery.js'\nimport { getTableAlias } from '../queries/getTableAlias.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { jsonAggBuildObject } from '../utilities/json.js'\nimport { rawConstraint } from '../utilities/rawConstraint.js'\nimport { chainMethods } from './chainMethods.js'\n\ntype TraverseFieldArgs = {\n _locales: Result\n adapter: DrizzleAdapter\n collectionSlug?: string\n currentArgs: Result\n currentTableName: string\n depth?: number\n fields: FlattenedField[]\n joinQuery: JoinQuery\n joins?: BuildQueryJoinAliases\n locale?: string\n path: string\n select?: SelectType\n selectAllOnCurrentLevel?: boolean\n selectMode?: SelectMode\n tablePath: string\n topLevelArgs: Record<string, unknown>\n topLevelTableName: string\n versions?: boolean\n withinLocalizedField?: boolean\n withTabledFields: {\n numbers?: boolean\n rels?: boolean\n texts?: boolean\n }\n}\n\nexport const traverseFields = ({\n _locales,\n adapter,\n collectionSlug,\n currentArgs,\n currentTableName,\n depth,\n fields,\n joinQuery = {},\n joins,\n locale,\n path,\n select,\n selectAllOnCurrentLevel = false,\n selectMode,\n tablePath,\n topLevelArgs,\n topLevelTableName,\n versions,\n withinLocalizedField = false,\n withTabledFields,\n}: TraverseFieldArgs) => {\n fields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n // handle simple relationship\n if (\n depth > 0 &&\n (field.type === 'upload' || field.type === 'relationship') &&\n !field.hasMany &&\n typeof field.relationTo === 'string'\n ) {\n if (field.localized) {\n _locales.with[`${path}${field.name}`] = true\n } else {\n currentArgs.with[`${path}${field.name}`] = true\n }\n }\n\n switch (field.type) {\n case 'array': {\n const arraySelect = selectAllOnCurrentLevel ? true : select?.[field.name]\n\n if (select) {\n if (\n (selectMode === 'include' && typeof arraySelect === 'undefined') ||\n (selectMode === 'exclude' && arraySelect === false)\n ) {\n break\n }\n }\n\n const withArray: Result = {\n columns:\n typeof arraySelect === 'object'\n ? {\n id: true,\n _order: true,\n }\n : {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const arrayTableName = adapter.tableNameMap.get(\n `${currentTableName}_${tablePath}${toSnakeCase(field.name)}`,\n )\n\n if (typeof arraySelect === 'object') {\n if (adapter.tables[arrayTableName]._locale) {\n withArray.columns._locale = true\n }\n\n if (adapter.tables[arrayTableName]._uuid) {\n withArray.columns._uuid = true\n }\n }\n\n const arrayTableNameWithLocales = `${arrayTableName}${adapter.localesSuffix}`\n\n if (adapter.tables[arrayTableNameWithLocales]) {\n withArray.with._locales = {\n columns:\n typeof arraySelect === 'object'\n ? {\n _locale: true,\n }\n : {\n id: false,\n _parentID: false,\n },\n with: {},\n }\n }\n\n currentArgs.with[`${path}${field.name}`] = withArray\n\n traverseFields({\n _locales: withArray.with._locales,\n adapter,\n currentArgs: withArray,\n currentTableName: arrayTableName,\n depth,\n fields: field.flattenedFields,\n joinQuery,\n locale,\n path: '',\n select: typeof arraySelect === 'object' ? arraySelect : undefined,\n selectMode,\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n withinLocalizedField: withinLocalizedField || field.localized,\n withTabledFields,\n })\n\n if (\n typeof arraySelect === 'object' &&\n withArray.with._locales &&\n Object.keys(withArray.with._locales).length === 1\n ) {\n delete withArray.with._locales\n }\n\n break\n }\n\n case 'blocks': {\n const blocksSelect = selectAllOnCurrentLevel ? true : select?.[field.name]\n\n if (select) {\n if (\n (selectMode === 'include' && !blocksSelect) ||\n (selectMode === 'exclude' && blocksSelect === false)\n ) {\n break\n }\n }\n\n ;(field.blockReferences ?? field.blocks).forEach((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n const blockKey = `_blocks_${block.slug}`\n\n let blockSelect: boolean | SelectType | undefined\n\n let blockSelectMode = selectMode\n\n if (selectMode === 'include' && blocksSelect === true) {\n blockSelect = true\n }\n\n if (typeof blocksSelect === 'object') {\n if (typeof blocksSelect[block.slug] === 'object') {\n blockSelect = blocksSelect[block.slug]\n } else if (\n (selectMode === 'include' && typeof blocksSelect[block.slug] === 'undefined') ||\n (selectMode === 'exclude' && blocksSelect[block.slug] === false)\n ) {\n blockSelect = {}\n blockSelectMode = 'include'\n } else if (selectMode === 'include' && blocksSelect[block.slug] === true) {\n blockSelect = true\n }\n }\n\n if (!topLevelArgs[blockKey]) {\n const withBlock: Result = {\n columns:\n typeof blockSelect === 'object'\n ? {\n id: true,\n _order: true,\n _path: true,\n }\n : {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const tableName = adapter.tableNameMap.get(\n `${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`,\n )\n\n if (typeof blockSelect === 'object') {\n if (adapter.tables[tableName]._locale) {\n withBlock.columns._locale = true\n }\n\n if (adapter.tables[tableName]._uuid) {\n withBlock.columns._uuid = true\n }\n }\n\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`]) {\n withBlock.with._locales = {\n with: {},\n }\n\n if (typeof blockSelect === 'object') {\n withBlock.with._locales.columns = {\n _locale: true,\n }\n }\n }\n topLevelArgs.with[blockKey] = withBlock\n\n traverseFields({\n _locales: withBlock.with._locales,\n adapter,\n currentArgs: withBlock,\n currentTableName: tableName,\n depth,\n fields: block.flattenedFields,\n joinQuery,\n locale,\n path: '',\n select: typeof blockSelect === 'object' ? blockSelect : undefined,\n selectMode: blockSelectMode,\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n withinLocalizedField: withinLocalizedField || field.localized,\n withTabledFields,\n })\n\n if (\n typeof blockSelect === 'object' &&\n withBlock.with._locales &&\n Object.keys(withBlock.with._locales.columns).length === 1\n ) {\n delete withBlock.with._locales\n }\n }\n })\n\n break\n }\n\n case 'group':\n case 'tab': {\n const fieldSelect = select?.[field.name]\n\n if (fieldSelect === false) {\n break\n }\n\n traverseFields({\n _locales,\n adapter,\n collectionSlug,\n currentArgs,\n currentTableName,\n depth,\n fields: field.flattenedFields,\n joinQuery,\n joins,\n locale,\n path: `${path}${field.name}_`,\n select: typeof fieldSelect === 'object' ? fieldSelect : undefined,\n selectAllOnCurrentLevel:\n selectAllOnCurrentLevel ||\n fieldSelect === true ||\n (selectMode === 'exclude' && typeof fieldSelect === 'undefined'),\n selectMode,\n tablePath: `${tablePath}${toSnakeCase(field.name)}_`,\n topLevelArgs,\n topLevelTableName,\n versions,\n withinLocalizedField: withinLocalizedField || field.localized,\n withTabledFields,\n })\n\n break\n }\n case 'join': {\n // when `joinsQuery` is false, do not join\n if (joinQuery === false) {\n break\n }\n\n if (\n (select && selectMode === 'include' && !select[field.name]) ||\n (selectMode === 'exclude' && select[field.name] === false)\n ) {\n break\n }\n\n const joinSchemaPath = `${path.replaceAll('_', '.')}${field.name}`\n\n if (joinQuery[joinSchemaPath] === false) {\n break\n }\n\n const {\n limit: limitArg = field.defaultLimit ?? 10,\n sort = field.defaultSort,\n where,\n } = joinQuery[joinSchemaPath] || {}\n let limit = limitArg\n\n if (limit !== 0) {\n // get an additional document and slice it later to determine if there is a next page\n limit += 1\n }\n\n const fields = adapter.payload.collections[field.collection].config.flattenedFields\n\n const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(field.collection))\n\n const joins: BuildQueryJoinAliases = []\n\n const currentIDColumn = versions\n ? adapter.tables[currentTableName].parent\n : adapter.tables[currentTableName].id\n\n let joinQueryWhere: Where\n\n if (Array.isArray(field.targetField.relationTo)) {\n joinQueryWhere = {\n [field.on]: {\n equals: {\n relationTo: collectionSlug,\n value: rawConstraint(currentIDColumn),\n },\n },\n }\n } else {\n joinQueryWhere = {\n [field.on]: {\n equals: rawConstraint(currentIDColumn),\n },\n }\n }\n\n if (where && Object.keys(where).length) {\n joinQueryWhere = {\n and: [joinQueryWhere, where],\n }\n }\n\n const columnName = `${path.replaceAll('.', '_')}${field.name}`\n\n const subQueryAlias = `${columnName}_alias`\n\n const { newAliasTable } = getTableAlias({\n adapter,\n tableName: joinCollectionTableName,\n })\n\n const {\n orderBy,\n selectFields,\n where: subQueryWhere,\n } = buildQuery({\n adapter,\n aliasTable: newAliasTable,\n fields,\n joins,\n locale,\n selectLocale: true,\n sort,\n tableName: joinCollectionTableName,\n where: joinQueryWhere,\n })\n\n const chainedMethods: ChainedMethods = []\n\n joins.forEach(({ type, condition, table }) => {\n chainedMethods.push({\n args: [table, condition],\n method: type ?? 'leftJoin',\n })\n })\n\n if (limit !== 0) {\n chainedMethods.push({\n args: [limit],\n method: 'limit',\n })\n }\n\n const db = adapter.drizzle as LibSQLDatabase\n\n for (let key in selectFields) {\n const val = selectFields[key]\n\n if (val.table && getNameFromDrizzleTable(val.table) === joinCollectionTableName) {\n delete selectFields[key]\n key = key.split('.').pop()\n selectFields[key] = newAliasTable[key]\n }\n }\n\n const subQuery = chainMethods({\n methods: chainedMethods,\n query: db\n .select(selectFields as any)\n .from(newAliasTable)\n .where(subQueryWhere)\n .orderBy(() => orderBy.map(({ column, order }) => order(column))),\n }).as(subQueryAlias)\n\n currentArgs.extras[columnName] = sql`${db\n .select({\n result: jsonAggBuildObject(adapter, {\n id: sql.raw(`\"${subQueryAlias}\".id`),\n ...(selectFields._locale && {\n locale: sql.raw(`\"${subQueryAlias}\".${selectFields._locale.name}`),\n }),\n }),\n })\n .from(sql`${subQuery}`)}`.as(subQueryAlias)\n\n break\n }\n\n case 'point': {\n if (adapter.name === 'sqlite') {\n break\n }\n\n const args = field.localized ? _locales : currentArgs\n if (!args.columns) {\n args.columns = {}\n }\n\n if (!args.extras) {\n args.extras = {}\n }\n\n const name = `${path}${field.name}`\n\n // Drizzle handles that poorly. See https://github.com/drizzle-team/drizzle-orm/issues/2526\n // Additionally, this way we format the column value straight in the database using ST_AsGeoJSON\n args.columns[name] = false\n\n let shouldSelect = false\n\n if (select || selectAllOnCurrentLevel) {\n if (\n selectAllOnCurrentLevel ||\n (selectMode === 'include' && select[field.name] === true) ||\n (selectMode === 'exclude' && typeof select[field.name] === 'undefined')\n ) {\n shouldSelect = true\n }\n } else {\n shouldSelect = true\n }\n\n if (shouldSelect) {\n args.extras[name] = sql.raw(`ST_AsGeoJSON(${toSnakeCase(name)})::jsonb`).as(name)\n }\n break\n }\n\n case 'select': {\n if (select && !selectAllOnCurrentLevel) {\n if (\n (selectMode === 'include' && !select[field.name]) ||\n (selectMode === 'exclude' && select[field.name] === false)\n ) {\n break\n }\n }\n\n if (field.hasMany) {\n const withSelect: Result = {\n columns: {\n id: false,\n order: false,\n parent: false,\n },\n orderBy: ({ order }, { asc }) => [asc(order)],\n }\n\n currentArgs.with[`${path}${field.name}`] = withSelect\n break\n }\n\n if (select || selectAllOnCurrentLevel) {\n const fieldPath = `${path}${field.name}`\n\n if ((field.localized || withinLocalizedField) && _locales) {\n _locales.columns[fieldPath] = true\n } else if (adapter.tables[currentTableName]?.[fieldPath]) {\n currentArgs.columns[fieldPath] = true\n }\n }\n\n break\n }\n\n default: {\n if (!select && !selectAllOnCurrentLevel) {\n break\n }\n\n if (\n selectAllOnCurrentLevel ||\n (selectMode === 'include' && select[field.name] === true) ||\n (selectMode === 'exclude' && typeof select[field.name] === 'undefined')\n ) {\n const fieldPath = `${path}${field.name}`\n\n if ((field.localized || withinLocalizedField) && _locales) {\n _locales.columns[fieldPath] = true\n } else if (adapter.tables[currentTableName]?.[fieldPath]) {\n currentArgs.columns[fieldPath] = true\n }\n\n if (\n !withTabledFields.rels &&\n (field.type === 'relationship' || field.type === 'upload') &&\n (field.hasMany || Array.isArray(field.relationTo))\n ) {\n withTabledFields.rels = true\n }\n\n if (!withTabledFields.numbers && field.type === 'number' && field.hasMany) {\n withTabledFields.numbers = true\n }\n\n if (!withTabledFields.texts && field.type === 'text' && field.hasMany) {\n withTabledFields.texts = true\n }\n }\n\n break\n }\n }\n })\n\n return topLevelArgs\n}\n"],"names":["sql","fieldIsVirtual","toSnakeCase","buildQuery","getTableAlias","getNameFromDrizzleTable","jsonAggBuildObject","rawConstraint","chainMethods","traverseFields","_locales","adapter","collectionSlug","currentArgs","currentTableName","depth","fields","joinQuery","joins","locale","path","select","selectAllOnCurrentLevel","selectMode","tablePath","topLevelArgs","topLevelTableName","versions","withinLocalizedField","withTabledFields","forEach","field","type","hasMany","relationTo","localized","with","name","arraySelect","withArray","columns","id","_order","_parentID","orderBy","asc","arrayTableName","tableNameMap","get","tables","_locale","_uuid","arrayTableNameWithLocales","localesSuffix","flattenedFields","undefined","Object","keys","length","blocksSelect","blockReferences","blocks","_block","block","payload","blockKey","slug","blockSelect","blockSelectMode","withBlock","_path","tableName","fieldSelect","joinSchemaPath","replaceAll","limit","limitArg","defaultLimit","sort","defaultSort","where","collections","collection","config","joinCollectionTableName","currentIDColumn","parent","joinQueryWhere","Array","isArray","targetField","on","equals","value","and","columnName","subQueryAlias","newAliasTable","selectFields","subQueryWhere","aliasTable","selectLocale","chainedMethods","condition","table","push","args","method","db","drizzle","key","val","split","pop","subQuery","methods","query","from","map","column","order","as","extras","result","raw","shouldSelect","withSelect","fieldPath","rels","numbers","texts"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/find/traverseFields.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { SQLiteSelectBase } from 'drizzle-orm/sqlite-core'\nimport type { FlattenedField, JoinQuery, SelectMode, SelectType, Where } from 'payload'\n\nimport { and, asc, desc, eq, or, sql } from 'drizzle-orm'\nimport { fieldIsVirtual, fieldShouldBeLocalized } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BuildQueryJoinAliases, ChainedMethods, DrizzleAdapter } from '../types.js'\nimport type { Result } from './buildFindManyArgs.js'\n\nimport buildQuery from '../queries/buildQuery.js'\nimport { getTableAlias } from '../queries/getTableAlias.js'\nimport { operatorMap } from '../queries/operatorMap.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { jsonAggBuildObject } from '../utilities/json.js'\nimport { rawConstraint } from '../utilities/rawConstraint.js'\nimport { chainMethods } from './chainMethods.js'\n\nconst flattenAllWherePaths = (where: Where, paths: string[]) => {\n for (const k in where) {\n if (['AND', 'OR'].includes(k.toUpperCase())) {\n if (Array.isArray(where[k])) {\n for (const whereField of where[k]) {\n flattenAllWherePaths(whereField, paths)\n }\n }\n } else {\n // TODO: explore how to support arrays/relationship querying.\n paths.push(k.split('.').join('_'))\n }\n }\n}\n\nconst buildSQLWhere = (where: Where, alias: string) => {\n for (const k in where) {\n if (['AND', 'OR'].includes(k.toUpperCase())) {\n if (Array.isArray(where[k])) {\n const op = 'AND' === k.toUpperCase() ? and : or\n const accumulated = []\n for (const whereField of where[k]) {\n accumulated.push(buildSQLWhere(whereField, alias))\n }\n return op(...accumulated)\n }\n } else {\n const payloadOperator = Object.keys(where[k])[0]\n const value = where[k][payloadOperator]\n\n return operatorMap[payloadOperator](sql.raw(`\"${alias}\".\"${k.split('.').join('_')}\"`), value)\n }\n }\n}\n\ntype SQLSelect = SQLiteSelectBase<any, any, any, any>\n\ntype TraverseFieldArgs = {\n _locales: Result\n adapter: DrizzleAdapter\n collectionSlug?: string\n currentArgs: Result\n currentTableName: string\n depth?: number\n fields: FlattenedField[]\n joinQuery: JoinQuery\n joins?: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized?: boolean\n path: string\n select?: SelectType\n selectAllOnCurrentLevel?: boolean\n selectMode?: SelectMode\n tablePath: string\n topLevelArgs: Record<string, unknown>\n topLevelTableName: string\n versions?: boolean\n withTabledFields: {\n numbers?: boolean\n rels?: boolean\n texts?: boolean\n }\n}\n\nexport const traverseFields = ({\n _locales,\n adapter,\n collectionSlug,\n currentArgs,\n currentTableName,\n depth,\n fields,\n joinQuery = {},\n joins,\n locale,\n parentIsLocalized = false,\n path,\n select,\n selectAllOnCurrentLevel = false,\n selectMode,\n tablePath,\n topLevelArgs,\n topLevelTableName,\n versions,\n withTabledFields,\n}: TraverseFieldArgs) => {\n fields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n const isFieldLocalized = fieldShouldBeLocalized({\n field,\n parentIsLocalized,\n })\n\n // handle simple relationship\n if (\n depth > 0 &&\n (field.type === 'upload' || field.type === 'relationship') &&\n !field.hasMany &&\n typeof field.relationTo === 'string'\n ) {\n if (isFieldLocalized) {\n _locales.with[`${path}${field.name}`] = true\n } else {\n currentArgs.with[`${path}${field.name}`] = true\n }\n }\n\n switch (field.type) {\n case 'array': {\n const arraySelect = selectAllOnCurrentLevel ? true : select?.[field.name]\n\n if (select) {\n if (\n (selectMode === 'include' && typeof arraySelect === 'undefined') ||\n (selectMode === 'exclude' && arraySelect === false)\n ) {\n break\n }\n }\n\n const withArray: Result = {\n columns:\n typeof arraySelect === 'object'\n ? {\n id: true,\n _order: true,\n }\n : {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const arrayTableName = adapter.tableNameMap.get(\n `${currentTableName}_${tablePath}${toSnakeCase(field.name)}`,\n )\n\n if (typeof arraySelect === 'object') {\n if (adapter.tables[arrayTableName]._locale) {\n withArray.columns._locale = true\n }\n\n if (adapter.tables[arrayTableName]._uuid) {\n withArray.columns._uuid = true\n }\n }\n\n const arrayTableNameWithLocales = `${arrayTableName}${adapter.localesSuffix}`\n\n if (adapter.tables[arrayTableNameWithLocales]) {\n withArray.with._locales = {\n columns:\n typeof arraySelect === 'object'\n ? {\n _locale: true,\n }\n : {\n id: false,\n _parentID: false,\n },\n with: {},\n }\n }\n\n currentArgs.with[`${path}${field.name}`] = withArray\n\n traverseFields({\n _locales: withArray.with._locales,\n adapter,\n currentArgs: withArray,\n currentTableName: arrayTableName,\n depth,\n fields: field.flattenedFields,\n joinQuery,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: '',\n select: typeof arraySelect === 'object' ? arraySelect : undefined,\n selectMode,\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n withTabledFields,\n })\n\n if (\n typeof arraySelect === 'object' &&\n withArray.with._locales &&\n Object.keys(withArray.with._locales).length === 1\n ) {\n delete withArray.with._locales\n }\n\n break\n }\n\n case 'blocks': {\n const blocksSelect = selectAllOnCurrentLevel ? true : select?.[field.name]\n\n if (select) {\n if (\n (selectMode === 'include' && !blocksSelect) ||\n (selectMode === 'exclude' && blocksSelect === false)\n ) {\n break\n }\n }\n\n ;(field.blockReferences ?? field.blocks).forEach((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n const blockKey = `_blocks_${block.slug}`\n\n let blockSelect: boolean | SelectType | undefined\n\n let blockSelectMode = selectMode\n\n if (selectMode === 'include' && blocksSelect === true) {\n blockSelect = true\n }\n\n if (typeof blocksSelect === 'object') {\n if (typeof blocksSelect[block.slug] === 'object') {\n blockSelect = blocksSelect[block.slug]\n } else if (\n (selectMode === 'include' && typeof blocksSelect[block.slug] === 'undefined') ||\n (selectMode === 'exclude' && blocksSelect[block.slug] === false)\n ) {\n blockSelect = {}\n blockSelectMode = 'include'\n } else if (selectMode === 'include' && blocksSelect[block.slug] === true) {\n blockSelect = true\n }\n }\n\n if (!topLevelArgs[blockKey]) {\n const withBlock: Result = {\n columns:\n typeof blockSelect === 'object'\n ? {\n id: true,\n _order: true,\n _path: true,\n }\n : {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const tableName = adapter.tableNameMap.get(\n `${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`,\n )\n\n if (typeof blockSelect === 'object') {\n if (adapter.tables[tableName]._locale) {\n withBlock.columns._locale = true\n }\n\n if (adapter.tables[tableName]._uuid) {\n withBlock.columns._uuid = true\n }\n }\n\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`]) {\n withBlock.with._locales = {\n with: {},\n }\n\n if (typeof blockSelect === 'object') {\n withBlock.with._locales.columns = {\n _locale: true,\n }\n }\n }\n topLevelArgs.with[blockKey] = withBlock\n\n traverseFields({\n _locales: withBlock.with._locales,\n adapter,\n currentArgs: withBlock,\n currentTableName: tableName,\n depth,\n fields: block.flattenedFields,\n joinQuery,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: '',\n select: typeof blockSelect === 'object' ? blockSelect : undefined,\n selectMode: blockSelectMode,\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n withTabledFields,\n })\n\n if (\n typeof blockSelect === 'object' &&\n withBlock.with._locales &&\n Object.keys(withBlock.with._locales.columns).length === 1\n ) {\n delete withBlock.with._locales\n }\n }\n })\n\n break\n }\n\n case 'group':\n case 'tab': {\n const fieldSelect = select?.[field.name]\n\n if (fieldSelect === false) {\n break\n }\n\n traverseFields({\n _locales,\n adapter,\n collectionSlug,\n currentArgs,\n currentTableName,\n depth,\n fields: field.flattenedFields,\n joinQuery,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${path}${field.name}_`,\n select: typeof fieldSelect === 'object' ? fieldSelect : undefined,\n selectAllOnCurrentLevel:\n selectAllOnCurrentLevel ||\n fieldSelect === true ||\n (selectMode === 'exclude' && typeof fieldSelect === 'undefined'),\n selectMode,\n tablePath: `${tablePath}${toSnakeCase(field.name)}_`,\n topLevelArgs,\n topLevelTableName,\n versions,\n withTabledFields,\n })\n\n break\n }\n case 'join': {\n // when `joinsQuery` is false, do not join\n if (joinQuery === false) {\n break\n }\n\n if (\n (select && selectMode === 'include' && !select[field.name]) ||\n (selectMode === 'exclude' && select[field.name] === false)\n ) {\n break\n }\n\n const joinSchemaPath = `${path.replaceAll('_', '.')}${field.name}`\n\n if (joinQuery[joinSchemaPath] === false) {\n break\n }\n\n const {\n limit: limitArg = field.defaultLimit ?? 10,\n page,\n sort = field.defaultSort,\n where,\n } = joinQuery[joinSchemaPath] || {}\n let limit = limitArg\n\n if (limit !== 0) {\n // get an additional document and slice it later to determine if there is a next page\n limit += 1\n }\n\n const columnName = `${path.replaceAll('.', '_')}${field.name}`\n\n const db = adapter.drizzle as LibSQLDatabase\n\n if (Array.isArray(field.collection)) {\n let currentQuery: null | SQLSelect = null\n const onPath = field.on.split('.').join('_')\n\n if (Array.isArray(sort)) {\n throw new Error('Not implemented')\n }\n\n let sanitizedSort = sort\n\n if (!sanitizedSort) {\n if (\n field.collection.some((collection) =>\n adapter.payload.collections[collection].config.fields.some(\n (f) => f.type === 'date' && f.name === 'createdAt',\n ),\n )\n ) {\n sanitizedSort = '-createdAt'\n } else {\n sanitizedSort = 'id'\n }\n }\n\n const sortOrder = sanitizedSort.startsWith('-') ? desc : asc\n sanitizedSort = sanitizedSort.replace('-', '')\n\n const sortPath = sanitizedSort.split('.').join('_')\n\n const wherePaths: string[] = []\n\n if (where) {\n flattenAllWherePaths(where, wherePaths)\n }\n\n for (const collection of field.collection) {\n const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(collection))\n\n const table = adapter.tables[joinCollectionTableName]\n\n const sortColumn = table[sortPath]\n\n const selectFields = {\n id: adapter.tables[joinCollectionTableName].id,\n parent: sql`${adapter.tables[joinCollectionTableName][onPath]}`.as(onPath),\n relationTo: sql`${collection}`.as('relationTo'),\n sortPath: sql`${sortColumn ? sortColumn : null}`.as('sortPath'),\n }\n\n // Select for WHERE and Fallback NULL\n for (const path of wherePaths) {\n if (adapter.tables[joinCollectionTableName][path]) {\n selectFields[path] = sql`${adapter.tables[joinCollectionTableName][path]}`.as(path)\n // Allow to filter by collectionSlug\n } else if (path !== 'relationTo') {\n selectFields[path] = sql`null`.as(path)\n }\n }\n\n const query = db.select(selectFields).from(adapter.tables[joinCollectionTableName])\n if (currentQuery === null) {\n currentQuery = query as unknown as SQLSelect\n } else {\n currentQuery = currentQuery.unionAll(query) as SQLSelect\n }\n }\n\n const subQueryAlias = `${columnName}_subquery`\n\n let sqlWhere = eq(\n adapter.tables[currentTableName].id,\n sql.raw(`\"${subQueryAlias}\".\"${onPath}\"`),\n )\n\n if (where && Object.keys(where).length > 0) {\n sqlWhere = and(sqlWhere, buildSQLWhere(where, subQueryAlias))\n }\n\n currentQuery = currentQuery.orderBy(sortOrder(sql`\"sortPath\"`)) as SQLSelect\n\n if (page && limit !== 0) {\n const offset = (page - 1) * limit\n if (offset > 0) {\n currentQuery = currentQuery.offset(offset) as SQLSelect\n }\n }\n\n if (limit) {\n currentQuery = currentQuery.limit(limit) as SQLSelect\n }\n\n currentArgs.extras[columnName] = sql`${db\n .select({\n id: jsonAggBuildObject(adapter, {\n id: sql.raw(`\"${subQueryAlias}\".\"id\"`),\n relationTo: sql.raw(`\"${subQueryAlias}\".\"relationTo\"`),\n }),\n })\n .from(sql`${currentQuery.as(subQueryAlias)}`)\n .where(sqlWhere)}`.as(columnName)\n } else {\n const fields = adapter.payload.collections[field.collection].config.flattenedFields\n\n const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(field.collection))\n\n const joins: BuildQueryJoinAliases = []\n\n const currentIDColumn = versions\n ? adapter.tables[currentTableName].parent\n : adapter.tables[currentTableName].id\n\n let joinQueryWhere: Where\n\n if (Array.isArray(field.targetField.relationTo)) {\n joinQueryWhere = {\n [field.on]: {\n equals: {\n relationTo: collectionSlug,\n value: rawConstraint(currentIDColumn),\n },\n },\n }\n } else {\n joinQueryWhere = {\n [field.on]: {\n equals: rawConstraint(currentIDColumn),\n },\n }\n }\n\n if (where && Object.keys(where).length) {\n joinQueryWhere = {\n and: [joinQueryWhere, where],\n }\n }\n\n const columnName = `${path.replaceAll('.', '_')}${field.name}`\n\n const subQueryAlias = `${columnName}_alias`\n\n const { newAliasTable } = getTableAlias({\n adapter,\n tableName: joinCollectionTableName,\n })\n\n const {\n orderBy,\n selectFields,\n where: subQueryWhere,\n } = buildQuery({\n adapter,\n aliasTable: newAliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n selectLocale: true,\n sort,\n tableName: joinCollectionTableName,\n where: joinQueryWhere,\n })\n\n const chainedMethods: ChainedMethods = []\n\n joins.forEach(({ type, condition, table }) => {\n chainedMethods.push({\n args: [table, condition],\n method: type ?? 'leftJoin',\n })\n })\n\n if (page && limit !== 0) {\n const offset = (page - 1) * limit - 1\n if (offset > 0) {\n chainedMethods.push({\n args: [offset],\n method: 'offset',\n })\n }\n }\n\n if (limit !== 0) {\n chainedMethods.push({\n args: [limit],\n method: 'limit',\n })\n }\n\n const db = adapter.drizzle as LibSQLDatabase\n\n for (let key in selectFields) {\n const val = selectFields[key]\n\n if (val.table && getNameFromDrizzleTable(val.table) === joinCollectionTableName) {\n delete selectFields[key]\n key = key.split('.').pop()\n selectFields[key] = newAliasTable[key]\n }\n }\n\n const subQuery = chainMethods({\n methods: chainedMethods,\n query: db\n .select(selectFields as any)\n .from(newAliasTable)\n .where(subQueryWhere)\n .orderBy(() => orderBy.map(({ column, order }) => order(column))),\n }).as(subQueryAlias)\n\n currentArgs.extras[columnName] = sql`${db\n .select({\n result: jsonAggBuildObject(adapter, {\n id: sql.raw(`\"${subQueryAlias}\".id`),\n ...(selectFields._locale && {\n locale: sql.raw(`\"${subQueryAlias}\".${selectFields._locale.name}`),\n }),\n }),\n })\n .from(sql`${subQuery}`)}`.as(subQueryAlias)\n }\n\n break\n }\n\n case 'point': {\n if (adapter.name === 'sqlite') {\n break\n }\n\n const args = isFieldLocalized ? _locales : currentArgs\n if (!args.columns) {\n args.columns = {}\n }\n\n if (!args.extras) {\n args.extras = {}\n }\n\n const name = `${path}${field.name}`\n\n // Drizzle handles that poorly. See https://github.com/drizzle-team/drizzle-orm/issues/2526\n // Additionally, this way we format the column value straight in the database using ST_AsGeoJSON\n args.columns[name] = false\n\n let shouldSelect = false\n\n if (select || selectAllOnCurrentLevel) {\n if (\n selectAllOnCurrentLevel ||\n (selectMode === 'include' && select[field.name] === true) ||\n (selectMode === 'exclude' && typeof select[field.name] === 'undefined')\n ) {\n shouldSelect = true\n }\n } else {\n shouldSelect = true\n }\n\n if (shouldSelect) {\n args.extras[name] = sql.raw(`ST_AsGeoJSON(${toSnakeCase(name)})::jsonb`).as(name)\n }\n break\n }\n\n case 'select': {\n if (select && !selectAllOnCurrentLevel) {\n if (\n (selectMode === 'include' && !select[field.name]) ||\n (selectMode === 'exclude' && select[field.name] === false)\n ) {\n break\n }\n }\n\n if (field.hasMany) {\n const withSelect: Result = {\n columns: {\n id: false,\n order: false,\n parent: false,\n },\n orderBy: ({ order }, { asc }) => [asc(order)],\n }\n\n currentArgs.with[`${path}${field.name}`] = withSelect\n break\n }\n\n if (select || selectAllOnCurrentLevel) {\n const fieldPath = `${path}${field.name}`\n\n if ((isFieldLocalized || parentIsLocalized) && _locales) {\n _locales.columns[fieldPath] = true\n } else if (adapter.tables[currentTableName]?.[fieldPath]) {\n currentArgs.columns[fieldPath] = true\n }\n }\n\n break\n }\n\n default: {\n if (!select && !selectAllOnCurrentLevel) {\n break\n }\n\n if (\n selectAllOnCurrentLevel ||\n (selectMode === 'include' && select[field.name] === true) ||\n (selectMode === 'exclude' && typeof select[field.name] === 'undefined')\n ) {\n const fieldPath = `${path}${field.name}`\n\n if ((isFieldLocalized || parentIsLocalized) && _locales) {\n _locales.columns[fieldPath] = true\n } else if (adapter.tables[currentTableName]?.[fieldPath]) {\n currentArgs.columns[fieldPath] = true\n }\n\n if (\n !withTabledFields.rels &&\n (field.type === 'relationship' || field.type === 'upload') &&\n (field.hasMany || Array.isArray(field.relationTo))\n ) {\n withTabledFields.rels = true\n }\n\n if (!withTabledFields.numbers && field.type === 'number' && field.hasMany) {\n withTabledFields.numbers = true\n }\n\n if (!withTabledFields.texts && field.type === 'text' && field.hasMany) {\n withTabledFields.texts = true\n }\n }\n\n break\n }\n }\n })\n\n return topLevelArgs\n}\n"],"names":["and","asc","desc","eq","or","sql","fieldIsVirtual","fieldShouldBeLocalized","toSnakeCase","buildQuery","getTableAlias","operatorMap","getNameFromDrizzleTable","jsonAggBuildObject","rawConstraint","chainMethods","flattenAllWherePaths","where","paths","k","includes","toUpperCase","Array","isArray","whereField","push","split","join","buildSQLWhere","alias","op","accumulated","payloadOperator","Object","keys","value","raw","traverseFields","_locales","adapter","collectionSlug","currentArgs","currentTableName","depth","fields","joinQuery","joins","locale","parentIsLocalized","path","select","selectAllOnCurrentLevel","selectMode","tablePath","topLevelArgs","topLevelTableName","versions","withTabledFields","forEach","field","isFieldLocalized","type","hasMany","relationTo","with","name","arraySelect","withArray","columns","id","_order","_parentID","orderBy","arrayTableName","tableNameMap","get","tables","_locale","_uuid","arrayTableNameWithLocales","localesSuffix","flattenedFields","localized","undefined","length","blocksSelect","blockReferences","blocks","_block","block","payload","blockKey","slug","blockSelect","blockSelectMode","withBlock","_path","tableName","fieldSelect","joinSchemaPath","replaceAll","limit","limitArg","defaultLimit","page","sort","defaultSort","columnName","db","drizzle","collection","currentQuery","onPath","on","Error","sanitizedSort","some","collections","config","f","sortOrder","startsWith","replace","sortPath","wherePaths","joinCollectionTableName","table","sortColumn","selectFields","parent","as","query","from","unionAll","subQueryAlias","sqlWhere","offset","extras","currentIDColumn","joinQueryWhere","targetField","equals","newAliasTable","subQueryWhere","aliasTable","selectLocale","chainedMethods","condition","args","method","key","val","pop","subQuery","methods","map","column","order","result","shouldSelect","withSelect","fieldPath","rels","numbers","texts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"countDistinct.d.ts","sourceRoot":"","sources":["../../src/postgres/countDistinct.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAuB,aAAa,EAAE,MAAM,YAAY,CAAA;AAIpE,eAAO,MAAM,aAAa,EAAE,aAkC3B,CAAA"}
1
+ {"version":3,"file":"countDistinct.d.ts","sourceRoot":"","sources":["../../src/postgres/countDistinct.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAuB,aAAa,EAAE,MAAM,YAAY,CAAA;AAIpE,eAAO,MAAM,aAAa,EAAE,aAyC3B,CAAA"}