@payloadcms/drizzle 4.0.0-internal.f851106 → 4.0.0-internal.f980c7c

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 (203) hide show
  1. package/dist/createTableName.d.ts.map +1 -1
  2. package/dist/createTableName.js +2 -7
  3. package/dist/createTableName.js.map +1 -1
  4. package/dist/exports/postgres.d.ts +4 -1
  5. package/dist/exports/postgres.d.ts.map +1 -1
  6. package/dist/exports/postgres.js +4 -1
  7. package/dist/exports/postgres.js.map +1 -1
  8. package/dist/exports/sqlite.d.ts +2 -1
  9. package/dist/exports/sqlite.d.ts.map +1 -1
  10. package/dist/exports/sqlite.js +2 -1
  11. package/dist/exports/sqlite.js.map +1 -1
  12. package/dist/find/buildPolymorphicJoinQuery.d.ts +39 -0
  13. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  14. package/dist/find/buildPolymorphicJoinQuery.js +146 -0
  15. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  16. package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
  17. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  18. package/dist/find/buildPolymorphicJoinWhere.js +301 -0
  19. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  20. package/dist/find/createPolymorphicJoinWherePlan.d.ts +38 -0
  21. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  22. package/dist/find/createPolymorphicJoinWherePlan.js +200 -0
  23. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  24. package/dist/find/traverseFields.d.ts.map +1 -1
  25. package/dist/find/traverseFields.js +20 -191
  26. package/dist/find/traverseFields.js.map +1 -1
  27. package/dist/index.d.ts +4 -10
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -8
  30. package/dist/index.js.map +1 -1
  31. package/dist/migrate.d.ts.map +1 -1
  32. package/dist/migrate.js +41 -15
  33. package/dist/migrate.js.map +1 -1
  34. package/dist/migrateDown.d.ts +2 -1
  35. package/dist/migrateDown.d.ts.map +1 -1
  36. package/dist/migrateDown.js +17 -4
  37. package/dist/migrateDown.js.map +1 -1
  38. package/dist/migrateFresh.d.ts +4 -2
  39. package/dist/migrateFresh.d.ts.map +1 -1
  40. package/dist/migrateFresh.js +26 -9
  41. package/dist/migrateFresh.js.map +1 -1
  42. package/dist/migrateRefresh.d.ts +2 -1
  43. package/dist/migrateRefresh.d.ts.map +1 -1
  44. package/dist/migrateRefresh.js +20 -5
  45. package/dist/migrateRefresh.js.map +1 -1
  46. package/dist/migrateReset.d.ts +2 -1
  47. package/dist/migrateReset.d.ts.map +1 -1
  48. package/dist/migrateReset.js +18 -4
  49. package/dist/migrateReset.js.map +1 -1
  50. package/dist/migrateStatus.d.ts +2 -1
  51. package/dist/migrateStatus.d.ts.map +1 -1
  52. package/dist/migrateStatus.js +11 -6
  53. package/dist/migrateStatus.js.map +1 -1
  54. package/dist/postgres/createJSONQuery/index.js +3 -3
  55. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  56. package/dist/postgres/init.d.ts.map +1 -1
  57. package/dist/postgres/init.js +6 -0
  58. package/dist/postgres/init.js.map +1 -1
  59. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  60. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  61. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  62. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  63. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  64. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  65. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  66. package/dist/postgres/predefinedMigrations/v2-v3/index.js +2 -2
  67. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  68. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  69. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  70. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  71. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  72. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  73. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  74. package/dist/postgres/query/postgresUnaccent.js +40 -0
  75. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  76. package/dist/postgres/requireDrizzleKit.d.ts +4 -0
  77. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
  78. package/dist/postgres/requireDrizzleKit.js +16 -10
  79. package/dist/postgres/requireDrizzleKit.js.map +1 -1
  80. package/dist/postgres/types.d.ts +13 -2
  81. package/dist/postgres/types.d.ts.map +1 -1
  82. package/dist/postgres/types.js.map +1 -1
  83. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  84. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  85. package/dist/queries/buildOperatorConstraint.js +63 -0
  86. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  87. package/dist/queries/getTableColumnFromPath.d.ts +12 -3
  88. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  89. package/dist/queries/getTableColumnFromPath.js +65 -28
  90. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  91. package/dist/queries/operatorMap.d.ts +7 -3
  92. package/dist/queries/operatorMap.d.ts.map +1 -1
  93. package/dist/queries/operatorMap.js.map +1 -1
  94. package/dist/queries/parseParams.d.ts.map +1 -1
  95. package/dist/queries/parseParams.js +262 -10
  96. package/dist/queries/parseParams.js.map +1 -1
  97. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  98. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  99. package/dist/queries/resolveRelationshipPath.js +66 -0
  100. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  101. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  102. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  103. package/dist/queries/validateOperatorHandlers.js +30 -0
  104. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  105. package/dist/schema/build.js +3 -3
  106. package/dist/schema/build.js.map +1 -1
  107. package/dist/schema/traverseFields.js +5 -5
  108. package/dist/schema/traverseFields.js.map +1 -1
  109. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  110. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  111. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  112. package/dist/sqlite/createJSONQuery/index.js +6 -5
  113. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  114. package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
  115. package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
  116. package/dist/sqlite/createRequireDrizzleKit.js +15 -0
  117. package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
  118. package/dist/sqlite/execute.js.map +1 -1
  119. package/dist/sqlite/insert.d.ts.map +1 -1
  120. package/dist/sqlite/insert.js +4 -1
  121. package/dist/sqlite/insert.js.map +1 -1
  122. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  123. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  124. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  125. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  126. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  127. package/dist/transform/read/traverseFields.js +11 -3
  128. package/dist/transform/read/traverseFields.js.map +1 -1
  129. package/dist/transform/write/blocks.d.ts.map +1 -1
  130. package/dist/transform/write/blocks.js +3 -1
  131. package/dist/transform/write/blocks.js.map +1 -1
  132. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  133. package/dist/transform/write/traverseFields.js +9 -15
  134. package/dist/transform/write/traverseFields.js.map +1 -1
  135. package/dist/types.d.ts +52 -4
  136. package/dist/types.d.ts.map +1 -1
  137. package/dist/types.js.map +1 -1
  138. package/dist/updateJobs.d.ts.map +1 -1
  139. package/dist/updateJobs.js +37 -0
  140. package/dist/updateJobs.js.map +1 -1
  141. package/dist/updateOne.d.ts.map +1 -1
  142. package/dist/updateOne.js +41 -1
  143. package/dist/updateOne.js.map +1 -1
  144. package/dist/upsertRow/index.d.ts +1 -1
  145. package/dist/upsertRow/index.d.ts.map +1 -1
  146. package/dist/upsertRow/index.js +25 -5
  147. package/dist/upsertRow/index.js.map +1 -1
  148. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  149. package/dist/utilities/blocksToJsonMigrator.js +7 -18
  150. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  151. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  152. package/dist/utilities/buildCreateMigration.js +13 -9
  153. package/dist/utilities/buildCreateMigration.js.map +1 -1
  154. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  155. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  156. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  157. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  158. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  159. package/dist/utilities/buildForeignKeyName.js +3 -2
  160. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  161. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  162. package/dist/utilities/buildIndexName.js +3 -2
  163. package/dist/utilities/buildIndexName.js.map +1 -1
  164. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  165. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  166. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  167. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  168. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  169. package/dist/utilities/createSchemaGenerator.js +10 -12
  170. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  171. package/dist/utilities/executeSchemaHooks.js +1 -1
  172. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  173. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  174. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  175. package/dist/utilities/formatGeneratedFile.js +58 -0
  176. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  177. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  178. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  179. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  180. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  181. package/dist/utilities/getTransaction.js.map +1 -1
  182. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  183. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  184. package/dist/utilities/parseJSONPathSegment.js +17 -0
  185. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  186. package/dist/utilities/pushDevSchema.js +1 -1
  187. package/dist/utilities/pushDevSchema.js.map +1 -1
  188. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
  189. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  190. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  191. package/dist/utilities/validateIdentifierLength.d.ts +12 -0
  192. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
  193. package/dist/utilities/validateIdentifierLength.js +18 -0
  194. package/dist/utilities/validateIdentifierLength.js.map +1 -0
  195. package/package.json +17 -19
  196. package/dist/sqlite/requireDrizzleKit.d.ts +0 -3
  197. package/dist/sqlite/requireDrizzleKit.d.ts.map +0 -1
  198. package/dist/sqlite/requireDrizzleKit.js +0 -12
  199. package/dist/sqlite/requireDrizzleKit.js.map +0 -1
  200. package/dist/upsertRow/handleUpsertError.spec.js +0 -42
  201. package/dist/upsertRow/handleUpsertError.spec.js.map +0 -1
  202. package/dist/utilities/isValidStringID.spec.js +0 -15
  203. package/dist/utilities/isValidStringID.spec.js.map +0 -1
@@ -10,14 +10,23 @@ import { DistinctSymbol } from '../utilities/rawConstraint.js';
10
10
  import { resolveBlockTableName } from '../utilities/validateExistingBlockIsIdentical.js';
11
11
  import { addJoinTable } from './addJoinTable.js';
12
12
  import { getTableAlias } from './getTableAlias.js';
13
+ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRelationshipPath.js';
13
14
  /**
14
- * Transforms path to table and column name or to a list of OR columns
15
- * Adds tables to `join`
16
- * @returns TableColumn
15
+ * Resolves a field path to the database table and column that store its value.
16
+ *
17
+ * While walking through relationships, arrays, and blocks, the function adds the joins required
18
+ * to reach the final column. Table aliases are used when the path is resolved inside a subquery.
19
+ *
20
+ * @example
21
+ * Resolving `movies.name` adds joins from the parent collection to its relationship table and then
22
+ * to the `movies` table. The returned column is `movies.name`.
23
+ *
24
+ * @returns The final field and column, plus any extra constraints discovered while resolving it.
17
25
  */ export const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraintPath: incomingConstraintPath, constraints = [], fields, joins, locale: incomingLocale, parentAliasTable, parentIsLocalized, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, selectLocale, tableName, tableNameSuffix = '', value })=>{
18
26
  const fieldPath = incomingSegments[0];
19
27
  let locale = incomingLocale;
20
28
  const rootTableName = incomingRootTableName || tableName;
29
+ const tableContainingField = parentAliasTable ?? aliasTable ?? adapter.tables[rootTableName];
21
30
  let constraintPath = incomingConstraintPath || '';
22
31
  const field = fields.find((fieldToFind)=>fieldToFind.name === fieldPath);
23
32
  let newTableName = tableName;
@@ -38,6 +47,10 @@ import { getTableAlias } from './getTableAlias.js';
38
47
  const pathSegments = [
39
48
  ...incomingSegments
40
49
  ];
50
+ const fieldStoragePath = appendFieldToStoragePath({
51
+ field,
52
+ path: constraintPath
53
+ });
41
54
  const isFieldLocalized = fieldShouldBeLocalized({
42
55
  field,
43
56
  parentIsLocalized
@@ -57,7 +70,7 @@ import { getTableAlias } from './getTableAlias.js';
57
70
  {
58
71
  newTableName = adapter.tableNameMap.get(`${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`);
59
72
  const arrayParentTable = aliasTable || adapter.tables[tableName];
60
- constraintPath = `${constraintPath}${field.name}.%.`;
73
+ constraintPath = `${fieldStoragePath}.`;
61
74
  if (locale && isFieldLocalized && adapter.payload.config.localization) {
62
75
  const conditions = [
63
76
  eq(arrayParentTable.id, adapter.tables[newTableName]._parentID)
@@ -114,7 +127,12 @@ import { getTableAlias } from './getTableAlias.js';
114
127
  value
115
128
  ];
116
129
  blockTypes.forEach((blockType)=>{
117
- const block = adapter.payload.blocks[blockType] ?? field.blocks.find((block)=>typeof block !== 'string' && block.slug === blockType);
130
+ const fieldBlock = field.blocks.find((block)=>typeof block === 'string' ? block === blockType : block.slug === blockType);
131
+ const registeredBlocks = adapter.payload.blocks;
132
+ const block = typeof fieldBlock === 'string' ? registeredBlocks[fieldBlock] : fieldBlock;
133
+ if (!block) {
134
+ throw new APIError('Block was not found', 400);
135
+ }
118
136
  newTableName = resolveBlockTableName(block, adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`));
119
137
  const { newAliasTable } = getTableAlias({
120
138
  adapter,
@@ -140,7 +158,6 @@ import { getTableAlias } from './getTableAlias.js';
140
158
  const hasBlockField = field.blocks.some((_block)=>{
141
159
  const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block;
142
160
  newTableName = resolveBlockTableName(block, adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`));
143
- constraintPath = `${constraintPath}${field.name}.%.`;
144
161
  let result;
145
162
  const blockConstraints = [];
146
163
  const blockSelectFields = {};
@@ -170,7 +187,7 @@ import { getTableAlias } from './getTableAlias.js';
170
187
  result = getTableColumnFromPath({
171
188
  adapter,
172
189
  collectionPath,
173
- constraintPath,
190
+ constraintPath: `${fieldStoragePath}.`,
174
191
  constraints: blockConstraints,
175
192
  fields: block.flattenedFields,
176
193
  joins: newJoins,
@@ -236,7 +253,7 @@ import { getTableAlias } from './getTableAlias.js';
236
253
  aliasTable,
237
254
  collectionPath,
238
255
  columnPrefix: `${columnPrefix}${field.name}_`,
239
- constraintPath: `${constraintPath}${field.name}.`,
256
+ constraintPath: `${fieldStoragePath}.`,
240
257
  constraints,
241
258
  fields: field.flattenedFields,
242
259
  joins,
@@ -257,6 +274,15 @@ import { getTableAlias } from './getTableAlias.js';
257
274
  throw new APIError('Not supported');
258
275
  }
259
276
  const newCollectionPath = pathSegments.slice(1).join('.');
277
+ // Filtering through a polymorphic `on` relationship is not supported: it is stored in the
278
+ // `_rels` table with no direct column to correlate on, which would otherwise build invalid SQL.
279
+ const onRelationshipField = getFieldByPath({
280
+ fields: adapter.payload.collections[field.collection].config.flattenedFields,
281
+ path: field.on
282
+ })?.field;
283
+ if (onRelationshipField && (onRelationshipField.type === 'relationship' || onRelationshipField.type === 'upload') && Array.isArray(onRelationshipField.relationTo)) {
284
+ throw new APIError('Not supported');
285
+ }
260
286
  if (field.hasMany) {
261
287
  const relationTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`;
262
288
  const existingTable = joins.find((e)=>e.queryPath === `${constraintPath}${field.name}._rels`);
@@ -273,7 +299,7 @@ import { getTableAlias } from './getTableAlias.js';
273
299
  }
274
300
  if (!existingTable) {
275
301
  addJoinTable({
276
- condition: and(eq(adapter.tables[rootTableName].id, aliasRelationshipTable[`${relationshipField.field.relationTo}ID`]), like(aliasRelationshipTable.path, field.on)),
302
+ condition: and(eq(tableContainingField.id, aliasRelationshipTable[`${relationshipField.field.relationTo}ID`]), like(aliasRelationshipTable.path, field.on)),
277
303
  joins,
278
304
  queryPath: `${constraintPath}${field.name}._rels`,
279
305
  table: aliasRelationshipTable
@@ -311,10 +337,10 @@ import { getTableAlias } from './getTableAlias.js';
311
337
  aliasTable: relationshipTable,
312
338
  collectionPath: newCollectionPath,
313
339
  constraints,
314
- // relationshipFields are fields from a different collection => no parentIsLocalized
315
340
  fields: relationshipFields,
316
341
  joins,
317
342
  locale,
343
+ // A join reads from a different collection, so localization does not carry over
318
344
  parentIsLocalized: false,
319
345
  pathSegments: pathSegments.slice(1),
320
346
  rootTableName: relationshipTableName,
@@ -379,7 +405,8 @@ import { getTableAlias } from './getTableAlias.js';
379
405
  fields: adapter.payload.collections[field.collection].config.flattenedFields,
380
406
  joins,
381
407
  locale,
382
- parentIsLocalized: parentIsLocalized || field.localized,
408
+ // A join reads from a different collection, so localization does not carry over
409
+ parentIsLocalized: false,
383
410
  pathSegments: pathSegments.slice(1),
384
411
  selectFields,
385
412
  tableName: newTableName,
@@ -398,14 +425,14 @@ import { getTableAlias } from './getTableAlias.js';
398
425
  columnName = 'number';
399
426
  }
400
427
  newTableName = `${rootTableName}_${tableType}`;
401
- const existingTable = joins.find((e)=>e.queryPath === `${constraintPath}${field.name}`);
428
+ const existingTable = joins.find((e)=>e.queryPath === fieldStoragePath);
402
429
  const table = existingTable?.table ?? getTableAlias({
403
430
  adapter,
404
431
  tableName: newTableName
405
432
  }).newAliasTable;
406
433
  const joinConstraints = [
407
- eq(adapter.tables[rootTableName].id, table.parent),
408
- like(table.path, `${constraintPath}${field.name}`)
434
+ eq(tableContainingField.id, table.parent),
435
+ like(table.path, fieldStoragePath)
409
436
  ];
410
437
  if (locale && isFieldLocalized && adapter.payload.config.localization) {
411
438
  const conditions = [
@@ -417,14 +444,14 @@ import { getTableAlias } from './getTableAlias.js';
417
444
  addJoinTable({
418
445
  condition: and(...conditions),
419
446
  joins,
420
- queryPath: `${constraintPath}${field.name}`,
447
+ queryPath: fieldStoragePath,
421
448
  table
422
449
  });
423
450
  } else {
424
451
  addJoinTable({
425
452
  condition: and(...joinConstraints),
426
453
  joins,
427
- queryPath: `${constraintPath}${field.name}`,
454
+ queryPath: fieldStoragePath,
428
455
  table
429
456
  });
430
457
  }
@@ -442,6 +469,17 @@ import { getTableAlias } from './getTableAlias.js';
442
469
  {
443
470
  const newCollectionPath = pathSegments.slice(1).join('.');
444
471
  if (Array.isArray(field.relationTo) || field.hasMany) {
472
+ const relationshipPath = resolveRelationshipPath({
473
+ adapter,
474
+ fields,
475
+ locale,
476
+ parentIsLocalized,
477
+ path: field.name,
478
+ pathPrefix: constraintPath
479
+ });
480
+ if (!relationshipPath) {
481
+ throw new APIError(`Relationship path could not be resolved: ${collectionPath}`);
482
+ }
445
483
  let relationshipFields;
446
484
  const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`;
447
485
  const existingJoin = joins.find((e)=>e.queryPath === `${constraintPath}.${field.name}`);
@@ -458,18 +496,16 @@ import { getTableAlias } from './getTableAlias.js';
458
496
  aliasRelationshipTable = res.newAliasTable;
459
497
  aliasRelationshipTableName = res.newAliasTableName;
460
498
  }
461
- if (selectLocale && isFieldLocalized && adapter.payload.config.localization) {
499
+ if (selectLocale && relationshipPath.isLocalized && adapter.payload.config.localization) {
462
500
  selectFields._locale = aliasRelationshipTable.locale;
463
501
  }
464
502
  // Join in the relationships table
465
- if (locale && isFieldLocalized && adapter.payload.config.localization) {
503
+ if (relationshipPath.locale && relationshipPath.locale !== 'all' && relationshipPath.isLocalized && adapter.payload.config.localization) {
466
504
  const conditions = [
467
- eq((parentAliasTable || aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent),
468
- like(aliasRelationshipTable.path, `${constraintPath}${field.name}`)
505
+ eq(tableContainingField.id, aliasRelationshipTable.parent),
506
+ like(aliasRelationshipTable.path, relationshipPath.path)
469
507
  ];
470
- if (locale !== 'all') {
471
- conditions.push(eq(aliasRelationshipTable.locale, locale));
472
- }
508
+ conditions.push(eq(aliasRelationshipTable.locale, relationshipPath.locale));
473
509
  addJoinTable({
474
510
  condition: and(...conditions),
475
511
  joins,
@@ -479,7 +515,7 @@ import { getTableAlias } from './getTableAlias.js';
479
515
  } else {
480
516
  // Join in the relationships table
481
517
  addJoinTable({
482
- condition: and(eq((parentAliasTable || aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent), like(aliasRelationshipTable.path, `${constraintPath}${field.name}`)),
518
+ condition: and(eq(tableContainingField.id, aliasRelationshipTable.parent), like(aliasRelationshipTable.path, relationshipPath.path)),
483
519
  joins,
484
520
  queryPath: `${constraintPath}.${field.name}`,
485
521
  table: aliasRelationshipTable
@@ -597,10 +633,10 @@ import { getTableAlias } from './getTableAlias.js';
597
633
  aliasTable: newAliasTable,
598
634
  collectionPath: newCollectionPath,
599
635
  constraints,
600
- // relationshipFields are fields from a different collection => no parentIsLocalized
601
636
  fields: relationshipFields,
602
637
  joins,
603
638
  locale,
639
+ // A relationship jumps to a different collection, so localization does not carry over
604
640
  parentIsLocalized: false,
605
641
  pathSegments: pathSegments.slice(1),
606
642
  rootTableName: newTableName,
@@ -623,7 +659,7 @@ import { getTableAlias } from './getTableAlias.js';
623
659
  tableName: `${rootTableName}${adapter.localesSuffix}`
624
660
  });
625
661
  const condtions = [
626
- eq(aliasLocaleTable._parentID, adapter.tables[rootTableName].id)
662
+ eq(aliasLocaleTable._parentID, tableContainingField.id)
627
663
  ];
628
664
  if (selectLocale) {
629
665
  selectFields._locale = aliasLocaleTable._locale;
@@ -656,7 +692,8 @@ import { getTableAlias } from './getTableAlias.js';
656
692
  fields: adapter.payload.collections[field.relationTo].config.flattenedFields,
657
693
  joins,
658
694
  locale,
659
- parentIsLocalized: parentIsLocalized || field.localized,
695
+ // A relationship jumps to a different collection, so localization does not carry over
696
+ parentIsLocalized: false,
660
697
  pathSegments: pathSegments.slice(1),
661
698
  selectFields,
662
699
  tableName: newTableName,
@@ -707,7 +744,7 @@ import { getTableAlias } from './getTableAlias.js';
707
744
  aliasTable,
708
745
  collectionPath,
709
746
  columnPrefix: `${columnPrefix}${field.name}_`,
710
- constraintPath: `${constraintPath}${field.name}.`,
747
+ constraintPath: `${fieldStoragePath}.`,
711
748
  constraints,
712
749
  fields: field.flattenedFields,
713
750
  joins,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/getTableColumnFromPath.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { SQLiteTableWithColumns } from 'drizzle-orm/sqlite-core'\nimport type {\n FlattenedBlock,\n FlattenedField,\n NumberField,\n RelationshipField,\n TextField,\n} from 'payload'\n\nimport { and, eq, getTableName, like, or, sql } from 'drizzle-orm'\nimport { type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { APIError, getFieldByPath } from 'payload'\nimport { fieldShouldBeLocalized, tabHasName } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\nimport { validate as uuidValidate } from 'uuid'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { isPolymorphicRelationship } from '../utilities/isPolymorphicRelationship.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { jsonBuildObject } from '../utilities/json.js'\nimport { DistinctSymbol } from '../utilities/rawConstraint.js'\nimport { resolveBlockTableName } from '../utilities/validateExistingBlockIsIdentical.js'\nimport { addJoinTable } from './addJoinTable.js'\nimport { getTableAlias } from './getTableAlias.js'\n\ntype Constraint = {\n columnName: string\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n value: unknown\n}\n\ntype TableColumn = {\n columnName?: string\n columns?: {\n idType: 'number' | 'text' | 'uuid'\n rawColumn: SQL<unknown>\n }[]\n constraints: Constraint[]\n field: FlattenedField\n getNotNullColumnByValue?: (val: unknown) => string\n pathSegments?: string[]\n rawColumn?: SQL\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n}\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n collectionPath: string\n columnPrefix?: string\n constraintPath?: string\n constraints?: Constraint[]\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentAliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n parentIsLocalized: boolean\n pathSegments: string[]\n rootTableName?: string\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n /**\n * If creating a new table name for arrays and blocks, this suffix should be appended to the table name\n */\n tableNameSuffix?: string\n /**\n * The raw value of the query before sanitization\n */\n value: unknown\n}\n/**\n * Transforms path to table and column name or to a list of OR columns\n * Adds tables to `join`\n * @returns TableColumn\n */\nexport const getTableColumnFromPath = ({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix = '',\n constraintPath: incomingConstraintPath,\n constraints = [],\n fields,\n joins,\n locale: incomingLocale,\n parentAliasTable,\n parentIsLocalized,\n pathSegments: incomingSegments,\n rootTableName: incomingRootTableName,\n selectFields,\n selectLocale,\n tableName,\n tableNameSuffix = '',\n value,\n}: Args): TableColumn => {\n const fieldPath = incomingSegments[0]\n let locale = incomingLocale\n const rootTableName = incomingRootTableName || tableName\n let constraintPath = incomingConstraintPath || ''\n\n const field = fields.find((fieldToFind) => fieldToFind.name === fieldPath)\n let newTableName = tableName\n\n if (!field && fieldPath === 'id') {\n selectFields.id = adapter.tables[newTableName].id\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: adapter.tables[newTableName],\n }\n }\n\n let localizedPathQuery = false\n if (field) {\n const pathSegments = [...incomingSegments]\n\n const isFieldLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n // If next segment is a locale,\n // we need to take it out and use it as the locale from this point on\n if (isFieldLocalized && adapter.payload.config.localization) {\n const matchedLocale = adapter.payload.config.localization.localeCodes.find(\n (locale) => locale === pathSegments[1],\n )\n\n if (matchedLocale) {\n locale = matchedLocale\n localizedPathQuery = true\n pathSegments.splice(1, 1)\n }\n }\n\n switch (field.type) {\n case 'array': {\n newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const arrayParentTable = aliasTable || adapter.tables[tableName]\n\n constraintPath = `${constraintPath}${field.name}.%.`\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [eq(arrayParentTable.id, adapter.tables[newTableName]._parentID)]\n\n if (selectLocale) {\n selectFields._locale = adapter.tables[newTableName]._locale\n }\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n addJoinTable({\n condition: and(...conditions),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(arrayParentTable.id, adapter.tables[newTableName]._parentID),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentAliasTable: aliasTable,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n }\n case 'blocks': {\n if (adapter.blocksAsJSON) {\n break\n }\n let blockTableColumn: TableColumn\n let newTableName: string\n\n // handle blockType queries\n if (pathSegments[1] === 'blockType') {\n // find the block config using the value\n const blockTypes = Array.isArray(value) ? value : [value]\n blockTypes.forEach((blockType) => {\n const block =\n adapter.payload.blocks[blockType] ??\n (field.blocks.find(\n (block) => typeof block !== 'string' && block.slug === blockType,\n ) as FlattenedBlock | undefined)\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n\n joins.push({\n condition: eq(adapter.tables[tableName].id, newAliasTable._parentID),\n table: newAliasTable,\n })\n constraints.push({\n columnName: '_path',\n table: newAliasTable,\n value: `${constraintPath}${pathSegments[0]}`,\n })\n })\n return {\n constraints,\n field,\n getNotNullColumnByValue: () => 'id',\n table: adapter.tables[tableName],\n }\n }\n\n const hasBlockField = field.blocks.some((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n constraintPath = `${constraintPath}${field.name}.%.`\n\n let result: TableColumn\n const blockConstraints = []\n const blockSelectFields = {}\n\n let blockJoin: BuildQueryJoinAliases[0]\n if (isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n blockJoin = {\n condition: and(...conditions),\n table: adapter.tables[newTableName],\n }\n } else {\n blockJoin = {\n condition: eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n table: adapter.tables[newTableName],\n }\n }\n\n // Create a new reference for nested joins\n const newJoins = [...joins]\n\n try {\n result = getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath,\n constraints: blockConstraints,\n fields: block.flattenedFields,\n joins: newJoins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields: blockSelectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } catch (_) {\n // this is fine, not every block will have the field\n }\n if (!result) {\n return\n }\n blockTableColumn = result\n constraints = constraints.concat(blockConstraints)\n selectFields = { ...selectFields, ...blockSelectFields }\n\n const previousLength = joins.length\n joins.push(blockJoin)\n // Append new joins AFTER the block join to prevent errors with missing FROM clause.\n if (newJoins.length > previousLength) {\n for (let i = previousLength; i < newJoins.length; i++) {\n joins.push(newJoins[i])\n }\n }\n return true\n })\n if (hasBlockField) {\n return {\n columnName: blockTableColumn.columnName,\n constraints,\n field: blockTableColumn.field,\n pathSegments: pathSegments.slice(1),\n rawColumn: blockTableColumn.rawColumn,\n table: blockTableColumn.table,\n }\n }\n break\n }\n\n case 'group': {\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n let condition = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${constraintPath}${field.name}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n\n case 'join': {\n if (Array.isArray(field.collection)) {\n throw new APIError('Not supported')\n }\n\n const newCollectionPath = pathSegments.slice(1).join('.')\n\n if (field.hasMany) {\n const relationTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}._rels`,\n )\n\n const aliasRelationshipTable = (existingTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n const relationshipField = getFieldByPath({\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n path: field.on,\n })\n if (!relationshipField) {\n throw new APIError('Relationship was not found')\n }\n\n if (!existingTable) {\n addJoinTable({\n condition: and(\n eq(\n adapter.tables[rootTableName].id,\n aliasRelationshipTable[\n `${(relationshipField.field as RelationshipField).relationTo as string}ID`\n ],\n ),\n like(aliasRelationshipTable.path, field.on),\n ),\n joins,\n queryPath: `${constraintPath}${field.name}._rels`,\n table: aliasRelationshipTable,\n })\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'parent',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: aliasRelationshipTable,\n }\n }\n\n const relationshipConfig = adapter.payload.collections[field.collection].config\n const relationshipTableName = adapter.tableNameMap.get(\n toSnakeCase(relationshipConfig.slug),\n )\n\n // parent to relationship join table\n const relationshipFields = relationshipConfig.flattenedFields\n\n const existingMainTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )\n\n const relationshipTable = (existingMainTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationshipTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n if (!existingMainTable) {\n joins.push({\n condition: eq(aliasRelationshipTable.parent, relationshipTable.id),\n queryPath: `${constraintPath}${field.name}`,\n table: relationshipTable,\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: relationshipTable,\n collectionPath: newCollectionPath,\n constraints,\n // relationshipFields are fields from a different collection => no parentIsLocalized\n fields: relationshipFields,\n joins,\n locale,\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n rootTableName: relationshipTableName,\n selectFields,\n selectLocale,\n tableName: relationshipTableName,\n value,\n })\n }\n\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.collection].config.slug),\n )\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )?.table\n const newAliasTable =\n existingTable || getTableAlias({ adapter, tableName: newTableName }).newAliasTable\n\n if (!existingTable) {\n const onSegments = field.on.split('.')\n const collectionFlattenedFields =\n adapter.payload.collections[field.collection].config.flattenedFields\n const firstSegField =\n onSegments.length > 1\n ? collectionFlattenedFields.find((f) => f.name === onSegments[0])\n : null\n\n const arrayTableName =\n firstSegField?.type === 'array'\n ? adapter.tableNameMap.get(`${newTableName}_${toSnakeCase(onSegments[0])}`)\n : undefined\n\n if (arrayTableName) {\n // join from main table to array table\n const { newAliasTable: arrayAliasTable } = getTableAlias({\n adapter,\n tableName: arrayTableName,\n })\n\n joins.push({\n condition: eq(\n arrayAliasTable[onSegments.slice(1).join('_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n ),\n queryPath: `${constraintPath}${field.name}._array`,\n table: arrayAliasTable,\n })\n\n joins.push({\n condition: eq(\n (newAliasTable as PgTableWithColumns<any>).id,\n arrayAliasTable._parentID,\n ),\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n } else {\n joins.push({\n condition: eq(\n newAliasTable[field.on.replaceAll('.', '_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n ),\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n }\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: newAliasTable,\n }\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n selectFields,\n tableName: newTableName,\n value,\n })\n\n break\n }\n\n case 'number':\n case 'text': {\n if (field.hasMany) {\n let tableType = 'texts'\n let columnName = 'text'\n if (field.type === 'number') {\n tableType = 'numbers'\n columnName = 'number'\n }\n newTableName = `${rootTableName}_${tableType}`\n\n const existingTable = joins.find((e) => e.queryPath === `${constraintPath}${field.name}`)\n\n const table = (existingTable?.table ??\n getTableAlias({ adapter, tableName: newTableName })\n .newAliasTable) as PgTableWithColumns<any>\n\n const joinConstraints = [\n eq(adapter.tables[rootTableName].id, table.parent),\n like(table.path, `${constraintPath}${field.name}`),\n ]\n\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [...joinConstraints]\n\n if (locale !== 'all') {\n conditions.push(eq(table._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: `${constraintPath}${field.name}`,\n table,\n })\n } else {\n addJoinTable({\n condition: and(...joinConstraints),\n joins,\n queryPath: `${constraintPath}${field.name}`,\n table,\n })\n }\n\n return {\n columnName,\n constraints,\n field,\n table,\n }\n }\n break\n }\n case 'relationship':\n case 'upload': {\n const newCollectionPath = pathSegments.slice(1).join('.')\n\n if (Array.isArray(field.relationTo) || field.hasMany) {\n let relationshipFields: FlattenedField[]\n const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`\n\n const existingJoin = joins.find((e) => e.queryPath === `${constraintPath}.${field.name}`)\n\n let aliasRelationshipTable: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n let aliasRelationshipTableName: string\n if (existingJoin) {\n aliasRelationshipTable = existingJoin.table\n aliasRelationshipTableName = getTableName(existingJoin.table)\n } else {\n const res = getTableAlias({\n adapter,\n tableName: relationTableName,\n })\n aliasRelationshipTable = res.newAliasTable\n aliasRelationshipTableName = res.newAliasTableName\n }\n\n if (selectLocale && isFieldLocalized && adapter.payload.config.localization) {\n selectFields._locale = aliasRelationshipTable.locale\n }\n\n // Join in the relationships table\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(\n (parentAliasTable || aliasTable || adapter.tables[rootTableName]).id,\n aliasRelationshipTable.parent,\n ),\n like(aliasRelationshipTable.path, `${constraintPath}${field.name}`),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(aliasRelationshipTable.locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: `${constraintPath}.${field.name}`,\n table: aliasRelationshipTable,\n })\n } else {\n // Join in the relationships table\n addJoinTable({\n condition: and(\n eq(\n (parentAliasTable || aliasTable || adapter.tables[rootTableName]).id,\n aliasRelationshipTable.parent,\n ),\n like(aliasRelationshipTable.path, `${constraintPath}${field.name}`),\n ),\n joins,\n queryPath: `${constraintPath}.${field.name}`,\n table: aliasRelationshipTable,\n })\n }\n\n selectFields[`${relationTableName}.path`] = aliasRelationshipTable.path\n\n let newAliasTable\n\n if (typeof field.relationTo === 'string') {\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n newTableName = adapter.tableNameMap.get(toSnakeCase(relationshipConfig.slug))\n\n // parent to relationship join table\n relationshipFields = relationshipConfig.flattenedFields\n ;({ newAliasTable } = getTableAlias({ adapter, tableName: newTableName }))\n\n joins.push({\n condition: eq(newAliasTable.id, aliasRelationshipTable[`${field.relationTo}ID`]),\n table: newAliasTable,\n })\n\n if (newCollectionPath === '' || newCollectionPath === 'id') {\n return {\n columnName: `${field.relationTo}ID`,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n }\n } else if (newCollectionPath === 'value') {\n const hasCustomCollectionWithCustomID = field.relationTo.some(\n (relationTo) => !!adapter.payload.collections[relationTo].customIDType,\n )\n\n const columns: TableColumn['columns'] = field.relationTo\n .map((relationTo) => {\n let idType: 'number' | 'text' | 'uuid' = isUUIDType(adapter.idType)\n ? 'uuid'\n : 'number'\n\n const { customIDType } = adapter.payload.collections[relationTo]\n\n if (customIDType) {\n idType = customIDType\n }\n\n const idTypeTextOrUuid = idType === 'text' || idType === 'uuid'\n\n // Do not add the column to OR if we know that it can't match by the type\n // We can't do the same with idType: 'number' because `value` can be from the REST search query params\n if (typeof value === 'number' && idTypeTextOrUuid) {\n return null\n }\n\n if (\n Array.isArray(value) &&\n value.every((val) => typeof val === 'number') &&\n idTypeTextOrUuid\n ) {\n return null\n }\n\n // Do not add the UUID type column if incoming query value doesn't match UUID. If there aren't any collections with\n // a custom ID type, we skip this check\n // We need this because Postgres throws an error if querying by UUID column with a value that isn't a valid UUID.\n if (\n value &&\n !Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID\n ) {\n if (!uuidValidate(value)) {\n return null\n }\n }\n\n if (\n Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID &&\n !value.some((val) => uuidValidate(val))\n ) {\n return null\n }\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n idType,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n }\n })\n .filter(Boolean)\n\n return {\n columns,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n } else if (newCollectionPath === 'relationTo') {\n const relationTo = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n\n return {\n constraints,\n field,\n getNotNullColumnByValue: (val) => {\n const matchedRelation = relationTo.find((relation) => relation === val)\n if (matchedRelation) {\n return `${matchedRelation}ID`\n }\n return undefined\n },\n table: aliasRelationshipTable,\n }\n } else if (isPolymorphicRelationship(value)) {\n const { relationTo } = value\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n constraints,\n field,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n table: aliasRelationshipTable,\n }\n } else if (value === DistinctSymbol) {\n const obj: Record<string, SQL> = {}\n\n field.relationTo.forEach((relationTo) => {\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n obj[relationTo] = sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`)\n })\n\n let rawColumn = jsonBuildObject(adapter, obj)\n if (adapter.name === 'postgres') {\n rawColumn = sql`${rawColumn}::text`\n }\n\n return {\n constraints,\n field,\n rawColumn,\n table: aliasRelationshipTable,\n }\n } else {\n throw new APIError('Not supported')\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraints,\n // relationshipFields are fields from a different collection => no parentIsLocalized\n fields: relationshipFields,\n joins,\n locale,\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n rootTableName: newTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } else if (\n pathSegments.length > 1 &&\n !(pathSegments.length === 2 && pathSegments[1] === 'id')\n ) {\n // simple relationships\n const columnName = `${columnPrefix}${field.name}`\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.relationTo].config.slug),\n )\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n\n if (isFieldLocalized && adapter.payload.config.localization) {\n const { newAliasTable: aliasLocaleTable } = getTableAlias({\n adapter,\n tableName: `${rootTableName}${adapter.localesSuffix}`,\n })\n\n const condtions = [eq(aliasLocaleTable._parentID, adapter.tables[rootTableName].id)]\n\n if (selectLocale) {\n selectFields._locale = aliasLocaleTable._locale\n }\n\n if (locale !== 'all') {\n condtions.push(eq(aliasLocaleTable._locale, locale))\n }\n\n const localesTable = adapter.tables[`${rootTableName}${adapter.localesSuffix}`]\n\n addJoinTable({\n condition: and(...condtions),\n joins,\n table: localesTable,\n })\n\n joins.push({\n condition: eq(localesTable[columnName], newAliasTable.id),\n table: newAliasTable,\n })\n } else {\n joins.push({\n condition: eq(\n newAliasTable.id,\n aliasTable ? aliasTable[columnName] : adapter.tables[tableName][columnName],\n ),\n table: newAliasTable,\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.relationTo].config.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n selectFields,\n tableName: newTableName,\n value,\n })\n }\n\n break\n }\n\n case 'select': {\n if (field.hasMany) {\n const newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const idColumn = (aliasTable ?? adapter.tables[tableName]).id\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(idColumn, adapter.tables[newTableName].parent),\n eq(adapter.tables[newTableName]._locale, locale),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(idColumn, adapter.tables[newTableName].parent),\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return {\n columnName: 'value',\n constraints,\n field,\n table: adapter.tables[newTableName],\n }\n }\n break\n }\n\n case 'tab': {\n if (tabHasName(field)) {\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${constraintPath}${field.name}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix,\n value,\n })\n }\n\n default: {\n // fall through\n break\n }\n }\n\n let newTable = adapter.tables[newTableName]\n\n if (isFieldLocalized && adapter.payload.config.localization) {\n // If localized, we go to localized table and set aliasTable to undefined\n // so it is not picked up below to be used as targetTable\n const parentTable = aliasTable || adapter.tables[tableName]\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n // use an alias because the same query may contain constraints with different locale value\n if (localizedPathQuery) {\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n newTable = newAliasTable\n } else {\n newTable = adapter.tables[newTableName]\n }\n\n let condition = eq(parentTable.id, newTable._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(newTable._locale, locale))\n }\n\n if (selectLocale) {\n selectFields._locale = newTable._locale\n }\n\n addJoinTable({\n condition,\n joins,\n table: newTable,\n })\n\n aliasTable = undefined\n }\n\n const targetTable = aliasTable || newTable\n\n selectFields[`${newTableName}.${columnPrefix}${field.name}`] =\n targetTable[`${columnPrefix}${field.name}`]\n\n return {\n columnName: `${columnPrefix}${field.name}`,\n constraints,\n field,\n pathSegments,\n table: targetTable,\n }\n }\n\n throw new APIError(`Cannot find field for path at ${fieldPath}`)\n}\n"],"names":["and","eq","getTableName","like","sql","APIError","getFieldByPath","fieldShouldBeLocalized","tabHasName","toSnakeCase","validate","uuidValidate","isPolymorphicRelationship","isUUIDType","jsonBuildObject","DistinctSymbol","resolveBlockTableName","addJoinTable","getTableAlias","getTableColumnFromPath","adapter","aliasTable","collectionPath","columnPrefix","constraintPath","incomingConstraintPath","constraints","fields","joins","locale","incomingLocale","parentAliasTable","parentIsLocalized","pathSegments","incomingSegments","rootTableName","incomingRootTableName","selectFields","selectLocale","tableName","tableNameSuffix","value","fieldPath","field","find","fieldToFind","name","newTableName","id","tables","columnName","type","idType","table","localizedPathQuery","isFieldLocalized","payload","config","localization","matchedLocale","localeCodes","splice","tableNameMap","get","arrayParentTable","conditions","_parentID","_locale","push","condition","isOneToMany","flattenedFields","localized","slice","blocksAsJSON","blockTableColumn","blockTypes","Array","isArray","forEach","blockType","block","blocks","slug","newAliasTable","getNotNullColumnByValue","hasBlockField","some","_block","result","blockConstraints","blockSelectFields","blockJoin","newJoins","_","concat","previousLength","length","i","rawColumn","localesSuffix","collection","newCollectionPath","join","hasMany","relationTableName","relationshipsSuffix","existingTable","e","queryPath","aliasRelationshipTable","relationshipField","collections","path","on","relationTo","relationshipConfig","relationshipTableName","relationshipFields","existingMainTable","relationshipTable","parent","onSegments","split","collectionFlattenedFields","firstSegField","f","arrayTableName","undefined","arrayAliasTable","replaceAll","tableType","joinConstraints","existingJoin","aliasRelationshipTableName","res","newAliasTableName","hasCustomCollectionWithCustomID","customIDType","columns","map","idTypeTextOrUuid","every","val","raw","filter","Boolean","matchedRelation","relation","obj","aliasLocaleTable","condtions","localesTable","idColumn","newTable","parentTable","targetTable"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/queries/getTableColumnFromPath.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { SQLiteTableWithColumns } from 'drizzle-orm/sqlite-core'\nimport type {\n FlattenedBlock,\n FlattenedField,\n NumberField,\n RelationshipField,\n TextField,\n} from 'payload'\n\nimport { and, eq, getTableName, like, sql } from 'drizzle-orm'\nimport { type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { APIError, getFieldByPath } from 'payload'\nimport { fieldShouldBeLocalized, tabHasName } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\nimport { validate as uuidValidate } from 'uuid'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { isPolymorphicRelationship } from '../utilities/isPolymorphicRelationship.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { jsonBuildObject } from '../utilities/json.js'\nimport { DistinctSymbol } from '../utilities/rawConstraint.js'\nimport { resolveBlockTableName } from '../utilities/validateExistingBlockIsIdentical.js'\nimport { addJoinTable } from './addJoinTable.js'\nimport { getTableAlias } from './getTableAlias.js'\nimport { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRelationshipPath.js'\n\ntype Constraint = {\n columnName: string\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n value: unknown\n}\n\ntype TableColumn = {\n columnName?: string\n columns?: {\n idType: 'number' | 'text' | 'uuid'\n rawColumn: SQL<unknown>\n }[]\n constraints: Constraint[]\n field: FlattenedField\n getNotNullColumnByValue?: (val: unknown) => string\n pathSegments?: string[]\n rawColumn?: SQL\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n}\n\ntype Args = {\n adapter: DrizzleAdapter\n /** The current table when a query is being built with an alias, such as inside a subquery. */\n aliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n collectionPath: string\n columnPrefix?: string\n constraintPath?: string\n constraints?: Constraint[]\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n /** The aliased table that owns a field nested inside an array or block. */\n parentAliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n parentIsLocalized: boolean\n pathSegments: string[]\n rootTableName?: string\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n /**\n * If creating a new table name for arrays and blocks, this suffix should be appended to the table name\n */\n tableNameSuffix?: string\n /**\n * The raw value of the query before sanitization\n */\n value: unknown\n}\n/**\n * Resolves a field path to the database table and column that store its value.\n *\n * While walking through relationships, arrays, and blocks, the function adds the joins required\n * to reach the final column. Table aliases are used when the path is resolved inside a subquery.\n *\n * @example\n * Resolving `movies.name` adds joins from the parent collection to its relationship table and then\n * to the `movies` table. The returned column is `movies.name`.\n *\n * @returns The final field and column, plus any extra constraints discovered while resolving it.\n */\nexport const getTableColumnFromPath = ({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix = '',\n constraintPath: incomingConstraintPath,\n constraints = [],\n fields,\n joins,\n locale: incomingLocale,\n parentAliasTable,\n parentIsLocalized,\n pathSegments: incomingSegments,\n rootTableName: incomingRootTableName,\n selectFields,\n selectLocale,\n tableName,\n tableNameSuffix = '',\n value,\n}: Args): TableColumn => {\n const fieldPath = incomingSegments[0]\n let locale = incomingLocale\n const rootTableName = incomingRootTableName || tableName\n const tableContainingField = parentAliasTable ?? aliasTable ?? adapter.tables[rootTableName]\n let constraintPath = incomingConstraintPath || ''\n\n const field = fields.find((fieldToFind) => fieldToFind.name === fieldPath)\n let newTableName = tableName\n\n if (!field && fieldPath === 'id') {\n selectFields.id = adapter.tables[newTableName].id\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: adapter.tables[newTableName],\n }\n }\n\n let localizedPathQuery = false\n if (field) {\n const pathSegments = [...incomingSegments]\n const fieldStoragePath = appendFieldToStoragePath({ field, path: constraintPath })\n\n const isFieldLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n // If next segment is a locale,\n // we need to take it out and use it as the locale from this point on\n if (isFieldLocalized && adapter.payload.config.localization) {\n const matchedLocale = adapter.payload.config.localization.localeCodes.find(\n (locale) => locale === pathSegments[1],\n )\n\n if (matchedLocale) {\n locale = matchedLocale\n localizedPathQuery = true\n pathSegments.splice(1, 1)\n }\n }\n\n switch (field.type) {\n case 'array': {\n newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const arrayParentTable = aliasTable || adapter.tables[tableName]\n\n constraintPath = `${fieldStoragePath}.`\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [eq(arrayParentTable.id, adapter.tables[newTableName]._parentID)]\n\n if (selectLocale) {\n selectFields._locale = adapter.tables[newTableName]._locale\n }\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n addJoinTable({\n condition: and(...conditions),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(arrayParentTable.id, adapter.tables[newTableName]._parentID),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentAliasTable: aliasTable,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n }\n case 'blocks': {\n if (adapter.blocksAsJSON) {\n break\n }\n let blockTableColumn: TableColumn\n let newTableName: string\n\n // handle blockType queries\n if (pathSegments[1] === 'blockType') {\n // find the block config using the value\n const blockTypes = Array.isArray(value) ? value : [value]\n blockTypes.forEach((blockType) => {\n const fieldBlock = field.blocks.find((block) =>\n typeof block === 'string' ? block === blockType : block.slug === blockType,\n )\n const registeredBlocks: Record<string, FlattenedBlock | undefined> =\n adapter.payload.blocks\n const block: FlattenedBlock | undefined =\n typeof fieldBlock === 'string' ? registeredBlocks[fieldBlock] : fieldBlock\n\n if (!block) {\n throw new APIError('Block was not found', 400)\n }\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n\n joins.push({\n condition: eq(adapter.tables[tableName].id, newAliasTable._parentID),\n table: newAliasTable,\n })\n constraints.push({\n columnName: '_path',\n table: newAliasTable,\n value: `${constraintPath}${pathSegments[0]}`,\n })\n })\n return {\n constraints,\n field,\n getNotNullColumnByValue: () => 'id',\n table: adapter.tables[tableName],\n }\n }\n\n const hasBlockField = field.blocks.some((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n let result: TableColumn\n const blockConstraints = []\n const blockSelectFields = {}\n\n let blockJoin: BuildQueryJoinAliases[0]\n if (isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n blockJoin = {\n condition: and(...conditions),\n table: adapter.tables[newTableName],\n }\n } else {\n blockJoin = {\n condition: eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n table: adapter.tables[newTableName],\n }\n }\n\n // Create a new reference for nested joins\n const newJoins = [...joins]\n\n try {\n result = getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath: `${fieldStoragePath}.`,\n constraints: blockConstraints,\n fields: block.flattenedFields,\n joins: newJoins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields: blockSelectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } catch (_) {\n // this is fine, not every block will have the field\n }\n if (!result) {\n return\n }\n blockTableColumn = result\n constraints = constraints.concat(blockConstraints)\n selectFields = { ...selectFields, ...blockSelectFields }\n\n const previousLength = joins.length\n joins.push(blockJoin)\n // Append new joins AFTER the block join to prevent errors with missing FROM clause.\n if (newJoins.length > previousLength) {\n for (let i = previousLength; i < newJoins.length; i++) {\n joins.push(newJoins[i])\n }\n }\n return true\n })\n if (hasBlockField) {\n return {\n columnName: blockTableColumn.columnName,\n constraints,\n field: blockTableColumn.field,\n pathSegments: pathSegments.slice(1),\n rawColumn: blockTableColumn.rawColumn,\n table: blockTableColumn.table,\n }\n }\n break\n }\n\n case 'group': {\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n let condition = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${fieldStoragePath}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n\n case 'join': {\n if (Array.isArray(field.collection)) {\n throw new APIError('Not supported')\n }\n\n const newCollectionPath = pathSegments.slice(1).join('.')\n\n // Filtering through a polymorphic `on` relationship is not supported: it is stored in the\n // `_rels` table with no direct column to correlate on, which would otherwise build invalid SQL.\n const onRelationshipField = getFieldByPath({\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n path: field.on,\n })?.field\n\n if (\n onRelationshipField &&\n (onRelationshipField.type === 'relationship' || onRelationshipField.type === 'upload') &&\n Array.isArray(onRelationshipField.relationTo)\n ) {\n throw new APIError('Not supported')\n }\n\n if (field.hasMany) {\n const relationTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}._rels`,\n )\n\n const aliasRelationshipTable = (existingTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n const relationshipField = getFieldByPath({\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n path: field.on,\n })\n if (!relationshipField) {\n throw new APIError('Relationship was not found')\n }\n\n if (!existingTable) {\n addJoinTable({\n condition: and(\n eq(\n tableContainingField.id,\n aliasRelationshipTable[\n `${(relationshipField.field as RelationshipField).relationTo as string}ID`\n ],\n ),\n like(aliasRelationshipTable.path, field.on),\n ),\n joins,\n queryPath: `${constraintPath}${field.name}._rels`,\n table: aliasRelationshipTable,\n })\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'parent',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: aliasRelationshipTable,\n }\n }\n\n const relationshipConfig = adapter.payload.collections[field.collection].config\n const relationshipTableName = adapter.tableNameMap.get(\n toSnakeCase(relationshipConfig.slug),\n )\n\n // parent to relationship join table\n const relationshipFields = relationshipConfig.flattenedFields\n\n const existingMainTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )\n\n const relationshipTable = (existingMainTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationshipTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n if (!existingMainTable) {\n joins.push({\n condition: eq(aliasRelationshipTable.parent, relationshipTable.id),\n queryPath: `${constraintPath}${field.name}`,\n table: relationshipTable,\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: relationshipTable,\n collectionPath: newCollectionPath,\n constraints,\n fields: relationshipFields,\n joins,\n locale,\n // A join reads from a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n rootTableName: relationshipTableName,\n selectFields,\n selectLocale,\n tableName: relationshipTableName,\n value,\n })\n }\n\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.collection].config.slug),\n )\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )?.table\n const newAliasTable =\n existingTable || getTableAlias({ adapter, tableName: newTableName }).newAliasTable\n\n if (!existingTable) {\n const onSegments = field.on.split('.')\n const collectionFlattenedFields =\n adapter.payload.collections[field.collection].config.flattenedFields\n const firstSegField =\n onSegments.length > 1\n ? collectionFlattenedFields.find((f) => f.name === onSegments[0])\n : null\n\n const arrayTableName =\n firstSegField?.type === 'array'\n ? adapter.tableNameMap.get(`${newTableName}_${toSnakeCase(onSegments[0])}`)\n : undefined\n\n if (arrayTableName) {\n // join from main table to array table\n const { newAliasTable: arrayAliasTable } = getTableAlias({\n adapter,\n tableName: arrayTableName,\n })\n\n joins.push({\n condition: eq(\n arrayAliasTable[onSegments.slice(1).join('_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n ),\n queryPath: `${constraintPath}${field.name}._array`,\n table: arrayAliasTable,\n })\n\n joins.push({\n condition: eq(\n (newAliasTable as PgTableWithColumns<any>).id,\n arrayAliasTable._parentID,\n ),\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n } else {\n joins.push({\n condition: eq(\n newAliasTable[field.on.replaceAll('.', '_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n ),\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n }\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: newAliasTable,\n }\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n joins,\n locale,\n // A join reads from a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n selectFields,\n tableName: newTableName,\n value,\n })\n\n break\n }\n\n case 'number':\n case 'text': {\n if (field.hasMany) {\n let tableType = 'texts'\n let columnName = 'text'\n if (field.type === 'number') {\n tableType = 'numbers'\n columnName = 'number'\n }\n newTableName = `${rootTableName}_${tableType}`\n\n const existingTable = joins.find((e) => e.queryPath === fieldStoragePath)\n\n const table = (existingTable?.table ??\n getTableAlias({ adapter, tableName: newTableName })\n .newAliasTable) as PgTableWithColumns<any>\n\n const joinConstraints = [\n eq(tableContainingField.id, table.parent),\n like(table.path, fieldStoragePath),\n ]\n\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [...joinConstraints]\n\n if (locale !== 'all') {\n conditions.push(eq(table._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: fieldStoragePath,\n table,\n })\n } else {\n addJoinTable({\n condition: and(...joinConstraints),\n joins,\n queryPath: fieldStoragePath,\n table,\n })\n }\n\n return {\n columnName,\n constraints,\n field,\n table,\n }\n }\n break\n }\n case 'relationship':\n case 'upload': {\n const newCollectionPath = pathSegments.slice(1).join('.')\n\n if (Array.isArray(field.relationTo) || field.hasMany) {\n const relationshipPath = resolveRelationshipPath({\n adapter,\n fields,\n locale,\n parentIsLocalized,\n path: field.name,\n pathPrefix: constraintPath,\n })\n\n if (!relationshipPath) {\n throw new APIError(`Relationship path could not be resolved: ${collectionPath}`)\n }\n\n let relationshipFields: FlattenedField[]\n const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`\n\n const existingJoin = joins.find((e) => e.queryPath === `${constraintPath}.${field.name}`)\n\n let aliasRelationshipTable: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n let aliasRelationshipTableName: string\n if (existingJoin) {\n aliasRelationshipTable = existingJoin.table\n aliasRelationshipTableName = getTableName(existingJoin.table)\n } else {\n const res = getTableAlias({\n adapter,\n tableName: relationTableName,\n })\n aliasRelationshipTable = res.newAliasTable\n aliasRelationshipTableName = res.newAliasTableName\n }\n\n if (selectLocale && relationshipPath.isLocalized && adapter.payload.config.localization) {\n selectFields._locale = aliasRelationshipTable.locale\n }\n\n // Join in the relationships table\n if (\n relationshipPath.locale &&\n relationshipPath.locale !== 'all' &&\n relationshipPath.isLocalized &&\n adapter.payload.config.localization\n ) {\n const conditions = [\n eq(tableContainingField.id, aliasRelationshipTable.parent),\n like(aliasRelationshipTable.path, relationshipPath.path),\n ]\n\n conditions.push(eq(aliasRelationshipTable.locale, relationshipPath.locale))\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: `${constraintPath}.${field.name}`,\n table: aliasRelationshipTable,\n })\n } else {\n // Join in the relationships table\n addJoinTable({\n condition: and(\n eq(tableContainingField.id, aliasRelationshipTable.parent),\n like(aliasRelationshipTable.path, relationshipPath.path),\n ),\n joins,\n queryPath: `${constraintPath}.${field.name}`,\n table: aliasRelationshipTable,\n })\n }\n\n selectFields[`${relationTableName}.path`] = aliasRelationshipTable.path\n\n let newAliasTable\n\n if (typeof field.relationTo === 'string') {\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n newTableName = adapter.tableNameMap.get(toSnakeCase(relationshipConfig.slug))\n\n // parent to relationship join table\n relationshipFields = relationshipConfig.flattenedFields\n ;({ newAliasTable } = getTableAlias({ adapter, tableName: newTableName }))\n\n joins.push({\n condition: eq(newAliasTable.id, aliasRelationshipTable[`${field.relationTo}ID`]),\n table: newAliasTable,\n })\n\n if (newCollectionPath === '' || newCollectionPath === 'id') {\n return {\n columnName: `${field.relationTo}ID`,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n }\n } else if (newCollectionPath === 'value') {\n const hasCustomCollectionWithCustomID = field.relationTo.some(\n (relationTo) => !!adapter.payload.collections[relationTo].customIDType,\n )\n\n const columns: TableColumn['columns'] = field.relationTo\n .map((relationTo) => {\n let idType: 'number' | 'text' | 'uuid' = isUUIDType(adapter.idType)\n ? 'uuid'\n : 'number'\n\n const { customIDType } = adapter.payload.collections[relationTo]\n\n if (customIDType) {\n idType = customIDType\n }\n\n const idTypeTextOrUuid = idType === 'text' || idType === 'uuid'\n\n // Do not add the column to OR if we know that it can't match by the type\n // We can't do the same with idType: 'number' because `value` can be from the REST search query params\n if (typeof value === 'number' && idTypeTextOrUuid) {\n return null\n }\n\n if (\n Array.isArray(value) &&\n value.every((val) => typeof val === 'number') &&\n idTypeTextOrUuid\n ) {\n return null\n }\n\n // Do not add the UUID type column if incoming query value doesn't match UUID. If there aren't any collections with\n // a custom ID type, we skip this check\n // We need this because Postgres throws an error if querying by UUID column with a value that isn't a valid UUID.\n if (\n value &&\n !Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID\n ) {\n if (!uuidValidate(value)) {\n return null\n }\n }\n\n if (\n Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID &&\n !value.some((val) => uuidValidate(val))\n ) {\n return null\n }\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n idType,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n }\n })\n .filter(Boolean)\n\n return {\n columns,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n } else if (newCollectionPath === 'relationTo') {\n const relationTo = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n\n return {\n constraints,\n field,\n getNotNullColumnByValue: (val) => {\n const matchedRelation = relationTo.find((relation) => relation === val)\n if (matchedRelation) {\n return `${matchedRelation}ID`\n }\n return undefined\n },\n table: aliasRelationshipTable,\n }\n } else if (isPolymorphicRelationship(value)) {\n const { relationTo } = value\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n constraints,\n field,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n table: aliasRelationshipTable,\n }\n } else if (value === DistinctSymbol) {\n const obj: Record<string, SQL> = {}\n\n field.relationTo.forEach((relationTo) => {\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n obj[relationTo] = sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`)\n })\n\n let rawColumn = jsonBuildObject(adapter, obj)\n if (adapter.name === 'postgres') {\n rawColumn = sql`${rawColumn}::text`\n }\n\n return {\n constraints,\n field,\n rawColumn,\n table: aliasRelationshipTable,\n }\n } else {\n throw new APIError('Not supported')\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraints,\n fields: relationshipFields,\n joins,\n locale,\n // A relationship jumps to a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n rootTableName: newTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } else if (\n pathSegments.length > 1 &&\n !(pathSegments.length === 2 && pathSegments[1] === 'id')\n ) {\n // simple relationships\n const columnName = `${columnPrefix}${field.name}`\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.relationTo].config.slug),\n )\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n\n if (isFieldLocalized && adapter.payload.config.localization) {\n const { newAliasTable: aliasLocaleTable } = getTableAlias({\n adapter,\n tableName: `${rootTableName}${adapter.localesSuffix}`,\n })\n\n const condtions = [eq(aliasLocaleTable._parentID, tableContainingField.id)]\n\n if (selectLocale) {\n selectFields._locale = aliasLocaleTable._locale\n }\n\n if (locale !== 'all') {\n condtions.push(eq(aliasLocaleTable._locale, locale))\n }\n\n const localesTable = adapter.tables[`${rootTableName}${adapter.localesSuffix}`]\n\n addJoinTable({\n condition: and(...condtions),\n joins,\n table: localesTable,\n })\n\n joins.push({\n condition: eq(localesTable[columnName], newAliasTable.id),\n table: newAliasTable,\n })\n } else {\n joins.push({\n condition: eq(\n newAliasTable.id,\n aliasTable ? aliasTable[columnName] : adapter.tables[tableName][columnName],\n ),\n table: newAliasTable,\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.relationTo].config.flattenedFields,\n joins,\n locale,\n // A relationship jumps to a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n selectFields,\n tableName: newTableName,\n value,\n })\n }\n\n break\n }\n\n case 'select': {\n if (field.hasMany) {\n const newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const idColumn = (aliasTable ?? adapter.tables[tableName]).id\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(idColumn, adapter.tables[newTableName].parent),\n eq(adapter.tables[newTableName]._locale, locale),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(idColumn, adapter.tables[newTableName].parent),\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return {\n columnName: 'value',\n constraints,\n field,\n table: adapter.tables[newTableName],\n }\n }\n break\n }\n\n case 'tab': {\n if (tabHasName(field)) {\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${fieldStoragePath}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix,\n value,\n })\n }\n\n default: {\n // fall through\n break\n }\n }\n\n let newTable = adapter.tables[newTableName]\n\n if (isFieldLocalized && adapter.payload.config.localization) {\n // If localized, we go to localized table and set aliasTable to undefined\n // so it is not picked up below to be used as targetTable\n const parentTable = aliasTable || adapter.tables[tableName]\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n // use an alias because the same query may contain constraints with different locale value\n if (localizedPathQuery) {\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n newTable = newAliasTable\n } else {\n newTable = adapter.tables[newTableName]\n }\n\n let condition = eq(parentTable.id, newTable._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(newTable._locale, locale))\n }\n\n if (selectLocale) {\n selectFields._locale = newTable._locale\n }\n\n addJoinTable({\n condition,\n joins,\n table: newTable,\n })\n\n aliasTable = undefined\n }\n\n const targetTable = aliasTable || newTable\n\n selectFields[`${newTableName}.${columnPrefix}${field.name}`] =\n targetTable[`${columnPrefix}${field.name}`]\n\n return {\n columnName: `${columnPrefix}${field.name}`,\n constraints,\n field,\n pathSegments,\n table: targetTable,\n }\n }\n\n throw new APIError(`Cannot find field for path at ${fieldPath}`)\n}\n"],"names":["and","eq","getTableName","like","sql","APIError","getFieldByPath","fieldShouldBeLocalized","tabHasName","toSnakeCase","validate","uuidValidate","isPolymorphicRelationship","isUUIDType","jsonBuildObject","DistinctSymbol","resolveBlockTableName","addJoinTable","getTableAlias","appendFieldToStoragePath","resolveRelationshipPath","getTableColumnFromPath","adapter","aliasTable","collectionPath","columnPrefix","constraintPath","incomingConstraintPath","constraints","fields","joins","locale","incomingLocale","parentAliasTable","parentIsLocalized","pathSegments","incomingSegments","rootTableName","incomingRootTableName","selectFields","selectLocale","tableName","tableNameSuffix","value","fieldPath","tableContainingField","tables","field","find","fieldToFind","name","newTableName","id","columnName","type","idType","table","localizedPathQuery","fieldStoragePath","path","isFieldLocalized","payload","config","localization","matchedLocale","localeCodes","splice","tableNameMap","get","arrayParentTable","conditions","_parentID","_locale","push","condition","isOneToMany","flattenedFields","localized","slice","blocksAsJSON","blockTableColumn","blockTypes","Array","isArray","forEach","blockType","fieldBlock","blocks","block","slug","registeredBlocks","newAliasTable","getNotNullColumnByValue","hasBlockField","some","_block","result","blockConstraints","blockSelectFields","blockJoin","newJoins","_","concat","previousLength","length","i","rawColumn","localesSuffix","collection","newCollectionPath","join","onRelationshipField","collections","on","relationTo","hasMany","relationTableName","relationshipsSuffix","existingTable","e","queryPath","aliasRelationshipTable","relationshipField","relationshipConfig","relationshipTableName","relationshipFields","existingMainTable","relationshipTable","parent","onSegments","split","collectionFlattenedFields","firstSegField","f","arrayTableName","undefined","arrayAliasTable","replaceAll","tableType","joinConstraints","relationshipPath","pathPrefix","existingJoin","aliasRelationshipTableName","res","newAliasTableName","isLocalized","hasCustomCollectionWithCustomID","customIDType","columns","map","idTypeTextOrUuid","every","val","raw","filter","Boolean","matchedRelation","relation","obj","aliasLocaleTable","condtions","localesTable","idColumn","newTable","parentTable","targetTable"],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  import { type Column, type SQL } from 'drizzle-orm';
2
- type OperatorKeys = 'and' | 'contains' | 'equals' | 'exists' | 'greater_than' | 'greater_than_equal' | 'in' | 'isNull' | 'less_than' | 'less_than_equal' | 'like' | 'not_equals' | 'not_in' | 'not_like' | 'or';
3
- export type Operators = Record<OperatorKeys, (column: Column, value: unknown) => SQL>;
2
+ export type OperatorKeys = 'and' | 'contains' | 'equals' | 'exists' | 'greater_than' | 'greater_than_equal' | 'in' | 'isNull' | 'less_than' | 'less_than_equal' | 'like' | 'not_equals' | 'not_in' | 'not_like' | 'or';
3
+ /**
4
+ * The subset of operator keys that represent an actual user-facing comparison operator,
5
+ * excluding the `and`/`or` boolean combinators.
6
+ */
7
+ export type DrizzleResolvedOperator = Exclude<OperatorKeys, 'and' | 'or'>;
8
+ export type Operators = Record<OperatorKeys, (column: Column | SQL, value: unknown) => SQL>;
4
9
  export declare const operatorMap: Operators;
5
- export {};
6
10
  //# sourceMappingURL=operatorMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"operatorMap.d.ts","sourceRoot":"","sources":["../../src/queries/operatorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,EAcX,KAAK,GAAG,EACT,MAAM,aAAa,CAAA;AAEpB,KAAK,YAAY,GACb,KAAK,GACL,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,cAAc,GACd,oBAAoB,GACpB,IAAI,GACJ,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,MAAM,GACN,YAAY,GACZ,QAAQ,GACR,UAAU,GACV,IAAI,CAAA;AAER,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,GAAG,CAAC,CAAA;AAErF,eAAO,MAAM,WAAW,EAAE,SAkBzB,CAAA"}
1
+ {"version":3,"file":"operatorMap.d.ts","sourceRoot":"","sources":["../../src/queries/operatorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,EAcX,KAAK,GAAG,EACT,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,YAAY,GACpB,KAAK,GACL,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,cAAc,GACd,oBAAoB,GACpB,IAAI,GACJ,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,MAAM,GACN,YAAY,GACZ,QAAQ,GACR,UAAU,GACV,IAAI,CAAA;AAER;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,GAAG,IAAI,CAAC,CAAA;AAEzE,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,KAAK,GAAG,CAAC,CAAA;AAE3F,eAAO,MAAM,WAAW,EAAE,SAkBzB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/operatorMap.ts"],"sourcesContent":["import {\n and,\n type Column,\n eq,\n gt,\n gte,\n ilike,\n inArray,\n isNotNull,\n isNull,\n lt,\n lte,\n ne,\n notIlike,\n notInArray,\n or,\n type SQL,\n} from 'drizzle-orm'\n\ntype OperatorKeys =\n | 'and'\n | 'contains'\n | 'equals'\n | 'exists'\n | 'greater_than'\n | 'greater_than_equal'\n | 'in'\n | 'isNull'\n | 'less_than'\n | 'less_than_equal'\n | 'like'\n | 'not_equals'\n | 'not_in'\n | 'not_like'\n | 'or'\n\nexport type Operators = Record<OperatorKeys, (column: Column, value: unknown) => SQL>\n\nexport const operatorMap: Operators = {\n and,\n contains: ilike,\n equals: eq,\n exists: isNotNull,\n greater_than: gt,\n greater_than_equal: gte,\n in: inArray,\n isNull, // handles exists: false\n less_than: lt,\n less_than_equal: lte,\n like: ilike,\n not_equals: ne,\n not_like: notIlike,\n // TODO: support this\n // all: all,\n not_in: notInArray,\n or,\n}\n"],"names":["and","eq","gt","gte","ilike","inArray","isNotNull","isNull","lt","lte","ne","notIlike","notInArray","or","operatorMap","contains","equals","exists","greater_than","greater_than_equal","in","less_than","less_than_equal","like","not_equals","not_like","not_in"],"mappings":"AAAA,SACEA,GAAG,EAEHC,EAAE,EACFC,EAAE,EACFC,GAAG,EACHC,KAAK,EACLC,OAAO,EACPC,SAAS,EACTC,MAAM,EACNC,EAAE,EACFC,GAAG,EACHC,EAAE,EACFC,QAAQ,EACRC,UAAU,EACVC,EAAE,QAEG,cAAa;AAqBpB,OAAO,MAAMC,cAAyB;IACpCd;IACAe,UAAUX;IACVY,QAAQf;IACRgB,QAAQX;IACRY,cAAchB;IACdiB,oBAAoBhB;IACpBiB,IAAIf;IACJE;IACAc,WAAWb;IACXc,iBAAiBb;IACjBc,MAAMnB;IACNoB,YAAYd;IACZe,UAAUd;IACV,qBAAqB;IACrB,YAAY;IACZe,QAAQd;IACRC;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/queries/operatorMap.ts"],"sourcesContent":["import {\n and,\n type Column,\n eq,\n gt,\n gte,\n ilike,\n inArray,\n isNotNull,\n isNull,\n lt,\n lte,\n ne,\n notIlike,\n notInArray,\n or,\n type SQL,\n} from 'drizzle-orm'\n\nexport type OperatorKeys =\n | 'and'\n | 'contains'\n | 'equals'\n | 'exists'\n | 'greater_than'\n | 'greater_than_equal'\n | 'in'\n | 'isNull'\n | 'less_than'\n | 'less_than_equal'\n | 'like'\n | 'not_equals'\n | 'not_in'\n | 'not_like'\n | 'or'\n\n/**\n * The subset of operator keys that represent an actual user-facing comparison operator,\n * excluding the `and`/`or` boolean combinators.\n */\nexport type DrizzleResolvedOperator = Exclude<OperatorKeys, 'and' | 'or'>\n\nexport type Operators = Record<OperatorKeys, (column: Column | SQL, value: unknown) => SQL>\n\nexport const operatorMap: Operators = {\n and,\n contains: ilike,\n equals: eq,\n exists: isNotNull,\n greater_than: gt,\n greater_than_equal: gte,\n in: inArray,\n isNull, // handles exists: false\n less_than: lt,\n less_than_equal: lte,\n like: ilike,\n not_equals: ne,\n not_like: notIlike,\n // TODO: support this\n // all: all,\n not_in: notInArray,\n or,\n}\n"],"names":["and","eq","gt","gte","ilike","inArray","isNotNull","isNull","lt","lte","ne","notIlike","notInArray","or","operatorMap","contains","equals","exists","greater_than","greater_than_equal","in","less_than","less_than_equal","like","not_equals","not_like","not_in"],"mappings":"AAAA,SACEA,GAAG,EAEHC,EAAE,EACFC,EAAE,EACFC,GAAG,EACHC,KAAK,EACLC,OAAO,EACPC,SAAS,EACTC,MAAM,EACNC,EAAE,EACFC,GAAG,EACHC,EAAE,EACFC,QAAQ,EACRC,UAAU,EACVC,EAAE,QAEG,cAAa;AA2BpB,OAAO,MAAMC,cAAyB;IACpCd;IACAe,UAAUX;IACVY,QAAQf;IACRgB,QAAQX;IACRY,cAAchB;IACdiB,oBAAoBhB;IACpBiB,IAAIf;IACJE;IACAc,WAAWb;IACXc,iBAAiBb;IACjBc,MAAMnB;IACNoB,YAAYd;IACZe,UAAUd;IACV,qBAAqB;IACrB,YAAY;IACZe,QAAQd;IACRC;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"parseParams.d.ts","sourceRoot":"","sources":["../../src/queries/parseParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAY,IAAI,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAOpE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAU5D,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,CAAC,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAA;AAExD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,OAAO,EAAE,YAAY,CAAA;IACrB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,UAAU,EACV,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,KAAK,GACN,EAAE,IAAI,GAAG,GAAG,CA8bZ"}
1
+ {"version":3,"file":"parseParams.d.ts","sourceRoot":"","sources":["../../src/queries/parseParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAyC,IAAI,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAyBjG,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAc5D,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,CAAC,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAA;AAExD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,OAAO,EAAE,YAAY,CAAA;IACrB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,UAAU,EACV,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,KAAK,GACN,EAAE,IAAI,GAAG,GAAG,CA+iBZ"}