@strapi/database 5.44.0 → 5.45.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.
@@ -1 +1 @@
1
- {"version":3,"file":"apply.mjs","sources":["../../../../src/query/helpers/populate/apply.ts"],"sourcesContent":["import _ from 'lodash/fp';\n\nimport { fromRow } from '../transform';\nimport type { QueryBuilder } from '../../query-builder';\nimport type { Database } from '../../..';\nimport type { Meta } from '../../../metadata';\nimport { ID, RelationalAttribute, Relation } from '../../../types';\n\n// We must select the join column id, however whatever it is named will overwrite an attribute of the same name\n// Therefore, we will prefix with something unlikely to conflict with a user attribute\n// TODO: ...and completely restrict the strapi_ prefix for an attribute name in the future\nconst joinColPrefix = '__strapi' as const;\n\ntype Context = {\n db: Database;\n qb: QueryBuilder;\n uid: string;\n};\n\ntype Input<TRelationAttribute extends RelationalAttribute = RelationalAttribute> = {\n attribute: TRelationAttribute;\n attributeName: string;\n results: Row[];\n populateValue: {\n on?: Record<string, Record<string, unknown>>;\n } & Record<string, unknown>;\n\n isCount: boolean;\n};\n\ntype InputWithTarget<TRelationAttribute extends RelationalAttribute = RelationalAttribute> =\n Input<TRelationAttribute> & {\n targetMeta: Meta;\n };\n\ntype MorphIdMap = Record<string, Record<ID, Row[]>>;\n\ntype Row = Record<string, unknown>;\n\n/**\n * Populate oneToOne and manyToOne relation\n * @param {*} input\n * @param {*} ctx\n * @returns\n */\nconst XtoOne = async (\n input: InputWithTarget<Relation.OneToOne | Relation.ManyToOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const { name: joinColumnName, referencedColumn: referencedColumnName } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({ [referencedColumnName]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row[]>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[joinColumnName] as string]));\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: joinTable.orderBy,\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[referencedColumnName] as string]));\n });\n }\n};\n\nconst oneToMany = async (input: InputWithTarget<Relation.OneToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const {\n name: joinColumnName,\n referencedColumn: referencedColumnName,\n on,\n } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({\n [referencedColumnName]: referencedValues,\n ...(on && typeof on === 'function' ? on({ populateValue, results }) : {}),\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string] || []);\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColSelect, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColRenameAs]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((r) => {\n r[attributeName] = fromTargetRow(map[r[referencedColumnName] as string] || []);\n });\n }\n};\n\nconst manyToMany = async (input: InputWithTarget<Relation.ManyToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { joinTable } = attribute;\n\n const populateQb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = populateQb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, populateQb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string] || []);\n });\n};\n\nconst morphX = async (\n input: InputWithTarget<Relation.MorphMany | Relation.MorphOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta } = input;\n const { db, uid } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(target)\n .init(populateValue)\n // .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.name]: referencedValues, [typeColumn.name]: uid })\n .execute<Row>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n } else if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? null : [];\n });\n\n return;\n }\n\n // find with join table\n const qb = db.entityManager.createQueryBuilder(target);\n\n const alias = qb.getAlias();\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinColumn.name,\n rootColumn: joinColumn.referencedColumn,\n rootTable: qb.alias,\n on: {\n ...(joinTable.on || {}),\n field: attributeName,\n },\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect([`${alias}.${idColumn.name}`, `${alias}.${typeColumn.name}`])\n .where({\n [`${alias}.${idColumn.name}`]: referencedValues,\n [`${alias}.${typeColumn.name}`]: uid,\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n }\n};\n\nconst morphToMany = async (input: Input<Relation.MorphToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n // find with join table\n const { joinTable } = attribute;\n\n const { joinColumn, morphColumn } = joinTable;\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n // fetch join table to create the ids map then do the same as morphToOne without the first\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRows = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...(joinTable.on || {}),\n // If the populateValue contains an \"on\" property,\n // only populate the types defined in it\n ...('on' in populateValue\n ? { [morphColumn.typeColumn.name]: Object.keys(populateValue.on ?? {}) }\n : {}),\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const joinMap = _.groupBy(joinColumn.name, joinRows);\n\n const idsByType = joinRows.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!_.has(typeValue, acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n await Promise.all(\n Object.keys(idsByType).map(async (type) => {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n })\n );\n\n results.forEach((result) => {\n const joinResults = joinMap[result[joinColumn.referencedColumn] as string] || [];\n\n const matchingRows = joinResults.flatMap((joinResult) => {\n const id = joinResult[idColumn.name] as ID;\n const type = joinResult[typeColumn.name] as string;\n\n const targetMeta = db.metadata.get(type);\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n return (map[type][id] || []).map((row) => {\n return {\n [typeField]: type,\n ...fromTargetRow(row),\n };\n });\n });\n\n result[attributeName] = matchingRows;\n });\n};\n\nconst morphToOne = async (input: Input<Relation.MorphToOne>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn } = morphColumn;\n\n // make a map for each type what ids to return\n // make a nested map per id\n\n const idsByType = results.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!(typeValue in acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n }\n\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n if (!type || !id) {\n result[attributeName] = null;\n return;\n }\n\n const matchingRows = map[type][id];\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) =>\n fromRow(db.metadata.get(type), rowOrRows);\n\n result[attributeName] = fromTargetRow(_.first(matchingRows));\n });\n};\n\n// TODO: Omit limit & offset to avoid needing a query per result to avoid making too many queries\nconst pickPopulateParams = (populate: Record<string, unknown>) => {\n const fieldsToPick = [\n 'select',\n 'count',\n 'where',\n 'populate',\n 'orderBy',\n 'filters',\n 'ordering',\n 'on',\n ];\n\n if (populate.count !== true) {\n fieldsToPick.push('limit', 'offset');\n }\n\n return _.pick(fieldsToPick, populate);\n};\n\nconst getPopulateValue = (populate: Record<string, any>, filters: Record<string, any>) => {\n const populateValue = {\n filters,\n ...pickPopulateParams(populate),\n };\n\n if ('on' in populateValue) {\n populateValue.on = _.mapValues(\n (value) => {\n if (_.isPlainObject(value)) {\n value.filters = filters;\n }\n\n return value;\n },\n populateValue.on as Record<string, any>\n );\n }\n\n return populateValue;\n};\n\nconst applyPopulate = async (results: Row[], populate: Record<string, any>, ctx: Context) => {\n const { db, uid, qb } = ctx;\n const meta = db.metadata.get(uid);\n\n if (_.isEmpty(results)) {\n return results;\n }\n\n const populateAttribute = async (attributeName: string) => {\n const attribute = meta.attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n throw new Error(`Invalid populate attribute ${attributeName}`);\n }\n\n const populateValue = getPopulateValue(populate[attributeName], qb.state.filters);\n\n const isCount = 'count' in populateValue && populateValue.count === true;\n\n switch (attribute.relation) {\n case 'oneToOne':\n case 'manyToOne': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await XtoOne(input, ctx);\n break;\n }\n case 'oneToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await oneToMany(input, ctx);\n break;\n }\n case 'manyToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await manyToMany(input, ctx);\n break;\n }\n case 'morphOne':\n case 'morphMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await morphX(input, ctx);\n break;\n }\n case 'morphToMany': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToMany(input, ctx);\n break;\n }\n case 'morphToOne': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToOne(input, ctx);\n break;\n }\n default: {\n break;\n }\n }\n };\n\n await Promise.all(Object.keys(populate).map(populateAttribute));\n};\n\nexport default applyPopulate;\n"],"names":["joinColPrefix","XtoOne","input","ctx","attribute","attributeName","results","populateValue","targetMeta","isCount","db","qb","fromTargetRow","rowOrRows","fromRow","joinColumn","name","joinColumnName","referencedColumn","referencedColumnName","referencedValues","_","uniq","map","r","filter","value","isNil","isEmpty","forEach","result","rows","entityManager","createQueryBuilder","uid","init","addSelect","alias","where","execute","mapResults","groupBy","first","joinTable","getAlias","joinColAlias","joinColRenameAs","joinColSelect","count","join","referencedTable","inverseJoinColumn","rootColumn","rootTable","on","select","raw","reduce","row","Number","orderBy","oneToMany","mapValues","v","ordering","manyToMany","populateQb","morphX","target","morphBy","targetAttribute","metadata","get","attributes","type","relation","idColumn","typeColumn","morphColumn","matchingRows","matchingValue","field","morphToMany","typeField","joinRows","Object","keys","joinMap","idsByType","acc","idValue","typeValue","has","push","typePopulate","Promise","all","ids","joinResults","flatMap","joinResult","id","morphToOne","pickPopulateParams","populate","fieldsToPick","pick","getPopulateValue","filters","isPlainObject","applyPopulate","meta","populateAttribute","Error","state"],"mappings":"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"}
1
+ {"version":3,"file":"apply.mjs","sources":["../../../../src/query/helpers/populate/apply.ts"],"sourcesContent":["import _ from 'lodash/fp';\n\nimport { fromRow } from '../transform';\nimport type { QueryBuilder } from '../../query-builder';\nimport type { Database } from '../../..';\nimport type { Meta } from '../../../metadata';\nimport { ID, RelationalAttribute, Relation } from '../../../types';\n\n// We must select the join column id, however whatever it is named will overwrite an attribute of the same name\n// Therefore, we will prefix with something unlikely to conflict with a user attribute\n// TODO: ...and completely restrict the strapi_ prefix for an attribute name in the future\nconst joinColPrefix = '__strapi' as const;\n\ntype Context = {\n db: Database;\n qb: QueryBuilder;\n uid: string;\n};\n\ntype Input<TRelationAttribute extends RelationalAttribute = RelationalAttribute> = {\n attribute: TRelationAttribute;\n attributeName: string;\n results: Row[];\n populateValue: {\n on?: Record<string, Record<string, unknown>>;\n } & Record<string, unknown>;\n\n isCount: boolean;\n};\n\ntype InputWithTarget<TRelationAttribute extends RelationalAttribute = RelationalAttribute> =\n Input<TRelationAttribute> & {\n targetMeta: Meta;\n };\n\ntype MorphIdMap = Record<string, Record<ID, Row[]>>;\n\ntype Row = Record<string, unknown>;\n\n/**\n * Populate oneToOne and manyToOne relation\n * @param {*} input\n * @param {*} ctx\n * @returns\n */\nconst XtoOne = async (\n input: InputWithTarget<Relation.OneToOne | Relation.ManyToOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const { name: joinColumnName, referencedColumn: referencedColumnName } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({ [referencedColumnName]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row[]>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[joinColumnName] as string]));\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: joinTable.orderBy,\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[referencedColumnName] as string]));\n });\n }\n};\n\nconst oneToMany = async (input: InputWithTarget<Relation.OneToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const {\n name: joinColumnName,\n referencedColumn: referencedColumnName,\n on,\n } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({\n [referencedColumnName]: referencedValues,\n ...(on && typeof on === 'function' ? on({ populateValue, results }) : {}),\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string] || []);\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColSelect, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColRenameAs]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((r) => {\n r[attributeName] = fromTargetRow(map[r[referencedColumnName] as string] || []);\n });\n }\n};\n\nconst manyToMany = async (input: InputWithTarget<Relation.ManyToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { joinTable } = attribute;\n\n const populateQb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = populateQb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, populateQb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string] || []);\n });\n};\n\nconst morphX = async (\n input: InputWithTarget<Relation.MorphMany | Relation.MorphOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta } = input;\n const { db, uid } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(target)\n .init(populateValue)\n // .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.name]: referencedValues, [typeColumn.name]: uid })\n .execute<Row>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n } else if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? null : [];\n });\n\n return;\n }\n\n // find with join table\n const qb = db.entityManager.createQueryBuilder(target);\n\n const alias = qb.getAlias();\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinColumn.name,\n rootColumn: joinColumn.referencedColumn,\n rootTable: qb.alias,\n on: {\n ...(joinTable.on || {}),\n field: attributeName,\n },\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect([`${alias}.${idColumn.name}`, `${alias}.${typeColumn.name}`])\n .where({\n [`${alias}.${idColumn.name}`]: referencedValues,\n [`${alias}.${typeColumn.name}`]: uid,\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n }\n};\n\nconst morphToMany = async (input: Input<Relation.MorphToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n // find with join table\n const { joinTable } = attribute;\n\n const { joinColumn, morphColumn } = joinTable;\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n // fetch join table to create the ids map then do the same as morphToOne without the first\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRows = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...(joinTable.on || {}),\n // If the populateValue contains an \"on\" property,\n // only populate the types defined in it\n ...('on' in populateValue\n ? { [morphColumn.typeColumn.name]: Object.keys(populateValue.on ?? {}) }\n : {}),\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const joinMap = _.groupBy(joinColumn.name, joinRows);\n\n const idsByType = joinRows.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!_.has(typeValue, acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n await Promise.all(\n Object.keys(idsByType).map(async (type) => {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n })\n );\n\n results.forEach((result) => {\n const joinResults = joinMap[result[joinColumn.referencedColumn] as string] || [];\n\n const matchingRows = joinResults.flatMap((joinResult) => {\n const id = joinResult[idColumn.name] as ID;\n const type = joinResult[typeColumn.name] as string;\n\n const targetMeta = db.metadata.get(type);\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n return (map[type][id] || []).map((row) => {\n return {\n [typeField]: type,\n ...fromTargetRow(row),\n };\n });\n });\n\n result[attributeName] = matchingRows;\n });\n};\n\nconst morphToOne = async (input: Input<Relation.MorphToOne>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n // make a map for each type what ids to return\n // make a nested map per id\n\n const idsByType = results.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!(typeValue in acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n }\n\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n if (!type || !id) {\n result[attributeName] = null;\n return;\n }\n\n const matchingRows = map[type][id];\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) =>\n fromRow(db.metadata.get(type), rowOrRows);\n\n const row = fromTargetRow(_.first(matchingRows));\n result[attributeName] = row ? { [typeField]: type, ...row } : row;\n });\n};\n\n// TODO: Omit limit & offset to avoid needing a query per result to avoid making too many queries\nconst pickPopulateParams = (populate: Record<string, unknown>) => {\n const fieldsToPick = [\n 'select',\n 'count',\n 'where',\n 'populate',\n 'orderBy',\n 'filters',\n 'ordering',\n 'on',\n ];\n\n if (populate.count !== true) {\n fieldsToPick.push('limit', 'offset');\n }\n\n return _.pick(fieldsToPick, populate);\n};\n\nconst getPopulateValue = (populate: Record<string, any>, filters: Record<string, any>) => {\n const populateValue = {\n filters,\n ...pickPopulateParams(populate),\n };\n\n if ('on' in populateValue) {\n populateValue.on = _.mapValues(\n (value) => {\n if (_.isPlainObject(value)) {\n value.filters = filters;\n }\n\n return value;\n },\n populateValue.on as Record<string, any>\n );\n }\n\n return populateValue;\n};\n\nconst applyPopulate = async (results: Row[], populate: Record<string, any>, ctx: Context) => {\n const { db, uid, qb } = ctx;\n const meta = db.metadata.get(uid);\n\n if (_.isEmpty(results)) {\n return results;\n }\n\n const populateAttribute = async (attributeName: string) => {\n const attribute = meta.attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n throw new Error(`Invalid populate attribute ${attributeName}`);\n }\n\n const populateValue = getPopulateValue(populate[attributeName], qb.state.filters);\n\n const isCount = 'count' in populateValue && populateValue.count === true;\n\n switch (attribute.relation) {\n case 'oneToOne':\n case 'manyToOne': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await XtoOne(input, ctx);\n break;\n }\n case 'oneToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await oneToMany(input, ctx);\n break;\n }\n case 'manyToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await manyToMany(input, ctx);\n break;\n }\n case 'morphOne':\n case 'morphMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await morphX(input, ctx);\n break;\n }\n case 'morphToMany': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToMany(input, ctx);\n break;\n }\n case 'morphToOne': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToOne(input, ctx);\n break;\n }\n default: {\n break;\n }\n }\n };\n\n await Promise.all(Object.keys(populate).map(populateAttribute));\n};\n\nexport default applyPopulate;\n"],"names":["joinColPrefix","XtoOne","input","ctx","attribute","attributeName","results","populateValue","targetMeta","isCount","db","qb","fromTargetRow","rowOrRows","fromRow","joinColumn","name","joinColumnName","referencedColumn","referencedColumnName","referencedValues","_","uniq","map","r","filter","value","isNil","isEmpty","forEach","result","rows","entityManager","createQueryBuilder","uid","init","addSelect","alias","where","execute","mapResults","groupBy","first","joinTable","getAlias","joinColAlias","joinColRenameAs","joinColSelect","count","join","referencedTable","inverseJoinColumn","rootColumn","rootTable","on","select","raw","reduce","row","Number","orderBy","oneToMany","mapValues","v","ordering","manyToMany","populateQb","morphX","target","morphBy","targetAttribute","metadata","get","attributes","type","relation","idColumn","typeColumn","morphColumn","matchingRows","matchingValue","field","morphToMany","typeField","joinRows","Object","keys","joinMap","idsByType","acc","idValue","typeValue","has","push","typePopulate","Promise","all","ids","joinResults","flatMap","joinResult","id","morphToOne","pickPopulateParams","populate","fieldsToPick","pick","getPopulateValue","filters","isPlainObject","applyPopulate","meta","populateAttribute","Error","state"],"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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"}
@@ -294,8 +294,8 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
294
294
  return state.joins.length > 0 && _.isEmpty(state.groupBy);
295
295
  },
296
296
  shouldUseDeepSort () {
297
- return state.orderBy.filter(({ column })=>column.indexOf('.') >= 0).filter(({ column })=>{
298
- const col = column.split('.');
297
+ return state.orderBy.filter((ob)=>'column' in ob && ob.column.indexOf('.') >= 0).filter((ob)=>{
298
+ const col = ob.column.split('.');
299
299
  for(let i = 0; i < col.length - 1; i += 1){
300
300
  const el = col[i];
301
301
  // order by "rel"."xxx"
@@ -320,7 +320,8 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
320
320
  const joinsOrderByColumns = state.joins.flatMap((join)=>{
321
321
  return _.keys(join.orderBy).map((key)=>this.aliasColumn(key, join.alias));
322
322
  });
323
- const orderByColumns = state.orderBy.map(({ column })=>column);
323
+ // Only include column-based orderBy entries (skip raw expressions like status)
324
+ const orderByColumns = state.orderBy.filter((ob)=>'column' in ob).map((ob)=>ob.column);
324
325
  state.select = _.uniq([
325
326
  ...joinsOrderByColumns,
326
327
  ...orderByColumns,
@@ -427,7 +428,18 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
427
428
  qb.offset(state.offset);
428
429
  }
429
430
  if (state.orderBy.length > 0) {
430
- qb.orderBy(state.orderBy);
431
+ // Convert raw-expression entries (e.g. status) to Knex.Raw before passing to orderBy.
432
+ // Knex's TS types don't accept Raw in the column position, so cast to any[].
433
+ const knexOrderBy = state.orderBy.map((entry)=>{
434
+ if ('rawExpression' in entry && entry.rawExpression === 'status') {
435
+ return {
436
+ column: orderBy.buildStatusSortExpression(db, tableName, this.alias, entry.isI18n),
437
+ order: entry.order
438
+ };
439
+ }
440
+ return entry;
441
+ });
442
+ qb.orderBy(knexOrderBy);
431
443
  }
432
444
  if (state.first) {
433
445
  qb.first();
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.js","sources":["../../src/query/query-builder.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport _ from 'lodash/fp';\n\nimport type { Database } from '..';\n\nimport { DatabaseError } from '../errors';\nimport { transactionCtx } from '../transaction-context';\nimport { isKnexQuery } from '../utils/knex';\nimport * as helpers from './helpers';\nimport type { Join } from './helpers/join';\n\ninterface State {\n type: 'select' | 'insert' | 'update' | 'delete' | 'count' | 'max' | 'truncate';\n select: Array<string | Knex.Raw>;\n count: string | null;\n max: string | null;\n first: boolean;\n data: Record<string, unknown> | (null | Record<string, unknown>)[] | null;\n where: Record<string, unknown>[];\n joins: Join[];\n populate: object | null;\n limit: number | null;\n offset: number | null;\n transaction: any;\n forUpdate: boolean;\n onConflict: any;\n merge: any;\n ignore: boolean;\n orderBy: any[];\n groupBy: any[];\n increments: any[];\n decrements: any[];\n aliasCounter: number;\n filters: any;\n search: string;\n processed: boolean;\n}\n\nexport interface QueryBuilder {\n alias: string;\n state: State;\n raw: Knex.RawBuilder;\n\n getAlias(): string;\n\n clone(): QueryBuilder;\n\n select(args: string | Array<string | Knex.Raw>): QueryBuilder;\n\n addSelect(args: string | string[]): QueryBuilder;\n\n insert<TData extends Record<string, unknown> | Record<string, unknown>[]>(\n data: TData\n ): QueryBuilder;\n\n onConflict(args: any): QueryBuilder;\n\n merge(args: any): QueryBuilder;\n\n ignore(): QueryBuilder;\n\n delete(): QueryBuilder;\n\n ref(name: string): any;\n\n update<TData extends Record<string, unknown>>(data: TData): QueryBuilder;\n\n increment(column: string, amount?: number): QueryBuilder;\n\n decrement(column: string, amount?: number): QueryBuilder;\n\n count(count?: string): QueryBuilder;\n\n max(column: string): QueryBuilder;\n\n where(where?: object): QueryBuilder;\n\n limit(limit: number): QueryBuilder;\n\n offset(offset: number): QueryBuilder;\n\n orderBy(orderBy: any): QueryBuilder;\n\n groupBy(groupBy: any): QueryBuilder;\n\n populate(populate: any): QueryBuilder;\n\n search(query: string): QueryBuilder;\n\n transacting(transaction: any): QueryBuilder;\n\n forUpdate(): QueryBuilder;\n\n init(params?: any): QueryBuilder;\n\n filters(filters: any): void;\n\n first(): QueryBuilder;\n\n join(join: any): QueryBuilder;\n\n mustUseAlias(): boolean;\n\n aliasColumn(key: any, alias?: string): any;\n\n shouldUseSubQuery(): boolean;\n\n runSubQuery(): any;\n\n processState(): void;\n\n shouldUseDistinct(): boolean;\n\n shouldUseDeepSort(): boolean;\n\n processSelect(): void;\n\n getKnexQuery(): Knex.QueryBuilder;\n\n execute<T>(options?: { mapResults?: boolean }): Promise<T>;\n\n stream(options?: { mapResults?: boolean }): helpers.ReadableQuery;\n}\n\nconst createQueryBuilder = (\n uid: string,\n db: Database,\n initialState: Partial<State> = {}\n): QueryBuilder => {\n const meta = db.metadata.get(uid);\n const { tableName } = meta;\n\n const state: State = _.defaults(\n {\n type: 'select',\n select: [],\n count: null,\n max: null,\n first: false,\n data: null,\n where: [],\n joins: [],\n populate: null,\n limit: null,\n offset: null,\n transaction: null,\n forUpdate: false,\n onConflict: null,\n merge: null,\n ignore: false,\n orderBy: [],\n groupBy: [],\n increments: [],\n decrements: [],\n aliasCounter: 0,\n filters: null,\n search: null,\n processed: false,\n },\n initialState\n );\n\n const getAlias = () => {\n const alias = `t${state.aliasCounter}`;\n\n state.aliasCounter += 1;\n\n return alias;\n };\n\n return {\n alias: getAlias(),\n getAlias,\n state,\n\n clone() {\n return createQueryBuilder(uid, db, state);\n },\n\n select(args) {\n state.type = 'select';\n state.select = _.uniq(_.castArray(args));\n\n return this;\n },\n\n addSelect(args) {\n state.select = _.uniq([...state.select, ..._.castArray(args)]);\n\n return this;\n },\n\n insert(data) {\n state.type = 'insert';\n state.data = data;\n\n return this;\n },\n\n onConflict(args) {\n state.onConflict = args;\n\n return this;\n },\n\n merge(args) {\n state.merge = args;\n\n return this;\n },\n\n ignore() {\n state.ignore = true;\n\n return this;\n },\n\n delete() {\n state.type = 'delete';\n\n return this;\n },\n\n ref(name) {\n return db.connection.ref(helpers.toColumnName(meta, name));\n },\n\n update(data) {\n state.type = 'update';\n state.data = data;\n\n return this;\n },\n\n increment(column, amount = 1) {\n state.type = 'update';\n state.increments.push({ column, amount });\n\n return this;\n },\n\n decrement(column, amount = 1) {\n state.type = 'update';\n state.decrements.push({ column, amount });\n\n return this;\n },\n\n count(count = 'id') {\n state.type = 'count';\n state.count = count;\n\n return this;\n },\n\n max(column: string) {\n state.type = 'max';\n state.max = column;\n\n return this;\n },\n\n where(where: Record<string, unknown> = {}) {\n if (!_.isPlainObject(where)) {\n throw new Error('Where must be an object');\n }\n\n state.where.push(where);\n\n return this;\n },\n\n limit(limit) {\n state.limit = limit;\n return this;\n },\n\n offset(offset) {\n state.offset = offset;\n return this;\n },\n\n orderBy(orderBy) {\n state.orderBy = orderBy;\n return this;\n },\n\n groupBy(groupBy) {\n state.groupBy = groupBy;\n return this;\n },\n\n populate(populate) {\n state.populate = populate;\n return this;\n },\n\n search(query) {\n state.search = query;\n return this;\n },\n\n transacting(transaction) {\n state.transaction = transaction;\n return this;\n },\n\n forUpdate() {\n state.forUpdate = true;\n return this;\n },\n\n init(params = {}) {\n const { _q, filters, where, select, limit, offset, orderBy, groupBy, populate } = params;\n\n if (!_.isNil(where)) {\n this.where(where);\n }\n\n if (!_.isNil(_q)) {\n this.search(_q);\n }\n\n if (!_.isNil(select)) {\n this.select(select);\n } else {\n this.select('*');\n }\n\n if (!_.isNil(limit)) {\n this.limit(limit);\n }\n\n if (!_.isNil(offset)) {\n this.offset(offset);\n }\n\n if (!_.isNil(orderBy)) {\n this.orderBy(orderBy);\n }\n\n if (!_.isNil(groupBy)) {\n this.groupBy(groupBy);\n }\n\n if (!_.isNil(populate)) {\n this.populate(populate);\n }\n\n if (!_.isNil(filters)) {\n this.filters(filters);\n }\n\n return this;\n },\n\n filters(filters) {\n state.filters = filters;\n },\n\n first() {\n state.first = true;\n return this;\n },\n\n join(join) {\n if (!join.targetField) {\n state.joins.push(join);\n return this;\n }\n\n const model = db.metadata.get(uid);\n const attribute = model.attributes[join.targetField];\n\n helpers.createJoin(\n { db, qb: this, uid },\n {\n alias: this.alias,\n refAlias: join.alias,\n attributeName: join.targetField,\n attribute,\n }\n );\n\n return this;\n },\n\n mustUseAlias() {\n return ['select', 'count'].includes(state.type);\n },\n\n aliasColumn(key: string | unknown, alias: string): string | unknown {\n if (typeof key !== 'string') {\n return key;\n }\n\n if (key.indexOf('.') >= 0) {\n return key;\n }\n\n if (!_.isNil(alias)) {\n return `${alias}.${key}`;\n }\n\n return this.mustUseAlias() ? `${this.alias}.${key}` : key;\n },\n\n raw: db.connection.raw.bind(db.connection),\n\n shouldUseSubQuery() {\n return ['delete', 'update'].includes(state.type) && state.joins.length > 0;\n },\n\n runSubQuery() {\n const originalType = state.type;\n\n this.select('id');\n const subQB = this.getKnexQuery();\n\n const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));\n const connection = db.getConnection(tableName);\n\n return (connection[originalType] as Knex)().whereIn('id', nestedSubQuery);\n },\n\n processState() {\n if (this.state.processed) {\n return;\n }\n\n state.orderBy = helpers.processOrderBy(state.orderBy, { qb: this, uid, db });\n\n if (!_.isNil(state.filters)) {\n if (_.isFunction(state.filters)) {\n const filters = state.filters({ qb: this, uid, meta, db });\n\n if (!_.isNil(filters)) {\n state.where.push(filters);\n }\n } else {\n state.where.push(state.filters);\n }\n }\n\n state.where = helpers.processWhere(state.where, { qb: this, uid, db });\n state.populate = helpers.processPopulate(state.populate, { qb: this, uid, db });\n\n state.data = helpers.toRow(meta, state.data);\n\n this.processSelect();\n\n this.state.processed = true;\n },\n\n shouldUseDistinct() {\n return state.joins.length > 0 && _.isEmpty(state.groupBy);\n },\n\n shouldUseDeepSort() {\n return (\n state.orderBy\n .filter(({ column }) => column.indexOf('.') >= 0)\n .filter(({ column }) => {\n const col = column.split('.');\n\n for (let i = 0; i < col.length - 1; i += 1) {\n const el = col[i];\n\n // order by \"rel\".\"xxx\"\n const isRelationAttribute = meta.attributes[el]?.type === 'relation';\n\n // order by \"t2\".\"xxx\"\n const isAliasedRelation = Object.values(state.joins)\n .map((join) => join.alias)\n .includes(el);\n\n if (isRelationAttribute || isAliasedRelation) {\n return true;\n }\n }\n\n return false;\n }).length > 0\n );\n },\n\n processSelect() {\n state.select = state.select.map((field) => {\n if (isKnexQuery(field)) {\n return field;\n }\n\n return helpers.toColumnName(meta, field);\n });\n\n if (this.shouldUseDistinct()) {\n const joinsOrderByColumns = state.joins.flatMap((join) => {\n return _.keys(join.orderBy).map((key) => this.aliasColumn(key, join.alias));\n });\n const orderByColumns = state.orderBy.map(({ column }) => column);\n\n state.select = _.uniq([...joinsOrderByColumns, ...orderByColumns, ...state.select]);\n }\n },\n\n getKnexQuery() {\n if (!state.type) {\n this.select('*');\n }\n\n const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;\n\n const qb = db.getConnection(aliasedTableName);\n\n // The state should always be processed before calling shouldUseSubQuery as it\n // relies on the presence or absence of joins to determine the need of a subquery\n this.processState();\n\n if (this.shouldUseSubQuery()) {\n return this.runSubQuery();\n }\n\n switch (state.type) {\n case 'select': {\n qb.select(state.select.map((column) => this.aliasColumn(column)));\n\n if (this.shouldUseDistinct()) {\n qb.distinct();\n }\n\n break;\n }\n case 'count': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.count));\n\n if (this.shouldUseDistinct()) {\n qb.countDistinct({ count: dbColumnName });\n } else {\n qb.count({ count: dbColumnName });\n }\n break;\n }\n case 'max': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.max));\n qb.max({ max: dbColumnName });\n break;\n }\n case 'insert': {\n qb.insert(state.data);\n\n if (db.dialect.useReturning() && _.has('id', meta.attributes)) {\n qb.returning('id');\n }\n\n break;\n }\n case 'update': {\n if (state.data) {\n qb.update(state.data);\n }\n break;\n }\n case 'delete': {\n qb.delete();\n\n break;\n }\n case 'truncate': {\n qb.truncate();\n break;\n }\n default: {\n throw new Error('Unknown query type');\n }\n }\n\n if (state.transaction) {\n qb.transacting(state.transaction);\n }\n\n if (state.forUpdate) {\n qb.forUpdate();\n }\n\n if (!_.isEmpty(state.increments)) {\n state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));\n }\n\n if (!_.isEmpty(state.decrements)) {\n state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));\n }\n\n if (state.onConflict) {\n if (state.merge) {\n qb.onConflict(state.onConflict).merge(state.merge);\n } else if (state.ignore) {\n qb.onConflict(state.onConflict).ignore();\n }\n }\n\n if (state.limit) {\n qb.limit(state.limit);\n }\n\n if (state.offset) {\n qb.offset(state.offset);\n }\n\n if (state.orderBy.length > 0) {\n qb.orderBy(state.orderBy);\n }\n\n if (state.first) {\n qb.first();\n }\n\n if (state.groupBy.length > 0) {\n qb.groupBy(state.groupBy);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.where) {\n helpers.applyWhere(qb, state.where);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.search) {\n qb.where((subQb) => {\n helpers.applySearch(subQb, state.search, { qb: this, db, uid });\n });\n }\n\n if (state.joins.length > 0) {\n helpers.applyJoins(qb, state.joins);\n }\n\n if (this.shouldUseDeepSort()) {\n return helpers.wrapWithDeepSort(qb, { qb: this, db, uid });\n }\n\n return qb;\n },\n\n async execute({ mapResults = true } = {}) {\n try {\n const qb = this.getKnexQuery();\n\n const transaction = transactionCtx.get();\n if (transaction) {\n qb.transacting(transaction);\n }\n\n const rows = await qb;\n\n if (state.populate && !_.isNil(rows)) {\n await helpers.applyPopulate(_.castArray(rows), state.populate, {\n qb: this,\n uid,\n db,\n });\n }\n\n let results = rows;\n if (mapResults && state.type === 'select') {\n results = helpers.fromRow(meta, rows);\n }\n\n return results;\n } catch (error) {\n if (error instanceof Error) {\n db.dialect.transformErrors(error);\n } else {\n throw error;\n }\n }\n },\n\n stream({ mapResults = true } = {}) {\n if (state.type === 'select') {\n return new helpers.ReadableQuery({ qb: this, db, uid, mapResults });\n }\n\n throw new DatabaseError(\n `query-builder.stream() has been called with an unsupported query type: \"${state.type}\"`\n );\n },\n };\n};\n\nexport default createQueryBuilder;\n"],"names":["createQueryBuilder","uid","db","initialState","meta","metadata","get","tableName","state","_","defaults","type","select","count","max","first","data","where","joins","populate","limit","offset","transaction","forUpdate","onConflict","merge","ignore","orderBy","groupBy","increments","decrements","aliasCounter","filters","search","processed","getAlias","alias","clone","args","uniq","castArray","addSelect","insert","delete","ref","name","connection","helpers","update","increment","column","amount","push","decrement","isPlainObject","Error","query","transacting","init","params","_q","isNil","join","targetField","model","attribute","attributes","qb","refAlias","attributeName","mustUseAlias","includes","aliasColumn","key","indexOf","raw","bind","shouldUseSubQuery","length","runSubQuery","originalType","subQB","getKnexQuery","nestedSubQuery","getConnection","from","as","whereIn","processState","isFunction","processSelect","shouldUseDistinct","isEmpty","shouldUseDeepSort","filter","col","split","i","el","isRelationAttribute","isAliasedRelation","Object","values","map","field","isKnexQuery","joinsOrderByColumns","flatMap","keys","orderByColumns","aliasedTableName","distinct","dbColumnName","countDistinct","dialect","useReturning","has","returning","truncate","forEach","incr","decr","subQb","execute","mapResults","transactionCtx","rows","results","error","transformErrors","stream","DatabaseError"],"mappings":"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"}
1
+ {"version":3,"file":"query-builder.js","sources":["../../src/query/query-builder.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport _ from 'lodash/fp';\n\nimport type { Database } from '..';\n\nimport { DatabaseError } from '../errors';\nimport { transactionCtx } from '../transaction-context';\nimport { isKnexQuery } from '../utils/knex';\nimport * as helpers from './helpers';\nimport type { Join } from './helpers/join';\n\ninterface State {\n type: 'select' | 'insert' | 'update' | 'delete' | 'count' | 'max' | 'truncate';\n select: Array<string | Knex.Raw>;\n count: string | null;\n max: string | null;\n first: boolean;\n data: Record<string, unknown> | (null | Record<string, unknown>)[] | null;\n where: Record<string, unknown>[];\n joins: Join[];\n populate: object | null;\n limit: number | null;\n offset: number | null;\n transaction: any;\n forUpdate: boolean;\n onConflict: any;\n merge: any;\n ignore: boolean;\n orderBy: any[];\n groupBy: any[];\n increments: any[];\n decrements: any[];\n aliasCounter: number;\n filters: any;\n search: string;\n processed: boolean;\n}\n\nexport interface QueryBuilder {\n alias: string;\n state: State;\n raw: Knex.RawBuilder;\n\n getAlias(): string;\n\n clone(): QueryBuilder;\n\n select(args: string | Array<string | Knex.Raw>): QueryBuilder;\n\n addSelect(args: string | string[]): QueryBuilder;\n\n insert<TData extends Record<string, unknown> | Record<string, unknown>[]>(\n data: TData\n ): QueryBuilder;\n\n onConflict(args: any): QueryBuilder;\n\n merge(args: any): QueryBuilder;\n\n ignore(): QueryBuilder;\n\n delete(): QueryBuilder;\n\n ref(name: string): any;\n\n update<TData extends Record<string, unknown>>(data: TData): QueryBuilder;\n\n increment(column: string, amount?: number): QueryBuilder;\n\n decrement(column: string, amount?: number): QueryBuilder;\n\n count(count?: string): QueryBuilder;\n\n max(column: string): QueryBuilder;\n\n where(where?: object): QueryBuilder;\n\n limit(limit: number): QueryBuilder;\n\n offset(offset: number): QueryBuilder;\n\n orderBy(orderBy: any): QueryBuilder;\n\n groupBy(groupBy: any): QueryBuilder;\n\n populate(populate: any): QueryBuilder;\n\n search(query: string): QueryBuilder;\n\n transacting(transaction: any): QueryBuilder;\n\n forUpdate(): QueryBuilder;\n\n init(params?: any): QueryBuilder;\n\n filters(filters: any): void;\n\n first(): QueryBuilder;\n\n join(join: any): QueryBuilder;\n\n mustUseAlias(): boolean;\n\n aliasColumn(key: any, alias?: string): any;\n\n shouldUseSubQuery(): boolean;\n\n runSubQuery(): any;\n\n processState(): void;\n\n shouldUseDistinct(): boolean;\n\n shouldUseDeepSort(): boolean;\n\n processSelect(): void;\n\n getKnexQuery(): Knex.QueryBuilder;\n\n execute<T>(options?: { mapResults?: boolean }): Promise<T>;\n\n stream(options?: { mapResults?: boolean }): helpers.ReadableQuery;\n}\n\nconst createQueryBuilder = (\n uid: string,\n db: Database,\n initialState: Partial<State> = {}\n): QueryBuilder => {\n const meta = db.metadata.get(uid);\n const { tableName } = meta;\n\n const state: State = _.defaults(\n {\n type: 'select',\n select: [],\n count: null,\n max: null,\n first: false,\n data: null,\n where: [],\n joins: [],\n populate: null,\n limit: null,\n offset: null,\n transaction: null,\n forUpdate: false,\n onConflict: null,\n merge: null,\n ignore: false,\n orderBy: [],\n groupBy: [],\n increments: [],\n decrements: [],\n aliasCounter: 0,\n filters: null,\n search: null,\n processed: false,\n },\n initialState\n );\n\n const getAlias = () => {\n const alias = `t${state.aliasCounter}`;\n\n state.aliasCounter += 1;\n\n return alias;\n };\n\n return {\n alias: getAlias(),\n getAlias,\n state,\n\n clone() {\n return createQueryBuilder(uid, db, state);\n },\n\n select(args) {\n state.type = 'select';\n state.select = _.uniq(_.castArray(args));\n\n return this;\n },\n\n addSelect(args) {\n state.select = _.uniq([...state.select, ..._.castArray(args)]);\n\n return this;\n },\n\n insert(data) {\n state.type = 'insert';\n state.data = data;\n\n return this;\n },\n\n onConflict(args) {\n state.onConflict = args;\n\n return this;\n },\n\n merge(args) {\n state.merge = args;\n\n return this;\n },\n\n ignore() {\n state.ignore = true;\n\n return this;\n },\n\n delete() {\n state.type = 'delete';\n\n return this;\n },\n\n ref(name) {\n return db.connection.ref(helpers.toColumnName(meta, name));\n },\n\n update(data) {\n state.type = 'update';\n state.data = data;\n\n return this;\n },\n\n increment(column, amount = 1) {\n state.type = 'update';\n state.increments.push({ column, amount });\n\n return this;\n },\n\n decrement(column, amount = 1) {\n state.type = 'update';\n state.decrements.push({ column, amount });\n\n return this;\n },\n\n count(count = 'id') {\n state.type = 'count';\n state.count = count;\n\n return this;\n },\n\n max(column: string) {\n state.type = 'max';\n state.max = column;\n\n return this;\n },\n\n where(where: Record<string, unknown> = {}) {\n if (!_.isPlainObject(where)) {\n throw new Error('Where must be an object');\n }\n\n state.where.push(where);\n\n return this;\n },\n\n limit(limit) {\n state.limit = limit;\n return this;\n },\n\n offset(offset) {\n state.offset = offset;\n return this;\n },\n\n orderBy(orderBy) {\n state.orderBy = orderBy;\n return this;\n },\n\n groupBy(groupBy) {\n state.groupBy = groupBy;\n return this;\n },\n\n populate(populate) {\n state.populate = populate;\n return this;\n },\n\n search(query) {\n state.search = query;\n return this;\n },\n\n transacting(transaction) {\n state.transaction = transaction;\n return this;\n },\n\n forUpdate() {\n state.forUpdate = true;\n return this;\n },\n\n init(params = {}) {\n const { _q, filters, where, select, limit, offset, orderBy, groupBy, populate } = params;\n\n if (!_.isNil(where)) {\n this.where(where);\n }\n\n if (!_.isNil(_q)) {\n this.search(_q);\n }\n\n if (!_.isNil(select)) {\n this.select(select);\n } else {\n this.select('*');\n }\n\n if (!_.isNil(limit)) {\n this.limit(limit);\n }\n\n if (!_.isNil(offset)) {\n this.offset(offset);\n }\n\n if (!_.isNil(orderBy)) {\n this.orderBy(orderBy);\n }\n\n if (!_.isNil(groupBy)) {\n this.groupBy(groupBy);\n }\n\n if (!_.isNil(populate)) {\n this.populate(populate);\n }\n\n if (!_.isNil(filters)) {\n this.filters(filters);\n }\n\n return this;\n },\n\n filters(filters) {\n state.filters = filters;\n },\n\n first() {\n state.first = true;\n return this;\n },\n\n join(join) {\n if (!join.targetField) {\n state.joins.push(join);\n return this;\n }\n\n const model = db.metadata.get(uid);\n const attribute = model.attributes[join.targetField];\n\n helpers.createJoin(\n { db, qb: this, uid },\n {\n alias: this.alias,\n refAlias: join.alias,\n attributeName: join.targetField,\n attribute,\n }\n );\n\n return this;\n },\n\n mustUseAlias() {\n return ['select', 'count'].includes(state.type);\n },\n\n aliasColumn(key: string | unknown, alias: string): string | unknown {\n if (typeof key !== 'string') {\n return key;\n }\n\n if (key.indexOf('.') >= 0) {\n return key;\n }\n\n if (!_.isNil(alias)) {\n return `${alias}.${key}`;\n }\n\n return this.mustUseAlias() ? `${this.alias}.${key}` : key;\n },\n\n raw: db.connection.raw.bind(db.connection),\n\n shouldUseSubQuery() {\n return ['delete', 'update'].includes(state.type) && state.joins.length > 0;\n },\n\n runSubQuery() {\n const originalType = state.type;\n\n this.select('id');\n const subQB = this.getKnexQuery();\n\n const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));\n const connection = db.getConnection(tableName);\n\n return (connection[originalType] as Knex)().whereIn('id', nestedSubQuery);\n },\n\n processState() {\n if (this.state.processed) {\n return;\n }\n\n state.orderBy = helpers.processOrderBy(state.orderBy, { qb: this, uid, db });\n\n if (!_.isNil(state.filters)) {\n if (_.isFunction(state.filters)) {\n const filters = state.filters({ qb: this, uid, meta, db });\n\n if (!_.isNil(filters)) {\n state.where.push(filters);\n }\n } else {\n state.where.push(state.filters);\n }\n }\n\n state.where = helpers.processWhere(state.where, { qb: this, uid, db });\n state.populate = helpers.processPopulate(state.populate, { qb: this, uid, db });\n\n state.data = helpers.toRow(meta, state.data);\n\n this.processSelect();\n\n this.state.processed = true;\n },\n\n shouldUseDistinct() {\n return state.joins.length > 0 && _.isEmpty(state.groupBy);\n },\n\n shouldUseDeepSort() {\n return (\n state.orderBy\n .filter((ob: any) => 'column' in ob && ob.column.indexOf('.') >= 0)\n .filter((ob: any) => {\n const col = ob.column.split('.');\n\n for (let i = 0; i < col.length - 1; i += 1) {\n const el = col[i];\n\n // order by \"rel\".\"xxx\"\n const isRelationAttribute = meta.attributes[el]?.type === 'relation';\n\n // order by \"t2\".\"xxx\"\n const isAliasedRelation = Object.values(state.joins)\n .map((join) => join.alias)\n .includes(el);\n\n if (isRelationAttribute || isAliasedRelation) {\n return true;\n }\n }\n\n return false;\n }).length > 0\n );\n },\n\n processSelect() {\n state.select = state.select.map((field) => {\n if (isKnexQuery(field)) {\n return field;\n }\n\n return helpers.toColumnName(meta, field);\n });\n\n if (this.shouldUseDistinct()) {\n const joinsOrderByColumns = state.joins.flatMap((join) => {\n return _.keys(join.orderBy).map((key) => this.aliasColumn(key, join.alias));\n });\n // Only include column-based orderBy entries (skip raw expressions like status)\n const orderByColumns = state.orderBy\n .filter((ob: any) => 'column' in ob)\n .map((ob: any) => ob.column);\n\n state.select = _.uniq([...joinsOrderByColumns, ...orderByColumns, ...state.select]);\n }\n },\n\n getKnexQuery() {\n if (!state.type) {\n this.select('*');\n }\n\n const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;\n\n const qb = db.getConnection(aliasedTableName);\n\n // The state should always be processed before calling shouldUseSubQuery as it\n // relies on the presence or absence of joins to determine the need of a subquery\n this.processState();\n\n if (this.shouldUseSubQuery()) {\n return this.runSubQuery();\n }\n\n switch (state.type) {\n case 'select': {\n qb.select(state.select.map((column) => this.aliasColumn(column)));\n\n if (this.shouldUseDistinct()) {\n qb.distinct();\n }\n\n break;\n }\n case 'count': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.count));\n\n if (this.shouldUseDistinct()) {\n qb.countDistinct({ count: dbColumnName });\n } else {\n qb.count({ count: dbColumnName });\n }\n break;\n }\n case 'max': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.max));\n qb.max({ max: dbColumnName });\n break;\n }\n case 'insert': {\n qb.insert(state.data);\n\n if (db.dialect.useReturning() && _.has('id', meta.attributes)) {\n qb.returning('id');\n }\n\n break;\n }\n case 'update': {\n if (state.data) {\n qb.update(state.data);\n }\n break;\n }\n case 'delete': {\n qb.delete();\n\n break;\n }\n case 'truncate': {\n qb.truncate();\n break;\n }\n default: {\n throw new Error('Unknown query type');\n }\n }\n\n if (state.transaction) {\n qb.transacting(state.transaction);\n }\n\n if (state.forUpdate) {\n qb.forUpdate();\n }\n\n if (!_.isEmpty(state.increments)) {\n state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));\n }\n\n if (!_.isEmpty(state.decrements)) {\n state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));\n }\n\n if (state.onConflict) {\n if (state.merge) {\n qb.onConflict(state.onConflict).merge(state.merge);\n } else if (state.ignore) {\n qb.onConflict(state.onConflict).ignore();\n }\n }\n\n if (state.limit) {\n qb.limit(state.limit);\n }\n\n if (state.offset) {\n qb.offset(state.offset);\n }\n\n if (state.orderBy.length > 0) {\n // Convert raw-expression entries (e.g. status) to Knex.Raw before passing to orderBy.\n // Knex's TS types don't accept Raw in the column position, so cast to any[].\n const knexOrderBy = state.orderBy.map((entry: any) => {\n if ('rawExpression' in entry && entry.rawExpression === 'status') {\n return {\n column: helpers.buildStatusSortExpression(db, tableName, this.alias, entry.isI18n),\n order: entry.order,\n };\n }\n return entry;\n });\n qb.orderBy(knexOrderBy);\n }\n\n if (state.first) {\n qb.first();\n }\n\n if (state.groupBy.length > 0) {\n qb.groupBy(state.groupBy);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.where) {\n helpers.applyWhere(qb, state.where);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.search) {\n qb.where((subQb) => {\n helpers.applySearch(subQb, state.search, { qb: this, db, uid });\n });\n }\n\n if (state.joins.length > 0) {\n helpers.applyJoins(qb, state.joins);\n }\n\n if (this.shouldUseDeepSort()) {\n return helpers.wrapWithDeepSort(qb, { qb: this, db, uid });\n }\n\n return qb;\n },\n\n async execute({ mapResults = true } = {}) {\n try {\n const qb = this.getKnexQuery();\n\n const transaction = transactionCtx.get();\n if (transaction) {\n qb.transacting(transaction);\n }\n\n const rows = await qb;\n\n if (state.populate && !_.isNil(rows)) {\n await helpers.applyPopulate(_.castArray(rows), state.populate, {\n qb: this,\n uid,\n db,\n });\n }\n\n let results = rows;\n if (mapResults && state.type === 'select') {\n results = helpers.fromRow(meta, rows);\n }\n\n return results;\n } catch (error) {\n if (error instanceof Error) {\n db.dialect.transformErrors(error);\n } else {\n throw error;\n }\n }\n },\n\n stream({ mapResults = true } = {}) {\n if (state.type === 'select') {\n return new helpers.ReadableQuery({ qb: this, db, uid, mapResults });\n }\n\n throw new DatabaseError(\n `query-builder.stream() has been called with an unsupported query type: \"${state.type}\"`\n );\n },\n };\n};\n\nexport default createQueryBuilder;\n"],"names":["createQueryBuilder","uid","db","initialState","meta","metadata","get","tableName","state","_","defaults","type","select","count","max","first","data","where","joins","populate","limit","offset","transaction","forUpdate","onConflict","merge","ignore","orderBy","groupBy","increments","decrements","aliasCounter","filters","search","processed","getAlias","alias","clone","args","uniq","castArray","addSelect","insert","delete","ref","name","connection","helpers","update","increment","column","amount","push","decrement","isPlainObject","Error","query","transacting","init","params","_q","isNil","join","targetField","model","attribute","attributes","qb","refAlias","attributeName","mustUseAlias","includes","aliasColumn","key","indexOf","raw","bind","shouldUseSubQuery","length","runSubQuery","originalType","subQB","getKnexQuery","nestedSubQuery","getConnection","from","as","whereIn","processState","isFunction","processSelect","shouldUseDistinct","isEmpty","shouldUseDeepSort","filter","ob","col","split","i","el","isRelationAttribute","isAliasedRelation","Object","values","map","field","isKnexQuery","joinsOrderByColumns","flatMap","keys","orderByColumns","aliasedTableName","distinct","dbColumnName","countDistinct","dialect","useReturning","has","returning","truncate","forEach","incr","decr","knexOrderBy","entry","rawExpression","isI18n","order","subQb","execute","mapResults","transactionCtx","rows","results","error","transformErrors","stream","DatabaseError"],"mappings":"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"}
@@ -3,7 +3,7 @@ import DatabaseError from '../errors/database.mjs';
3
3
  import { transactionCtx } from '../transaction-context.mjs';
4
4
  import { isKnexQuery } from '../utils/knex.mjs';
5
5
  import { applySearch } from './helpers/search.mjs';
6
- import { wrapWithDeepSort, processOrderBy } from './helpers/order-by.mjs';
6
+ import { buildStatusSortExpression, wrapWithDeepSort, processOrderBy } from './helpers/order-by.mjs';
7
7
  import { applyJoins, createJoin } from './helpers/join.mjs';
8
8
  import applyPopulate from './helpers/populate/apply.mjs';
9
9
  import processPopulate from './helpers/populate/process.mjs';
@@ -292,8 +292,8 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
292
292
  return state.joins.length > 0 && _.isEmpty(state.groupBy);
293
293
  },
294
294
  shouldUseDeepSort () {
295
- return state.orderBy.filter(({ column })=>column.indexOf('.') >= 0).filter(({ column })=>{
296
- const col = column.split('.');
295
+ return state.orderBy.filter((ob)=>'column' in ob && ob.column.indexOf('.') >= 0).filter((ob)=>{
296
+ const col = ob.column.split('.');
297
297
  for(let i = 0; i < col.length - 1; i += 1){
298
298
  const el = col[i];
299
299
  // order by "rel"."xxx"
@@ -318,7 +318,8 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
318
318
  const joinsOrderByColumns = state.joins.flatMap((join)=>{
319
319
  return _.keys(join.orderBy).map((key)=>this.aliasColumn(key, join.alias));
320
320
  });
321
- const orderByColumns = state.orderBy.map(({ column })=>column);
321
+ // Only include column-based orderBy entries (skip raw expressions like status)
322
+ const orderByColumns = state.orderBy.filter((ob)=>'column' in ob).map((ob)=>ob.column);
322
323
  state.select = _.uniq([
323
324
  ...joinsOrderByColumns,
324
325
  ...orderByColumns,
@@ -425,7 +426,18 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
425
426
  qb.offset(state.offset);
426
427
  }
427
428
  if (state.orderBy.length > 0) {
428
- qb.orderBy(state.orderBy);
429
+ // Convert raw-expression entries (e.g. status) to Knex.Raw before passing to orderBy.
430
+ // Knex's TS types don't accept Raw in the column position, so cast to any[].
431
+ const knexOrderBy = state.orderBy.map((entry)=>{
432
+ if ('rawExpression' in entry && entry.rawExpression === 'status') {
433
+ return {
434
+ column: buildStatusSortExpression(db, tableName, this.alias, entry.isI18n),
435
+ order: entry.order
436
+ };
437
+ }
438
+ return entry;
439
+ });
440
+ qb.orderBy(knexOrderBy);
429
441
  }
430
442
  if (state.first) {
431
443
  qb.first();