@payloadcms/drizzle 4.0.0-internal.2f0d313 → 4.0.0-internal.314c594

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/postgres/init.d.ts.map +1 -1
  2. package/dist/postgres/init.js +6 -0
  3. package/dist/postgres/init.js.map +1 -1
  4. package/dist/queries/getTableColumnFromPath.d.ts +12 -3
  5. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  6. package/dist/queries/getTableColumnFromPath.js +50 -27
  7. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  8. package/dist/queries/parseParams.d.ts.map +1 -1
  9. package/dist/queries/parseParams.js +151 -3
  10. package/dist/queries/parseParams.js.map +1 -1
  11. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  12. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  13. package/dist/queries/resolveRelationshipPath.js +66 -0
  14. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  15. package/dist/schema/build.d.ts.map +1 -1
  16. package/dist/schema/build.js +4 -5
  17. package/dist/schema/build.js.map +1 -1
  18. package/dist/schema/buildRawSchema.spec.js +70 -10
  19. package/dist/schema/buildRawSchema.spec.js.map +1 -1
  20. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  21. package/dist/utilities/buildForeignKeyName.js +3 -2
  22. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  23. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  24. package/dist/utilities/buildIndexName.js +3 -2
  25. package/dist/utilities/buildIndexName.js.map +1 -1
  26. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  27. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  28. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  29. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  30. package/dist/utilities/checkTruncatedIdentifiers.spec.js +301 -0
  31. package/dist/utilities/checkTruncatedIdentifiers.spec.js.map +1 -0
  32. package/dist/utilities/validateIdentifierLength.d.ts +5 -0
  33. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -1
  34. package/dist/utilities/validateIdentifierLength.js +4 -0
  35. package/dist/utilities/validateIdentifierLength.js.map +1 -1
  36. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/postgres/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAUnC,eAAO,MAAM,IAAI,EAAE,IAkClB,CAAA"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/postgres/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAWnC,eAAO,MAAM,IAAI,EAAE,IAqClB,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { buildDrizzleRelations } from '../schema/buildDrizzleRelations.js';
2
2
  import { buildRawSchema } from '../schema/buildRawSchema.js';
3
+ import { checkTruncatedIdentifiers } from '../utilities/checkTruncatedIdentifiers.js';
3
4
  import { executeSchemaHooks } from '../utilities/executeSchemaHooks.js';
4
5
  import { buildDrizzleTable } from './schema/buildDrizzleTable.js';
5
6
  import { setColumnID } from './schema/setColumnID.js';
@@ -14,6 +15,11 @@ export const init = async function init() {
14
15
  type: 'beforeSchemaInit',
15
16
  adapter: this
16
17
  });
18
+ // Warn on identifiers Postgres will truncate past 63 chars; throw only when two collide.
19
+ checkTruncatedIdentifiers({
20
+ adapter: this,
21
+ logWarnings: process.env.NODE_ENV !== 'production'
22
+ });
17
23
  if (this.payload.config.localization) {
18
24
  this.enums.enum__locales = this.pgSchema.enum('_locales', this.payload.config.localization.locales.map(({ code })=>code));
19
25
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/postgres/init.ts"],"sourcesContent":["import type { Init } from 'payload'\n\nimport type { BasePostgresAdapter } from './types.js'\n\nimport { buildDrizzleRelations } from '../schema/buildDrizzleRelations.js'\nimport { buildRawSchema } from '../schema/buildRawSchema.js'\nimport { executeSchemaHooks } from '../utilities/executeSchemaHooks.js'\nimport { buildDrizzleTable } from './schema/buildDrizzleTable.js'\nimport { setColumnID } from './schema/setColumnID.js'\n\nexport const init: Init = async function init(this: BasePostgresAdapter) {\n this.rawRelations = {}\n this.rawTables = {}\n\n buildRawSchema({\n adapter: this,\n setColumnID,\n })\n\n await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })\n\n if (this.payload.config.localization) {\n this.enums.enum__locales = this.pgSchema.enum(\n '_locales',\n this.payload.config.localization.locales.map(({ code }) => code) as [string, ...string[]],\n )\n }\n\n for (const tableName in this.rawTables) {\n buildDrizzleTable({ adapter: this, rawTable: this.rawTables[tableName] })\n }\n\n buildDrizzleRelations({\n adapter: this,\n })\n\n await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })\n\n this.schema = {\n pgSchema: this.pgSchema,\n ...this.tables,\n ...this.relations,\n ...this.enums,\n }\n}\n"],"names":["buildDrizzleRelations","buildRawSchema","executeSchemaHooks","buildDrizzleTable","setColumnID","init","rawRelations","rawTables","adapter","type","payload","config","localization","enums","enum__locales","pgSchema","enum","locales","map","code","tableName","rawTable","schema","tables","relations"],"mappings":"AAIA,SAASA,qBAAqB,QAAQ,qCAAoC;AAC1E,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,kBAAkB,QAAQ,qCAAoC;AACvE,SAASC,iBAAiB,QAAQ,gCAA+B;AACjE,SAASC,WAAW,QAAQ,0BAAyB;AAErD,OAAO,MAAMC,OAAa,eAAeA;IACvC,IAAI,CAACC,YAAY,GAAG,CAAC;IACrB,IAAI,CAACC,SAAS,GAAG,CAAC;IAElBN,eAAe;QACbO,SAAS,IAAI;QACbJ;IACF;IAEA,MAAMF,mBAAmB;QAAEO,MAAM;QAAoBD,SAAS,IAAI;IAAC;IAEnE,IAAI,IAAI,CAACE,OAAO,CAACC,MAAM,CAACC,YAAY,EAAE;QACpC,IAAI,CAACC,KAAK,CAACC,aAAa,GAAG,IAAI,CAACC,QAAQ,CAACC,IAAI,CAC3C,YACA,IAAI,CAACN,OAAO,CAACC,MAAM,CAACC,YAAY,CAACK,OAAO,CAACC,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA;IAE/D;IAEA,IAAK,MAAMC,aAAa,IAAI,CAACb,SAAS,CAAE;QACtCJ,kBAAkB;YAAEK,SAAS,IAAI;YAAEa,UAAU,IAAI,CAACd,SAAS,CAACa,UAAU;QAAC;IACzE;IAEApB,sBAAsB;QACpBQ,SAAS,IAAI;IACf;IAEA,MAAMN,mBAAmB;QAAEO,MAAM;QAAmBD,SAAS,IAAI;IAAC;IAElE,IAAI,CAACc,MAAM,GAAG;QACZP,UAAU,IAAI,CAACA,QAAQ;QACvB,GAAG,IAAI,CAACQ,MAAM;QACd,GAAG,IAAI,CAACC,SAAS;QACjB,GAAG,IAAI,CAACX,KAAK;IACf;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/postgres/init.ts"],"sourcesContent":["import type { Init } from 'payload'\n\nimport type { BasePostgresAdapter } from './types.js'\n\nimport { buildDrizzleRelations } from '../schema/buildDrizzleRelations.js'\nimport { buildRawSchema } from '../schema/buildRawSchema.js'\nimport { checkTruncatedIdentifiers } from '../utilities/checkTruncatedIdentifiers.js'\nimport { executeSchemaHooks } from '../utilities/executeSchemaHooks.js'\nimport { buildDrizzleTable } from './schema/buildDrizzleTable.js'\nimport { setColumnID } from './schema/setColumnID.js'\n\nexport const init: Init = async function init(this: BasePostgresAdapter) {\n this.rawRelations = {}\n this.rawTables = {}\n\n buildRawSchema({\n adapter: this,\n setColumnID,\n })\n\n await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })\n\n // Warn on identifiers Postgres will truncate past 63 chars; throw only when two collide.\n checkTruncatedIdentifiers({ adapter: this, logWarnings: process.env.NODE_ENV !== 'production' })\n\n if (this.payload.config.localization) {\n this.enums.enum__locales = this.pgSchema.enum(\n '_locales',\n this.payload.config.localization.locales.map(({ code }) => code) as [string, ...string[]],\n )\n }\n\n for (const tableName in this.rawTables) {\n buildDrizzleTable({ adapter: this, rawTable: this.rawTables[tableName] })\n }\n\n buildDrizzleRelations({\n adapter: this,\n })\n\n await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })\n\n this.schema = {\n pgSchema: this.pgSchema,\n ...this.tables,\n ...this.relations,\n ...this.enums,\n }\n}\n"],"names":["buildDrizzleRelations","buildRawSchema","checkTruncatedIdentifiers","executeSchemaHooks","buildDrizzleTable","setColumnID","init","rawRelations","rawTables","adapter","type","logWarnings","process","env","NODE_ENV","payload","config","localization","enums","enum__locales","pgSchema","enum","locales","map","code","tableName","rawTable","schema","tables","relations"],"mappings":"AAIA,SAASA,qBAAqB,QAAQ,qCAAoC;AAC1E,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,yBAAyB,QAAQ,4CAA2C;AACrF,SAASC,kBAAkB,QAAQ,qCAAoC;AACvE,SAASC,iBAAiB,QAAQ,gCAA+B;AACjE,SAASC,WAAW,QAAQ,0BAAyB;AAErD,OAAO,MAAMC,OAAa,eAAeA;IACvC,IAAI,CAACC,YAAY,GAAG,CAAC;IACrB,IAAI,CAACC,SAAS,GAAG,CAAC;IAElBP,eAAe;QACbQ,SAAS,IAAI;QACbJ;IACF;IAEA,MAAMF,mBAAmB;QAAEO,MAAM;QAAoBD,SAAS,IAAI;IAAC;IAEnE,yFAAyF;IACzFP,0BAA0B;QAAEO,SAAS,IAAI;QAAEE,aAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK;IAAa;IAE9F,IAAI,IAAI,CAACC,OAAO,CAACC,MAAM,CAACC,YAAY,EAAE;QACpC,IAAI,CAACC,KAAK,CAACC,aAAa,GAAG,IAAI,CAACC,QAAQ,CAACC,IAAI,CAC3C,YACA,IAAI,CAACN,OAAO,CAACC,MAAM,CAACC,YAAY,CAACK,OAAO,CAACC,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA;IAE/D;IAEA,IAAK,MAAMC,aAAa,IAAI,CAACjB,SAAS,CAAE;QACtCJ,kBAAkB;YAAEK,SAAS,IAAI;YAAEiB,UAAU,IAAI,CAAClB,SAAS,CAACiB,UAAU;QAAC;IACzE;IAEAzB,sBAAsB;QACpBS,SAAS,IAAI;IACf;IAEA,MAAMN,mBAAmB;QAAEO,MAAM;QAAmBD,SAAS,IAAI;IAAC;IAElE,IAAI,CAACkB,MAAM,GAAG;QACZP,UAAU,IAAI,CAACA,QAAQ;QACvB,GAAG,IAAI,CAACQ,MAAM;QACd,GAAG,IAAI,CAACC,SAAS;QACjB,GAAG,IAAI,CAACX,KAAK;IACf;AACF,EAAC"}
@@ -24,6 +24,7 @@ type TableColumn = {
24
24
  };
25
25
  type Args = {
26
26
  adapter: DrizzleAdapter;
27
+ /** The current table when a query is being built with an alias, such as inside a subquery. */
27
28
  aliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>;
28
29
  collectionPath: string;
29
30
  columnPrefix?: string;
@@ -32,6 +33,7 @@ type Args = {
32
33
  fields: FlattenedField[];
33
34
  joins: BuildQueryJoinAliases;
34
35
  locale?: string;
36
+ /** The aliased table that owns a field nested inside an array or block. */
35
37
  parentAliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>;
36
38
  parentIsLocalized: boolean;
37
39
  pathSegments: string[];
@@ -49,9 +51,16 @@ type Args = {
49
51
  value: unknown;
50
52
  };
51
53
  /**
52
- * Transforms path to table and column name or to a list of OR columns
53
- * Adds tables to `join`
54
- * @returns TableColumn
54
+ * Resolves a field path to the database table and column that store its value.
55
+ *
56
+ * While walking through relationships, arrays, and blocks, the function adds the joins required
57
+ * to reach the final column. Table aliases are used when the path is resolved inside a subquery.
58
+ *
59
+ * @example
60
+ * Resolving `movies.name` adds joins from the parent collection to its relationship table and then
61
+ * to the `movies` table. The returned column is `movies.name`.
62
+ *
63
+ * @returns The final field and column, plus any extra constraints discovered while resolving it.
55
64
  */
56
65
  export declare const getTableColumnFromPath: ({ adapter, aliasTable, collectionPath, columnPrefix, constraintPath: incomingConstraintPath, constraints, fields, joins, locale: incomingLocale, parentAliasTable, parentIsLocalized, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, selectLocale, tableName, tableNameSuffix, value, }: Args) => TableColumn;
57
66
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"getTableColumnFromPath.d.ts","sourceRoot":"","sources":["../../src/queries/getTableColumnFromPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAS,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,KAAK,EAEV,cAAc,EAIf,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAM7D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAU5D,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAC5D,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;QAClC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KACxB,EAAE,CAAA;IACH,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,KAAK,EAAE,cAAc,CAAA;IACrB,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;CAC7D,CAAA;AAED,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAClE,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IACxE,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AACD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,iUAmBhC,IAAI,KAAG,WA87BT,CAAA"}
1
+ {"version":3,"file":"getTableColumnFromPath.d.ts","sourceRoot":"","sources":["../../src/queries/getTableColumnFromPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,KAAK,EAEV,cAAc,EAIf,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAM7D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAW5D,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAC5D,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;QAClC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KACxB,EAAE,CAAA;IACH,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,KAAK,EAAE,cAAc,CAAA;IACrB,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;CAC7D,CAAA;AAED,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,8FAA8F;IAC9F,UAAU,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAClE,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IACxE,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AACD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,iUAmBhC,IAAI,KAAG,WA08BT,CAAA"}
@@ -10,14 +10,23 @@ import { DistinctSymbol } from '../utilities/rawConstraint.js';
10
10
  import { resolveBlockTableName } from '../utilities/validateExistingBlockIsIdentical.js';
11
11
  import { addJoinTable } from './addJoinTable.js';
12
12
  import { getTableAlias } from './getTableAlias.js';
13
+ import { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRelationshipPath.js';
13
14
  /**
14
- * Transforms path to table and column name or to a list of OR columns
15
- * Adds tables to `join`
16
- * @returns TableColumn
15
+ * Resolves a field path to the database table and column that store its value.
16
+ *
17
+ * While walking through relationships, arrays, and blocks, the function adds the joins required
18
+ * to reach the final column. Table aliases are used when the path is resolved inside a subquery.
19
+ *
20
+ * @example
21
+ * Resolving `movies.name` adds joins from the parent collection to its relationship table and then
22
+ * to the `movies` table. The returned column is `movies.name`.
23
+ *
24
+ * @returns The final field and column, plus any extra constraints discovered while resolving it.
17
25
  */ export const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraintPath: incomingConstraintPath, constraints = [], fields, joins, locale: incomingLocale, parentAliasTable, parentIsLocalized, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, selectLocale, tableName, tableNameSuffix = '', value })=>{
18
26
  const fieldPath = incomingSegments[0];
19
27
  let locale = incomingLocale;
20
28
  const rootTableName = incomingRootTableName || tableName;
29
+ const tableContainingField = parentAliasTable ?? aliasTable ?? adapter.tables[rootTableName];
21
30
  let constraintPath = incomingConstraintPath || '';
22
31
  const field = fields.find((fieldToFind)=>fieldToFind.name === fieldPath);
23
32
  let newTableName = tableName;
@@ -38,6 +47,10 @@ import { getTableAlias } from './getTableAlias.js';
38
47
  const pathSegments = [
39
48
  ...incomingSegments
40
49
  ];
50
+ const fieldStoragePath = appendFieldToStoragePath({
51
+ field,
52
+ path: constraintPath
53
+ });
41
54
  const isFieldLocalized = fieldShouldBeLocalized({
42
55
  field,
43
56
  parentIsLocalized
@@ -57,7 +70,7 @@ import { getTableAlias } from './getTableAlias.js';
57
70
  {
58
71
  newTableName = adapter.tableNameMap.get(`${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`);
59
72
  const arrayParentTable = aliasTable || adapter.tables[tableName];
60
- constraintPath = `${constraintPath}${field.name}.%.`;
73
+ constraintPath = `${fieldStoragePath}.`;
61
74
  if (locale && isFieldLocalized && adapter.payload.config.localization) {
62
75
  const conditions = [
63
76
  eq(arrayParentTable.id, adapter.tables[newTableName]._parentID)
@@ -140,7 +153,6 @@ import { getTableAlias } from './getTableAlias.js';
140
153
  const hasBlockField = field.blocks.some((_block)=>{
141
154
  const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block;
142
155
  newTableName = resolveBlockTableName(block, adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`));
143
- constraintPath = `${constraintPath}${field.name}.%.`;
144
156
  let result;
145
157
  const blockConstraints = [];
146
158
  const blockSelectFields = {};
@@ -170,7 +182,7 @@ import { getTableAlias } from './getTableAlias.js';
170
182
  result = getTableColumnFromPath({
171
183
  adapter,
172
184
  collectionPath,
173
- constraintPath,
185
+ constraintPath: `${fieldStoragePath}.`,
174
186
  constraints: blockConstraints,
175
187
  fields: block.flattenedFields,
176
188
  joins: newJoins,
@@ -236,7 +248,7 @@ import { getTableAlias } from './getTableAlias.js';
236
248
  aliasTable,
237
249
  collectionPath,
238
250
  columnPrefix: `${columnPrefix}${field.name}_`,
239
- constraintPath: `${constraintPath}${field.name}.`,
251
+ constraintPath: `${fieldStoragePath}.`,
240
252
  constraints,
241
253
  fields: field.flattenedFields,
242
254
  joins,
@@ -273,7 +285,7 @@ import { getTableAlias } from './getTableAlias.js';
273
285
  }
274
286
  if (!existingTable) {
275
287
  addJoinTable({
276
- condition: and(eq(adapter.tables[rootTableName].id, aliasRelationshipTable[`${relationshipField.field.relationTo}ID`]), like(aliasRelationshipTable.path, field.on)),
288
+ condition: and(eq(tableContainingField.id, aliasRelationshipTable[`${relationshipField.field.relationTo}ID`]), like(aliasRelationshipTable.path, field.on)),
277
289
  joins,
278
290
  queryPath: `${constraintPath}${field.name}._rels`,
279
291
  table: aliasRelationshipTable
@@ -311,10 +323,10 @@ import { getTableAlias } from './getTableAlias.js';
311
323
  aliasTable: relationshipTable,
312
324
  collectionPath: newCollectionPath,
313
325
  constraints,
314
- // relationshipFields are fields from a different collection => no parentIsLocalized
315
326
  fields: relationshipFields,
316
327
  joins,
317
328
  locale,
329
+ // A join reads from a different collection, so localization does not carry over
318
330
  parentIsLocalized: false,
319
331
  pathSegments: pathSegments.slice(1),
320
332
  rootTableName: relationshipTableName,
@@ -379,7 +391,8 @@ import { getTableAlias } from './getTableAlias.js';
379
391
  fields: adapter.payload.collections[field.collection].config.flattenedFields,
380
392
  joins,
381
393
  locale,
382
- parentIsLocalized: parentIsLocalized || field.localized,
394
+ // A join reads from a different collection, so localization does not carry over
395
+ parentIsLocalized: false,
383
396
  pathSegments: pathSegments.slice(1),
384
397
  selectFields,
385
398
  tableName: newTableName,
@@ -398,14 +411,14 @@ import { getTableAlias } from './getTableAlias.js';
398
411
  columnName = 'number';
399
412
  }
400
413
  newTableName = `${rootTableName}_${tableType}`;
401
- const existingTable = joins.find((e)=>e.queryPath === `${constraintPath}${field.name}`);
414
+ const existingTable = joins.find((e)=>e.queryPath === fieldStoragePath);
402
415
  const table = existingTable?.table ?? getTableAlias({
403
416
  adapter,
404
417
  tableName: newTableName
405
418
  }).newAliasTable;
406
419
  const joinConstraints = [
407
- eq(adapter.tables[rootTableName].id, table.parent),
408
- like(table.path, `${constraintPath}${field.name}`)
420
+ eq(tableContainingField.id, table.parent),
421
+ like(table.path, fieldStoragePath)
409
422
  ];
410
423
  if (locale && isFieldLocalized && adapter.payload.config.localization) {
411
424
  const conditions = [
@@ -417,14 +430,14 @@ import { getTableAlias } from './getTableAlias.js';
417
430
  addJoinTable({
418
431
  condition: and(...conditions),
419
432
  joins,
420
- queryPath: `${constraintPath}${field.name}`,
433
+ queryPath: fieldStoragePath,
421
434
  table
422
435
  });
423
436
  } else {
424
437
  addJoinTable({
425
438
  condition: and(...joinConstraints),
426
439
  joins,
427
- queryPath: `${constraintPath}${field.name}`,
440
+ queryPath: fieldStoragePath,
428
441
  table
429
442
  });
430
443
  }
@@ -442,6 +455,17 @@ import { getTableAlias } from './getTableAlias.js';
442
455
  {
443
456
  const newCollectionPath = pathSegments.slice(1).join('.');
444
457
  if (Array.isArray(field.relationTo) || field.hasMany) {
458
+ const relationshipPath = resolveRelationshipPath({
459
+ adapter,
460
+ fields,
461
+ locale,
462
+ parentIsLocalized,
463
+ path: field.name,
464
+ pathPrefix: constraintPath
465
+ });
466
+ if (!relationshipPath) {
467
+ throw new APIError(`Relationship path could not be resolved: ${collectionPath}`);
468
+ }
445
469
  let relationshipFields;
446
470
  const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`;
447
471
  const existingJoin = joins.find((e)=>e.queryPath === `${constraintPath}.${field.name}`);
@@ -458,18 +482,16 @@ import { getTableAlias } from './getTableAlias.js';
458
482
  aliasRelationshipTable = res.newAliasTable;
459
483
  aliasRelationshipTableName = res.newAliasTableName;
460
484
  }
461
- if (selectLocale && isFieldLocalized && adapter.payload.config.localization) {
485
+ if (selectLocale && relationshipPath.isLocalized && adapter.payload.config.localization) {
462
486
  selectFields._locale = aliasRelationshipTable.locale;
463
487
  }
464
488
  // Join in the relationships table
465
- if (locale && isFieldLocalized && adapter.payload.config.localization) {
489
+ if (relationshipPath.locale && relationshipPath.locale !== 'all' && relationshipPath.isLocalized && adapter.payload.config.localization) {
466
490
  const conditions = [
467
- eq((parentAliasTable || aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent),
468
- like(aliasRelationshipTable.path, `${constraintPath}${field.name}`)
491
+ eq(tableContainingField.id, aliasRelationshipTable.parent),
492
+ like(aliasRelationshipTable.path, relationshipPath.path)
469
493
  ];
470
- if (locale !== 'all') {
471
- conditions.push(eq(aliasRelationshipTable.locale, locale));
472
- }
494
+ conditions.push(eq(aliasRelationshipTable.locale, relationshipPath.locale));
473
495
  addJoinTable({
474
496
  condition: and(...conditions),
475
497
  joins,
@@ -479,7 +501,7 @@ import { getTableAlias } from './getTableAlias.js';
479
501
  } else {
480
502
  // Join in the relationships table
481
503
  addJoinTable({
482
- condition: and(eq((parentAliasTable || aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent), like(aliasRelationshipTable.path, `${constraintPath}${field.name}`)),
504
+ condition: and(eq(tableContainingField.id, aliasRelationshipTable.parent), like(aliasRelationshipTable.path, relationshipPath.path)),
483
505
  joins,
484
506
  queryPath: `${constraintPath}.${field.name}`,
485
507
  table: aliasRelationshipTable
@@ -597,10 +619,10 @@ import { getTableAlias } from './getTableAlias.js';
597
619
  aliasTable: newAliasTable,
598
620
  collectionPath: newCollectionPath,
599
621
  constraints,
600
- // relationshipFields are fields from a different collection => no parentIsLocalized
601
622
  fields: relationshipFields,
602
623
  joins,
603
624
  locale,
625
+ // A relationship jumps to a different collection, so localization does not carry over
604
626
  parentIsLocalized: false,
605
627
  pathSegments: pathSegments.slice(1),
606
628
  rootTableName: newTableName,
@@ -623,7 +645,7 @@ import { getTableAlias } from './getTableAlias.js';
623
645
  tableName: `${rootTableName}${adapter.localesSuffix}`
624
646
  });
625
647
  const condtions = [
626
- eq(aliasLocaleTable._parentID, adapter.tables[rootTableName].id)
648
+ eq(aliasLocaleTable._parentID, tableContainingField.id)
627
649
  ];
628
650
  if (selectLocale) {
629
651
  selectFields._locale = aliasLocaleTable._locale;
@@ -656,7 +678,8 @@ import { getTableAlias } from './getTableAlias.js';
656
678
  fields: adapter.payload.collections[field.relationTo].config.flattenedFields,
657
679
  joins,
658
680
  locale,
659
- parentIsLocalized: parentIsLocalized || field.localized,
681
+ // A relationship jumps to a different collection, so localization does not carry over
682
+ parentIsLocalized: false,
660
683
  pathSegments: pathSegments.slice(1),
661
684
  selectFields,
662
685
  tableName: newTableName,
@@ -707,7 +730,7 @@ import { getTableAlias } from './getTableAlias.js';
707
730
  aliasTable,
708
731
  collectionPath,
709
732
  columnPrefix: `${columnPrefix}${field.name}_`,
710
- constraintPath: `${constraintPath}${field.name}.`,
733
+ constraintPath: `${fieldStoragePath}.`,
711
734
  constraints,
712
735
  fields: field.flattenedFields,
713
736
  joins,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/getTableColumnFromPath.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { SQLiteTableWithColumns } from 'drizzle-orm/sqlite-core'\nimport type {\n FlattenedBlock,\n FlattenedField,\n NumberField,\n RelationshipField,\n TextField,\n} from 'payload'\n\nimport { and, eq, getTableName, like, or, sql } from 'drizzle-orm'\nimport { type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { APIError, getFieldByPath } from 'payload'\nimport { fieldShouldBeLocalized, tabHasName } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\nimport { validate as uuidValidate } from 'uuid'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { isPolymorphicRelationship } from '../utilities/isPolymorphicRelationship.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { jsonBuildObject } from '../utilities/json.js'\nimport { DistinctSymbol } from '../utilities/rawConstraint.js'\nimport { resolveBlockTableName } from '../utilities/validateExistingBlockIsIdentical.js'\nimport { addJoinTable } from './addJoinTable.js'\nimport { getTableAlias } from './getTableAlias.js'\n\ntype Constraint = {\n columnName: string\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n value: unknown\n}\n\ntype TableColumn = {\n columnName?: string\n columns?: {\n idType: 'number' | 'text' | 'uuid'\n rawColumn: SQL<unknown>\n }[]\n constraints: Constraint[]\n field: FlattenedField\n getNotNullColumnByValue?: (val: unknown) => string\n pathSegments?: string[]\n rawColumn?: SQL\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n}\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n collectionPath: string\n columnPrefix?: string\n constraintPath?: string\n constraints?: Constraint[]\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentAliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n parentIsLocalized: boolean\n pathSegments: string[]\n rootTableName?: string\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n /**\n * If creating a new table name for arrays and blocks, this suffix should be appended to the table name\n */\n tableNameSuffix?: string\n /**\n * The raw value of the query before sanitization\n */\n value: unknown\n}\n/**\n * Transforms path to table and column name or to a list of OR columns\n * Adds tables to `join`\n * @returns TableColumn\n */\nexport const getTableColumnFromPath = ({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix = '',\n constraintPath: incomingConstraintPath,\n constraints = [],\n fields,\n joins,\n locale: incomingLocale,\n parentAliasTable,\n parentIsLocalized,\n pathSegments: incomingSegments,\n rootTableName: incomingRootTableName,\n selectFields,\n selectLocale,\n tableName,\n tableNameSuffix = '',\n value,\n}: Args): TableColumn => {\n const fieldPath = incomingSegments[0]\n let locale = incomingLocale\n const rootTableName = incomingRootTableName || tableName\n let constraintPath = incomingConstraintPath || ''\n\n const field = fields.find((fieldToFind) => fieldToFind.name === fieldPath)\n let newTableName = tableName\n\n if (!field && fieldPath === 'id') {\n selectFields.id = adapter.tables[newTableName].id\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: adapter.tables[newTableName],\n }\n }\n\n let localizedPathQuery = false\n if (field) {\n const pathSegments = [...incomingSegments]\n\n const isFieldLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n // If next segment is a locale,\n // we need to take it out and use it as the locale from this point on\n if (isFieldLocalized && adapter.payload.config.localization) {\n const matchedLocale = adapter.payload.config.localization.localeCodes.find(\n (locale) => locale === pathSegments[1],\n )\n\n if (matchedLocale) {\n locale = matchedLocale\n localizedPathQuery = true\n pathSegments.splice(1, 1)\n }\n }\n\n switch (field.type) {\n case 'array': {\n newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const arrayParentTable = aliasTable || adapter.tables[tableName]\n\n constraintPath = `${constraintPath}${field.name}.%.`\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [eq(arrayParentTable.id, adapter.tables[newTableName]._parentID)]\n\n if (selectLocale) {\n selectFields._locale = adapter.tables[newTableName]._locale\n }\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n addJoinTable({\n condition: and(...conditions),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(arrayParentTable.id, adapter.tables[newTableName]._parentID),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentAliasTable: aliasTable,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n }\n case 'blocks': {\n if (adapter.blocksAsJSON) {\n break\n }\n let blockTableColumn: TableColumn\n let newTableName: string\n\n // handle blockType queries\n if (pathSegments[1] === 'blockType') {\n // find the block config using the value\n const blockTypes = Array.isArray(value) ? value : [value]\n blockTypes.forEach((blockType) => {\n const block =\n adapter.payload.blocks[blockType] ??\n (field.blocks.find(\n (block) => typeof block !== 'string' && block.slug === blockType,\n ) as FlattenedBlock | undefined)\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n\n joins.push({\n condition: eq(adapter.tables[tableName].id, newAliasTable._parentID),\n table: newAliasTable,\n })\n constraints.push({\n columnName: '_path',\n table: newAliasTable,\n value: `${constraintPath}${pathSegments[0]}`,\n })\n })\n return {\n constraints,\n field,\n getNotNullColumnByValue: () => 'id',\n table: adapter.tables[tableName],\n }\n }\n\n const hasBlockField = field.blocks.some((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n constraintPath = `${constraintPath}${field.name}.%.`\n\n let result: TableColumn\n const blockConstraints = []\n const blockSelectFields = {}\n\n let blockJoin: BuildQueryJoinAliases[0]\n if (isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n blockJoin = {\n condition: and(...conditions),\n table: adapter.tables[newTableName],\n }\n } else {\n blockJoin = {\n condition: eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n table: adapter.tables[newTableName],\n }\n }\n\n // Create a new reference for nested joins\n const newJoins = [...joins]\n\n try {\n result = getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath,\n constraints: blockConstraints,\n fields: block.flattenedFields,\n joins: newJoins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields: blockSelectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } catch (_) {\n // this is fine, not every block will have the field\n }\n if (!result) {\n return\n }\n blockTableColumn = result\n constraints = constraints.concat(blockConstraints)\n selectFields = { ...selectFields, ...blockSelectFields }\n\n const previousLength = joins.length\n joins.push(blockJoin)\n // Append new joins AFTER the block join to prevent errors with missing FROM clause.\n if (newJoins.length > previousLength) {\n for (let i = previousLength; i < newJoins.length; i++) {\n joins.push(newJoins[i])\n }\n }\n return true\n })\n if (hasBlockField) {\n return {\n columnName: blockTableColumn.columnName,\n constraints,\n field: blockTableColumn.field,\n pathSegments: pathSegments.slice(1),\n rawColumn: blockTableColumn.rawColumn,\n table: blockTableColumn.table,\n }\n }\n break\n }\n\n case 'group': {\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n let condition = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${constraintPath}${field.name}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n\n case 'join': {\n if (Array.isArray(field.collection)) {\n throw new APIError('Not supported')\n }\n\n const newCollectionPath = pathSegments.slice(1).join('.')\n\n if (field.hasMany) {\n const relationTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}._rels`,\n )\n\n const aliasRelationshipTable = (existingTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n const relationshipField = getFieldByPath({\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n path: field.on,\n })\n if (!relationshipField) {\n throw new APIError('Relationship was not found')\n }\n\n if (!existingTable) {\n addJoinTable({\n condition: and(\n eq(\n adapter.tables[rootTableName].id,\n aliasRelationshipTable[\n `${(relationshipField.field as RelationshipField).relationTo as string}ID`\n ],\n ),\n like(aliasRelationshipTable.path, field.on),\n ),\n joins,\n queryPath: `${constraintPath}${field.name}._rels`,\n table: aliasRelationshipTable,\n })\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'parent',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: aliasRelationshipTable,\n }\n }\n\n const relationshipConfig = adapter.payload.collections[field.collection].config\n const relationshipTableName = adapter.tableNameMap.get(\n toSnakeCase(relationshipConfig.slug),\n )\n\n // parent to relationship join table\n const relationshipFields = relationshipConfig.flattenedFields\n\n const existingMainTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )\n\n const relationshipTable = (existingMainTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationshipTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n if (!existingMainTable) {\n joins.push({\n condition: eq(aliasRelationshipTable.parent, relationshipTable.id),\n queryPath: `${constraintPath}${field.name}`,\n table: relationshipTable,\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: relationshipTable,\n collectionPath: newCollectionPath,\n constraints,\n // relationshipFields are fields from a different collection => no parentIsLocalized\n fields: relationshipFields,\n joins,\n locale,\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n rootTableName: relationshipTableName,\n selectFields,\n selectLocale,\n tableName: relationshipTableName,\n value,\n })\n }\n\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.collection].config.slug),\n )\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )?.table\n const newAliasTable =\n existingTable || getTableAlias({ adapter, tableName: newTableName }).newAliasTable\n\n if (!existingTable) {\n const onSegments = field.on.split('.')\n const collectionFlattenedFields =\n adapter.payload.collections[field.collection].config.flattenedFields\n const firstSegField =\n onSegments.length > 1\n ? collectionFlattenedFields.find((f) => f.name === onSegments[0])\n : null\n\n const arrayTableName =\n firstSegField?.type === 'array'\n ? adapter.tableNameMap.get(`${newTableName}_${toSnakeCase(onSegments[0])}`)\n : undefined\n\n if (arrayTableName) {\n // join from main table to array table\n const { newAliasTable: arrayAliasTable } = getTableAlias({\n adapter,\n tableName: arrayTableName,\n })\n\n joins.push({\n condition: eq(\n arrayAliasTable[onSegments.slice(1).join('_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n ),\n queryPath: `${constraintPath}${field.name}._array`,\n table: arrayAliasTable,\n })\n\n joins.push({\n condition: eq(\n (newAliasTable as PgTableWithColumns<any>).id,\n arrayAliasTable._parentID,\n ),\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n } else {\n joins.push({\n condition: eq(\n newAliasTable[field.on.replaceAll('.', '_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n ),\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n }\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: newAliasTable,\n }\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n selectFields,\n tableName: newTableName,\n value,\n })\n\n break\n }\n\n case 'number':\n case 'text': {\n if (field.hasMany) {\n let tableType = 'texts'\n let columnName = 'text'\n if (field.type === 'number') {\n tableType = 'numbers'\n columnName = 'number'\n }\n newTableName = `${rootTableName}_${tableType}`\n\n const existingTable = joins.find((e) => e.queryPath === `${constraintPath}${field.name}`)\n\n const table = (existingTable?.table ??\n getTableAlias({ adapter, tableName: newTableName })\n .newAliasTable) as PgTableWithColumns<any>\n\n const joinConstraints = [\n eq(adapter.tables[rootTableName].id, table.parent),\n like(table.path, `${constraintPath}${field.name}`),\n ]\n\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [...joinConstraints]\n\n if (locale !== 'all') {\n conditions.push(eq(table._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: `${constraintPath}${field.name}`,\n table,\n })\n } else {\n addJoinTable({\n condition: and(...joinConstraints),\n joins,\n queryPath: `${constraintPath}${field.name}`,\n table,\n })\n }\n\n return {\n columnName,\n constraints,\n field,\n table,\n }\n }\n break\n }\n case 'relationship':\n case 'upload': {\n const newCollectionPath = pathSegments.slice(1).join('.')\n\n if (Array.isArray(field.relationTo) || field.hasMany) {\n let relationshipFields: FlattenedField[]\n const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`\n\n const existingJoin = joins.find((e) => e.queryPath === `${constraintPath}.${field.name}`)\n\n let aliasRelationshipTable: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n let aliasRelationshipTableName: string\n if (existingJoin) {\n aliasRelationshipTable = existingJoin.table\n aliasRelationshipTableName = getTableName(existingJoin.table)\n } else {\n const res = getTableAlias({\n adapter,\n tableName: relationTableName,\n })\n aliasRelationshipTable = res.newAliasTable\n aliasRelationshipTableName = res.newAliasTableName\n }\n\n if (selectLocale && isFieldLocalized && adapter.payload.config.localization) {\n selectFields._locale = aliasRelationshipTable.locale\n }\n\n // Join in the relationships table\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(\n (parentAliasTable || aliasTable || adapter.tables[rootTableName]).id,\n aliasRelationshipTable.parent,\n ),\n like(aliasRelationshipTable.path, `${constraintPath}${field.name}`),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(aliasRelationshipTable.locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: `${constraintPath}.${field.name}`,\n table: aliasRelationshipTable,\n })\n } else {\n // Join in the relationships table\n addJoinTable({\n condition: and(\n eq(\n (parentAliasTable || aliasTable || adapter.tables[rootTableName]).id,\n aliasRelationshipTable.parent,\n ),\n like(aliasRelationshipTable.path, `${constraintPath}${field.name}`),\n ),\n joins,\n queryPath: `${constraintPath}.${field.name}`,\n table: aliasRelationshipTable,\n })\n }\n\n selectFields[`${relationTableName}.path`] = aliasRelationshipTable.path\n\n let newAliasTable\n\n if (typeof field.relationTo === 'string') {\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n newTableName = adapter.tableNameMap.get(toSnakeCase(relationshipConfig.slug))\n\n // parent to relationship join table\n relationshipFields = relationshipConfig.flattenedFields\n ;({ newAliasTable } = getTableAlias({ adapter, tableName: newTableName }))\n\n joins.push({\n condition: eq(newAliasTable.id, aliasRelationshipTable[`${field.relationTo}ID`]),\n table: newAliasTable,\n })\n\n if (newCollectionPath === '' || newCollectionPath === 'id') {\n return {\n columnName: `${field.relationTo}ID`,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n }\n } else if (newCollectionPath === 'value') {\n const hasCustomCollectionWithCustomID = field.relationTo.some(\n (relationTo) => !!adapter.payload.collections[relationTo].customIDType,\n )\n\n const columns: TableColumn['columns'] = field.relationTo\n .map((relationTo) => {\n let idType: 'number' | 'text' | 'uuid' = isUUIDType(adapter.idType)\n ? 'uuid'\n : 'number'\n\n const { customIDType } = adapter.payload.collections[relationTo]\n\n if (customIDType) {\n idType = customIDType\n }\n\n const idTypeTextOrUuid = idType === 'text' || idType === 'uuid'\n\n // Do not add the column to OR if we know that it can't match by the type\n // We can't do the same with idType: 'number' because `value` can be from the REST search query params\n if (typeof value === 'number' && idTypeTextOrUuid) {\n return null\n }\n\n if (\n Array.isArray(value) &&\n value.every((val) => typeof val === 'number') &&\n idTypeTextOrUuid\n ) {\n return null\n }\n\n // Do not add the UUID type column if incoming query value doesn't match UUID. If there aren't any collections with\n // a custom ID type, we skip this check\n // We need this because Postgres throws an error if querying by UUID column with a value that isn't a valid UUID.\n if (\n value &&\n !Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID\n ) {\n if (!uuidValidate(value)) {\n return null\n }\n }\n\n if (\n Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID &&\n !value.some((val) => uuidValidate(val))\n ) {\n return null\n }\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n idType,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n }\n })\n .filter(Boolean)\n\n return {\n columns,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n } else if (newCollectionPath === 'relationTo') {\n const relationTo = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n\n return {\n constraints,\n field,\n getNotNullColumnByValue: (val) => {\n const matchedRelation = relationTo.find((relation) => relation === val)\n if (matchedRelation) {\n return `${matchedRelation}ID`\n }\n return undefined\n },\n table: aliasRelationshipTable,\n }\n } else if (isPolymorphicRelationship(value)) {\n const { relationTo } = value\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n constraints,\n field,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n table: aliasRelationshipTable,\n }\n } else if (value === DistinctSymbol) {\n const obj: Record<string, SQL> = {}\n\n field.relationTo.forEach((relationTo) => {\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n obj[relationTo] = sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`)\n })\n\n let rawColumn = jsonBuildObject(adapter, obj)\n if (adapter.name === 'postgres') {\n rawColumn = sql`${rawColumn}::text`\n }\n\n return {\n constraints,\n field,\n rawColumn,\n table: aliasRelationshipTable,\n }\n } else {\n throw new APIError('Not supported')\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraints,\n // relationshipFields are fields from a different collection => no parentIsLocalized\n fields: relationshipFields,\n joins,\n locale,\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n rootTableName: newTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } else if (\n pathSegments.length > 1 &&\n !(pathSegments.length === 2 && pathSegments[1] === 'id')\n ) {\n // simple relationships\n const columnName = `${columnPrefix}${field.name}`\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.relationTo].config.slug),\n )\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n\n if (isFieldLocalized && adapter.payload.config.localization) {\n const { newAliasTable: aliasLocaleTable } = getTableAlias({\n adapter,\n tableName: `${rootTableName}${adapter.localesSuffix}`,\n })\n\n const condtions = [eq(aliasLocaleTable._parentID, adapter.tables[rootTableName].id)]\n\n if (selectLocale) {\n selectFields._locale = aliasLocaleTable._locale\n }\n\n if (locale !== 'all') {\n condtions.push(eq(aliasLocaleTable._locale, locale))\n }\n\n const localesTable = adapter.tables[`${rootTableName}${adapter.localesSuffix}`]\n\n addJoinTable({\n condition: and(...condtions),\n joins,\n table: localesTable,\n })\n\n joins.push({\n condition: eq(localesTable[columnName], newAliasTable.id),\n table: newAliasTable,\n })\n } else {\n joins.push({\n condition: eq(\n newAliasTable.id,\n aliasTable ? aliasTable[columnName] : adapter.tables[tableName][columnName],\n ),\n table: newAliasTable,\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.relationTo].config.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n selectFields,\n tableName: newTableName,\n value,\n })\n }\n\n break\n }\n\n case 'select': {\n if (field.hasMany) {\n const newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const idColumn = (aliasTable ?? adapter.tables[tableName]).id\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(idColumn, adapter.tables[newTableName].parent),\n eq(adapter.tables[newTableName]._locale, locale),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(idColumn, adapter.tables[newTableName].parent),\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return {\n columnName: 'value',\n constraints,\n field,\n table: adapter.tables[newTableName],\n }\n }\n break\n }\n\n case 'tab': {\n if (tabHasName(field)) {\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${constraintPath}${field.name}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix,\n value,\n })\n }\n\n default: {\n // fall through\n break\n }\n }\n\n let newTable = adapter.tables[newTableName]\n\n if (isFieldLocalized && adapter.payload.config.localization) {\n // If localized, we go to localized table and set aliasTable to undefined\n // so it is not picked up below to be used as targetTable\n const parentTable = aliasTable || adapter.tables[tableName]\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n // use an alias because the same query may contain constraints with different locale value\n if (localizedPathQuery) {\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n newTable = newAliasTable\n } else {\n newTable = adapter.tables[newTableName]\n }\n\n let condition = eq(parentTable.id, newTable._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(newTable._locale, locale))\n }\n\n if (selectLocale) {\n selectFields._locale = newTable._locale\n }\n\n addJoinTable({\n condition,\n joins,\n table: newTable,\n })\n\n aliasTable = undefined\n }\n\n const targetTable = aliasTable || newTable\n\n selectFields[`${newTableName}.${columnPrefix}${field.name}`] =\n targetTable[`${columnPrefix}${field.name}`]\n\n return {\n columnName: `${columnPrefix}${field.name}`,\n constraints,\n field,\n pathSegments,\n table: targetTable,\n }\n }\n\n throw new APIError(`Cannot find field for path at ${fieldPath}`)\n}\n"],"names":["and","eq","getTableName","like","sql","APIError","getFieldByPath","fieldShouldBeLocalized","tabHasName","toSnakeCase","validate","uuidValidate","isPolymorphicRelationship","isUUIDType","jsonBuildObject","DistinctSymbol","resolveBlockTableName","addJoinTable","getTableAlias","getTableColumnFromPath","adapter","aliasTable","collectionPath","columnPrefix","constraintPath","incomingConstraintPath","constraints","fields","joins","locale","incomingLocale","parentAliasTable","parentIsLocalized","pathSegments","incomingSegments","rootTableName","incomingRootTableName","selectFields","selectLocale","tableName","tableNameSuffix","value","fieldPath","field","find","fieldToFind","name","newTableName","id","tables","columnName","type","idType","table","localizedPathQuery","isFieldLocalized","payload","config","localization","matchedLocale","localeCodes","splice","tableNameMap","get","arrayParentTable","conditions","_parentID","_locale","push","condition","isOneToMany","flattenedFields","localized","slice","blocksAsJSON","blockTableColumn","blockTypes","Array","isArray","forEach","blockType","block","blocks","slug","newAliasTable","getNotNullColumnByValue","hasBlockField","some","_block","result","blockConstraints","blockSelectFields","blockJoin","newJoins","_","concat","previousLength","length","i","rawColumn","localesSuffix","collection","newCollectionPath","join","hasMany","relationTableName","relationshipsSuffix","existingTable","e","queryPath","aliasRelationshipTable","relationshipField","collections","path","on","relationTo","relationshipConfig","relationshipTableName","relationshipFields","existingMainTable","relationshipTable","parent","onSegments","split","collectionFlattenedFields","firstSegField","f","arrayTableName","undefined","arrayAliasTable","replaceAll","tableType","joinConstraints","existingJoin","aliasRelationshipTableName","res","newAliasTableName","hasCustomCollectionWithCustomID","customIDType","columns","map","idTypeTextOrUuid","every","val","raw","filter","Boolean","matchedRelation","relation","obj","aliasLocaleTable","condtions","localesTable","idColumn","newTable","parentTable","targetTable"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/queries/getTableColumnFromPath.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { SQLiteTableWithColumns } from 'drizzle-orm/sqlite-core'\nimport type {\n FlattenedBlock,\n FlattenedField,\n NumberField,\n RelationshipField,\n TextField,\n} from 'payload'\n\nimport { and, eq, getTableName, like, sql } from 'drizzle-orm'\nimport { type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { APIError, getFieldByPath } from 'payload'\nimport { fieldShouldBeLocalized, tabHasName } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\nimport { validate as uuidValidate } from 'uuid'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { isPolymorphicRelationship } from '../utilities/isPolymorphicRelationship.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { jsonBuildObject } from '../utilities/json.js'\nimport { DistinctSymbol } from '../utilities/rawConstraint.js'\nimport { resolveBlockTableName } from '../utilities/validateExistingBlockIsIdentical.js'\nimport { addJoinTable } from './addJoinTable.js'\nimport { getTableAlias } from './getTableAlias.js'\nimport { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRelationshipPath.js'\n\ntype Constraint = {\n columnName: string\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n value: unknown\n}\n\ntype TableColumn = {\n columnName?: string\n columns?: {\n idType: 'number' | 'text' | 'uuid'\n rawColumn: SQL<unknown>\n }[]\n constraints: Constraint[]\n field: FlattenedField\n getNotNullColumnByValue?: (val: unknown) => string\n pathSegments?: string[]\n rawColumn?: SQL\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n}\n\ntype Args = {\n adapter: DrizzleAdapter\n /** The current table when a query is being built with an alias, such as inside a subquery. */\n aliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n collectionPath: string\n columnPrefix?: string\n constraintPath?: string\n constraints?: Constraint[]\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n /** The aliased table that owns a field nested inside an array or block. */\n parentAliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n parentIsLocalized: boolean\n pathSegments: string[]\n rootTableName?: string\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n /**\n * If creating a new table name for arrays and blocks, this suffix should be appended to the table name\n */\n tableNameSuffix?: string\n /**\n * The raw value of the query before sanitization\n */\n value: unknown\n}\n/**\n * Resolves a field path to the database table and column that store its value.\n *\n * While walking through relationships, arrays, and blocks, the function adds the joins required\n * to reach the final column. Table aliases are used when the path is resolved inside a subquery.\n *\n * @example\n * Resolving `movies.name` adds joins from the parent collection to its relationship table and then\n * to the `movies` table. The returned column is `movies.name`.\n *\n * @returns The final field and column, plus any extra constraints discovered while resolving it.\n */\nexport const getTableColumnFromPath = ({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix = '',\n constraintPath: incomingConstraintPath,\n constraints = [],\n fields,\n joins,\n locale: incomingLocale,\n parentAliasTable,\n parentIsLocalized,\n pathSegments: incomingSegments,\n rootTableName: incomingRootTableName,\n selectFields,\n selectLocale,\n tableName,\n tableNameSuffix = '',\n value,\n}: Args): TableColumn => {\n const fieldPath = incomingSegments[0]\n let locale = incomingLocale\n const rootTableName = incomingRootTableName || tableName\n const tableContainingField = parentAliasTable ?? aliasTable ?? adapter.tables[rootTableName]\n let constraintPath = incomingConstraintPath || ''\n\n const field = fields.find((fieldToFind) => fieldToFind.name === fieldPath)\n let newTableName = tableName\n\n if (!field && fieldPath === 'id') {\n selectFields.id = adapter.tables[newTableName].id\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: adapter.tables[newTableName],\n }\n }\n\n let localizedPathQuery = false\n if (field) {\n const pathSegments = [...incomingSegments]\n const fieldStoragePath = appendFieldToStoragePath({ field, path: constraintPath })\n\n const isFieldLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n // If next segment is a locale,\n // we need to take it out and use it as the locale from this point on\n if (isFieldLocalized && adapter.payload.config.localization) {\n const matchedLocale = adapter.payload.config.localization.localeCodes.find(\n (locale) => locale === pathSegments[1],\n )\n\n if (matchedLocale) {\n locale = matchedLocale\n localizedPathQuery = true\n pathSegments.splice(1, 1)\n }\n }\n\n switch (field.type) {\n case 'array': {\n newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const arrayParentTable = aliasTable || adapter.tables[tableName]\n\n constraintPath = `${fieldStoragePath}.`\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [eq(arrayParentTable.id, adapter.tables[newTableName]._parentID)]\n\n if (selectLocale) {\n selectFields._locale = adapter.tables[newTableName]._locale\n }\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n addJoinTable({\n condition: and(...conditions),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(arrayParentTable.id, adapter.tables[newTableName]._parentID),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentAliasTable: aliasTable,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n }\n case 'blocks': {\n if (adapter.blocksAsJSON) {\n break\n }\n let blockTableColumn: TableColumn\n let newTableName: string\n\n // handle blockType queries\n if (pathSegments[1] === 'blockType') {\n // find the block config using the value\n const blockTypes = Array.isArray(value) ? value : [value]\n blockTypes.forEach((blockType) => {\n const block =\n adapter.payload.blocks[blockType] ??\n (field.blocks.find(\n (block) => typeof block !== 'string' && block.slug === blockType,\n ) as FlattenedBlock | undefined)\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n\n joins.push({\n condition: eq(adapter.tables[tableName].id, newAliasTable._parentID),\n table: newAliasTable,\n })\n constraints.push({\n columnName: '_path',\n table: newAliasTable,\n value: `${constraintPath}${pathSegments[0]}`,\n })\n })\n return {\n constraints,\n field,\n getNotNullColumnByValue: () => 'id',\n table: adapter.tables[tableName],\n }\n }\n\n const hasBlockField = field.blocks.some((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n let result: TableColumn\n const blockConstraints = []\n const blockSelectFields = {}\n\n let blockJoin: BuildQueryJoinAliases[0]\n if (isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n blockJoin = {\n condition: and(...conditions),\n table: adapter.tables[newTableName],\n }\n } else {\n blockJoin = {\n condition: eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n table: adapter.tables[newTableName],\n }\n }\n\n // Create a new reference for nested joins\n const newJoins = [...joins]\n\n try {\n result = getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath: `${fieldStoragePath}.`,\n constraints: blockConstraints,\n fields: block.flattenedFields,\n joins: newJoins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields: blockSelectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } catch (_) {\n // this is fine, not every block will have the field\n }\n if (!result) {\n return\n }\n blockTableColumn = result\n constraints = constraints.concat(blockConstraints)\n selectFields = { ...selectFields, ...blockSelectFields }\n\n const previousLength = joins.length\n joins.push(blockJoin)\n // Append new joins AFTER the block join to prevent errors with missing FROM clause.\n if (newJoins.length > previousLength) {\n for (let i = previousLength; i < newJoins.length; i++) {\n joins.push(newJoins[i])\n }\n }\n return true\n })\n if (hasBlockField) {\n return {\n columnName: blockTableColumn.columnName,\n constraints,\n field: blockTableColumn.field,\n pathSegments: pathSegments.slice(1),\n rawColumn: blockTableColumn.rawColumn,\n table: blockTableColumn.table,\n }\n }\n break\n }\n\n case 'group': {\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n let condition = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${fieldStoragePath}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n\n case 'join': {\n if (Array.isArray(field.collection)) {\n throw new APIError('Not supported')\n }\n\n const newCollectionPath = pathSegments.slice(1).join('.')\n\n if (field.hasMany) {\n const relationTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}._rels`,\n )\n\n const aliasRelationshipTable = (existingTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n const relationshipField = getFieldByPath({\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n path: field.on,\n })\n if (!relationshipField) {\n throw new APIError('Relationship was not found')\n }\n\n if (!existingTable) {\n addJoinTable({\n condition: and(\n eq(\n tableContainingField.id,\n aliasRelationshipTable[\n `${(relationshipField.field as RelationshipField).relationTo as string}ID`\n ],\n ),\n like(aliasRelationshipTable.path, field.on),\n ),\n joins,\n queryPath: `${constraintPath}${field.name}._rels`,\n table: aliasRelationshipTable,\n })\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'parent',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: aliasRelationshipTable,\n }\n }\n\n const relationshipConfig = adapter.payload.collections[field.collection].config\n const relationshipTableName = adapter.tableNameMap.get(\n toSnakeCase(relationshipConfig.slug),\n )\n\n // parent to relationship join table\n const relationshipFields = relationshipConfig.flattenedFields\n\n const existingMainTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )\n\n const relationshipTable = (existingMainTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationshipTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n if (!existingMainTable) {\n joins.push({\n condition: eq(aliasRelationshipTable.parent, relationshipTable.id),\n queryPath: `${constraintPath}${field.name}`,\n table: relationshipTable,\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: relationshipTable,\n collectionPath: newCollectionPath,\n constraints,\n fields: relationshipFields,\n joins,\n locale,\n // A join reads from a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n rootTableName: relationshipTableName,\n selectFields,\n selectLocale,\n tableName: relationshipTableName,\n value,\n })\n }\n\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.collection].config.slug),\n )\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )?.table\n const newAliasTable =\n existingTable || getTableAlias({ adapter, tableName: newTableName }).newAliasTable\n\n if (!existingTable) {\n const onSegments = field.on.split('.')\n const collectionFlattenedFields =\n adapter.payload.collections[field.collection].config.flattenedFields\n const firstSegField =\n onSegments.length > 1\n ? collectionFlattenedFields.find((f) => f.name === onSegments[0])\n : null\n\n const arrayTableName =\n firstSegField?.type === 'array'\n ? adapter.tableNameMap.get(`${newTableName}_${toSnakeCase(onSegments[0])}`)\n : undefined\n\n if (arrayTableName) {\n // join from main table to array table\n const { newAliasTable: arrayAliasTable } = getTableAlias({\n adapter,\n tableName: arrayTableName,\n })\n\n joins.push({\n condition: eq(\n arrayAliasTable[onSegments.slice(1).join('_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n ),\n queryPath: `${constraintPath}${field.name}._array`,\n table: arrayAliasTable,\n })\n\n joins.push({\n condition: eq(\n (newAliasTable as PgTableWithColumns<any>).id,\n arrayAliasTable._parentID,\n ),\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n } else {\n joins.push({\n condition: eq(\n newAliasTable[field.on.replaceAll('.', '_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n ),\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n }\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: newAliasTable,\n }\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n joins,\n locale,\n // A join reads from a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n selectFields,\n tableName: newTableName,\n value,\n })\n\n break\n }\n\n case 'number':\n case 'text': {\n if (field.hasMany) {\n let tableType = 'texts'\n let columnName = 'text'\n if (field.type === 'number') {\n tableType = 'numbers'\n columnName = 'number'\n }\n newTableName = `${rootTableName}_${tableType}`\n\n const existingTable = joins.find((e) => e.queryPath === fieldStoragePath)\n\n const table = (existingTable?.table ??\n getTableAlias({ adapter, tableName: newTableName })\n .newAliasTable) as PgTableWithColumns<any>\n\n const joinConstraints = [\n eq(tableContainingField.id, table.parent),\n like(table.path, fieldStoragePath),\n ]\n\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [...joinConstraints]\n\n if (locale !== 'all') {\n conditions.push(eq(table._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: fieldStoragePath,\n table,\n })\n } else {\n addJoinTable({\n condition: and(...joinConstraints),\n joins,\n queryPath: fieldStoragePath,\n table,\n })\n }\n\n return {\n columnName,\n constraints,\n field,\n table,\n }\n }\n break\n }\n case 'relationship':\n case 'upload': {\n const newCollectionPath = pathSegments.slice(1).join('.')\n\n if (Array.isArray(field.relationTo) || field.hasMany) {\n const relationshipPath = resolveRelationshipPath({\n adapter,\n fields,\n locale,\n parentIsLocalized,\n path: field.name,\n pathPrefix: constraintPath,\n })\n\n if (!relationshipPath) {\n throw new APIError(`Relationship path could not be resolved: ${collectionPath}`)\n }\n\n let relationshipFields: FlattenedField[]\n const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`\n\n const existingJoin = joins.find((e) => e.queryPath === `${constraintPath}.${field.name}`)\n\n let aliasRelationshipTable: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n let aliasRelationshipTableName: string\n if (existingJoin) {\n aliasRelationshipTable = existingJoin.table\n aliasRelationshipTableName = getTableName(existingJoin.table)\n } else {\n const res = getTableAlias({\n adapter,\n tableName: relationTableName,\n })\n aliasRelationshipTable = res.newAliasTable\n aliasRelationshipTableName = res.newAliasTableName\n }\n\n if (selectLocale && relationshipPath.isLocalized && adapter.payload.config.localization) {\n selectFields._locale = aliasRelationshipTable.locale\n }\n\n // Join in the relationships table\n if (\n relationshipPath.locale &&\n relationshipPath.locale !== 'all' &&\n relationshipPath.isLocalized &&\n adapter.payload.config.localization\n ) {\n const conditions = [\n eq(tableContainingField.id, aliasRelationshipTable.parent),\n like(aliasRelationshipTable.path, relationshipPath.path),\n ]\n\n conditions.push(eq(aliasRelationshipTable.locale, relationshipPath.locale))\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: `${constraintPath}.${field.name}`,\n table: aliasRelationshipTable,\n })\n } else {\n // Join in the relationships table\n addJoinTable({\n condition: and(\n eq(tableContainingField.id, aliasRelationshipTable.parent),\n like(aliasRelationshipTable.path, relationshipPath.path),\n ),\n joins,\n queryPath: `${constraintPath}.${field.name}`,\n table: aliasRelationshipTable,\n })\n }\n\n selectFields[`${relationTableName}.path`] = aliasRelationshipTable.path\n\n let newAliasTable\n\n if (typeof field.relationTo === 'string') {\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n newTableName = adapter.tableNameMap.get(toSnakeCase(relationshipConfig.slug))\n\n // parent to relationship join table\n relationshipFields = relationshipConfig.flattenedFields\n ;({ newAliasTable } = getTableAlias({ adapter, tableName: newTableName }))\n\n joins.push({\n condition: eq(newAliasTable.id, aliasRelationshipTable[`${field.relationTo}ID`]),\n table: newAliasTable,\n })\n\n if (newCollectionPath === '' || newCollectionPath === 'id') {\n return {\n columnName: `${field.relationTo}ID`,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n }\n } else if (newCollectionPath === 'value') {\n const hasCustomCollectionWithCustomID = field.relationTo.some(\n (relationTo) => !!adapter.payload.collections[relationTo].customIDType,\n )\n\n const columns: TableColumn['columns'] = field.relationTo\n .map((relationTo) => {\n let idType: 'number' | 'text' | 'uuid' = isUUIDType(adapter.idType)\n ? 'uuid'\n : 'number'\n\n const { customIDType } = adapter.payload.collections[relationTo]\n\n if (customIDType) {\n idType = customIDType\n }\n\n const idTypeTextOrUuid = idType === 'text' || idType === 'uuid'\n\n // Do not add the column to OR if we know that it can't match by the type\n // We can't do the same with idType: 'number' because `value` can be from the REST search query params\n if (typeof value === 'number' && idTypeTextOrUuid) {\n return null\n }\n\n if (\n Array.isArray(value) &&\n value.every((val) => typeof val === 'number') &&\n idTypeTextOrUuid\n ) {\n return null\n }\n\n // Do not add the UUID type column if incoming query value doesn't match UUID. If there aren't any collections with\n // a custom ID type, we skip this check\n // We need this because Postgres throws an error if querying by UUID column with a value that isn't a valid UUID.\n if (\n value &&\n !Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID\n ) {\n if (!uuidValidate(value)) {\n return null\n }\n }\n\n if (\n Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID &&\n !value.some((val) => uuidValidate(val))\n ) {\n return null\n }\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n idType,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n }\n })\n .filter(Boolean)\n\n return {\n columns,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n } else if (newCollectionPath === 'relationTo') {\n const relationTo = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n\n return {\n constraints,\n field,\n getNotNullColumnByValue: (val) => {\n const matchedRelation = relationTo.find((relation) => relation === val)\n if (matchedRelation) {\n return `${matchedRelation}ID`\n }\n return undefined\n },\n table: aliasRelationshipTable,\n }\n } else if (isPolymorphicRelationship(value)) {\n const { relationTo } = value\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n constraints,\n field,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n table: aliasRelationshipTable,\n }\n } else if (value === DistinctSymbol) {\n const obj: Record<string, SQL> = {}\n\n field.relationTo.forEach((relationTo) => {\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n obj[relationTo] = sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`)\n })\n\n let rawColumn = jsonBuildObject(adapter, obj)\n if (adapter.name === 'postgres') {\n rawColumn = sql`${rawColumn}::text`\n }\n\n return {\n constraints,\n field,\n rawColumn,\n table: aliasRelationshipTable,\n }\n } else {\n throw new APIError('Not supported')\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraints,\n fields: relationshipFields,\n joins,\n locale,\n // A relationship jumps to a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n rootTableName: newTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } else if (\n pathSegments.length > 1 &&\n !(pathSegments.length === 2 && pathSegments[1] === 'id')\n ) {\n // simple relationships\n const columnName = `${columnPrefix}${field.name}`\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.relationTo].config.slug),\n )\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n\n if (isFieldLocalized && adapter.payload.config.localization) {\n const { newAliasTable: aliasLocaleTable } = getTableAlias({\n adapter,\n tableName: `${rootTableName}${adapter.localesSuffix}`,\n })\n\n const condtions = [eq(aliasLocaleTable._parentID, tableContainingField.id)]\n\n if (selectLocale) {\n selectFields._locale = aliasLocaleTable._locale\n }\n\n if (locale !== 'all') {\n condtions.push(eq(aliasLocaleTable._locale, locale))\n }\n\n const localesTable = adapter.tables[`${rootTableName}${adapter.localesSuffix}`]\n\n addJoinTable({\n condition: and(...condtions),\n joins,\n table: localesTable,\n })\n\n joins.push({\n condition: eq(localesTable[columnName], newAliasTable.id),\n table: newAliasTable,\n })\n } else {\n joins.push({\n condition: eq(\n newAliasTable.id,\n aliasTable ? aliasTable[columnName] : adapter.tables[tableName][columnName],\n ),\n table: newAliasTable,\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.relationTo].config.flattenedFields,\n joins,\n locale,\n // A relationship jumps to a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n selectFields,\n tableName: newTableName,\n value,\n })\n }\n\n break\n }\n\n case 'select': {\n if (field.hasMany) {\n const newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const idColumn = (aliasTable ?? adapter.tables[tableName]).id\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(idColumn, adapter.tables[newTableName].parent),\n eq(adapter.tables[newTableName]._locale, locale),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(idColumn, adapter.tables[newTableName].parent),\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return {\n columnName: 'value',\n constraints,\n field,\n table: adapter.tables[newTableName],\n }\n }\n break\n }\n\n case 'tab': {\n if (tabHasName(field)) {\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${fieldStoragePath}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix,\n value,\n })\n }\n\n default: {\n // fall through\n break\n }\n }\n\n let newTable = adapter.tables[newTableName]\n\n if (isFieldLocalized && adapter.payload.config.localization) {\n // If localized, we go to localized table and set aliasTable to undefined\n // so it is not picked up below to be used as targetTable\n const parentTable = aliasTable || adapter.tables[tableName]\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n // use an alias because the same query may contain constraints with different locale value\n if (localizedPathQuery) {\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n newTable = newAliasTable\n } else {\n newTable = adapter.tables[newTableName]\n }\n\n let condition = eq(parentTable.id, newTable._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(newTable._locale, locale))\n }\n\n if (selectLocale) {\n selectFields._locale = newTable._locale\n }\n\n addJoinTable({\n condition,\n joins,\n table: newTable,\n })\n\n aliasTable = undefined\n }\n\n const targetTable = aliasTable || newTable\n\n selectFields[`${newTableName}.${columnPrefix}${field.name}`] =\n targetTable[`${columnPrefix}${field.name}`]\n\n return {\n columnName: `${columnPrefix}${field.name}`,\n constraints,\n field,\n pathSegments,\n table: targetTable,\n }\n }\n\n throw new APIError(`Cannot find field for path at ${fieldPath}`)\n}\n"],"names":["and","eq","getTableName","like","sql","APIError","getFieldByPath","fieldShouldBeLocalized","tabHasName","toSnakeCase","validate","uuidValidate","isPolymorphicRelationship","isUUIDType","jsonBuildObject","DistinctSymbol","resolveBlockTableName","addJoinTable","getTableAlias","appendFieldToStoragePath","resolveRelationshipPath","getTableColumnFromPath","adapter","aliasTable","collectionPath","columnPrefix","constraintPath","incomingConstraintPath","constraints","fields","joins","locale","incomingLocale","parentAliasTable","parentIsLocalized","pathSegments","incomingSegments","rootTableName","incomingRootTableName","selectFields","selectLocale","tableName","tableNameSuffix","value","fieldPath","tableContainingField","tables","field","find","fieldToFind","name","newTableName","id","columnName","type","idType","table","localizedPathQuery","fieldStoragePath","path","isFieldLocalized","payload","config","localization","matchedLocale","localeCodes","splice","tableNameMap","get","arrayParentTable","conditions","_parentID","_locale","push","condition","isOneToMany","flattenedFields","localized","slice","blocksAsJSON","blockTableColumn","blockTypes","Array","isArray","forEach","blockType","block","blocks","slug","newAliasTable","getNotNullColumnByValue","hasBlockField","some","_block","result","blockConstraints","blockSelectFields","blockJoin","newJoins","_","concat","previousLength","length","i","rawColumn","localesSuffix","collection","newCollectionPath","join","hasMany","relationTableName","relationshipsSuffix","existingTable","e","queryPath","aliasRelationshipTable","relationshipField","collections","on","relationTo","relationshipConfig","relationshipTableName","relationshipFields","existingMainTable","relationshipTable","parent","onSegments","split","collectionFlattenedFields","firstSegField","f","arrayTableName","undefined","arrayAliasTable","replaceAll","tableType","joinConstraints","relationshipPath","pathPrefix","existingJoin","aliasRelationshipTableName","res","newAliasTableName","isLocalized","hasCustomCollectionWithCustomID","customIDType","columns","map","idTypeTextOrUuid","every","val","raw","filter","Boolean","matchedRelation","relation","obj","aliasLocaleTable","condtions","localesTable","idColumn","newTable","parentTable","targetTable"],"mappings":"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"}