@payloadcms/drizzle 3.89.0-internal.95c9cba → 3.90.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/find/buildPolymorphicJoinQuery.d.ts +37 -0
  2. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  3. package/dist/find/buildPolymorphicJoinQuery.js +134 -0
  4. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  5. package/dist/find/buildPolymorphicJoinQuery.spec.js +384 -0
  6. package/dist/find/buildPolymorphicJoinQuery.spec.js.map +1 -0
  7. package/dist/find/buildPolymorphicJoinWhere.d.ts +19 -0
  8. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  9. package/dist/find/buildPolymorphicJoinWhere.js +268 -0
  10. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  11. package/dist/find/buildPolymorphicJoinWhere.spec.js +762 -0
  12. package/dist/find/buildPolymorphicJoinWhere.spec.js.map +1 -0
  13. package/dist/find/createPolymorphicJoinWherePlan.d.ts +37 -0
  14. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  15. package/dist/find/createPolymorphicJoinWherePlan.js +190 -0
  16. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  17. package/dist/find/createPolymorphicJoinWherePlan.spec.js +897 -0
  18. package/dist/find/createPolymorphicJoinWherePlan.spec.js.map +1 -0
  19. package/dist/find/traverseFields.d.ts.map +1 -1
  20. package/dist/find/traverseFields.js +18 -191
  21. package/dist/find/traverseFields.js.map +1 -1
  22. package/dist/postgres/createJSONQuery/index.js +3 -3
  23. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  24. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  25. package/dist/queries/getTableColumnFromPath.js +9 -0
  26. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  27. package/dist/queries/parseParams.d.ts.map +1 -1
  28. package/dist/queries/parseParams.js +65 -3
  29. package/dist/queries/parseParams.js.map +1 -1
  30. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  31. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  32. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  33. package/dist/sqlite/createJSONQuery/index.js +6 -5
  34. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  35. package/dist/sqlite/createJSONQuery/index.spec.js +28 -0
  36. package/dist/sqlite/createJSONQuery/index.spec.js.map +1 -0
  37. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  38. package/dist/transform/write/traverseFields.js +8 -14
  39. package/dist/transform/write/traverseFields.js.map +1 -1
  40. package/dist/updateOne.d.ts.map +1 -1
  41. package/dist/updateOne.js +41 -1
  42. package/dist/updateOne.js.map +1 -1
  43. package/dist/updateOne.spec.js +84 -0
  44. package/dist/updateOne.spec.js.map +1 -0
  45. package/dist/upsertRow/conditionalUpdate.spec.js +61 -0
  46. package/dist/upsertRow/conditionalUpdate.spec.js.map +1 -0
  47. package/dist/upsertRow/index.d.ts +1 -1
  48. package/dist/upsertRow/index.d.ts.map +1 -1
  49. package/dist/upsertRow/index.js +25 -5
  50. package/dist/upsertRow/index.js.map +1 -1
  51. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  52. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  53. package/dist/utilities/parseJSONPathSegment.js +17 -0
  54. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  55. package/package.json +3 -3
@@ -0,0 +1,268 @@
1
+ import { and, getTableName, isNotNull, isNull, or, sql } from 'drizzle-orm';
2
+ import { QueryError } from 'payload';
3
+ import toSnakeCase from 'to-snake-case';
4
+ import { sanitizeQueryValue } from '../queries/sanitizeQueryValue.js';
5
+ const supportedJSONQueryOperators = new Set([
6
+ 'contains',
7
+ 'equals',
8
+ 'exists',
9
+ 'in',
10
+ 'like'
11
+ ]);
12
+ /**
13
+ * Builds a where clause for one collection before the polymorphic branches are combined. A field
14
+ * that is absent from this collection resolves to SQL NULL, and relationTo resolves to the current
15
+ * collection slug.
16
+ */ export const buildPolymorphicJoinWhere = ({ adapter, collection, table, where, wherePlan })=>{
17
+ const constraints = [];
18
+ for(const key in where){
19
+ if ([
20
+ 'AND',
21
+ 'OR'
22
+ ].includes(key.toUpperCase())) {
23
+ if (!Array.isArray(where[key])) {
24
+ throw new QueryError([
25
+ {
26
+ path: key
27
+ }
28
+ ]);
29
+ }
30
+ const combine = key.toUpperCase() === 'AND' ? and : or;
31
+ const nestedConstraints = where[key].map((nestedWhere)=>buildPolymorphicJoinWhere({
32
+ adapter,
33
+ collection,
34
+ table,
35
+ where: nestedWhere,
36
+ wherePlan
37
+ }));
38
+ const nestedCondition = combine(...nestedConstraints);
39
+ if (nestedCondition) {
40
+ constraints.push(nestedCondition);
41
+ }
42
+ continue;
43
+ }
44
+ const resolvedPath = resolveWherePath({
45
+ adapter,
46
+ collection,
47
+ schemaPath: key,
48
+ table,
49
+ wherePlan
50
+ });
51
+ for (let payloadOperator of Object.keys(where[key])){
52
+ const originalOperator = payloadOperator;
53
+ let value = where[key][payloadOperator];
54
+ if (resolvedPath.type === 'invalid') {
55
+ throw new QueryError([
56
+ {
57
+ path: `${key}.${payloadOperator}`
58
+ }
59
+ ]);
60
+ }
61
+ if (resolvedPath.type === 'hasManySelect') {
62
+ if (!supportedJSONQueryOperators.has(payloadOperator)) {
63
+ throw new QueryError([
64
+ {
65
+ path: `${key}.${payloadOperator}`
66
+ }
67
+ ]);
68
+ }
69
+ const sanitizedQueryValue = sanitizeQueryValue({
70
+ adapter,
71
+ field: resolvedPath.fieldContext,
72
+ isUUID: false,
73
+ operator: payloadOperator,
74
+ relationOrPath: key,
75
+ val: value
76
+ });
77
+ if (sanitizedQueryValue === null || sanitizedQueryValue.columns) {
78
+ throw new QueryError([
79
+ {
80
+ path: `${key}.${originalOperator}`
81
+ }
82
+ ]);
83
+ }
84
+ value = sanitizedQueryValue.value;
85
+ if (payloadOperator === 'in' && Array.isArray(value) && value.length === 0) {
86
+ constraints.push(sql.raw('false'));
87
+ continue;
88
+ }
89
+ const jsonQueryOperator = payloadOperator === 'exists' ? 'exists' : sanitizedQueryValue.operator;
90
+ constraints.push(sql.raw(adapter.createJSONQuery({
91
+ column: resolvedPath.jsonExpression,
92
+ operator: jsonQueryOperator,
93
+ pathSegments: [
94
+ resolvedPath.pathPlan.columnPath
95
+ ],
96
+ value
97
+ })));
98
+ continue;
99
+ }
100
+ if (payloadOperator === '$raw') {
101
+ if (typeof value !== 'string') {
102
+ throw new QueryError([
103
+ {
104
+ path: `${key}.${payloadOperator}`
105
+ }
106
+ ]);
107
+ }
108
+ constraints.push(sql.raw(value));
109
+ continue;
110
+ }
111
+ const { column, queryValueContext } = resolvedPath;
112
+ if (payloadOperator === 'like' && (queryValueContext.field.type === 'number' || queryValueContext.field.type === 'relationship' || queryValueContext.field.type === 'upload' || queryValueContext.isUUID)) {
113
+ payloadOperator = 'equals';
114
+ }
115
+ const sanitizedQueryValue = sanitizeQueryValue({
116
+ adapter,
117
+ field: queryValueContext.field,
118
+ isUUID: queryValueContext.isUUID,
119
+ operator: payloadOperator,
120
+ relationOrPath: key,
121
+ val: value
122
+ });
123
+ if (sanitizedQueryValue === null || sanitizedQueryValue.columns) {
124
+ throw new QueryError([
125
+ {
126
+ path: `${key}.${originalOperator}`
127
+ }
128
+ ]);
129
+ }
130
+ payloadOperator = sanitizedQueryValue.operator;
131
+ value = sanitizedQueryValue.value;
132
+ if (!(payloadOperator in adapter.operators)) {
133
+ throw new QueryError([
134
+ {
135
+ path: `${key}.${originalOperator}`
136
+ }
137
+ ]);
138
+ }
139
+ const operator = adapter.operators[payloadOperator];
140
+ if (originalOperator === 'equals' && value === null) {
141
+ constraints.push(isNull(column));
142
+ continue;
143
+ }
144
+ if (originalOperator === 'not_equals') {
145
+ if (value === null) {
146
+ constraints.push(isNotNull(column));
147
+ } else {
148
+ const notEqualsConstraint = or(isNull(column), operator(column, value));
149
+ if (notEqualsConstraint) {
150
+ constraints.push(notEqualsConstraint);
151
+ }
152
+ }
153
+ continue;
154
+ }
155
+ if (originalOperator === 'in' && Array.isArray(value) && value.includes(null)) {
156
+ const nonNullValues = value.filter((item)=>item !== null);
157
+ const inConstraint = nonNullValues.length ? operator(column, nonNullValues) : undefined;
158
+ const nullAwareInConstraint = inConstraint ? or(isNull(column), inConstraint) : isNull(column);
159
+ if (nullAwareInConstraint) {
160
+ constraints.push(nullAwareInConstraint);
161
+ }
162
+ continue;
163
+ }
164
+ if (payloadOperator === 'like' && typeof value === 'string') {
165
+ const wordConstraints = value.split(' ').map((word)=>operator(column, `%${word}%`));
166
+ const wordCondition = and(...wordConstraints);
167
+ if (wordCondition) {
168
+ constraints.push(wordCondition);
169
+ }
170
+ continue;
171
+ }
172
+ constraints.push(operator(column, value));
173
+ }
174
+ }
175
+ return and(...constraints);
176
+ };
177
+ const resolveWherePath = ({ adapter, collection, schemaPath, table, wherePlan })=>{
178
+ const pathPlan = wherePlan.get(schemaPath);
179
+ if (!pathPlan) {
180
+ throw new QueryError([
181
+ {
182
+ path: schemaPath
183
+ }
184
+ ]);
185
+ }
186
+ if (pathPlan.type === 'invalid') {
187
+ return {
188
+ type: 'invalid',
189
+ pathPlan
190
+ };
191
+ }
192
+ if (schemaPath === 'relationTo') {
193
+ return {
194
+ type: 'scalar',
195
+ column: sql`${collection}`,
196
+ pathPlan,
197
+ queryValueContext: {
198
+ type: 'scalar',
199
+ field: {
200
+ name: 'relationTo',
201
+ type: 'text'
202
+ },
203
+ isUUID: false
204
+ }
205
+ };
206
+ }
207
+ if (pathPlan.type === 'hasManySelect') {
208
+ const fieldContext = [
209
+ ...pathPlan.fieldsByCollection.values()
210
+ ].find((field)=>field.type === 'hasManySelect')?.field;
211
+ if (!fieldContext) {
212
+ return {
213
+ type: 'invalid',
214
+ pathPlan
215
+ };
216
+ }
217
+ return {
218
+ type: 'hasManySelect',
219
+ fieldContext,
220
+ jsonExpression: getHasManySelectExpression({
221
+ adapter,
222
+ collection,
223
+ pathPlan,
224
+ table
225
+ }),
226
+ pathPlan
227
+ };
228
+ }
229
+ const collectionField = pathPlan.fieldsByCollection.get(collection);
230
+ const fieldContext = collectionField?.type === 'scalar' ? collectionField : undefined;
231
+ const queryValueContext = fieldContext ?? [
232
+ ...pathPlan.fieldsByCollection.values()
233
+ ].find((field)=>field.type === 'scalar');
234
+ if (!queryValueContext) {
235
+ return {
236
+ type: 'invalid',
237
+ pathPlan
238
+ };
239
+ }
240
+ return {
241
+ type: 'scalar',
242
+ column: fieldContext ? table[pathPlan.columnPath] : sql`null`,
243
+ pathPlan,
244
+ queryValueContext
245
+ };
246
+ };
247
+ const getHasManySelectExpression = ({ adapter, collection, pathPlan, table })=>{
248
+ if (pathPlan.fieldsByCollection.get(collection)?.type !== 'hasManySelect') {
249
+ return adapter.name === 'postgres' ? `'[]'::jsonb` : `'[]'`;
250
+ }
251
+ const selectTablePath = pathPlan.schemaPath.split('.').map((pathSegment)=>toSnakeCase(pathSegment)).join('_');
252
+ const valuesTableName = adapter.tableNameMap.get(`${toSnakeCase(collection)}_${selectTablePath}`);
253
+ if (!valuesTableName) {
254
+ throw new Error(`Polymorphic join collection "${collection}" has no value table for "${pathPlan.schemaPath}"`);
255
+ }
256
+ let qualifiedValuesTableName = valuesTableName;
257
+ let parentTableName = getTableName(table);
258
+ if (adapter.schemaName) {
259
+ qualifiedValuesTableName = `"${adapter.schemaName}"."${valuesTableName}"`;
260
+ parentTableName = `"${adapter.schemaName}"."${parentTableName}"`;
261
+ }
262
+ if (adapter.name === 'postgres') {
263
+ return `(select coalesce(jsonb_agg(${qualifiedValuesTableName}.value), '[]'::jsonb) from ${qualifiedValuesTableName} where ${qualifiedValuesTableName}.parent_id = ${parentTableName}.id)`;
264
+ }
265
+ return `(select json_group_array(${qualifiedValuesTableName}.value) from ${qualifiedValuesTableName} where ${qualifiedValuesTableName}.parent_id = ${parentTableName}.id)`;
266
+ };
267
+
268
+ //# sourceMappingURL=buildPolymorphicJoinWhere.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/find/buildPolymorphicJoinWhere.ts"],"sourcesContent":["import type { Column, SQL } from 'drizzle-orm'\n\nimport { and, getTableName, isNotNull, isNull, or, sql } from 'drizzle-orm'\nimport { type FlattenedField, QueryError, type Where } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter, GenericTable } from '../types.js'\nimport type {\n PolymorphicJoinWherePlan,\n ScalarWhereField,\n WherePathPlan,\n} from './createPolymorphicJoinWherePlan.js'\n\nimport { sanitizeQueryValue } from '../queries/sanitizeQueryValue.js'\n\nconst supportedJSONQueryOperators = new Set(['contains', 'equals', 'exists', 'in', 'like'])\n\ntype BuildPolymorphicJoinWhereArgs = {\n adapter: DrizzleAdapter\n collection: string\n table: GenericTable\n where: Where\n wherePlan: PolymorphicJoinWherePlan\n}\n\ntype ResolvedWherePath =\n | {\n column: Column\n pathPlan: WherePathPlan\n queryValueContext: ScalarWhereField\n type: 'scalar'\n }\n | {\n fieldContext: FlattenedField\n jsonExpression: string\n pathPlan: WherePathPlan\n type: 'hasManySelect'\n }\n | {\n pathPlan: WherePathPlan\n type: 'invalid'\n }\n\n/**\n * Builds a where clause for one collection before the polymorphic branches are combined. A field\n * that is absent from this collection resolves to SQL NULL, and relationTo resolves to the current\n * collection slug.\n */\nexport const buildPolymorphicJoinWhere = ({\n adapter,\n collection,\n table,\n where,\n wherePlan,\n}: BuildPolymorphicJoinWhereArgs): SQL | undefined => {\n const constraints: SQL[] = []\n\n for (const key in where) {\n if (['AND', 'OR'].includes(key.toUpperCase())) {\n if (!Array.isArray(where[key])) {\n throw new QueryError([{ path: key }])\n }\n\n const combine = key.toUpperCase() === 'AND' ? and : or\n const nestedConstraints = where[key].map((nestedWhere) =>\n buildPolymorphicJoinWhere({\n adapter,\n collection,\n table,\n where: nestedWhere,\n wherePlan,\n }),\n )\n const nestedCondition = combine(...nestedConstraints)\n\n if (nestedCondition) {\n constraints.push(nestedCondition)\n }\n\n continue\n }\n\n const resolvedPath = resolveWherePath({\n adapter,\n collection,\n schemaPath: key,\n table,\n wherePlan,\n })\n\n for (let payloadOperator of Object.keys(where[key])) {\n const originalOperator = payloadOperator\n let value = where[key][payloadOperator]\n\n if (resolvedPath.type === 'invalid') {\n throw new QueryError([{ path: `${key}.${payloadOperator}` }])\n }\n\n if (resolvedPath.type === 'hasManySelect') {\n if (!supportedJSONQueryOperators.has(payloadOperator)) {\n throw new QueryError([{ path: `${key}.${payloadOperator}` }])\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n field: resolvedPath.fieldContext,\n isUUID: false,\n operator: payloadOperator,\n relationOrPath: key,\n val: value,\n })\n\n if (sanitizedQueryValue === null || sanitizedQueryValue.columns) {\n throw new QueryError([{ path: `${key}.${originalOperator}` }])\n }\n\n value = sanitizedQueryValue.value\n\n if (payloadOperator === 'in' && Array.isArray(value) && value.length === 0) {\n constraints.push(sql.raw('false'))\n continue\n }\n\n const jsonQueryOperator =\n payloadOperator === 'exists' ? 'exists' : sanitizedQueryValue.operator\n\n constraints.push(\n sql.raw(\n adapter.createJSONQuery({\n column: resolvedPath.jsonExpression,\n operator: jsonQueryOperator,\n pathSegments: [resolvedPath.pathPlan.columnPath],\n value,\n }),\n ),\n )\n continue\n }\n\n if (payloadOperator === '$raw') {\n if (typeof value !== 'string') {\n throw new QueryError([{ path: `${key}.${payloadOperator}` }])\n }\n\n constraints.push(sql.raw(value))\n continue\n }\n\n const { column, queryValueContext } = resolvedPath\n\n if (\n payloadOperator === 'like' &&\n (queryValueContext.field.type === 'number' ||\n queryValueContext.field.type === 'relationship' ||\n queryValueContext.field.type === 'upload' ||\n queryValueContext.isUUID)\n ) {\n payloadOperator = 'equals'\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n field: queryValueContext.field,\n isUUID: queryValueContext.isUUID,\n operator: payloadOperator,\n relationOrPath: key,\n val: value,\n })\n\n if (sanitizedQueryValue === null || sanitizedQueryValue.columns) {\n throw new QueryError([{ path: `${key}.${originalOperator}` }])\n }\n\n payloadOperator = sanitizedQueryValue.operator\n value = sanitizedQueryValue.value\n\n if (!(payloadOperator in adapter.operators)) {\n throw new QueryError([{ path: `${key}.${originalOperator}` }])\n }\n\n const operator = adapter.operators[payloadOperator as keyof typeof adapter.operators]\n\n if (originalOperator === 'equals' && value === null) {\n constraints.push(isNull(column))\n continue\n }\n\n if (originalOperator === 'not_equals') {\n if (value === null) {\n constraints.push(isNotNull(column))\n } else {\n const notEqualsConstraint = or(isNull(column), operator(column, value))\n\n if (notEqualsConstraint) {\n constraints.push(notEqualsConstraint)\n }\n }\n continue\n }\n\n if (originalOperator === 'in' && Array.isArray(value) && value.includes(null)) {\n const nonNullValues = value.filter((item) => item !== null)\n const inConstraint = nonNullValues.length ? operator(column, nonNullValues) : undefined\n const nullAwareInConstraint = inConstraint\n ? or(isNull(column), inConstraint)\n : isNull(column)\n\n if (nullAwareInConstraint) {\n constraints.push(nullAwareInConstraint)\n }\n continue\n }\n\n if (payloadOperator === 'like' && typeof value === 'string') {\n const wordConstraints = value.split(' ').map((word) => operator(column, `%${word}%`))\n const wordCondition = and(...wordConstraints)\n\n if (wordCondition) {\n constraints.push(wordCondition)\n }\n continue\n }\n\n constraints.push(operator(column, value))\n }\n }\n\n return and(...constraints)\n}\n\nconst resolveWherePath = ({\n adapter,\n collection,\n schemaPath,\n table,\n wherePlan,\n}: {\n schemaPath: string\n} & Omit<BuildPolymorphicJoinWhereArgs, 'where'>): ResolvedWherePath => {\n const pathPlan = wherePlan.get(schemaPath)\n\n if (!pathPlan) {\n throw new QueryError([{ path: schemaPath }])\n }\n\n if (pathPlan.type === 'invalid') {\n return { type: 'invalid', pathPlan }\n }\n\n if (schemaPath === 'relationTo') {\n return {\n type: 'scalar',\n column: sql`${collection}` as unknown as Column,\n pathPlan,\n queryValueContext: {\n type: 'scalar',\n field: { name: 'relationTo', type: 'text' },\n isUUID: false,\n },\n }\n }\n\n if (pathPlan.type === 'hasManySelect') {\n const fieldContext = [...pathPlan.fieldsByCollection.values()].find(\n (field) => field.type === 'hasManySelect',\n )?.field\n\n if (!fieldContext) {\n return { type: 'invalid', pathPlan }\n }\n\n return {\n type: 'hasManySelect',\n fieldContext,\n jsonExpression: getHasManySelectExpression({\n adapter,\n collection,\n pathPlan,\n table,\n }),\n pathPlan,\n }\n }\n\n const collectionField = pathPlan.fieldsByCollection.get(collection)\n const fieldContext = collectionField?.type === 'scalar' ? collectionField : undefined\n const queryValueContext =\n fieldContext ??\n [...pathPlan.fieldsByCollection.values()].find(\n (field): field is ScalarWhereField => field.type === 'scalar',\n )\n\n if (!queryValueContext) {\n return { type: 'invalid', pathPlan }\n }\n\n return {\n type: 'scalar',\n column: fieldContext ? table[pathPlan.columnPath] : (sql`null` as unknown as Column),\n pathPlan,\n queryValueContext,\n }\n}\n\nconst getHasManySelectExpression = ({\n adapter,\n collection,\n pathPlan,\n table,\n}: {\n adapter: DrizzleAdapter\n collection: string\n pathPlan: WherePathPlan\n table: GenericTable\n}): string => {\n if (pathPlan.fieldsByCollection.get(collection)?.type !== 'hasManySelect') {\n return adapter.name === 'postgres' ? `'[]'::jsonb` : `'[]'`\n }\n\n const selectTablePath = pathPlan.schemaPath\n .split('.')\n .map((pathSegment) => toSnakeCase(pathSegment))\n .join('_')\n const valuesTableName = adapter.tableNameMap.get(`${toSnakeCase(collection)}_${selectTablePath}`)\n\n if (!valuesTableName) {\n throw new Error(\n `Polymorphic join collection \"${collection}\" has no value table for \"${pathPlan.schemaPath}\"`,\n )\n }\n\n let qualifiedValuesTableName = valuesTableName\n let parentTableName = getTableName(table)\n\n if (adapter.schemaName) {\n qualifiedValuesTableName = `\"${adapter.schemaName}\".\"${valuesTableName}\"`\n parentTableName = `\"${adapter.schemaName}\".\"${parentTableName}\"`\n }\n\n if (adapter.name === 'postgres') {\n return `(select coalesce(jsonb_agg(${qualifiedValuesTableName}.value), '[]'::jsonb) from ${qualifiedValuesTableName} where ${qualifiedValuesTableName}.parent_id = ${parentTableName}.id)`\n }\n\n return `(select json_group_array(${qualifiedValuesTableName}.value) from ${qualifiedValuesTableName} where ${qualifiedValuesTableName}.parent_id = ${parentTableName}.id)`\n}\n"],"names":["and","getTableName","isNotNull","isNull","or","sql","QueryError","toSnakeCase","sanitizeQueryValue","supportedJSONQueryOperators","Set","buildPolymorphicJoinWhere","adapter","collection","table","where","wherePlan","constraints","key","includes","toUpperCase","Array","isArray","path","combine","nestedConstraints","map","nestedWhere","nestedCondition","push","resolvedPath","resolveWherePath","schemaPath","payloadOperator","Object","keys","originalOperator","value","type","has","sanitizedQueryValue","field","fieldContext","isUUID","operator","relationOrPath","val","columns","length","raw","jsonQueryOperator","createJSONQuery","column","jsonExpression","pathSegments","pathPlan","columnPath","queryValueContext","operators","notEqualsConstraint","nonNullValues","filter","item","inConstraint","undefined","nullAwareInConstraint","wordConstraints","split","word","wordCondition","get","name","fieldsByCollection","values","find","getHasManySelectExpression","collectionField","selectTablePath","pathSegment","join","valuesTableName","tableNameMap","Error","qualifiedValuesTableName","parentTableName","schemaName"],"mappings":"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"}