@payloadcms/drizzle 3.24.0-canary.7d9fbaf → 3.24.0-canary.80e034e
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/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +1 -2
- package/dist/deleteOne.js.map +1 -1
- package/dist/find/findMany.d.ts.map +1 -1
- package/dist/find/findMany.js +1 -2
- package/dist/find/findMany.js.map +1 -1
- package/dist/find/traverseFields.d.ts +2 -2
- package/dist/find/traverseFields.d.ts.map +1 -1
- package/dist/find/traverseFields.js +210 -90
- package/dist/find/traverseFields.js.map +1 -1
- package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.js +29 -16
- package/dist/queries/getTableColumnFromPath.js.map +1 -1
- package/dist/transform/read/index.d.ts +1 -1
- package/dist/transform/read/index.d.ts.map +1 -1
- package/dist/transform/read/index.js.map +1 -1
- package/dist/transform/read/traverseFields.d.ts.map +1 -1
- package/dist/transform/read/traverseFields.js +10 -2
- package/dist/transform/read/traverseFields.js.map +1 -1
- package/dist/transform/write/index.d.ts +1 -1
- package/dist/transform/write/index.d.ts.map +1 -1
- package/dist/transform/write/index.js.map +1 -1
- package/dist/upsertRow/index.d.ts.map +1 -1
- package/dist/upsertRow/index.js +1 -3
- package/dist/upsertRow/index.js.map +1 -1
- package/package.json +3 -3
package/dist/deleteOne.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteOne.d.ts","sourceRoot":"","sources":["../src/deleteOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAaxC,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"deleteOne.d.ts","sourceRoot":"","sources":["../src/deleteOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAaxC,eAAO,MAAM,SAAS,EAAE,SA+DvB,CAAA"}
|
package/dist/deleteOne.js
CHANGED
|
@@ -54,8 +54,7 @@ export const deleteOne = async function deleteOne({ collection: collectionSlug,
|
|
|
54
54
|
config: this.payload.config,
|
|
55
55
|
data: docToDelete,
|
|
56
56
|
fields: collection.flattenedFields,
|
|
57
|
-
joinQuery: false
|
|
58
|
-
parentIsLocalized: false
|
|
57
|
+
joinQuery: false
|
|
59
58
|
});
|
|
60
59
|
await this.deleteWhere({
|
|
61
60
|
db,
|
package/dist/deleteOne.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/deleteOne.ts"],"sourcesContent":["import type { DeleteOne } from 'payload'\n\nimport { eq } from 'drizzle-orm'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { buildFindManyArgs } from './find/buildFindManyArgs.js'\nimport buildQuery from './queries/buildQuery.js'\nimport { selectDistinct } from './queries/selectDistinct.js'\nimport { transform } from './transform/read/index.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\nexport const deleteOne: DeleteOne = async function deleteOne(\n this: DrizzleAdapter,\n { collection: collectionSlug, req, select, where: whereArg },\n) {\n const db = await getTransaction(this, req)\n const collection = this.payload.collections[collectionSlug].config\n\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n\n let docToDelete: Record<string, unknown>\n\n const { joins, selectFields, where } = buildQuery({\n adapter: this,\n fields: collection.flattenedFields,\n locale: req?.locale,\n tableName,\n where: whereArg,\n })\n\n const selectDistinctResult = await selectDistinct({\n adapter: this,\n chainedMethods: [{ args: [1], method: 'limit' }],\n db,\n joins,\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult?.[0]?.id) {\n docToDelete = await db.query[tableName].findFirst({\n where: eq(this.tables[tableName].id, selectDistinctResult[0].id),\n })\n } else {\n const findManyArgs = buildFindManyArgs({\n adapter: this,\n depth: 0,\n fields: collection.flattenedFields,\n joinQuery: false,\n select,\n tableName,\n })\n\n findManyArgs.where = where\n\n docToDelete = await db.query[tableName].findFirst(findManyArgs)\n }\n\n const result = transform({\n adapter: this,\n config: this.payload.config,\n data: docToDelete,\n fields: collection.flattenedFields,\n joinQuery: false,\n
|
|
1
|
+
{"version":3,"sources":["../src/deleteOne.ts"],"sourcesContent":["import type { DeleteOne } from 'payload'\n\nimport { eq } from 'drizzle-orm'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { buildFindManyArgs } from './find/buildFindManyArgs.js'\nimport buildQuery from './queries/buildQuery.js'\nimport { selectDistinct } from './queries/selectDistinct.js'\nimport { transform } from './transform/read/index.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\nexport const deleteOne: DeleteOne = async function deleteOne(\n this: DrizzleAdapter,\n { collection: collectionSlug, req, select, where: whereArg },\n) {\n const db = await getTransaction(this, req)\n const collection = this.payload.collections[collectionSlug].config\n\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n\n let docToDelete: Record<string, unknown>\n\n const { joins, selectFields, where } = buildQuery({\n adapter: this,\n fields: collection.flattenedFields,\n locale: req?.locale,\n tableName,\n where: whereArg,\n })\n\n const selectDistinctResult = await selectDistinct({\n adapter: this,\n chainedMethods: [{ args: [1], method: 'limit' }],\n db,\n joins,\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult?.[0]?.id) {\n docToDelete = await db.query[tableName].findFirst({\n where: eq(this.tables[tableName].id, selectDistinctResult[0].id),\n })\n } else {\n const findManyArgs = buildFindManyArgs({\n adapter: this,\n depth: 0,\n fields: collection.flattenedFields,\n joinQuery: false,\n select,\n tableName,\n })\n\n findManyArgs.where = where\n\n docToDelete = await db.query[tableName].findFirst(findManyArgs)\n }\n\n const result = transform({\n adapter: this,\n config: this.payload.config,\n data: docToDelete,\n fields: collection.flattenedFields,\n joinQuery: false,\n })\n\n await this.deleteWhere({\n db,\n tableName,\n where: eq(this.tables[tableName].id, docToDelete.id),\n })\n\n return result\n}\n"],"names":["eq","toSnakeCase","buildFindManyArgs","buildQuery","selectDistinct","transform","getTransaction","deleteOne","collection","collectionSlug","req","select","where","whereArg","db","payload","collections","config","tableName","tableNameMap","get","slug","docToDelete","joins","selectFields","adapter","fields","flattenedFields","locale","selectDistinctResult","chainedMethods","args","method","id","query","findFirst","tables","findManyArgs","depth","joinQuery","result","data","deleteWhere"],"mappings":"AAEA,SAASA,EAAE,QAAQ,cAAa;AAChC,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,iBAAiB,QAAQ,8BAA6B;AAC/D,OAAOC,gBAAgB,0BAAyB;AAChD,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,SAAS,QAAQ,4BAA2B;AACrD,SAASC,cAAc,QAAQ,gCAA+B;AAE9D,OAAO,MAAMC,YAAuB,eAAeA,UAEjD,EAAEC,YAAYC,cAAc,EAAEC,GAAG,EAAEC,MAAM,EAAEC,OAAOC,QAAQ,EAAE;IAE5D,MAAMC,KAAK,MAAMR,eAAe,IAAI,EAAEI;IACtC,MAAMF,aAAa,IAAI,CAACO,OAAO,CAACC,WAAW,CAACP,eAAe,CAACQ,MAAM;IAElE,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAACnB,YAAYO,WAAWa,IAAI;IAEnE,IAAIC;IAEJ,MAAM,EAAEC,KAAK,EAAEC,YAAY,EAAEZ,KAAK,EAAE,GAAGT,WAAW;QAChDsB,SAAS,IAAI;QACbC,QAAQlB,WAAWmB,eAAe;QAClCC,QAAQlB,KAAKkB;QACbV;QACAN,OAAOC;IACT;IAEA,MAAMgB,uBAAuB,MAAMzB,eAAe;QAChDqB,SAAS,IAAI;QACbK,gBAAgB;YAAC;gBAAEC,MAAM;oBAAC;iBAAE;gBAAEC,QAAQ;YAAQ;SAAE;QAChDlB;QACAS;QACAC;QACAN;QACAN;IACF;IAEA,IAAIiB,sBAAsB,CAAC,EAAE,EAAEI,IAAI;QACjCX,cAAc,MAAMR,GAAGoB,KAAK,CAAChB,UAAU,CAACiB,SAAS,CAAC;YAChDvB,OAAOZ,GAAG,IAAI,CAACoC,MAAM,CAAClB,UAAU,CAACe,EAAE,EAAEJ,oBAAoB,CAAC,EAAE,CAACI,EAAE;QACjE;IACF,OAAO;QACL,MAAMI,eAAenC,kBAAkB;YACrCuB,SAAS,IAAI;YACba,OAAO;YACPZ,QAAQlB,WAAWmB,eAAe;YAClCY,WAAW;YACX5B;YACAO;QACF;QAEAmB,aAAazB,KAAK,GAAGA;QAErBU,cAAc,MAAMR,GAAGoB,KAAK,CAAChB,UAAU,CAACiB,SAAS,CAACE;IACpD;IAEA,MAAMG,SAASnC,UAAU;QACvBoB,SAAS,IAAI;QACbR,QAAQ,IAAI,CAACF,OAAO,CAACE,MAAM;QAC3BwB,MAAMnB;QACNI,QAAQlB,WAAWmB,eAAe;QAClCY,WAAW;IACb;IAEA,MAAM,IAAI,CAACG,WAAW,CAAC;QACrB5B;QACAI;QACAN,OAAOZ,GAAG,IAAI,CAACoC,MAAM,CAAClB,UAAU,CAACe,EAAE,EAAEX,YAAYW,EAAE;IACrD;IAEA,OAAOO;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../src/find/findMany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AASjD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAEhC,eAAO,MAAM,QAAQ,qKAgBlB,IAAI;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../src/find/findMany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AASjD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAEhC,eAAO,MAAM,QAAQ,qKAgBlB,IAAI;;;;;;;;;;;EAiJN,CAAA"}
|
package/dist/find/findMany.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/find/findMany.ts"],"sourcesContent":["import type { FindArgs, FlattenedField, TypeWithID } from 'payload'\n\nimport { inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../types.js'\nimport type { ChainedMethods } from './chainMethods.js'\n\nimport buildQuery from '../queries/buildQuery.js'\nimport { selectDistinct } from '../queries/selectDistinct.js'\nimport { transform } from '../transform/read/index.js'\nimport { getTransaction } from '../utilities/getTransaction.js'\nimport { buildFindManyArgs } from './buildFindManyArgs.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n fields: FlattenedField[]\n tableName: string\n versions?: boolean\n} & Omit<FindArgs, 'collection'>\n\nexport const findMany = async function find({\n adapter,\n collectionSlug,\n fields,\n joins: joinQuery,\n limit: limitArg,\n locale,\n page = 1,\n pagination,\n req,\n select,\n skip,\n sort,\n tableName,\n versions,\n where: whereArg,\n}: Args) {\n const db = await getTransaction(adapter, req)\n let limit = limitArg\n let totalDocs: number\n let totalPages: number\n let hasPrevPage: boolean\n let hasNextPage: boolean\n let pagingCounter: number\n const offset = skip || (page - 1) * limit\n\n if (limit === 0) {\n limit = undefined\n }\n\n const { joins, orderBy, selectFields, where } = buildQuery({\n adapter,\n fields,\n locale,\n sort,\n tableName,\n where: whereArg,\n })\n\n const orderedIDMap: Record<number | string, number> = {}\n let orderedIDs: (number | string)[]\n\n const selectDistinctMethods: ChainedMethods = []\n\n if (orderBy) {\n selectDistinctMethods.push({\n args: [() => orderBy.map(({ column, order }) => order(column))],\n method: 'orderBy',\n })\n }\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n collectionSlug,\n depth: 0,\n fields,\n joinQuery,\n joins,\n locale,\n select,\n tableName,\n versions,\n })\n\n selectDistinctMethods.push({ args: [offset], method: 'offset' })\n selectDistinctMethods.push({ args: [limit], method: 'limit' })\n\n const selectDistinctResult = await selectDistinct({\n adapter,\n chainedMethods: selectDistinctMethods,\n db,\n joins,\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult) {\n if (selectDistinctResult.length === 0) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 0,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n }\n } else {\n // set the id in an object for sorting later\n selectDistinctResult.forEach(({ id }, i) => {\n orderedIDMap[id] = i\n })\n orderedIDs = Object.keys(orderedIDMap)\n findManyArgs.where = inArray(adapter.tables[tableName].id, orderedIDs)\n }\n } else {\n findManyArgs.limit = limit\n findManyArgs.offset = offset\n findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column))\n\n if (where) {\n findManyArgs.where = where\n }\n }\n\n const findPromise = db.query[tableName].findMany(findManyArgs)\n\n if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) {\n totalDocs = await adapter.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n totalPages = typeof limit === 'number' && limit !== 0 ? Math.ceil(totalDocs / limit) : 1\n hasPrevPage = page > 1\n hasNextPage = totalPages > page\n pagingCounter = (page - 1) * limit + 1\n }\n\n const rawDocs = await findPromise\n // sort rawDocs from selectQuery\n if (Object.keys(orderedIDMap).length > 0) {\n rawDocs.sort((a, b) => orderedIDMap[a.id] - orderedIDMap[b.id])\n }\n\n if (pagination === false || !totalDocs) {\n totalDocs = rawDocs.length\n totalPages = 1\n pagingCounter = 1\n hasPrevPage = false\n hasNextPage = false\n }\n\n const docs = rawDocs.map((data: TypeWithID) => {\n return transform({\n adapter,\n config: adapter.payload.config,\n data,\n fields,\n joinQuery,\n
|
|
1
|
+
{"version":3,"sources":["../../src/find/findMany.ts"],"sourcesContent":["import type { FindArgs, FlattenedField, TypeWithID } from 'payload'\n\nimport { inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../types.js'\nimport type { ChainedMethods } from './chainMethods.js'\n\nimport buildQuery from '../queries/buildQuery.js'\nimport { selectDistinct } from '../queries/selectDistinct.js'\nimport { transform } from '../transform/read/index.js'\nimport { getTransaction } from '../utilities/getTransaction.js'\nimport { buildFindManyArgs } from './buildFindManyArgs.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n fields: FlattenedField[]\n tableName: string\n versions?: boolean\n} & Omit<FindArgs, 'collection'>\n\nexport const findMany = async function find({\n adapter,\n collectionSlug,\n fields,\n joins: joinQuery,\n limit: limitArg,\n locale,\n page = 1,\n pagination,\n req,\n select,\n skip,\n sort,\n tableName,\n versions,\n where: whereArg,\n}: Args) {\n const db = await getTransaction(adapter, req)\n let limit = limitArg\n let totalDocs: number\n let totalPages: number\n let hasPrevPage: boolean\n let hasNextPage: boolean\n let pagingCounter: number\n const offset = skip || (page - 1) * limit\n\n if (limit === 0) {\n limit = undefined\n }\n\n const { joins, orderBy, selectFields, where } = buildQuery({\n adapter,\n fields,\n locale,\n sort,\n tableName,\n where: whereArg,\n })\n\n const orderedIDMap: Record<number | string, number> = {}\n let orderedIDs: (number | string)[]\n\n const selectDistinctMethods: ChainedMethods = []\n\n if (orderBy) {\n selectDistinctMethods.push({\n args: [() => orderBy.map(({ column, order }) => order(column))],\n method: 'orderBy',\n })\n }\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n collectionSlug,\n depth: 0,\n fields,\n joinQuery,\n joins,\n locale,\n select,\n tableName,\n versions,\n })\n\n selectDistinctMethods.push({ args: [offset], method: 'offset' })\n selectDistinctMethods.push({ args: [limit], method: 'limit' })\n\n const selectDistinctResult = await selectDistinct({\n adapter,\n chainedMethods: selectDistinctMethods,\n db,\n joins,\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult) {\n if (selectDistinctResult.length === 0) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 0,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n }\n } else {\n // set the id in an object for sorting later\n selectDistinctResult.forEach(({ id }, i) => {\n orderedIDMap[id] = i\n })\n orderedIDs = Object.keys(orderedIDMap)\n findManyArgs.where = inArray(adapter.tables[tableName].id, orderedIDs)\n }\n } else {\n findManyArgs.limit = limit\n findManyArgs.offset = offset\n findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column))\n\n if (where) {\n findManyArgs.where = where\n }\n }\n\n const findPromise = db.query[tableName].findMany(findManyArgs)\n\n if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) {\n totalDocs = await adapter.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n totalPages = typeof limit === 'number' && limit !== 0 ? Math.ceil(totalDocs / limit) : 1\n hasPrevPage = page > 1\n hasNextPage = totalPages > page\n pagingCounter = (page - 1) * limit + 1\n }\n\n const rawDocs = await findPromise\n // sort rawDocs from selectQuery\n if (Object.keys(orderedIDMap).length > 0) {\n rawDocs.sort((a, b) => orderedIDMap[a.id] - orderedIDMap[b.id])\n }\n\n if (pagination === false || !totalDocs) {\n totalDocs = rawDocs.length\n totalPages = 1\n pagingCounter = 1\n hasPrevPage = false\n hasNextPage = false\n }\n\n const docs = rawDocs.map((data: TypeWithID) => {\n return transform({\n adapter,\n config: adapter.payload.config,\n data,\n fields,\n joinQuery,\n })\n })\n\n return {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limitArg,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n"],"names":["inArray","buildQuery","selectDistinct","transform","getTransaction","buildFindManyArgs","findMany","find","adapter","collectionSlug","fields","joins","joinQuery","limit","limitArg","locale","page","pagination","req","select","skip","sort","tableName","versions","where","whereArg","db","totalDocs","totalPages","hasPrevPage","hasNextPage","pagingCounter","offset","undefined","orderBy","selectFields","orderedIDMap","orderedIDs","selectDistinctMethods","push","args","map","column","order","method","findManyArgs","depth","selectDistinctResult","chainedMethods","length","docs","nextPage","prevPage","forEach","id","i","Object","keys","tables","findPromise","query","countDistinct","Math","ceil","rawDocs","a","b","data","config","payload"],"mappings":"AAEA,SAASA,OAAO,QAAQ,cAAa;AAKrC,OAAOC,gBAAgB,2BAA0B;AACjD,SAASC,cAAc,QAAQ,+BAA8B;AAC7D,SAASC,SAAS,QAAQ,6BAA4B;AACtD,SAASC,cAAc,QAAQ,iCAAgC;AAC/D,SAASC,iBAAiB,QAAQ,yBAAwB;AAU1D,OAAO,MAAMC,WAAW,eAAeC,KAAK,EAC1CC,OAAO,EACPC,cAAc,EACdC,MAAM,EACNC,OAAOC,SAAS,EAChBC,OAAOC,QAAQ,EACfC,MAAM,EACNC,OAAO,CAAC,EACRC,UAAU,EACVC,GAAG,EACHC,MAAM,EACNC,IAAI,EACJC,IAAI,EACJC,SAAS,EACTC,QAAQ,EACRC,OAAOC,QAAQ,EACV;IACL,MAAMC,KAAK,MAAMtB,eAAeI,SAASU;IACzC,IAAIL,QAAQC;IACZ,IAAIa;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,MAAMC,SAASZ,QAAQ,AAACJ,CAAAA,OAAO,CAAA,IAAKH;IAEpC,IAAIA,UAAU,GAAG;QACfA,QAAQoB;IACV;IAEA,MAAM,EAAEtB,KAAK,EAAEuB,OAAO,EAAEC,YAAY,EAAEX,KAAK,EAAE,GAAGvB,WAAW;QACzDO;QACAE;QACAK;QACAM;QACAC;QACAE,OAAOC;IACT;IAEA,MAAMW,eAAgD,CAAC;IACvD,IAAIC;IAEJ,MAAMC,wBAAwC,EAAE;IAEhD,IAAIJ,SAAS;QACXI,sBAAsBC,IAAI,CAAC;YACzBC,MAAM;gBAAC,IAAMN,QAAQO,GAAG,CAAC,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAKA,MAAMD;aAAS;YAC/DE,QAAQ;QACV;IACF;IAEA,MAAMC,eAAexC,kBAAkB;QACrCG;QACAC;QACAqC,OAAO;QACPpC;QACAE;QACAD;QACAI;QACAI;QACAG;QACAC;IACF;IAEAe,sBAAsBC,IAAI,CAAC;QAAEC,MAAM;YAACR;SAAO;QAAEY,QAAQ;IAAS;IAC9DN,sBAAsBC,IAAI,CAAC;QAAEC,MAAM;YAAC3B;SAAM;QAAE+B,QAAQ;IAAQ;IAE5D,MAAMG,uBAAuB,MAAM7C,eAAe;QAChDM;QACAwC,gBAAgBV;QAChBZ;QACAf;QACAwB;QACAb;QACAE;IACF;IAEA,IAAIuB,sBAAsB;QACxB,IAAIA,qBAAqBE,MAAM,KAAK,GAAG;YACrC,OAAO;gBACLC,MAAM,EAAE;gBACRpB,aAAa;gBACbD,aAAa;gBACbhB;gBACAsC,UAAU;gBACVnC,MAAM;gBACNe,eAAe;gBACfqB,UAAU;gBACVzB,WAAW;gBACXC,YAAY;YACd;QACF,OAAO;YACL,4CAA4C;YAC5CmB,qBAAqBM,OAAO,CAAC,CAAC,EAAEC,EAAE,EAAE,EAAEC;gBACpCnB,YAAY,CAACkB,GAAG,GAAGC;YACrB;YACAlB,aAAamB,OAAOC,IAAI,CAACrB;YACzBS,aAAarB,KAAK,GAAGxB,QAAQQ,QAAQkD,MAAM,CAACpC,UAAU,CAACgC,EAAE,EAAEjB;QAC7D;IACF,OAAO;QACLQ,aAAahC,KAAK,GAAGA;QACrBgC,aAAab,MAAM,GAAGA;QACtBa,aAAaX,OAAO,GAAG,IAAMA,QAAQO,GAAG,CAAC,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAKA,MAAMD;QAEtE,IAAIlB,OAAO;YACTqB,aAAarB,KAAK,GAAGA;QACvB;IACF;IAEA,MAAMmC,cAAcjC,GAAGkC,KAAK,CAACtC,UAAU,CAAChB,QAAQ,CAACuC;IAEjD,IAAI5B,eAAe,SAAUoB,CAAAA,aAAaA,YAAYY,UAAUpC,QAAQ,IAAG,GAAI;QAC7Ec,YAAY,MAAMnB,QAAQqD,aAAa,CAAC;YACtCnC;YACAf;YACAW;YACAE;QACF;QAEAI,aAAa,OAAOf,UAAU,YAAYA,UAAU,IAAIiD,KAAKC,IAAI,CAACpC,YAAYd,SAAS;QACvFgB,cAAcb,OAAO;QACrBc,cAAcF,aAAaZ;QAC3Be,gBAAgB,AAACf,CAAAA,OAAO,CAAA,IAAKH,QAAQ;IACvC;IAEA,MAAMmD,UAAU,MAAML;IACtB,gCAAgC;IAChC,IAAIH,OAAOC,IAAI,CAACrB,cAAca,MAAM,GAAG,GAAG;QACxCe,QAAQ3C,IAAI,CAAC,CAAC4C,GAAGC,IAAM9B,YAAY,CAAC6B,EAAEX,EAAE,CAAC,GAAGlB,YAAY,CAAC8B,EAAEZ,EAAE,CAAC;IAChE;IAEA,IAAIrC,eAAe,SAAS,CAACU,WAAW;QACtCA,YAAYqC,QAAQf,MAAM;QAC1BrB,aAAa;QACbG,gBAAgB;QAChBF,cAAc;QACdC,cAAc;IAChB;IAEA,MAAMoB,OAAOc,QAAQvB,GAAG,CAAC,CAAC0B;QACxB,OAAOhE,UAAU;YACfK;YACA4D,QAAQ5D,QAAQ6D,OAAO,CAACD,MAAM;YAC9BD;YACAzD;YACAE;QACF;IACF;IAEA,OAAO;QACLsC;QACApB;QACAD;QACAhB,OAAOC;QACPqC,UAAUrB,cAAcd,OAAO,IAAI;QACnCA;QACAe;QACAqB,UAAUvB,cAAcb,OAAO,IAAI;QACnCW;QACAC;IACF;AACF,EAAC"}
|
|
@@ -12,6 +12,7 @@ type TraverseFieldArgs = {
|
|
|
12
12
|
joinQuery: JoinQuery;
|
|
13
13
|
joins?: BuildQueryJoinAliases;
|
|
14
14
|
locale?: string;
|
|
15
|
+
parentIsLocalized?: boolean;
|
|
15
16
|
path: string;
|
|
16
17
|
select?: SelectType;
|
|
17
18
|
selectAllOnCurrentLevel?: boolean;
|
|
@@ -20,13 +21,12 @@ type TraverseFieldArgs = {
|
|
|
20
21
|
topLevelArgs: Record<string, unknown>;
|
|
21
22
|
topLevelTableName: string;
|
|
22
23
|
versions?: boolean;
|
|
23
|
-
withinLocalizedField?: boolean;
|
|
24
24
|
withTabledFields: {
|
|
25
25
|
numbers?: boolean;
|
|
26
26
|
rels?: boolean;
|
|
27
27
|
texts?: boolean;
|
|
28
28
|
};
|
|
29
29
|
};
|
|
30
|
-
export declare const traverseFields: ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, fields, joinQuery, joins, locale, path, select, selectAllOnCurrentLevel, selectMode, tablePath, topLevelArgs, topLevelTableName, versions,
|
|
30
|
+
export declare const traverseFields: ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, fields, joinQuery, joins, locale, parentIsLocalized, path, select, selectAllOnCurrentLevel, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields, }: TraverseFieldArgs) => Record<string, unknown>;
|
|
31
31
|
export {};
|
|
32
32
|
//# sourceMappingURL=traverseFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAS,MAAM,SAAS,CAAA;AAMvF,OAAO,KAAK,EAAE,qBAAqB,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AA+CpD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE;QAChB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,cAAc,iQAqBxB,iBAAiB,4BAkoBnB,CAAA"}
|
|
@@ -1,20 +1,59 @@
|
|
|
1
|
-
import { sql } from 'drizzle-orm';
|
|
1
|
+
import { and, asc, desc, eq, or, sql } from 'drizzle-orm';
|
|
2
2
|
import { fieldIsVirtual, fieldShouldBeLocalized } from 'payload/shared';
|
|
3
3
|
import toSnakeCase from 'to-snake-case';
|
|
4
4
|
import buildQuery from '../queries/buildQuery.js';
|
|
5
5
|
import { getTableAlias } from '../queries/getTableAlias.js';
|
|
6
|
+
import { operatorMap } from '../queries/operatorMap.js';
|
|
6
7
|
import { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js';
|
|
7
8
|
import { jsonAggBuildObject } from '../utilities/json.js';
|
|
8
9
|
import { rawConstraint } from '../utilities/rawConstraint.js';
|
|
9
10
|
import { chainMethods } from './chainMethods.js';
|
|
10
|
-
|
|
11
|
+
const flattenAllWherePaths = (where, paths)=>{
|
|
12
|
+
for(const k in where){
|
|
13
|
+
if ([
|
|
14
|
+
'AND',
|
|
15
|
+
'OR'
|
|
16
|
+
].includes(k.toUpperCase())) {
|
|
17
|
+
if (Array.isArray(where[k])) {
|
|
18
|
+
for (const whereField of where[k]){
|
|
19
|
+
flattenAllWherePaths(whereField, paths);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
} else {
|
|
23
|
+
// TODO: explore how to support arrays/relationship querying.
|
|
24
|
+
paths.push(k.split('.').join('_'));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const buildSQLWhere = (where, alias)=>{
|
|
29
|
+
for(const k in where){
|
|
30
|
+
if ([
|
|
31
|
+
'AND',
|
|
32
|
+
'OR'
|
|
33
|
+
].includes(k.toUpperCase())) {
|
|
34
|
+
if (Array.isArray(where[k])) {
|
|
35
|
+
const op = 'AND' === k.toUpperCase() ? and : or;
|
|
36
|
+
const accumulated = [];
|
|
37
|
+
for (const whereField of where[k]){
|
|
38
|
+
accumulated.push(buildSQLWhere(whereField, alias));
|
|
39
|
+
}
|
|
40
|
+
return op(...accumulated);
|
|
41
|
+
}
|
|
42
|
+
} else {
|
|
43
|
+
const payloadOperator = Object.keys(where[k])[0];
|
|
44
|
+
const value = where[k][payloadOperator];
|
|
45
|
+
return operatorMap[payloadOperator](sql.raw(`"${alias}"."${k.split('.').join('_')}"`), value);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, fields, joinQuery = {}, joins, locale, parentIsLocalized = false, path, select, selectAllOnCurrentLevel = false, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields })=>{
|
|
11
50
|
fields.forEach((field)=>{
|
|
12
51
|
if (fieldIsVirtual(field)) {
|
|
13
52
|
return;
|
|
14
53
|
}
|
|
15
54
|
const isFieldLocalized = fieldShouldBeLocalized({
|
|
16
55
|
field,
|
|
17
|
-
parentIsLocalized
|
|
56
|
+
parentIsLocalized
|
|
18
57
|
});
|
|
19
58
|
// handle simple relationship
|
|
20
59
|
if (depth > 0 && (field.type === 'upload' || field.type === 'relationship') && !field.hasMany && typeof field.relationTo === 'string') {
|
|
@@ -76,13 +115,13 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
|
|
|
76
115
|
fields: field.flattenedFields,
|
|
77
116
|
joinQuery,
|
|
78
117
|
locale,
|
|
118
|
+
parentIsLocalized: parentIsLocalized || field.localized,
|
|
79
119
|
path: '',
|
|
80
120
|
select: typeof arraySelect === 'object' ? arraySelect : undefined,
|
|
81
121
|
selectMode,
|
|
82
122
|
tablePath: '',
|
|
83
123
|
topLevelArgs,
|
|
84
124
|
topLevelTableName,
|
|
85
|
-
withinLocalizedField: withinLocalizedField || field.localized,
|
|
86
125
|
withTabledFields
|
|
87
126
|
});
|
|
88
127
|
if (typeof arraySelect === 'object' && withArray.with._locales && Object.keys(withArray.with._locales).length === 1) {
|
|
@@ -160,13 +199,13 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
|
|
|
160
199
|
fields: block.flattenedFields,
|
|
161
200
|
joinQuery,
|
|
162
201
|
locale,
|
|
202
|
+
parentIsLocalized: parentIsLocalized || field.localized,
|
|
163
203
|
path: '',
|
|
164
204
|
select: typeof blockSelect === 'object' ? blockSelect : undefined,
|
|
165
205
|
selectMode: blockSelectMode,
|
|
166
206
|
tablePath: '',
|
|
167
207
|
topLevelArgs,
|
|
168
208
|
topLevelTableName,
|
|
169
|
-
withinLocalizedField: withinLocalizedField || field.localized,
|
|
170
209
|
withTabledFields
|
|
171
210
|
});
|
|
172
211
|
if (typeof blockSelect === 'object' && withBlock.with._locales && Object.keys(withBlock.with._locales.columns).length === 1) {
|
|
@@ -194,6 +233,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
|
|
|
194
233
|
joinQuery,
|
|
195
234
|
joins,
|
|
196
235
|
locale,
|
|
236
|
+
parentIsLocalized: parentIsLocalized || field.localized,
|
|
197
237
|
path: `${path}${field.name}_`,
|
|
198
238
|
select: typeof fieldSelect === 'object' ? fieldSelect : undefined,
|
|
199
239
|
selectAllOnCurrentLevel: selectAllOnCurrentLevel || fieldSelect === true || selectMode === 'exclude' && typeof fieldSelect === 'undefined',
|
|
@@ -202,7 +242,6 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
|
|
|
202
242
|
topLevelArgs,
|
|
203
243
|
topLevelTableName,
|
|
204
244
|
versions,
|
|
205
|
-
withinLocalizedField: withinLocalizedField || field.localized,
|
|
206
245
|
withTabledFields
|
|
207
246
|
});
|
|
208
247
|
break;
|
|
@@ -220,100 +259,181 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
|
|
|
220
259
|
if (joinQuery[joinSchemaPath] === false) {
|
|
221
260
|
break;
|
|
222
261
|
}
|
|
223
|
-
const { limit: limitArg = field.defaultLimit ?? 10, sort = field.defaultSort, where } = joinQuery[joinSchemaPath] || {};
|
|
262
|
+
const { limit: limitArg = field.defaultLimit ?? 10, page, sort = field.defaultSort, where } = joinQuery[joinSchemaPath] || {};
|
|
224
263
|
let limit = limitArg;
|
|
225
264
|
if (limit !== 0) {
|
|
226
265
|
// get an additional document and slice it later to determine if there is a next page
|
|
227
266
|
limit += 1;
|
|
228
267
|
}
|
|
229
|
-
const
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
268
|
+
const columnName = `${path.replaceAll('.', '_')}${field.name}`;
|
|
269
|
+
const db = adapter.drizzle;
|
|
270
|
+
if (Array.isArray(field.collection)) {
|
|
271
|
+
let currentQuery = null;
|
|
272
|
+
const onPath = field.on.split('.').join('_');
|
|
273
|
+
if (Array.isArray(sort)) {
|
|
274
|
+
throw new Error('Not implemented');
|
|
275
|
+
}
|
|
276
|
+
let sanitizedSort = sort;
|
|
277
|
+
if (!sanitizedSort) {
|
|
278
|
+
if (field.collection.some((collection)=>adapter.payload.collections[collection].config.fields.some((f)=>f.type === 'date' && f.name === 'createdAt'))) {
|
|
279
|
+
sanitizedSort = '-createdAt';
|
|
280
|
+
} else {
|
|
281
|
+
sanitizedSort = 'id';
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
const sortOrder = sanitizedSort.startsWith('-') ? desc : asc;
|
|
285
|
+
sanitizedSort = sanitizedSort.replace('-', '');
|
|
286
|
+
const sortPath = sanitizedSort.split('.').join('_');
|
|
287
|
+
const wherePaths = [];
|
|
288
|
+
if (where) {
|
|
289
|
+
flattenAllWherePaths(where, wherePaths);
|
|
290
|
+
}
|
|
291
|
+
for (const collection of field.collection){
|
|
292
|
+
const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(collection));
|
|
293
|
+
const table = adapter.tables[joinCollectionTableName];
|
|
294
|
+
const sortColumn = table[sortPath];
|
|
295
|
+
const selectFields = {
|
|
296
|
+
id: adapter.tables[joinCollectionTableName].id,
|
|
297
|
+
parent: sql`${adapter.tables[joinCollectionTableName][onPath]}`.as(onPath),
|
|
298
|
+
relationTo: sql`${collection}`.as('relationTo'),
|
|
299
|
+
sortPath: sql`${sortColumn ? sortColumn : null}`.as('sortPath')
|
|
300
|
+
};
|
|
301
|
+
// Select for WHERE and Fallback NULL
|
|
302
|
+
for (const path of wherePaths){
|
|
303
|
+
if (adapter.tables[joinCollectionTableName][path]) {
|
|
304
|
+
selectFields[path] = sql`${adapter.tables[joinCollectionTableName][path]}`.as(path);
|
|
305
|
+
// Allow to filter by collectionSlug
|
|
306
|
+
} else if (path !== 'relationTo') {
|
|
307
|
+
selectFields[path] = sql`null`.as(path);
|
|
240
308
|
}
|
|
241
309
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
310
|
+
const query = db.select(selectFields).from(adapter.tables[joinCollectionTableName]);
|
|
311
|
+
if (currentQuery === null) {
|
|
312
|
+
currentQuery = query;
|
|
313
|
+
} else {
|
|
314
|
+
currentQuery = currentQuery.unionAll(query);
|
|
247
315
|
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
and
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
316
|
+
}
|
|
317
|
+
const subQueryAlias = `${columnName}_subquery`;
|
|
318
|
+
let sqlWhere = eq(adapter.tables[currentTableName].id, sql.raw(`"${subQueryAlias}"."${onPath}"`));
|
|
319
|
+
if (where && Object.keys(where).length > 0) {
|
|
320
|
+
sqlWhere = and(sqlWhere, buildSQLWhere(where, subQueryAlias));
|
|
321
|
+
}
|
|
322
|
+
currentQuery = currentQuery.orderBy(sortOrder(sql`"sortPath"`));
|
|
323
|
+
if (page && limit !== 0) {
|
|
324
|
+
const offset = (page - 1) * limit;
|
|
325
|
+
if (offset > 0) {
|
|
326
|
+
currentQuery = currentQuery.offset(offset);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (limit) {
|
|
330
|
+
currentQuery = currentQuery.limit(limit);
|
|
331
|
+
}
|
|
332
|
+
currentArgs.extras[columnName] = sql`${db.select({
|
|
333
|
+
id: jsonAggBuildObject(adapter, {
|
|
334
|
+
id: sql.raw(`"${subQueryAlias}"."id"`),
|
|
335
|
+
relationTo: sql.raw(`"${subQueryAlias}"."relationTo"`)
|
|
336
|
+
})
|
|
337
|
+
}).from(sql`${currentQuery.as(subQueryAlias)}`).where(sqlWhere)}`.as(columnName);
|
|
338
|
+
} else {
|
|
339
|
+
const fields = adapter.payload.collections[field.collection].config.flattenedFields;
|
|
340
|
+
const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(field.collection));
|
|
341
|
+
const joins = [];
|
|
342
|
+
const currentIDColumn = versions ? adapter.tables[currentTableName].parent : adapter.tables[currentTableName].id;
|
|
343
|
+
let joinQueryWhere;
|
|
344
|
+
if (Array.isArray(field.targetField.relationTo)) {
|
|
345
|
+
joinQueryWhere = {
|
|
346
|
+
[field.on]: {
|
|
347
|
+
equals: {
|
|
348
|
+
relationTo: collectionSlug,
|
|
349
|
+
value: rawConstraint(currentIDColumn)
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
} else {
|
|
354
|
+
joinQueryWhere = {
|
|
355
|
+
[field.on]: {
|
|
356
|
+
equals: rawConstraint(currentIDColumn)
|
|
357
|
+
}
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
if (where && Object.keys(where).length) {
|
|
361
|
+
joinQueryWhere = {
|
|
362
|
+
and: [
|
|
363
|
+
joinQueryWhere,
|
|
364
|
+
where
|
|
365
|
+
]
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
const columnName = `${path.replaceAll('.', '_')}${field.name}`;
|
|
369
|
+
const subQueryAlias = `${columnName}_alias`;
|
|
370
|
+
const { newAliasTable } = getTableAlias({
|
|
371
|
+
adapter,
|
|
372
|
+
tableName: joinCollectionTableName
|
|
286
373
|
});
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
374
|
+
const { orderBy, selectFields, where: subQueryWhere } = buildQuery({
|
|
375
|
+
adapter,
|
|
376
|
+
aliasTable: newAliasTable,
|
|
377
|
+
fields,
|
|
378
|
+
joins,
|
|
379
|
+
locale,
|
|
380
|
+
parentIsLocalized,
|
|
381
|
+
selectLocale: true,
|
|
382
|
+
sort,
|
|
383
|
+
tableName: joinCollectionTableName,
|
|
384
|
+
where: joinQueryWhere
|
|
294
385
|
});
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
386
|
+
const chainedMethods = [];
|
|
387
|
+
joins.forEach(({ type, condition, table })=>{
|
|
388
|
+
chainedMethods.push({
|
|
389
|
+
args: [
|
|
390
|
+
table,
|
|
391
|
+
condition
|
|
392
|
+
],
|
|
393
|
+
method: type ?? 'leftJoin'
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
if (page && limit !== 0) {
|
|
397
|
+
const offset = (page - 1) * limit - 1;
|
|
398
|
+
if (offset > 0) {
|
|
399
|
+
chainedMethods.push({
|
|
400
|
+
args: [
|
|
401
|
+
offset
|
|
402
|
+
],
|
|
403
|
+
method: 'offset'
|
|
404
|
+
});
|
|
405
|
+
}
|
|
303
406
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
407
|
+
if (limit !== 0) {
|
|
408
|
+
chainedMethods.push({
|
|
409
|
+
args: [
|
|
410
|
+
limit
|
|
411
|
+
],
|
|
412
|
+
method: 'limit'
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
const db = adapter.drizzle;
|
|
416
|
+
for(let key in selectFields){
|
|
417
|
+
const val = selectFields[key];
|
|
418
|
+
if (val.table && getNameFromDrizzleTable(val.table) === joinCollectionTableName) {
|
|
419
|
+
delete selectFields[key];
|
|
420
|
+
key = key.split('.').pop();
|
|
421
|
+
selectFields[key] = newAliasTable[key];
|
|
314
422
|
}
|
|
315
|
-
}
|
|
316
|
-
|
|
423
|
+
}
|
|
424
|
+
const subQuery = chainMethods({
|
|
425
|
+
methods: chainedMethods,
|
|
426
|
+
query: db.select(selectFields).from(newAliasTable).where(subQueryWhere).orderBy(()=>orderBy.map(({ column, order })=>order(column)))
|
|
427
|
+
}).as(subQueryAlias);
|
|
428
|
+
currentArgs.extras[columnName] = sql`${db.select({
|
|
429
|
+
result: jsonAggBuildObject(adapter, {
|
|
430
|
+
id: sql.raw(`"${subQueryAlias}".id`),
|
|
431
|
+
...selectFields._locale && {
|
|
432
|
+
locale: sql.raw(`"${subQueryAlias}".${selectFields._locale.name}`)
|
|
433
|
+
}
|
|
434
|
+
})
|
|
435
|
+
}).from(sql`${subQuery}`)}`.as(subQueryAlias);
|
|
436
|
+
}
|
|
317
437
|
break;
|
|
318
438
|
}
|
|
319
439
|
case 'point':
|
|
@@ -368,7 +488,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
|
|
|
368
488
|
}
|
|
369
489
|
if (select || selectAllOnCurrentLevel) {
|
|
370
490
|
const fieldPath = `${path}${field.name}`;
|
|
371
|
-
if ((isFieldLocalized ||
|
|
491
|
+
if ((isFieldLocalized || parentIsLocalized) && _locales) {
|
|
372
492
|
_locales.columns[fieldPath] = true;
|
|
373
493
|
} else if (adapter.tables[currentTableName]?.[fieldPath]) {
|
|
374
494
|
currentArgs.columns[fieldPath] = true;
|
|
@@ -383,7 +503,7 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
|
|
|
383
503
|
}
|
|
384
504
|
if (selectAllOnCurrentLevel || selectMode === 'include' && select[field.name] === true || selectMode === 'exclude' && typeof select[field.name] === 'undefined') {
|
|
385
505
|
const fieldPath = `${path}${field.name}`;
|
|
386
|
-
if ((isFieldLocalized ||
|
|
506
|
+
if ((isFieldLocalized || parentIsLocalized) && _locales) {
|
|
387
507
|
_locales.columns[fieldPath] = true;
|
|
388
508
|
} else if (adapter.tables[currentTableName]?.[fieldPath]) {
|
|
389
509
|
currentArgs.columns[fieldPath] = true;
|