@strapi/database 5.54.0 → 5.55.1
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.
- package/dist/entity-manager/index.d.ts.map +1 -1
- package/dist/entity-manager/index.js +9 -2
- package/dist/entity-manager/index.js.map +1 -1
- package/dist/entity-manager/index.mjs +9 -2
- package/dist/entity-manager/index.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.d.ts.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js +139 -64
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs +139 -64
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -1
- package/dist/query/helpers/where.d.ts +8 -1
- package/dist/query/helpers/where.d.ts.map +1 -1
- package/dist/query/helpers/where.js +25 -0
- package/dist/query/helpers/where.js.map +1 -1
- package/dist/query/helpers/where.mjs +25 -1
- package/dist/query/helpers/where.mjs.map +1 -1
- package/dist/query/query-builder.d.ts.map +1 -1
- package/dist/query/query-builder.js +18 -4
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/query-builder.mjs +19 -5
- package/dist/query/query-builder.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -16,5 +16,12 @@ type Where = {
|
|
|
16
16
|
[key: string]: any;
|
|
17
17
|
} | Array<Where>;
|
|
18
18
|
declare const applyWhere: (qb: Knex.QueryBuilder, where: Where) => Knex.QueryBuilder | undefined;
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Prefix unaliased root column keys with `alias` (e.g. `published_at` → `t0.published_at`).
|
|
21
|
+
* Used for update/delete subqueries that join other tables sharing column names.
|
|
22
|
+
* Group operators are walked; already-qualified keys (`t1.title`) and operator keys are left as-is.
|
|
23
|
+
*/
|
|
24
|
+
declare function qualifyRootColumns(where: Record<string, unknown>, alias: string): Record<string, unknown>;
|
|
25
|
+
declare function qualifyRootColumns(where: Record<string, unknown>[], alias: string): Record<string, unknown>[];
|
|
26
|
+
export { applyWhere, processWhere, qualifyRootColumns };
|
|
20
27
|
//# sourceMappingURL=where.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"where.d.ts","sourceRoot":"","sources":["../../../src/query/helpers/where.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAUjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAGpC,KAAK,QAAQ,GAAG,GAAG,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAgGhE;;GAEG;AACH,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9F,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AAmTlG,KAAK,KAAK,GACN;IACE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,GACD,KAAK,CAAC,KAAK,CAAC,CAAC;AAEjB,QAAA,MAAM,UAAU,GAAI,IAAI,IAAI,CAAC,YAAY,EAAE,OAAO,KAAK,KAAG,IAAI,CAAC,YAAY,GAAG,SAoC7E,CAAC;AAsBF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"where.d.ts","sourceRoot":"","sources":["../../../src/query/helpers/where.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAUjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAGpC,KAAK,QAAQ,GAAG,GAAG,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAgGhE;;GAEG;AACH,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9F,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AAmTlG,KAAK,KAAK,GACN;IACE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,GACD,KAAK,CAAC,KAAK,CAAC,CAAC;AAEjB,QAAA,MAAM,UAAU,GAAI,IAAI,IAAI,CAAC,YAAY,EAAE,OAAO,KAAK,KAAG,IAAI,CAAC,YAAY,GAAG,SAoC7E,CAAC;AAsBF;;;;GAIG;AACH,iBAAS,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpG,iBAAS,kBAAkB,CACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAChC,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AAmC7B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -386,7 +386,32 @@ const escapeLike = (value)=>search.escapeQuery(`${value}`, LIKE_SPECIAL_CHARS);
|
|
|
386
386
|
// SQLite has no default LIKE escape character and requires an explicit clause.
|
|
387
387
|
// PostgreSQL and MySQL both default to backslash, matching helpers/search.ts.
|
|
388
388
|
const likeEscapeClause = (qb)=>qb.client.dialect === 'sqlite3' ? " ESCAPE '\\'" : '';
|
|
389
|
+
function qualifyRootColumns(where, alias) {
|
|
390
|
+
if (_.isArray(where)) {
|
|
391
|
+
return where.map((sub)=>qualifyRootColumns(sub, alias));
|
|
392
|
+
}
|
|
393
|
+
const result = {};
|
|
394
|
+
for (const key of Object.keys(where)){
|
|
395
|
+
const value = where[key];
|
|
396
|
+
if (utils.isOperatorOfType('group', key)) {
|
|
397
|
+
if (Array.isArray(value)) {
|
|
398
|
+
result[key] = value.map((sub)=>isRecord(sub) ? qualifyRootColumns(sub, alias) : sub);
|
|
399
|
+
} else {
|
|
400
|
+
result[key] = value;
|
|
401
|
+
}
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
404
|
+
if (key === '$not' && isRecord(value)) {
|
|
405
|
+
result[key] = qualifyRootColumns(value, alias);
|
|
406
|
+
continue;
|
|
407
|
+
}
|
|
408
|
+
const qualifiedKey = key.includes('.') || utils.isOperator(key) ? key : `${alias}.${key}`;
|
|
409
|
+
result[qualifiedKey] = value;
|
|
410
|
+
}
|
|
411
|
+
return result;
|
|
412
|
+
}
|
|
389
413
|
|
|
390
414
|
exports.applyWhere = applyWhere;
|
|
391
415
|
exports.processWhere = processWhere;
|
|
416
|
+
exports.qualifyRootColumns = qualifyRootColumns;
|
|
392
417
|
//# sourceMappingURL=where.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"where.js","sources":["../../../src/query/helpers/where.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { isArray, castArray, isPlainObject } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { isOperator, isOperatorOfType } from '@strapi/utils';\nimport * as types from '../../utils/types';\nimport { createField } from '../../fields';\nimport { createJoin } from './join';\nimport { toColumnName } from './transform';\nimport { escapeQuery } from './search';\nimport { isKnexQuery } from '../../utils/knex';\n\nimport type { Ctx } from '../types';\nimport type { Attribute } from '../../types';\n\ntype WhereCtx = Ctx & { alias?: string; isGroupRoot?: boolean };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => isPlainObject(value);\n\nconst castValue = (value: unknown, attribute: Attribute | null) => {\n if (!attribute) {\n return value;\n }\n\n if (types.isScalar(attribute.type) && !isKnexQuery(value)) {\n const field = createField(attribute);\n\n return value === null ? null : field.toDB(value);\n }\n\n return value;\n};\n\nconst processSingleAttributeWhere = (\n attribute: Attribute | null,\n where: unknown,\n operator = '$eq'\n) => {\n if (!isRecord(where)) {\n if (isOperatorOfType('cast', operator)) {\n return castValue(where, attribute);\n }\n\n return where;\n }\n\n const filters: Record<string, unknown> = {};\n\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n if (!isOperatorOfType('where', key)) {\n throw new Error(`Undefined attribute level operator ${key}`);\n }\n\n filters[key] = processAttributeWhere(attribute, value, key);\n }\n\n return filters;\n};\n\nconst processAttributeWhere = (attribute: Attribute | null, where: unknown, operator = '$eq') => {\n if (isArray(where)) {\n return where.map((sub) => processSingleAttributeWhere(attribute, sub, operator));\n }\n\n return processSingleAttributeWhere(attribute, where, operator);\n};\n\nconst processNested = (where: unknown, ctx: WhereCtx) => {\n if (!isRecord(where)) {\n return where;\n }\n\n return processWhere(where, ctx);\n};\n\nconst processRelationWhere = (where: unknown, ctx: WhereCtx) => {\n const { qb, alias } = ctx;\n\n const idAlias = qb.aliasColumn('id', alias);\n if (!isRecord(where)) {\n return { [idAlias]: where };\n }\n\n const keys = Object.keys(where);\n const operatorKeys = keys.filter((key) => isOperator(key));\n\n if (operatorKeys.length > 0 && operatorKeys.length !== keys.length) {\n throw new Error(`Operator and non-operator keys cannot be mixed in a relation where clause`);\n }\n\n if (operatorKeys.length > 1) {\n throw new Error(\n `Only one operator key is allowed in a relation where clause, but found: ${operatorKeys}`\n );\n }\n\n if (operatorKeys.length === 1) {\n const operator = operatorKeys[0];\n\n if (isOperatorOfType('group', operator)) {\n return processWhere(where, ctx);\n }\n\n return { [idAlias]: { [operator]: processNested(where[operator], ctx) } };\n }\n\n return processWhere(where, ctx);\n};\n\n/**\n * Process where parameter\n */\nfunction processWhere(where: Record<string, unknown>, ctx: WhereCtx): Record<string, unknown>;\nfunction processWhere(where: Record<string, unknown>[], ctx: WhereCtx): Record<string, unknown>[];\nfunction processWhere(\n where: Record<string, unknown> | Record<string, unknown>[],\n ctx: WhereCtx\n): Record<string, unknown> | Record<string, unknown>[] {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return where.map((sub) => processWhere(sub, ctx));\n }\n\n const { db, uid, qb, alias } = ctx;\n const meta = db.metadata.get(uid);\n\n const filters: Record<string, unknown> = {};\n\n // for each key in where\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n // if operator $and $or -> process recursively\n if (isOperatorOfType('group', key)) {\n if (!Array.isArray(value)) {\n throw new Error(`Operator ${key} must be an array`);\n }\n\n filters[key] = value.map((sub) => processNested(sub, ctx));\n continue;\n }\n\n if (key === '$not') {\n filters[key] = processNested(value, ctx);\n continue;\n }\n\n if (isOperatorOfType('where', key)) {\n throw new Error(\n `Only $and, $or and $not can only be used as root level operators. Found ${key}.`\n );\n }\n\n const attribute = meta.attributes[key];\n\n if (!attribute) {\n filters[qb.aliasColumn(key, alias)] = processAttributeWhere(null, value);\n continue;\n }\n\n if (types.isRelation(attribute.type) && 'target' in attribute) {\n // attribute\n const subAlias = createJoin(ctx, {\n alias: alias || qb.alias,\n attributeName: key,\n attribute,\n });\n\n const nestedWhere = processRelationWhere(value, {\n db,\n qb,\n alias: subAlias,\n uid: attribute.target,\n });\n\n // TODO: use a better merge logic (push to $and when collisions)\n Object.assign(filters, nestedWhere);\n\n continue;\n }\n\n if (types.isScalar(attribute.type)) {\n const columnName = toColumnName(meta, key);\n const aliasedColumnName = qb.aliasColumn(columnName, alias);\n\n filters[aliasedColumnName] = processAttributeWhere(attribute, value);\n\n continue;\n }\n\n throw new Error(`You cannot filter on ${attribute.type} types`);\n }\n\n return filters;\n}\n\ntype Operator =\n | '$eq'\n | '$ne'\n | '$nei'\n | '$in'\n | '$notIn'\n | '$lt'\n | '$lte'\n | '$gt'\n | '$gte'\n | '$between'\n | '$contains'\n | '$notContains'\n | '$containsi'\n | '$notContainsi'\n | '$startsWith'\n | '$endsWith'\n | '$null'\n | '$notNull'\n | '$not'\n | '$eqi'\n | '$startsWithi'\n | '$endsWithi'\n | '$jsonSupersetOf';\n\n// TODO: add type casting per operator at some point\nconst applyOperator = (\n qb: Knex.QueryBuilder,\n column: any,\n operator: Operator,\n value: any\n): Knex.QueryBuilder | undefined => {\n if (Array.isArray(value) && !isOperatorOfType('array', operator)) {\n return qb.where((subQB) => {\n value.forEach((subValue) =>\n subQB.orWhere((innerQB) => {\n applyOperator(innerQB, column, operator, subValue);\n })\n );\n });\n }\n\n switch (operator) {\n case '$not': {\n qb.whereNot((qb) => applyWhereToColumn(qb, column, value));\n break;\n }\n\n case '$in': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$notIn': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereNotIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$eq': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n\n qb.where(column, value);\n break;\n }\n\n case '$eqi': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} = LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$ne': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n\n qb.where(column, '<>', value);\n break;\n }\n case '$nei': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} <> LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$gt': {\n qb.where(column, '>', value);\n break;\n }\n case '$gte': {\n qb.where(column, '>=', value);\n break;\n }\n case '$lt': {\n qb.where(column, '<', value);\n break;\n }\n case '$lte': {\n qb.where(column, '<=', value);\n break;\n }\n case '$null': {\n if (value) {\n qb.whereNull(column);\n } else {\n qb.whereNotNull(column);\n }\n break;\n }\n case '$notNull': {\n if (value) {\n qb.whereNotNull(column);\n } else {\n qb.whereNull(column);\n }\n break;\n }\n case '$between': {\n qb.whereBetween(column, value);\n break;\n }\n case '$startsWith': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `${escapeLike(value)}%`]);\n break;\n }\n case '$startsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `${escapeLike(value)}%`,\n ]);\n break;\n }\n case '$endsWith': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}`]);\n break;\n }\n case '$endsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}`,\n ]);\n break;\n }\n case '$contains': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}%`]);\n break;\n }\n\n case '$notContains': {\n qb.whereRaw(`?? NOT LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}%`]);\n break;\n }\n\n case '$containsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}%`,\n ]);\n break;\n }\n\n case '$notContainsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}%`,\n ]);\n break;\n }\n\n // Experimental, only for internal use\n // Only on MySQL, PostgreSQL and CockroachDB.\n // https://knexjs.org/guide/query-builder.html#wherejsonsupersetof\n case '$jsonSupersetOf': {\n qb.whereJsonSupersetOf(column, value);\n break;\n }\n\n // TODO: Add more JSON operators: whereJsonObject, whereJsonPath, whereJsonSubsetOf\n\n // TODO: relational operators every/some/exists/size ...\n\n default: {\n throw new Error(`Undefined attribute level operator ${operator}`);\n }\n }\n};\n\nconst applyWhereToColumn = (\n qb: Knex.QueryBuilder,\n column: string,\n columnWhere: Record<Operator, unknown> | Array<Record<Operator, unknown>>\n) => {\n if (!isRecord(columnWhere)) {\n if (Array.isArray(columnWhere)) {\n return qb.whereIn(column, columnWhere);\n }\n\n return qb.where(column, columnWhere);\n }\n\n const keys = Object.keys(columnWhere) as Operator[];\n\n keys.forEach((operator) => {\n const value = columnWhere[operator];\n\n applyOperator(qb, column, operator, value);\n });\n};\n\ntype Where =\n | {\n $and?: Where[];\n $or?: Where[];\n $not?: Where;\n [key: string]: any;\n }\n | Array<Where>;\n\nconst applyWhere = (qb: Knex.QueryBuilder, where: Where): Knex.QueryBuilder | undefined => {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return qb.where((subQB: Knex.QueryBuilder) =>\n where.forEach((subWhere) => applyWhere(subQB, subWhere))\n );\n }\n\n Object.keys(where).forEach((key) => {\n if (key === '$and') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => applyWhere(subQB, v));\n });\n }\n\n if (key === '$or') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => subQB.orWhere((inner) => applyWhere(inner, v)));\n });\n }\n\n if (key === '$not') {\n const value = where[key] ?? {};\n\n return qb.whereNot((qb) => applyWhere(qb, value));\n }\n\n applyWhereToColumn(qb, key, where[key]);\n });\n};\n\nconst fieldLowerFn = (qb: Knex.QueryBuilder) => {\n // Postgres requires string to be passed\n if (qb.client.dialect === 'postgresql') {\n return 'LOWER(CAST(?? AS VARCHAR))';\n }\n\n return 'LOWER(??)';\n};\n\n// SQL LIKE wildcards (and the backslash escape character itself) that must be\n// escaped so a user-supplied value is matched literally instead of as a pattern.\nconst LIKE_SPECIAL_CHARS = '%_\\\\';\n\nconst escapeLike = (value: unknown) => escapeQuery(`${value}`, LIKE_SPECIAL_CHARS);\n\n// SQLite has no default LIKE escape character and requires an explicit clause.\n// PostgreSQL and MySQL both default to backslash, matching helpers/search.ts.\nconst likeEscapeClause = (qb: Knex.QueryBuilder) =>\n qb.client.dialect === 'sqlite3' ? \" ESCAPE '\\\\'\" : '';\n\nexport { applyWhere, processWhere };\n"],"names":["isRecord","value","isPlainObject","castValue","attribute","types","type","isKnexQuery","field","createField","toDB","processSingleAttributeWhere","where","operator","isOperatorOfType","filters","key","Object","keys","Error","processAttributeWhere","isArray","map","sub","processNested","ctx","processWhere","processRelationWhere","qb","alias","idAlias","aliasColumn","operatorKeys","filter","isOperator","length","db","uid","meta","metadata","get","Array","attributes","subAlias","createJoin","attributeName","nestedWhere","target","assign","columnName","toColumnName","aliasedColumnName","applyOperator","column","subQB","forEach","subValue","orWhere","innerQB","whereNot","applyWhereToColumn","whereIn","castArray","whereNotIn","whereNull","whereRaw","fieldLowerFn","whereNotNull","whereBetween","likeEscapeClause","escapeLike","whereJsonSupersetOf","columnWhere","applyWhere","subWhere","v","inner","client","dialect","LIKE_SPECIAL_CHARS","escapeQuery"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"where.js","sources":["../../../src/query/helpers/where.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { isArray, castArray, isPlainObject } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { isOperator, isOperatorOfType } from '@strapi/utils';\nimport * as types from '../../utils/types';\nimport { createField } from '../../fields';\nimport { createJoin } from './join';\nimport { toColumnName } from './transform';\nimport { escapeQuery } from './search';\nimport { isKnexQuery } from '../../utils/knex';\n\nimport type { Ctx } from '../types';\nimport type { Attribute } from '../../types';\n\ntype WhereCtx = Ctx & { alias?: string; isGroupRoot?: boolean };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => isPlainObject(value);\n\nconst castValue = (value: unknown, attribute: Attribute | null) => {\n if (!attribute) {\n return value;\n }\n\n if (types.isScalar(attribute.type) && !isKnexQuery(value)) {\n const field = createField(attribute);\n\n return value === null ? null : field.toDB(value);\n }\n\n return value;\n};\n\nconst processSingleAttributeWhere = (\n attribute: Attribute | null,\n where: unknown,\n operator = '$eq'\n) => {\n if (!isRecord(where)) {\n if (isOperatorOfType('cast', operator)) {\n return castValue(where, attribute);\n }\n\n return where;\n }\n\n const filters: Record<string, unknown> = {};\n\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n if (!isOperatorOfType('where', key)) {\n throw new Error(`Undefined attribute level operator ${key}`);\n }\n\n filters[key] = processAttributeWhere(attribute, value, key);\n }\n\n return filters;\n};\n\nconst processAttributeWhere = (attribute: Attribute | null, where: unknown, operator = '$eq') => {\n if (isArray(where)) {\n return where.map((sub) => processSingleAttributeWhere(attribute, sub, operator));\n }\n\n return processSingleAttributeWhere(attribute, where, operator);\n};\n\nconst processNested = (where: unknown, ctx: WhereCtx) => {\n if (!isRecord(where)) {\n return where;\n }\n\n return processWhere(where, ctx);\n};\n\nconst processRelationWhere = (where: unknown, ctx: WhereCtx) => {\n const { qb, alias } = ctx;\n\n const idAlias = qb.aliasColumn('id', alias);\n if (!isRecord(where)) {\n return { [idAlias]: where };\n }\n\n const keys = Object.keys(where);\n const operatorKeys = keys.filter((key) => isOperator(key));\n\n if (operatorKeys.length > 0 && operatorKeys.length !== keys.length) {\n throw new Error(`Operator and non-operator keys cannot be mixed in a relation where clause`);\n }\n\n if (operatorKeys.length > 1) {\n throw new Error(\n `Only one operator key is allowed in a relation where clause, but found: ${operatorKeys}`\n );\n }\n\n if (operatorKeys.length === 1) {\n const operator = operatorKeys[0];\n\n if (isOperatorOfType('group', operator)) {\n return processWhere(where, ctx);\n }\n\n return { [idAlias]: { [operator]: processNested(where[operator], ctx) } };\n }\n\n return processWhere(where, ctx);\n};\n\n/**\n * Process where parameter\n */\nfunction processWhere(where: Record<string, unknown>, ctx: WhereCtx): Record<string, unknown>;\nfunction processWhere(where: Record<string, unknown>[], ctx: WhereCtx): Record<string, unknown>[];\nfunction processWhere(\n where: Record<string, unknown> | Record<string, unknown>[],\n ctx: WhereCtx\n): Record<string, unknown> | Record<string, unknown>[] {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return where.map((sub) => processWhere(sub, ctx));\n }\n\n const { db, uid, qb, alias } = ctx;\n const meta = db.metadata.get(uid);\n\n const filters: Record<string, unknown> = {};\n\n // for each key in where\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n // if operator $and $or -> process recursively\n if (isOperatorOfType('group', key)) {\n if (!Array.isArray(value)) {\n throw new Error(`Operator ${key} must be an array`);\n }\n\n filters[key] = value.map((sub) => processNested(sub, ctx));\n continue;\n }\n\n if (key === '$not') {\n filters[key] = processNested(value, ctx);\n continue;\n }\n\n if (isOperatorOfType('where', key)) {\n throw new Error(\n `Only $and, $or and $not can only be used as root level operators. Found ${key}.`\n );\n }\n\n const attribute = meta.attributes[key];\n\n if (!attribute) {\n filters[qb.aliasColumn(key, alias)] = processAttributeWhere(null, value);\n continue;\n }\n\n if (types.isRelation(attribute.type) && 'target' in attribute) {\n // attribute\n const subAlias = createJoin(ctx, {\n alias: alias || qb.alias,\n attributeName: key,\n attribute,\n });\n\n const nestedWhere = processRelationWhere(value, {\n db,\n qb,\n alias: subAlias,\n uid: attribute.target,\n });\n\n // TODO: use a better merge logic (push to $and when collisions)\n Object.assign(filters, nestedWhere);\n\n continue;\n }\n\n if (types.isScalar(attribute.type)) {\n const columnName = toColumnName(meta, key);\n const aliasedColumnName = qb.aliasColumn(columnName, alias);\n\n filters[aliasedColumnName] = processAttributeWhere(attribute, value);\n\n continue;\n }\n\n throw new Error(`You cannot filter on ${attribute.type} types`);\n }\n\n return filters;\n}\n\ntype Operator =\n | '$eq'\n | '$ne'\n | '$nei'\n | '$in'\n | '$notIn'\n | '$lt'\n | '$lte'\n | '$gt'\n | '$gte'\n | '$between'\n | '$contains'\n | '$notContains'\n | '$containsi'\n | '$notContainsi'\n | '$startsWith'\n | '$endsWith'\n | '$null'\n | '$notNull'\n | '$not'\n | '$eqi'\n | '$startsWithi'\n | '$endsWithi'\n | '$jsonSupersetOf';\n\n// TODO: add type casting per operator at some point\nconst applyOperator = (\n qb: Knex.QueryBuilder,\n column: any,\n operator: Operator,\n value: any\n): Knex.QueryBuilder | undefined => {\n if (Array.isArray(value) && !isOperatorOfType('array', operator)) {\n return qb.where((subQB) => {\n value.forEach((subValue) =>\n subQB.orWhere((innerQB) => {\n applyOperator(innerQB, column, operator, subValue);\n })\n );\n });\n }\n\n switch (operator) {\n case '$not': {\n qb.whereNot((qb) => applyWhereToColumn(qb, column, value));\n break;\n }\n\n case '$in': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$notIn': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereNotIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$eq': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n\n qb.where(column, value);\n break;\n }\n\n case '$eqi': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} = LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$ne': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n\n qb.where(column, '<>', value);\n break;\n }\n case '$nei': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} <> LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$gt': {\n qb.where(column, '>', value);\n break;\n }\n case '$gte': {\n qb.where(column, '>=', value);\n break;\n }\n case '$lt': {\n qb.where(column, '<', value);\n break;\n }\n case '$lte': {\n qb.where(column, '<=', value);\n break;\n }\n case '$null': {\n if (value) {\n qb.whereNull(column);\n } else {\n qb.whereNotNull(column);\n }\n break;\n }\n case '$notNull': {\n if (value) {\n qb.whereNotNull(column);\n } else {\n qb.whereNull(column);\n }\n break;\n }\n case '$between': {\n qb.whereBetween(column, value);\n break;\n }\n case '$startsWith': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `${escapeLike(value)}%`]);\n break;\n }\n case '$startsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `${escapeLike(value)}%`,\n ]);\n break;\n }\n case '$endsWith': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}`]);\n break;\n }\n case '$endsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}`,\n ]);\n break;\n }\n case '$contains': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}%`]);\n break;\n }\n\n case '$notContains': {\n qb.whereRaw(`?? NOT LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}%`]);\n break;\n }\n\n case '$containsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}%`,\n ]);\n break;\n }\n\n case '$notContainsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}%`,\n ]);\n break;\n }\n\n // Experimental, only for internal use\n // Only on MySQL, PostgreSQL and CockroachDB.\n // https://knexjs.org/guide/query-builder.html#wherejsonsupersetof\n case '$jsonSupersetOf': {\n qb.whereJsonSupersetOf(column, value);\n break;\n }\n\n // TODO: Add more JSON operators: whereJsonObject, whereJsonPath, whereJsonSubsetOf\n\n // TODO: relational operators every/some/exists/size ...\n\n default: {\n throw new Error(`Undefined attribute level operator ${operator}`);\n }\n }\n};\n\nconst applyWhereToColumn = (\n qb: Knex.QueryBuilder,\n column: string,\n columnWhere: Record<Operator, unknown> | Array<Record<Operator, unknown>>\n) => {\n if (!isRecord(columnWhere)) {\n if (Array.isArray(columnWhere)) {\n return qb.whereIn(column, columnWhere);\n }\n\n return qb.where(column, columnWhere);\n }\n\n const keys = Object.keys(columnWhere) as Operator[];\n\n keys.forEach((operator) => {\n const value = columnWhere[operator];\n\n applyOperator(qb, column, operator, value);\n });\n};\n\ntype Where =\n | {\n $and?: Where[];\n $or?: Where[];\n $not?: Where;\n [key: string]: any;\n }\n | Array<Where>;\n\nconst applyWhere = (qb: Knex.QueryBuilder, where: Where): Knex.QueryBuilder | undefined => {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return qb.where((subQB: Knex.QueryBuilder) =>\n where.forEach((subWhere) => applyWhere(subQB, subWhere))\n );\n }\n\n Object.keys(where).forEach((key) => {\n if (key === '$and') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => applyWhere(subQB, v));\n });\n }\n\n if (key === '$or') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => subQB.orWhere((inner) => applyWhere(inner, v)));\n });\n }\n\n if (key === '$not') {\n const value = where[key] ?? {};\n\n return qb.whereNot((qb) => applyWhere(qb, value));\n }\n\n applyWhereToColumn(qb, key, where[key]);\n });\n};\n\nconst fieldLowerFn = (qb: Knex.QueryBuilder) => {\n // Postgres requires string to be passed\n if (qb.client.dialect === 'postgresql') {\n return 'LOWER(CAST(?? AS VARCHAR))';\n }\n\n return 'LOWER(??)';\n};\n\n// SQL LIKE wildcards (and the backslash escape character itself) that must be\n// escaped so a user-supplied value is matched literally instead of as a pattern.\nconst LIKE_SPECIAL_CHARS = '%_\\\\';\n\nconst escapeLike = (value: unknown) => escapeQuery(`${value}`, LIKE_SPECIAL_CHARS);\n\n// SQLite has no default LIKE escape character and requires an explicit clause.\n// PostgreSQL and MySQL both default to backslash, matching helpers/search.ts.\nconst likeEscapeClause = (qb: Knex.QueryBuilder) =>\n qb.client.dialect === 'sqlite3' ? \" ESCAPE '\\\\'\" : '';\n\n/**\n * Prefix unaliased root column keys with `alias` (e.g. `published_at` → `t0.published_at`).\n * Used for update/delete subqueries that join other tables sharing column names.\n * Group operators are walked; already-qualified keys (`t1.title`) and operator keys are left as-is.\n */\nfunction qualifyRootColumns(where: Record<string, unknown>, alias: string): Record<string, unknown>;\nfunction qualifyRootColumns(\n where: Record<string, unknown>[],\n alias: string\n): Record<string, unknown>[];\nfunction qualifyRootColumns(\n where: Record<string, unknown> | Record<string, unknown>[],\n alias: string\n): Record<string, unknown> | Record<string, unknown>[] {\n if (isArray(where)) {\n return where.map((sub) => qualifyRootColumns(sub, alias));\n }\n\n const result: Record<string, unknown> = {};\n\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n if (isOperatorOfType('group', key)) {\n if (Array.isArray(value)) {\n result[key] = value.map((sub) => (isRecord(sub) ? qualifyRootColumns(sub, alias) : sub));\n } else {\n result[key] = value;\n }\n continue;\n }\n\n if (key === '$not' && isRecord(value)) {\n result[key] = qualifyRootColumns(value, alias);\n continue;\n }\n\n const qualifiedKey = key.includes('.') || isOperator(key) ? key : `${alias}.${key}`;\n result[qualifiedKey] = value;\n }\n\n return result;\n}\n\nexport { applyWhere, processWhere, qualifyRootColumns };\n"],"names":["isRecord","value","isPlainObject","castValue","attribute","types","type","isKnexQuery","field","createField","toDB","processSingleAttributeWhere","where","operator","isOperatorOfType","filters","key","Object","keys","Error","processAttributeWhere","isArray","map","sub","processNested","ctx","processWhere","processRelationWhere","qb","alias","idAlias","aliasColumn","operatorKeys","filter","isOperator","length","db","uid","meta","metadata","get","Array","attributes","subAlias","createJoin","attributeName","nestedWhere","target","assign","columnName","toColumnName","aliasedColumnName","applyOperator","column","subQB","forEach","subValue","orWhere","innerQB","whereNot","applyWhereToColumn","whereIn","castArray","whereNotIn","whereNull","whereRaw","fieldLowerFn","whereNotNull","whereBetween","likeEscapeClause","escapeLike","whereJsonSupersetOf","columnWhere","applyWhere","subWhere","v","inner","client","dialect","LIKE_SPECIAL_CHARS","escapeQuery","qualifyRootColumns","result","qualifiedKey","includes"],"mappings":"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"}
|
|
@@ -384,6 +384,30 @@ const escapeLike = (value)=>escapeQuery(`${value}`, LIKE_SPECIAL_CHARS);
|
|
|
384
384
|
// SQLite has no default LIKE escape character and requires an explicit clause.
|
|
385
385
|
// PostgreSQL and MySQL both default to backslash, matching helpers/search.ts.
|
|
386
386
|
const likeEscapeClause = (qb)=>qb.client.dialect === 'sqlite3' ? " ESCAPE '\\'" : '';
|
|
387
|
+
function qualifyRootColumns(where, alias) {
|
|
388
|
+
if (isArray(where)) {
|
|
389
|
+
return where.map((sub)=>qualifyRootColumns(sub, alias));
|
|
390
|
+
}
|
|
391
|
+
const result = {};
|
|
392
|
+
for (const key of Object.keys(where)){
|
|
393
|
+
const value = where[key];
|
|
394
|
+
if (isOperatorOfType('group', key)) {
|
|
395
|
+
if (Array.isArray(value)) {
|
|
396
|
+
result[key] = value.map((sub)=>isRecord(sub) ? qualifyRootColumns(sub, alias) : sub);
|
|
397
|
+
} else {
|
|
398
|
+
result[key] = value;
|
|
399
|
+
}
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
if (key === '$not' && isRecord(value)) {
|
|
403
|
+
result[key] = qualifyRootColumns(value, alias);
|
|
404
|
+
continue;
|
|
405
|
+
}
|
|
406
|
+
const qualifiedKey = key.includes('.') || isOperator(key) ? key : `${alias}.${key}`;
|
|
407
|
+
result[qualifiedKey] = value;
|
|
408
|
+
}
|
|
409
|
+
return result;
|
|
410
|
+
}
|
|
387
411
|
|
|
388
|
-
export { applyWhere, processWhere };
|
|
412
|
+
export { applyWhere, processWhere, qualifyRootColumns };
|
|
389
413
|
//# sourceMappingURL=where.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"where.mjs","sources":["../../../src/query/helpers/where.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { isArray, castArray, isPlainObject } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { isOperator, isOperatorOfType } from '@strapi/utils';\nimport * as types from '../../utils/types';\nimport { createField } from '../../fields';\nimport { createJoin } from './join';\nimport { toColumnName } from './transform';\nimport { escapeQuery } from './search';\nimport { isKnexQuery } from '../../utils/knex';\n\nimport type { Ctx } from '../types';\nimport type { Attribute } from '../../types';\n\ntype WhereCtx = Ctx & { alias?: string; isGroupRoot?: boolean };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => isPlainObject(value);\n\nconst castValue = (value: unknown, attribute: Attribute | null) => {\n if (!attribute) {\n return value;\n }\n\n if (types.isScalar(attribute.type) && !isKnexQuery(value)) {\n const field = createField(attribute);\n\n return value === null ? null : field.toDB(value);\n }\n\n return value;\n};\n\nconst processSingleAttributeWhere = (\n attribute: Attribute | null,\n where: unknown,\n operator = '$eq'\n) => {\n if (!isRecord(where)) {\n if (isOperatorOfType('cast', operator)) {\n return castValue(where, attribute);\n }\n\n return where;\n }\n\n const filters: Record<string, unknown> = {};\n\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n if (!isOperatorOfType('where', key)) {\n throw new Error(`Undefined attribute level operator ${key}`);\n }\n\n filters[key] = processAttributeWhere(attribute, value, key);\n }\n\n return filters;\n};\n\nconst processAttributeWhere = (attribute: Attribute | null, where: unknown, operator = '$eq') => {\n if (isArray(where)) {\n return where.map((sub) => processSingleAttributeWhere(attribute, sub, operator));\n }\n\n return processSingleAttributeWhere(attribute, where, operator);\n};\n\nconst processNested = (where: unknown, ctx: WhereCtx) => {\n if (!isRecord(where)) {\n return where;\n }\n\n return processWhere(where, ctx);\n};\n\nconst processRelationWhere = (where: unknown, ctx: WhereCtx) => {\n const { qb, alias } = ctx;\n\n const idAlias = qb.aliasColumn('id', alias);\n if (!isRecord(where)) {\n return { [idAlias]: where };\n }\n\n const keys = Object.keys(where);\n const operatorKeys = keys.filter((key) => isOperator(key));\n\n if (operatorKeys.length > 0 && operatorKeys.length !== keys.length) {\n throw new Error(`Operator and non-operator keys cannot be mixed in a relation where clause`);\n }\n\n if (operatorKeys.length > 1) {\n throw new Error(\n `Only one operator key is allowed in a relation where clause, but found: ${operatorKeys}`\n );\n }\n\n if (operatorKeys.length === 1) {\n const operator = operatorKeys[0];\n\n if (isOperatorOfType('group', operator)) {\n return processWhere(where, ctx);\n }\n\n return { [idAlias]: { [operator]: processNested(where[operator], ctx) } };\n }\n\n return processWhere(where, ctx);\n};\n\n/**\n * Process where parameter\n */\nfunction processWhere(where: Record<string, unknown>, ctx: WhereCtx): Record<string, unknown>;\nfunction processWhere(where: Record<string, unknown>[], ctx: WhereCtx): Record<string, unknown>[];\nfunction processWhere(\n where: Record<string, unknown> | Record<string, unknown>[],\n ctx: WhereCtx\n): Record<string, unknown> | Record<string, unknown>[] {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return where.map((sub) => processWhere(sub, ctx));\n }\n\n const { db, uid, qb, alias } = ctx;\n const meta = db.metadata.get(uid);\n\n const filters: Record<string, unknown> = {};\n\n // for each key in where\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n // if operator $and $or -> process recursively\n if (isOperatorOfType('group', key)) {\n if (!Array.isArray(value)) {\n throw new Error(`Operator ${key} must be an array`);\n }\n\n filters[key] = value.map((sub) => processNested(sub, ctx));\n continue;\n }\n\n if (key === '$not') {\n filters[key] = processNested(value, ctx);\n continue;\n }\n\n if (isOperatorOfType('where', key)) {\n throw new Error(\n `Only $and, $or and $not can only be used as root level operators. Found ${key}.`\n );\n }\n\n const attribute = meta.attributes[key];\n\n if (!attribute) {\n filters[qb.aliasColumn(key, alias)] = processAttributeWhere(null, value);\n continue;\n }\n\n if (types.isRelation(attribute.type) && 'target' in attribute) {\n // attribute\n const subAlias = createJoin(ctx, {\n alias: alias || qb.alias,\n attributeName: key,\n attribute,\n });\n\n const nestedWhere = processRelationWhere(value, {\n db,\n qb,\n alias: subAlias,\n uid: attribute.target,\n });\n\n // TODO: use a better merge logic (push to $and when collisions)\n Object.assign(filters, nestedWhere);\n\n continue;\n }\n\n if (types.isScalar(attribute.type)) {\n const columnName = toColumnName(meta, key);\n const aliasedColumnName = qb.aliasColumn(columnName, alias);\n\n filters[aliasedColumnName] = processAttributeWhere(attribute, value);\n\n continue;\n }\n\n throw new Error(`You cannot filter on ${attribute.type} types`);\n }\n\n return filters;\n}\n\ntype Operator =\n | '$eq'\n | '$ne'\n | '$nei'\n | '$in'\n | '$notIn'\n | '$lt'\n | '$lte'\n | '$gt'\n | '$gte'\n | '$between'\n | '$contains'\n | '$notContains'\n | '$containsi'\n | '$notContainsi'\n | '$startsWith'\n | '$endsWith'\n | '$null'\n | '$notNull'\n | '$not'\n | '$eqi'\n | '$startsWithi'\n | '$endsWithi'\n | '$jsonSupersetOf';\n\n// TODO: add type casting per operator at some point\nconst applyOperator = (\n qb: Knex.QueryBuilder,\n column: any,\n operator: Operator,\n value: any\n): Knex.QueryBuilder | undefined => {\n if (Array.isArray(value) && !isOperatorOfType('array', operator)) {\n return qb.where((subQB) => {\n value.forEach((subValue) =>\n subQB.orWhere((innerQB) => {\n applyOperator(innerQB, column, operator, subValue);\n })\n );\n });\n }\n\n switch (operator) {\n case '$not': {\n qb.whereNot((qb) => applyWhereToColumn(qb, column, value));\n break;\n }\n\n case '$in': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$notIn': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereNotIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$eq': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n\n qb.where(column, value);\n break;\n }\n\n case '$eqi': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} = LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$ne': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n\n qb.where(column, '<>', value);\n break;\n }\n case '$nei': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} <> LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$gt': {\n qb.where(column, '>', value);\n break;\n }\n case '$gte': {\n qb.where(column, '>=', value);\n break;\n }\n case '$lt': {\n qb.where(column, '<', value);\n break;\n }\n case '$lte': {\n qb.where(column, '<=', value);\n break;\n }\n case '$null': {\n if (value) {\n qb.whereNull(column);\n } else {\n qb.whereNotNull(column);\n }\n break;\n }\n case '$notNull': {\n if (value) {\n qb.whereNotNull(column);\n } else {\n qb.whereNull(column);\n }\n break;\n }\n case '$between': {\n qb.whereBetween(column, value);\n break;\n }\n case '$startsWith': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `${escapeLike(value)}%`]);\n break;\n }\n case '$startsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `${escapeLike(value)}%`,\n ]);\n break;\n }\n case '$endsWith': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}`]);\n break;\n }\n case '$endsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}`,\n ]);\n break;\n }\n case '$contains': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}%`]);\n break;\n }\n\n case '$notContains': {\n qb.whereRaw(`?? NOT LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}%`]);\n break;\n }\n\n case '$containsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}%`,\n ]);\n break;\n }\n\n case '$notContainsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}%`,\n ]);\n break;\n }\n\n // Experimental, only for internal use\n // Only on MySQL, PostgreSQL and CockroachDB.\n // https://knexjs.org/guide/query-builder.html#wherejsonsupersetof\n case '$jsonSupersetOf': {\n qb.whereJsonSupersetOf(column, value);\n break;\n }\n\n // TODO: Add more JSON operators: whereJsonObject, whereJsonPath, whereJsonSubsetOf\n\n // TODO: relational operators every/some/exists/size ...\n\n default: {\n throw new Error(`Undefined attribute level operator ${operator}`);\n }\n }\n};\n\nconst applyWhereToColumn = (\n qb: Knex.QueryBuilder,\n column: string,\n columnWhere: Record<Operator, unknown> | Array<Record<Operator, unknown>>\n) => {\n if (!isRecord(columnWhere)) {\n if (Array.isArray(columnWhere)) {\n return qb.whereIn(column, columnWhere);\n }\n\n return qb.where(column, columnWhere);\n }\n\n const keys = Object.keys(columnWhere) as Operator[];\n\n keys.forEach((operator) => {\n const value = columnWhere[operator];\n\n applyOperator(qb, column, operator, value);\n });\n};\n\ntype Where =\n | {\n $and?: Where[];\n $or?: Where[];\n $not?: Where;\n [key: string]: any;\n }\n | Array<Where>;\n\nconst applyWhere = (qb: Knex.QueryBuilder, where: Where): Knex.QueryBuilder | undefined => {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return qb.where((subQB: Knex.QueryBuilder) =>\n where.forEach((subWhere) => applyWhere(subQB, subWhere))\n );\n }\n\n Object.keys(where).forEach((key) => {\n if (key === '$and') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => applyWhere(subQB, v));\n });\n }\n\n if (key === '$or') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => subQB.orWhere((inner) => applyWhere(inner, v)));\n });\n }\n\n if (key === '$not') {\n const value = where[key] ?? {};\n\n return qb.whereNot((qb) => applyWhere(qb, value));\n }\n\n applyWhereToColumn(qb, key, where[key]);\n });\n};\n\nconst fieldLowerFn = (qb: Knex.QueryBuilder) => {\n // Postgres requires string to be passed\n if (qb.client.dialect === 'postgresql') {\n return 'LOWER(CAST(?? AS VARCHAR))';\n }\n\n return 'LOWER(??)';\n};\n\n// SQL LIKE wildcards (and the backslash escape character itself) that must be\n// escaped so a user-supplied value is matched literally instead of as a pattern.\nconst LIKE_SPECIAL_CHARS = '%_\\\\';\n\nconst escapeLike = (value: unknown) => escapeQuery(`${value}`, LIKE_SPECIAL_CHARS);\n\n// SQLite has no default LIKE escape character and requires an explicit clause.\n// PostgreSQL and MySQL both default to backslash, matching helpers/search.ts.\nconst likeEscapeClause = (qb: Knex.QueryBuilder) =>\n qb.client.dialect === 'sqlite3' ? \" ESCAPE '\\\\'\" : '';\n\nexport { applyWhere, processWhere };\n"],"names":["isRecord","value","isPlainObject","castValue","attribute","types","type","isKnexQuery","field","createField","toDB","processSingleAttributeWhere","where","operator","isOperatorOfType","filters","key","Object","keys","Error","processAttributeWhere","isArray","map","sub","processNested","ctx","processWhere","processRelationWhere","qb","alias","idAlias","aliasColumn","operatorKeys","filter","isOperator","length","db","uid","meta","metadata","get","Array","attributes","subAlias","createJoin","attributeName","nestedWhere","target","assign","columnName","toColumnName","aliasedColumnName","applyOperator","column","subQB","forEach","subValue","orWhere","innerQB","whereNot","applyWhereToColumn","whereIn","castArray","whereNotIn","whereNull","whereRaw","fieldLowerFn","whereNotNull","whereBetween","likeEscapeClause","escapeLike","whereJsonSupersetOf","columnWhere","applyWhere","subWhere","v","inner","client","dialect","LIKE_SPECIAL_CHARS","escapeQuery"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"where.mjs","sources":["../../../src/query/helpers/where.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { isArray, castArray, isPlainObject } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { isOperator, isOperatorOfType } from '@strapi/utils';\nimport * as types from '../../utils/types';\nimport { createField } from '../../fields';\nimport { createJoin } from './join';\nimport { toColumnName } from './transform';\nimport { escapeQuery } from './search';\nimport { isKnexQuery } from '../../utils/knex';\n\nimport type { Ctx } from '../types';\nimport type { Attribute } from '../../types';\n\ntype WhereCtx = Ctx & { alias?: string; isGroupRoot?: boolean };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => isPlainObject(value);\n\nconst castValue = (value: unknown, attribute: Attribute | null) => {\n if (!attribute) {\n return value;\n }\n\n if (types.isScalar(attribute.type) && !isKnexQuery(value)) {\n const field = createField(attribute);\n\n return value === null ? null : field.toDB(value);\n }\n\n return value;\n};\n\nconst processSingleAttributeWhere = (\n attribute: Attribute | null,\n where: unknown,\n operator = '$eq'\n) => {\n if (!isRecord(where)) {\n if (isOperatorOfType('cast', operator)) {\n return castValue(where, attribute);\n }\n\n return where;\n }\n\n const filters: Record<string, unknown> = {};\n\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n if (!isOperatorOfType('where', key)) {\n throw new Error(`Undefined attribute level operator ${key}`);\n }\n\n filters[key] = processAttributeWhere(attribute, value, key);\n }\n\n return filters;\n};\n\nconst processAttributeWhere = (attribute: Attribute | null, where: unknown, operator = '$eq') => {\n if (isArray(where)) {\n return where.map((sub) => processSingleAttributeWhere(attribute, sub, operator));\n }\n\n return processSingleAttributeWhere(attribute, where, operator);\n};\n\nconst processNested = (where: unknown, ctx: WhereCtx) => {\n if (!isRecord(where)) {\n return where;\n }\n\n return processWhere(where, ctx);\n};\n\nconst processRelationWhere = (where: unknown, ctx: WhereCtx) => {\n const { qb, alias } = ctx;\n\n const idAlias = qb.aliasColumn('id', alias);\n if (!isRecord(where)) {\n return { [idAlias]: where };\n }\n\n const keys = Object.keys(where);\n const operatorKeys = keys.filter((key) => isOperator(key));\n\n if (operatorKeys.length > 0 && operatorKeys.length !== keys.length) {\n throw new Error(`Operator and non-operator keys cannot be mixed in a relation where clause`);\n }\n\n if (operatorKeys.length > 1) {\n throw new Error(\n `Only one operator key is allowed in a relation where clause, but found: ${operatorKeys}`\n );\n }\n\n if (operatorKeys.length === 1) {\n const operator = operatorKeys[0];\n\n if (isOperatorOfType('group', operator)) {\n return processWhere(where, ctx);\n }\n\n return { [idAlias]: { [operator]: processNested(where[operator], ctx) } };\n }\n\n return processWhere(where, ctx);\n};\n\n/**\n * Process where parameter\n */\nfunction processWhere(where: Record<string, unknown>, ctx: WhereCtx): Record<string, unknown>;\nfunction processWhere(where: Record<string, unknown>[], ctx: WhereCtx): Record<string, unknown>[];\nfunction processWhere(\n where: Record<string, unknown> | Record<string, unknown>[],\n ctx: WhereCtx\n): Record<string, unknown> | Record<string, unknown>[] {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return where.map((sub) => processWhere(sub, ctx));\n }\n\n const { db, uid, qb, alias } = ctx;\n const meta = db.metadata.get(uid);\n\n const filters: Record<string, unknown> = {};\n\n // for each key in where\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n // if operator $and $or -> process recursively\n if (isOperatorOfType('group', key)) {\n if (!Array.isArray(value)) {\n throw new Error(`Operator ${key} must be an array`);\n }\n\n filters[key] = value.map((sub) => processNested(sub, ctx));\n continue;\n }\n\n if (key === '$not') {\n filters[key] = processNested(value, ctx);\n continue;\n }\n\n if (isOperatorOfType('where', key)) {\n throw new Error(\n `Only $and, $or and $not can only be used as root level operators. Found ${key}.`\n );\n }\n\n const attribute = meta.attributes[key];\n\n if (!attribute) {\n filters[qb.aliasColumn(key, alias)] = processAttributeWhere(null, value);\n continue;\n }\n\n if (types.isRelation(attribute.type) && 'target' in attribute) {\n // attribute\n const subAlias = createJoin(ctx, {\n alias: alias || qb.alias,\n attributeName: key,\n attribute,\n });\n\n const nestedWhere = processRelationWhere(value, {\n db,\n qb,\n alias: subAlias,\n uid: attribute.target,\n });\n\n // TODO: use a better merge logic (push to $and when collisions)\n Object.assign(filters, nestedWhere);\n\n continue;\n }\n\n if (types.isScalar(attribute.type)) {\n const columnName = toColumnName(meta, key);\n const aliasedColumnName = qb.aliasColumn(columnName, alias);\n\n filters[aliasedColumnName] = processAttributeWhere(attribute, value);\n\n continue;\n }\n\n throw new Error(`You cannot filter on ${attribute.type} types`);\n }\n\n return filters;\n}\n\ntype Operator =\n | '$eq'\n | '$ne'\n | '$nei'\n | '$in'\n | '$notIn'\n | '$lt'\n | '$lte'\n | '$gt'\n | '$gte'\n | '$between'\n | '$contains'\n | '$notContains'\n | '$containsi'\n | '$notContainsi'\n | '$startsWith'\n | '$endsWith'\n | '$null'\n | '$notNull'\n | '$not'\n | '$eqi'\n | '$startsWithi'\n | '$endsWithi'\n | '$jsonSupersetOf';\n\n// TODO: add type casting per operator at some point\nconst applyOperator = (\n qb: Knex.QueryBuilder,\n column: any,\n operator: Operator,\n value: any\n): Knex.QueryBuilder | undefined => {\n if (Array.isArray(value) && !isOperatorOfType('array', operator)) {\n return qb.where((subQB) => {\n value.forEach((subValue) =>\n subQB.orWhere((innerQB) => {\n applyOperator(innerQB, column, operator, subValue);\n })\n );\n });\n }\n\n switch (operator) {\n case '$not': {\n qb.whereNot((qb) => applyWhereToColumn(qb, column, value));\n break;\n }\n\n case '$in': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$notIn': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereNotIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$eq': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n\n qb.where(column, value);\n break;\n }\n\n case '$eqi': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} = LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$ne': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n\n qb.where(column, '<>', value);\n break;\n }\n case '$nei': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} <> LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$gt': {\n qb.where(column, '>', value);\n break;\n }\n case '$gte': {\n qb.where(column, '>=', value);\n break;\n }\n case '$lt': {\n qb.where(column, '<', value);\n break;\n }\n case '$lte': {\n qb.where(column, '<=', value);\n break;\n }\n case '$null': {\n if (value) {\n qb.whereNull(column);\n } else {\n qb.whereNotNull(column);\n }\n break;\n }\n case '$notNull': {\n if (value) {\n qb.whereNotNull(column);\n } else {\n qb.whereNull(column);\n }\n break;\n }\n case '$between': {\n qb.whereBetween(column, value);\n break;\n }\n case '$startsWith': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `${escapeLike(value)}%`]);\n break;\n }\n case '$startsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `${escapeLike(value)}%`,\n ]);\n break;\n }\n case '$endsWith': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}`]);\n break;\n }\n case '$endsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}`,\n ]);\n break;\n }\n case '$contains': {\n qb.whereRaw(`?? LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}%`]);\n break;\n }\n\n case '$notContains': {\n qb.whereRaw(`?? NOT LIKE ?${likeEscapeClause(qb)}`, [column, `%${escapeLike(value)}%`]);\n break;\n }\n\n case '$containsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}%`,\n ]);\n break;\n }\n\n case '$notContainsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)${likeEscapeClause(qb)}`, [\n column,\n `%${escapeLike(value)}%`,\n ]);\n break;\n }\n\n // Experimental, only for internal use\n // Only on MySQL, PostgreSQL and CockroachDB.\n // https://knexjs.org/guide/query-builder.html#wherejsonsupersetof\n case '$jsonSupersetOf': {\n qb.whereJsonSupersetOf(column, value);\n break;\n }\n\n // TODO: Add more JSON operators: whereJsonObject, whereJsonPath, whereJsonSubsetOf\n\n // TODO: relational operators every/some/exists/size ...\n\n default: {\n throw new Error(`Undefined attribute level operator ${operator}`);\n }\n }\n};\n\nconst applyWhereToColumn = (\n qb: Knex.QueryBuilder,\n column: string,\n columnWhere: Record<Operator, unknown> | Array<Record<Operator, unknown>>\n) => {\n if (!isRecord(columnWhere)) {\n if (Array.isArray(columnWhere)) {\n return qb.whereIn(column, columnWhere);\n }\n\n return qb.where(column, columnWhere);\n }\n\n const keys = Object.keys(columnWhere) as Operator[];\n\n keys.forEach((operator) => {\n const value = columnWhere[operator];\n\n applyOperator(qb, column, operator, value);\n });\n};\n\ntype Where =\n | {\n $and?: Where[];\n $or?: Where[];\n $not?: Where;\n [key: string]: any;\n }\n | Array<Where>;\n\nconst applyWhere = (qb: Knex.QueryBuilder, where: Where): Knex.QueryBuilder | undefined => {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return qb.where((subQB: Knex.QueryBuilder) =>\n where.forEach((subWhere) => applyWhere(subQB, subWhere))\n );\n }\n\n Object.keys(where).forEach((key) => {\n if (key === '$and') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => applyWhere(subQB, v));\n });\n }\n\n if (key === '$or') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => subQB.orWhere((inner) => applyWhere(inner, v)));\n });\n }\n\n if (key === '$not') {\n const value = where[key] ?? {};\n\n return qb.whereNot((qb) => applyWhere(qb, value));\n }\n\n applyWhereToColumn(qb, key, where[key]);\n });\n};\n\nconst fieldLowerFn = (qb: Knex.QueryBuilder) => {\n // Postgres requires string to be passed\n if (qb.client.dialect === 'postgresql') {\n return 'LOWER(CAST(?? AS VARCHAR))';\n }\n\n return 'LOWER(??)';\n};\n\n// SQL LIKE wildcards (and the backslash escape character itself) that must be\n// escaped so a user-supplied value is matched literally instead of as a pattern.\nconst LIKE_SPECIAL_CHARS = '%_\\\\';\n\nconst escapeLike = (value: unknown) => escapeQuery(`${value}`, LIKE_SPECIAL_CHARS);\n\n// SQLite has no default LIKE escape character and requires an explicit clause.\n// PostgreSQL and MySQL both default to backslash, matching helpers/search.ts.\nconst likeEscapeClause = (qb: Knex.QueryBuilder) =>\n qb.client.dialect === 'sqlite3' ? \" ESCAPE '\\\\'\" : '';\n\n/**\n * Prefix unaliased root column keys with `alias` (e.g. `published_at` → `t0.published_at`).\n * Used for update/delete subqueries that join other tables sharing column names.\n * Group operators are walked; already-qualified keys (`t1.title`) and operator keys are left as-is.\n */\nfunction qualifyRootColumns(where: Record<string, unknown>, alias: string): Record<string, unknown>;\nfunction qualifyRootColumns(\n where: Record<string, unknown>[],\n alias: string\n): Record<string, unknown>[];\nfunction qualifyRootColumns(\n where: Record<string, unknown> | Record<string, unknown>[],\n alias: string\n): Record<string, unknown> | Record<string, unknown>[] {\n if (isArray(where)) {\n return where.map((sub) => qualifyRootColumns(sub, alias));\n }\n\n const result: Record<string, unknown> = {};\n\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n if (isOperatorOfType('group', key)) {\n if (Array.isArray(value)) {\n result[key] = value.map((sub) => (isRecord(sub) ? qualifyRootColumns(sub, alias) : sub));\n } else {\n result[key] = value;\n }\n continue;\n }\n\n if (key === '$not' && isRecord(value)) {\n result[key] = qualifyRootColumns(value, alias);\n continue;\n }\n\n const qualifiedKey = key.includes('.') || isOperator(key) ? key : `${alias}.${key}`;\n result[qualifiedKey] = value;\n }\n\n return result;\n}\n\nexport { applyWhere, processWhere, qualifyRootColumns };\n"],"names":["isRecord","value","isPlainObject","castValue","attribute","types","type","isKnexQuery","field","createField","toDB","processSingleAttributeWhere","where","operator","isOperatorOfType","filters","key","Object","keys","Error","processAttributeWhere","isArray","map","sub","processNested","ctx","processWhere","processRelationWhere","qb","alias","idAlias","aliasColumn","operatorKeys","filter","isOperator","length","db","uid","meta","metadata","get","Array","attributes","subAlias","createJoin","attributeName","nestedWhere","target","assign","columnName","toColumnName","aliasedColumnName","applyOperator","column","subQB","forEach","subValue","orWhere","innerQB","whereNot","applyWhereToColumn","whereIn","castArray","whereNotIn","whereNull","whereRaw","fieldLowerFn","whereNotNull","whereBetween","likeEscapeClause","escapeLike","whereJsonSupersetOf","columnWhere","applyWhere","subWhere","v","inner","client","dialect","LIKE_SPECIAL_CHARS","escapeQuery","qualifyRootColumns","result","qualifiedKey","includes"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -256,11 +256,19 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
|
256
256
|
},
|
|
257
257
|
runSubQuery () {
|
|
258
258
|
const originalType = state.type;
|
|
259
|
-
|
|
260
|
-
|
|
259
|
+
// Build the inner SELECT from a clone that stays `select`, so the outer write
|
|
260
|
+
// state is never mutated. clone() shallow-merges state (shared where/joins,
|
|
261
|
+
// new alias) — preserve the original alias because joins were already baked
|
|
262
|
+
// against it. The clone inherits processed: true and must only read shared arrays.
|
|
263
|
+
const sub = this.clone();
|
|
264
|
+
sub.alias = this.alias;
|
|
265
|
+
const subQB = sub.select('id').getKnexQuery();
|
|
261
266
|
const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));
|
|
262
|
-
const
|
|
263
|
-
|
|
267
|
+
const qb = db.getConnection(tableName);
|
|
268
|
+
if (originalType === 'update') {
|
|
269
|
+
return qb.update(state.data).whereIn('id', nestedSubQuery);
|
|
270
|
+
}
|
|
271
|
+
return qb.delete().whereIn('id', nestedSubQuery);
|
|
264
272
|
},
|
|
265
273
|
processState () {
|
|
266
274
|
if (this.state.processed) {
|
|
@@ -291,6 +299,12 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
|
291
299
|
uid,
|
|
292
300
|
db
|
|
293
301
|
});
|
|
302
|
+
// processWhere emits bare root columns while type is still update/delete
|
|
303
|
+
// (mustUseAlias is false). Qualify them now that joins from the relation
|
|
304
|
+
// predicate are known, so overlapping names (published_at, locale, id) are not ambiguous.
|
|
305
|
+
if (this.shouldUseSubQuery()) {
|
|
306
|
+
state.where = where.qualifyRootColumns(state.where, this.alias);
|
|
307
|
+
}
|
|
294
308
|
state.populate = process(state.populate, {
|
|
295
309
|
qb: this,
|
|
296
310
|
uid,
|