@payloadcms/drizzle 3.91.0-internal.6e3dc85 → 4.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/exports/postgres.d.ts +4 -0
  3. package/dist/exports/postgres.d.ts.map +1 -1
  4. package/dist/exports/postgres.js +4 -0
  5. package/dist/exports/postgres.js.map +1 -1
  6. package/dist/exports/sqlite.d.ts +2 -0
  7. package/dist/exports/sqlite.d.ts.map +1 -1
  8. package/dist/exports/sqlite.js +2 -0
  9. package/dist/exports/sqlite.js.map +1 -1
  10. package/dist/find/buildPolymorphicJoinQuery.d.ts +2 -1
  11. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -1
  12. package/dist/find/buildPolymorphicJoinQuery.js +2 -1
  13. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -1
  14. package/dist/find/buildPolymorphicJoinWhere.d.ts +2 -1
  15. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -1
  16. package/dist/find/buildPolymorphicJoinWhere.js +43 -10
  17. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -1
  18. package/dist/find/createPolymorphicJoinWherePlan.js +3 -2
  19. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -1
  20. package/dist/find/traverseFields.d.ts.map +1 -1
  21. package/dist/find/traverseFields.js +2 -2
  22. package/dist/find/traverseFields.js.map +1 -1
  23. package/dist/index.d.ts +4 -11
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +2 -9
  26. package/dist/index.js.map +1 -1
  27. package/dist/migrate.d.ts.map +1 -1
  28. package/dist/migrate.js +41 -15
  29. package/dist/migrate.js.map +1 -1
  30. package/dist/migrateDown.d.ts +2 -1
  31. package/dist/migrateDown.d.ts.map +1 -1
  32. package/dist/migrateDown.js +17 -4
  33. package/dist/migrateDown.js.map +1 -1
  34. package/dist/migrateFresh.d.ts +4 -2
  35. package/dist/migrateFresh.d.ts.map +1 -1
  36. package/dist/migrateFresh.js +26 -9
  37. package/dist/migrateFresh.js.map +1 -1
  38. package/dist/migrateRefresh.d.ts +2 -1
  39. package/dist/migrateRefresh.d.ts.map +1 -1
  40. package/dist/migrateRefresh.js +20 -5
  41. package/dist/migrateRefresh.js.map +1 -1
  42. package/dist/migrateReset.d.ts +2 -1
  43. package/dist/migrateReset.d.ts.map +1 -1
  44. package/dist/migrateReset.js +18 -4
  45. package/dist/migrateReset.js.map +1 -1
  46. package/dist/migrateStatus.d.ts +2 -1
  47. package/dist/migrateStatus.d.ts.map +1 -1
  48. package/dist/migrateStatus.js +11 -6
  49. package/dist/migrateStatus.js.map +1 -1
  50. package/dist/postgres/predefinedMigrations/localize-status/index.d.ts +11 -0
  51. package/dist/postgres/predefinedMigrations/localize-status/index.d.ts.map +1 -0
  52. package/dist/postgres/predefinedMigrations/localize-status/index.js +296 -0
  53. package/dist/postgres/predefinedMigrations/localize-status/index.js.map +1 -0
  54. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.d.ts +13 -0
  55. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.d.ts.map +1 -0
  56. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.js +51 -0
  57. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.js.map +1 -0
  58. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.d.ts +13 -0
  59. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.d.ts.map +1 -0
  60. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.js +54 -0
  61. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.js.map +1 -0
  62. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  63. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  64. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  65. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  66. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  67. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  68. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  69. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.d.ts.map +1 -1
  70. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.js.map +1 -1
  71. package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
  72. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  73. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  74. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  75. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  76. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  77. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  78. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  79. package/dist/postgres/query/postgresUnaccent.js +40 -0
  80. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  81. package/dist/postgres/schema/geometryColumn.d.ts +2 -2
  82. package/dist/postgres/types.d.ts +13 -2
  83. package/dist/postgres/types.d.ts.map +1 -1
  84. package/dist/postgres/types.js.map +1 -1
  85. package/dist/queries/addJoinTable.d.ts +1 -1
  86. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  87. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  88. package/dist/queries/buildOperatorConstraint.js +63 -0
  89. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  90. package/dist/queries/buildOrderBy.d.ts +1 -1
  91. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  92. package/dist/queries/buildOrderBy.js +6 -1
  93. package/dist/queries/buildOrderBy.js.map +1 -1
  94. package/dist/queries/getTableColumnFromPath.d.ts +12 -3
  95. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  96. package/dist/queries/getTableColumnFromPath.js +52 -29
  97. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  98. package/dist/queries/operatorMap.d.ts +7 -3
  99. package/dist/queries/operatorMap.d.ts.map +1 -1
  100. package/dist/queries/operatorMap.js.map +1 -1
  101. package/dist/queries/parseParams.d.ts.map +1 -1
  102. package/dist/queries/parseParams.js +226 -36
  103. package/dist/queries/parseParams.js.map +1 -1
  104. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  105. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  106. package/dist/queries/resolveRelationshipPath.js +66 -0
  107. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  108. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  109. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  110. package/dist/queries/validateOperatorHandlers.js +30 -0
  111. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  112. package/dist/schema/traverseFields.d.ts.map +1 -1
  113. package/dist/schema/traverseFields.js +2 -1
  114. package/dist/schema/traverseFields.js.map +1 -1
  115. package/dist/sqlite/insert.d.ts.map +1 -1
  116. package/dist/sqlite/insert.js +4 -1
  117. package/dist/sqlite/insert.js.map +1 -1
  118. package/dist/sqlite/predefinedMigrations/localize-status/index.d.ts +28 -0
  119. package/dist/sqlite/predefinedMigrations/localize-status/index.d.ts.map +1 -0
  120. package/dist/sqlite/predefinedMigrations/localize-status/index.js +198 -0
  121. package/dist/sqlite/predefinedMigrations/localize-status/index.js.map +1 -0
  122. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.d.ts +12 -0
  123. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.d.ts.map +1 -0
  124. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.js +24 -0
  125. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.js.map +1 -0
  126. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.d.ts +12 -0
  127. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.d.ts.map +1 -0
  128. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.js +28 -0
  129. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.js.map +1 -0
  130. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  131. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  132. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  133. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  134. package/dist/transform/read/traverseFields.js +2 -2
  135. package/dist/transform/read/traverseFields.js.map +1 -1
  136. package/dist/transform/write/blocks.js +1 -1
  137. package/dist/transform/write/blocks.js.map +1 -1
  138. package/dist/transform/write/traverseFields.js +1 -2
  139. package/dist/transform/write/traverseFields.js.map +1 -1
  140. package/dist/types.d.ts +50 -6
  141. package/dist/types.d.ts.map +1 -1
  142. package/dist/types.js +1 -3
  143. package/dist/types.js.map +1 -1
  144. package/dist/updateJobs.d.ts.map +1 -1
  145. package/dist/updateJobs.js +37 -0
  146. package/dist/updateJobs.js.map +1 -1
  147. package/dist/upsertRow/index.d.ts.map +1 -1
  148. package/dist/upsertRow/index.js +5 -2
  149. package/dist/upsertRow/index.js.map +1 -1
  150. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  151. package/dist/upsertRow/insertArrays.js +2 -1
  152. package/dist/upsertRow/insertArrays.js.map +1 -1
  153. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  154. package/dist/utilities/buildCreateMigration.js +12 -8
  155. package/dist/utilities/buildCreateMigration.js.map +1 -1
  156. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  157. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  158. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  159. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  160. package/dist/utilities/checkTruncatedIdentifiers.d.ts +1 -1
  161. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  162. package/dist/utilities/createSchemaGenerator.js +3 -0
  163. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  164. package/dist/utilities/getPrimaryDb.d.ts +1 -1
  165. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  166. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  167. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  168. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  169. package/dist/utilities/getTransaction.d.ts +1 -1
  170. package/dist/utilities/getTransaction.d.ts.map +1 -1
  171. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -4
  172. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  173. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  174. package/package.json +6 -11
  175. package/dist/exports/types-deprecated.d.ts +0 -150
  176. package/dist/exports/types-deprecated.d.ts.map +0 -1
  177. package/dist/exports/types-deprecated.js +0 -5
  178. package/dist/exports/types-deprecated.js.map +0 -1
  179. package/dist/find/buildPolymorphicJoinQuery.spec.js +0 -384
  180. package/dist/find/buildPolymorphicJoinQuery.spec.js.map +0 -1
  181. package/dist/find/buildPolymorphicJoinWhere.spec.js +0 -762
  182. package/dist/find/buildPolymorphicJoinWhere.spec.js.map +0 -1
  183. package/dist/find/chainMethods.d.ts +0 -20
  184. package/dist/find/chainMethods.d.ts.map +0 -1
  185. package/dist/find/chainMethods.js +0 -16
  186. package/dist/find/chainMethods.js.map +0 -1
  187. package/dist/find/createPolymorphicJoinWherePlan.spec.js +0 -897
  188. package/dist/find/createPolymorphicJoinWherePlan.spec.js.map +0 -1
  189. package/dist/schema/buildRawSchema.spec.js +0 -231
  190. package/dist/schema/buildRawSchema.spec.js.map +0 -1
  191. package/dist/sqlite/createJSONQuery/index.spec.js +0 -28
  192. package/dist/sqlite/createJSONQuery/index.spec.js.map +0 -1
  193. package/dist/updateOne.spec.js +0 -84
  194. package/dist/updateOne.spec.js.map +0 -1
  195. package/dist/upsertRow/conditionalUpdate.spec.js +0 -61
  196. package/dist/upsertRow/conditionalUpdate.spec.js.map +0 -1
  197. package/dist/upsertRow/handleUpsertError.spec.js +0 -42
  198. package/dist/upsertRow/handleUpsertError.spec.js.map +0 -1
  199. package/dist/utilities/checkTruncatedIdentifiers.spec.js +0 -301
  200. package/dist/utilities/checkTruncatedIdentifiers.spec.js.map +0 -1
  201. package/dist/utilities/isValidStringID.spec.js +0 -15
  202. package/dist/utilities/isValidStringID.spec.js.map +0 -1
  203. package/dist/utilities/validateIdentifierLength.spec.js +0 -19
  204. package/dist/utilities/validateIdentifierLength.spec.js.map +0 -1
@@ -7,7 +7,7 @@ import type { SQLiteColumn } from 'drizzle-orm/sqlite-core';
7
7
  import type { Payload, PayloadRequest } from 'payload';
8
8
  import type { ClientConfig, QueryResult } from 'pg';
9
9
  import type { extendDrizzleTable, Operators } from '../index.js';
10
- import type { BuildQueryJoinAliases, DrizzleAdapter, TransactionPg } from '../types.js';
10
+ import type { BuildQueryJoinAliases, DrizzleAdapter, DrizzleOperatorHandler, TransactionPg } from '../types.js';
11
11
  export type BaseExtraConfig = Record<string, (cols: GenericColumns) => ForeignKeyBuilder | IndexBuilder | UniqueConstraintBuilder>;
12
12
  export type RelationMap = Map<string, {
13
13
  localized: boolean;
@@ -80,6 +80,16 @@ type PostgresSchemaHookArgs = {
80
80
  schema: PostgresSchema;
81
81
  };
82
82
  export type PostgresSchemaHook = (args: PostgresSchemaHookArgs) => PostgresSchema | Promise<PostgresSchema>;
83
+ export type PostgresOperatorHandler = {
84
+ /**
85
+ * Postgres extensions that must be installed in the database for this handler to be usable.
86
+ * Checked once, against the database, when the adapter connects.
87
+ */
88
+ requiredExtensions?: string[];
89
+ } & DrizzleOperatorHandler;
90
+ export type PostgresQueryConfig = {
91
+ operatorHandlers?: PostgresOperatorHandler[];
92
+ };
83
93
  export type BasePostgresAdapter = {
84
94
  afterSchemaInit: PostgresSchemaHook[];
85
95
  beforeSchemaInit: PostgresSchemaHook[];
@@ -104,6 +114,7 @@ export type BasePostgresAdapter = {
104
114
  insert: Insert;
105
115
  localesSuffix?: string;
106
116
  logger: DrizzleConfig['logger'];
117
+ operatorHandlers: PostgresOperatorHandler[];
107
118
  operators: Operators;
108
119
  pgSchema: Schema;
109
120
  poolOptions?: ClientConfig;
@@ -131,7 +142,7 @@ export type BasePostgresAdapter = {
131
142
  tablesFilter?: string[];
132
143
  versionsSuffix?: string;
133
144
  } & PostgresDrizzleAdapter;
134
- export type PostgresDrizzleAdapter = Omit<DrizzleAdapter, 'countDistinct' | 'deleteWhere' | 'drizzle' | 'dropDatabase' | 'execute' | 'insert' | 'operators' | 'relations'>;
145
+ export type PostgresDrizzleAdapter = Omit<DrizzleAdapter, 'countDistinct' | 'deleteWhere' | 'drizzle' | 'dropDatabase' | 'execute' | 'insert' | 'operatorHandlers' | 'operators' | 'relations'>;
135
146
  export type IDType = 'integer' | 'numeric' | 'uuid' | 'varchar';
136
147
  export type MigrateUpArgs = {
137
148
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/postgres/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/postgres/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/postgres/types.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type {\n ColumnBaseConfig,\n ColumnDataType,\n DrizzleConfig,\n Relation,\n Relations,\n SQL,\n} from 'drizzle-orm'\nimport type { NodePgDatabase } from 'drizzle-orm/node-postgres'\nimport type {\n ForeignKeyBuilder,\n IndexBuilder,\n PgColumn,\n PgEnum,\n pgEnum,\n PgInsertOnConflictDoUpdateConfig,\n PgSchema,\n PgTableWithColumns,\n UniqueConstraintBuilder,\n} from 'drizzle-orm/pg-core'\nimport type { PgTableFn } from 'drizzle-orm/pg-core/table'\nimport type { SQLiteColumn } from 'drizzle-orm/sqlite-core'\nimport type { Payload, PayloadRequest } from 'payload'\nimport type { ClientConfig, QueryResult } from 'pg'\n\nimport type { extendDrizzleTable, Operators } from '../index.js'\nimport type { BuildQueryJoinAliases, DrizzleAdapter, TransactionPg } from '../types.js'\n\nexport type BaseExtraConfig = Record<\n string,\n (cols: GenericColumns) => ForeignKeyBuilder | IndexBuilder | UniqueConstraintBuilder\n>\n\nexport type RelationMap = Map<\n string,\n {\n localized: boolean\n relationName?: string\n target: string\n type: 'many' | 'one'\n }\n>\n\nexport type GenericColumn = PgColumn<\n ColumnBaseConfig<ColumnDataType, string>,\n Record<string, unknown>\n>\n\nexport type GenericColumns = {\n [x: string]: GenericColumn\n}\n\nexport type GenericTable = PgTableWithColumns<{\n columns: GenericColumns\n dialect: string\n name: string\n schema: string\n}>\n\nexport type GenericEnum = PgEnum<[string, ...string[]]>\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type PostgresDB = NodePgDatabase<Record<string, unknown>>\n\nexport type CountDistinct = (args: {\n column?: PgColumn<any> | SQLiteColumn<any>\n db: PostgresDB | TransactionPg\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: PostgresDB | TransactionPg\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: BasePostgresAdapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: PostgresDB | TransactionPg\n drizzle?: PostgresDB\n raw?: string\n sql?: SQL<unknown>\n}) => Promise<QueryResult<Record<string, T>>>\n\nexport type Insert = (args: {\n db: PostgresDB | TransactionPg\n onConflictDoUpdate?: PgInsertOnConflictDoUpdateConfig<any>\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\nexport type CreateDatabase = (args?: {\n /**\n * Name of a database, defaults to the current one\n */\n name?: string\n /**\n * Schema to create in addition to 'public'. Defaults from adapter.schemaName if exists.\n */\n schemaName?: string\n}) => Promise<boolean>\n\ntype Schema =\n | {\n enum: typeof pgEnum\n table: PgTableFn<string>\n }\n | PgSchema\n\ntype PostgresSchema = {\n enums: Record<string, GenericEnum>\n relations: Record<string, GenericRelation>\n tables: Record<string, PgTableWithColumns<any>>\n}\n\ntype PostgresSchemaHookArgs = {\n adapter: PostgresDrizzleAdapter\n extendTable: typeof extendDrizzleTable\n schema: PostgresSchema\n}\n\nexport type PostgresSchemaHook = (\n args: PostgresSchemaHookArgs,\n) => PostgresSchema | Promise<PostgresSchema>\n\nexport type BasePostgresAdapter = {\n afterSchemaInit: PostgresSchemaHook[]\n beforeSchemaInit: PostgresSchemaHook[]\n countDistinct: CountDistinct\n createDatabase: CreateDatabase\n createExtensions: () => Promise<void>\n defaultDrizzleSnapshot: DrizzleSnapshotJSON\n deleteWhere: DeleteWhere\n disableCreateDatabase: boolean\n drizzle: PostgresDB\n dropDatabase: DropDatabase\n enums: Record<string, GenericEnum>\n execute: Execute<unknown>\n extensions: Record<string, boolean>\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n idType: 'serial' | 'uuid' | 'uuidv7'\n initializing: Promise<void>\n insert: Insert\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n operators: Operators\n pgSchema: Schema\n poolOptions?: ClientConfig\n prodMigrations?: {\n down: (args: MigrateDownArgs) => Promise<void>\n name: string\n up: (args: MigrateUpArgs) => Promise<void>\n }[]\n push: boolean\n readReplicaOptions?: string[]\n rejectInitializing: () => void\n relations: Record<string, GenericRelation>\n relationshipsSuffix?: string\n resolveInitializing: () => void\n schemaName?: string\n sessions: {\n [id: string]: {\n db: PostgresDB | TransactionPg\n reject: () => Promise<void>\n resolve: () => Promise<void>\n }\n }\n tableNameMap: Map<string, string>\n tables: Record<string, GenericTable>\n tablesFilter?: string[]\n versionsSuffix?: string\n} & PostgresDrizzleAdapter\n\nexport type PostgresDrizzleAdapter = Omit<\n DrizzleAdapter,\n | 'countDistinct'\n | 'deleteWhere'\n | 'drizzle'\n | 'dropDatabase'\n | 'execute'\n | 'insert'\n | 'operators'\n | 'relations'\n>\n\nexport type IDType = 'integer' | 'numeric' | 'uuid' | 'varchar'\n\nexport type MigrateUpArgs = {\n /**\n * The Postgres Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const { rows: posts } = await db.execute(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: PostgresDB\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n\nexport type MigrateDownArgs = {\n /**\n * The Postgres Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateDownArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const { rows: posts } = await db.execute(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: PostgresDB\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateDownArgs } from '@payloadcms/db-postgres'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n"],"names":[],"mappings":"AAoOA,WA8BC"}
1
+ {"version":3,"sources":["../../src/postgres/types.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type {\n ColumnBaseConfig,\n ColumnDataType,\n DrizzleConfig,\n Relation,\n Relations,\n SQL,\n} from 'drizzle-orm'\nimport type { NodePgDatabase } from 'drizzle-orm/node-postgres'\nimport type {\n ForeignKeyBuilder,\n IndexBuilder,\n PgColumn,\n PgEnum,\n pgEnum,\n PgInsertOnConflictDoUpdateConfig,\n PgSchema,\n PgTableWithColumns,\n UniqueConstraintBuilder,\n} from 'drizzle-orm/pg-core'\nimport type { PgTableFn } from 'drizzle-orm/pg-core/table'\nimport type { SQLiteColumn } from 'drizzle-orm/sqlite-core'\nimport type { Payload, PayloadRequest } from 'payload'\nimport type { ClientConfig, QueryResult } from 'pg'\n\nimport type { extendDrizzleTable, Operators } from '../index.js'\nimport type {\n BuildQueryJoinAliases,\n DrizzleAdapter,\n DrizzleOperatorHandler,\n TransactionPg,\n} from '../types.js'\n\nexport type BaseExtraConfig = Record<\n string,\n (cols: GenericColumns) => ForeignKeyBuilder | IndexBuilder | UniqueConstraintBuilder\n>\n\nexport type RelationMap = Map<\n string,\n {\n localized: boolean\n relationName?: string\n target: string\n type: 'many' | 'one'\n }\n>\n\nexport type GenericColumn = PgColumn<\n ColumnBaseConfig<ColumnDataType, string>,\n Record<string, unknown>\n>\n\nexport type GenericColumns = {\n [x: string]: GenericColumn\n}\n\nexport type GenericTable = PgTableWithColumns<{\n columns: GenericColumns\n dialect: string\n name: string\n schema: string\n}>\n\nexport type GenericEnum = PgEnum<[string, ...string[]]>\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type PostgresDB = NodePgDatabase<Record<string, unknown>>\n\nexport type CountDistinct = (args: {\n column?: PgColumn<any> | SQLiteColumn<any>\n db: PostgresDB | TransactionPg\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: PostgresDB | TransactionPg\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: BasePostgresAdapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: PostgresDB | TransactionPg\n drizzle?: PostgresDB\n raw?: string\n sql?: SQL<unknown>\n}) => Promise<QueryResult<Record<string, T>>>\n\nexport type Insert = (args: {\n db: PostgresDB | TransactionPg\n onConflictDoUpdate?: PgInsertOnConflictDoUpdateConfig<any>\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\nexport type CreateDatabase = (args?: {\n /**\n * Name of a database, defaults to the current one\n */\n name?: string\n /**\n * Schema to create in addition to 'public'. Defaults from adapter.schemaName if exists.\n */\n schemaName?: string\n}) => Promise<boolean>\n\ntype Schema =\n | {\n enum: typeof pgEnum\n table: PgTableFn<string>\n }\n | PgSchema\n\ntype PostgresSchema = {\n enums: Record<string, GenericEnum>\n relations: Record<string, GenericRelation>\n tables: Record<string, PgTableWithColumns<any>>\n}\n\ntype PostgresSchemaHookArgs = {\n adapter: PostgresDrizzleAdapter\n extendTable: typeof extendDrizzleTable\n schema: PostgresSchema\n}\n\nexport type PostgresSchemaHook = (\n args: PostgresSchemaHookArgs,\n) => PostgresSchema | Promise<PostgresSchema>\n\nexport type PostgresOperatorHandler = {\n /**\n * Postgres extensions that must be installed in the database for this handler to be usable.\n * Checked once, against the database, when the adapter connects.\n */\n requiredExtensions?: string[]\n} & DrizzleOperatorHandler\n\nexport type PostgresQueryConfig = {\n operatorHandlers?: PostgresOperatorHandler[]\n}\n\nexport type BasePostgresAdapter = {\n afterSchemaInit: PostgresSchemaHook[]\n beforeSchemaInit: PostgresSchemaHook[]\n countDistinct: CountDistinct\n createDatabase: CreateDatabase\n createExtensions: () => Promise<void>\n defaultDrizzleSnapshot: DrizzleSnapshotJSON\n deleteWhere: DeleteWhere\n disableCreateDatabase: boolean\n drizzle: PostgresDB\n dropDatabase: DropDatabase\n enums: Record<string, GenericEnum>\n execute: Execute<unknown>\n extensions: Record<string, boolean>\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n idType: 'serial' | 'uuid' | 'uuidv7'\n initializing: Promise<void>\n insert: Insert\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n operatorHandlers: PostgresOperatorHandler[]\n operators: Operators\n pgSchema: Schema\n poolOptions?: ClientConfig\n prodMigrations?: {\n down: (args: MigrateDownArgs) => Promise<void>\n name: string\n up: (args: MigrateUpArgs) => Promise<void>\n }[]\n push: boolean\n readReplicaOptions?: string[]\n rejectInitializing: () => void\n relations: Record<string, GenericRelation>\n relationshipsSuffix?: string\n resolveInitializing: () => void\n schemaName?: string\n sessions: {\n [id: string]: {\n db: PostgresDB | TransactionPg\n reject: () => Promise<void>\n resolve: () => Promise<void>\n }\n }\n tableNameMap: Map<string, string>\n tables: Record<string, GenericTable>\n tablesFilter?: string[]\n versionsSuffix?: string\n} & PostgresDrizzleAdapter\n\nexport type PostgresDrizzleAdapter = Omit<\n DrizzleAdapter,\n | 'countDistinct'\n | 'deleteWhere'\n | 'drizzle'\n | 'dropDatabase'\n | 'execute'\n | 'insert'\n | 'operatorHandlers'\n | 'operators'\n | 'relations'\n>\n\nexport type IDType = 'integer' | 'numeric' | 'uuid' | 'varchar'\n\nexport type MigrateUpArgs = {\n /**\n * The Postgres Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const { rows: posts } = await db.execute(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: PostgresDB\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n\nexport type MigrateDownArgs = {\n /**\n * The Postgres Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateDownArgs, sql } from '@payloadcms/db-postgres'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const { rows: posts } = await db.execute(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: PostgresDB\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateDownArgs } from '@payloadcms/db-postgres'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n"],"names":[],"mappings":"AAuPA,WA8BC"}
@@ -8,6 +8,6 @@ export declare const addJoinTable: ({ type, condition, isOneToMany, joins, query
8
8
  joins: BuildQueryJoinAliases;
9
9
  queryPath?: string;
10
10
  table: GenericTable | PgTableWithColumns<any>;
11
- type?: "innerJoin" | "leftJoin" | "rightJoin";
11
+ type?: 'innerJoin' | 'leftJoin' | 'rightJoin';
12
12
  }) => void;
13
13
  //# sourceMappingURL=addJoinTable.d.ts.map
@@ -0,0 +1,22 @@
1
+ import type { Column, SQL } from 'drizzle-orm';
2
+ import type { FlattenedField, Operator } from 'payload';
3
+ import type { DrizzleAdapter } from '../types.js';
4
+ import type { DrizzleResolvedOperator } from './operatorMap.js';
5
+ type Args = {
6
+ adapter: DrizzleAdapter;
7
+ column: Column | SQL;
8
+ field: FlattenedField;
9
+ locale?: string;
10
+ originalOperator: Operator;
11
+ path: string;
12
+ resolvedOperator: DrizzleResolvedOperator;
13
+ value: unknown;
14
+ };
15
+ /**
16
+ * Builds the final, user-facing SQL comparison for one query leaf: applies every matching
17
+ * operand-transform handler in configuration order, then either calls the single matching
18
+ * replacement handler or falls back to `adapter.operators[resolvedOperator]`.
19
+ */
20
+ export declare const buildOperatorConstraint: (args: Args) => SQL;
21
+ export {};
22
+ //# sourceMappingURL=buildOperatorConstraint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildOperatorConstraint.d.ts","sourceRoot":"","sources":["../../src/queries/buildOperatorConstraint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvD,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE/D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;IACpB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,QAAQ,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,uBAAuB,CAAA;IACzC,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAsBD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,SAAU,IAAI,KAAG,GAuDpD,CAAA"}
@@ -0,0 +1,63 @@
1
+ import { APIError } from 'payload';
2
+ const isTransformHandler = (handler)=>typeof handler.transformOperands === 'function';
3
+ const isReplacementHandler = (handler)=>typeof handler.build === 'function';
4
+ const handlerMatches = (handler, args)=>{
5
+ if (!handler.operators.includes(args.resolvedOperator)) {
6
+ return false;
7
+ }
8
+ if (handler.fieldTypes && !handler.fieldTypes.includes(args.field.type)) {
9
+ return false;
10
+ }
11
+ return true;
12
+ };
13
+ /**
14
+ * Builds the final, user-facing SQL comparison for one query leaf: applies every matching
15
+ * operand-transform handler in configuration order, then either calls the single matching
16
+ * replacement handler or falls back to `adapter.operators[resolvedOperator]`.
17
+ */ export const buildOperatorConstraint = (args)=>{
18
+ const { adapter, field, locale, originalOperator, path, resolvedOperator } = args;
19
+ const matchingHandlers = (adapter.operatorHandlers ?? []).filter((handler)=>handlerMatches(handler, args));
20
+ const context = {
21
+ adapter,
22
+ column: args.column,
23
+ field,
24
+ locale,
25
+ originalOperator,
26
+ path,
27
+ resolvedOperator,
28
+ storage: 'column',
29
+ value: args.value
30
+ };
31
+ for (const handler of matchingHandlers.filter(isTransformHandler)){
32
+ let result;
33
+ try {
34
+ result = handler.transformOperands({
35
+ ...context
36
+ });
37
+ } catch (error) {
38
+ throw new Error(`Operator handler "${handler.name}" threw while transforming operands for the "${resolvedOperator}" operator at path "${path}".`, {
39
+ cause: error
40
+ });
41
+ }
42
+ if (!result || typeof result !== 'object' || !('column' in result) || !('value' in result)) {
43
+ throw new APIError(`Operator handler "${handler.name}" returned an invalid operand transform for the "${resolvedOperator}" operator at path "${path}". Expected an object with "column" and "value" properties.`);
44
+ }
45
+ context.column = result.column;
46
+ context.value = result.value;
47
+ }
48
+ const replacementHandler = matchingHandlers.find(isReplacementHandler);
49
+ if (replacementHandler) {
50
+ try {
51
+ return replacementHandler.build({
52
+ ...context
53
+ });
54
+ } catch (error) {
55
+ throw new Error(`Operator handler "${replacementHandler.name}" threw while building the "${resolvedOperator}" comparison at path "${path}".`, {
56
+ cause: error
57
+ });
58
+ }
59
+ }
60
+ return adapter.operators[resolvedOperator](context.column, context.value);
61
+ };
62
+
63
+ //# sourceMappingURL=buildOperatorConstraint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/queries/buildOperatorConstraint.ts"],"sourcesContent":["import type { Column, SQL } from 'drizzle-orm'\nimport type { FlattenedField, Operator } from 'payload'\n\nimport { APIError } from 'payload'\n\nimport type {\n DrizzleAdapter,\n DrizzleOperandTransformHandler,\n DrizzleOperatorHandler,\n DrizzleOperatorHandlerContext,\n DrizzleOperatorReplacementHandler,\n} from '../types.js'\nimport type { DrizzleResolvedOperator } from './operatorMap.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n column: Column | SQL\n field: FlattenedField\n locale?: string\n originalOperator: Operator\n path: string\n resolvedOperator: DrizzleResolvedOperator\n value: unknown\n}\n\nconst isTransformHandler = (\n handler: DrizzleOperatorHandler,\n): handler is DrizzleOperandTransformHandler => typeof handler.transformOperands === 'function'\n\nconst isReplacementHandler = (\n handler: DrizzleOperatorHandler,\n): handler is DrizzleOperatorReplacementHandler => typeof handler.build === 'function'\n\nconst handlerMatches = (handler: DrizzleOperatorHandler, args: Args): boolean => {\n if (!handler.operators.includes(args.resolvedOperator)) {\n return false\n }\n\n if (handler.fieldTypes && !handler.fieldTypes.includes(args.field.type)) {\n return false\n }\n\n return true\n}\n\n/**\n * Builds the final, user-facing SQL comparison for one query leaf: applies every matching\n * operand-transform handler in configuration order, then either calls the single matching\n * replacement handler or falls back to `adapter.operators[resolvedOperator]`.\n */\nexport const buildOperatorConstraint = (args: Args): SQL => {\n const { adapter, field, locale, originalOperator, path, resolvedOperator } = args\n\n const matchingHandlers = (adapter.operatorHandlers ?? []).filter((handler) =>\n handlerMatches(handler, args),\n )\n\n const context: DrizzleOperatorHandlerContext = {\n adapter,\n column: args.column,\n field,\n locale,\n originalOperator,\n path,\n resolvedOperator,\n storage: 'column',\n value: args.value,\n }\n\n for (const handler of matchingHandlers.filter(isTransformHandler)) {\n let result: { column: Column | SQL; value: unknown }\n\n try {\n result = handler.transformOperands({ ...context })\n } catch (error) {\n throw new Error(\n `Operator handler \"${handler.name}\" threw while transforming operands for the \"${resolvedOperator}\" operator at path \"${path}\".`,\n { cause: error },\n )\n }\n\n if (!result || typeof result !== 'object' || !('column' in result) || !('value' in result)) {\n throw new APIError(\n `Operator handler \"${handler.name}\" returned an invalid operand transform for the \"${resolvedOperator}\" operator at path \"${path}\". Expected an object with \"column\" and \"value\" properties.`,\n )\n }\n\n context.column = result.column\n context.value = result.value\n }\n\n const replacementHandler = matchingHandlers.find(isReplacementHandler)\n\n if (replacementHandler) {\n try {\n return replacementHandler.build({ ...context })\n } catch (error) {\n throw new Error(\n `Operator handler \"${replacementHandler.name}\" threw while building the \"${resolvedOperator}\" comparison at path \"${path}\".`,\n { cause: error },\n )\n }\n }\n\n return adapter.operators[resolvedOperator](context.column, context.value)\n}\n"],"names":["APIError","isTransformHandler","handler","transformOperands","isReplacementHandler","build","handlerMatches","args","operators","includes","resolvedOperator","fieldTypes","field","type","buildOperatorConstraint","adapter","locale","originalOperator","path","matchingHandlers","operatorHandlers","filter","context","column","storage","value","result","error","Error","name","cause","replacementHandler","find"],"mappings":"AAGA,SAASA,QAAQ,QAAQ,UAAS;AAsBlC,MAAMC,qBAAqB,CACzBC,UAC8C,OAAOA,QAAQC,iBAAiB,KAAK;AAErF,MAAMC,uBAAuB,CAC3BF,UACiD,OAAOA,QAAQG,KAAK,KAAK;AAE5E,MAAMC,iBAAiB,CAACJ,SAAiCK;IACvD,IAAI,CAACL,QAAQM,SAAS,CAACC,QAAQ,CAACF,KAAKG,gBAAgB,GAAG;QACtD,OAAO;IACT;IAEA,IAAIR,QAAQS,UAAU,IAAI,CAACT,QAAQS,UAAU,CAACF,QAAQ,CAACF,KAAKK,KAAK,CAACC,IAAI,GAAG;QACvE,OAAO;IACT;IAEA,OAAO;AACT;AAEA;;;;CAIC,GACD,OAAO,MAAMC,0BAA0B,CAACP;IACtC,MAAM,EAAEQ,OAAO,EAAEH,KAAK,EAAEI,MAAM,EAAEC,gBAAgB,EAAEC,IAAI,EAAER,gBAAgB,EAAE,GAAGH;IAE7E,MAAMY,mBAAmB,AAACJ,CAAAA,QAAQK,gBAAgB,IAAI,EAAE,AAAD,EAAGC,MAAM,CAAC,CAACnB,UAChEI,eAAeJ,SAASK;IAG1B,MAAMe,UAAyC;QAC7CP;QACAQ,QAAQhB,KAAKgB,MAAM;QACnBX;QACAI;QACAC;QACAC;QACAR;QACAc,SAAS;QACTC,OAAOlB,KAAKkB,KAAK;IACnB;IAEA,KAAK,MAAMvB,WAAWiB,iBAAiBE,MAAM,CAACpB,oBAAqB;QACjE,IAAIyB;QAEJ,IAAI;YACFA,SAASxB,QAAQC,iBAAiB,CAAC;gBAAE,GAAGmB,OAAO;YAAC;QAClD,EAAE,OAAOK,OAAO;YACd,MAAM,IAAIC,MACR,CAAC,kBAAkB,EAAE1B,QAAQ2B,IAAI,CAAC,6CAA6C,EAAEnB,iBAAiB,oBAAoB,EAAEQ,KAAK,EAAE,CAAC,EAChI;gBAAEY,OAAOH;YAAM;QAEnB;QAEA,IAAI,CAACD,UAAU,OAAOA,WAAW,YAAY,CAAE,CAAA,YAAYA,MAAK,KAAM,CAAE,CAAA,WAAWA,MAAK,GAAI;YAC1F,MAAM,IAAI1B,SACR,CAAC,kBAAkB,EAAEE,QAAQ2B,IAAI,CAAC,iDAAiD,EAAEnB,iBAAiB,oBAAoB,EAAEQ,KAAK,2DAA2D,CAAC;QAEjM;QAEAI,QAAQC,MAAM,GAAGG,OAAOH,MAAM;QAC9BD,QAAQG,KAAK,GAAGC,OAAOD,KAAK;IAC9B;IAEA,MAAMM,qBAAqBZ,iBAAiBa,IAAI,CAAC5B;IAEjD,IAAI2B,oBAAoB;QACtB,IAAI;YACF,OAAOA,mBAAmB1B,KAAK,CAAC;gBAAE,GAAGiB,OAAO;YAAC;QAC/C,EAAE,OAAOK,OAAO;YACd,MAAM,IAAIC,MACR,CAAC,kBAAkB,EAAEG,mBAAmBF,IAAI,CAAC,4BAA4B,EAAEnB,iBAAiB,sBAAsB,EAAEQ,KAAK,EAAE,CAAC,EAC5H;gBAAEY,OAAOH;YAAM;QAEnB;IACF;IAEA,OAAOZ,QAAQP,SAAS,CAACE,iBAAiB,CAACY,QAAQC,MAAM,EAAED,QAAQG,KAAK;AAC1E,EAAC"}
@@ -17,6 +17,6 @@ type Args = {
17
17
  /**
18
18
  * Gets the order by column and direction constructed from the sort argument adds the column to the select fields and joins if necessary
19
19
  */
20
- export declare const buildOrderBy: ({ adapter, aliasTable, fields, joins, locale, parentIsLocalized, rawSort, selectFields, sort, tableName, }: Args) => BuildQueryResult["orderBy"];
20
+ export declare const buildOrderBy: ({ adapter, aliasTable, fields, joins, locale, parentIsLocalized, rawSort, selectFields, sort, tableName, }: Args) => BuildQueryResult['orderBy'];
21
21
  export {};
22
22
  //# sourceMappingURL=buildOrderBy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildOrderBy.d.ts","sourceRoot":"","sources":["../../src/queries/buildOrderBy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAInD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAK9E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,+GAWtB,IAAI,KAAG,gBAAgB,CAAC,SAAS,CA2EnC,CAAA"}
1
+ {"version":3,"file":"buildOrderBy.d.ts","sourceRoot":"","sources":["../../src/queries/buildOrderBy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAInD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAK9E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,+GAWtB,IAAI,KAAG,gBAAgB,CAAC,SAAS,CAgFnC,CAAA"}
@@ -59,7 +59,12 @@ import { getTableColumnFromPath } from './getTableColumnFromPath.js';
59
59
  column: aliasTable && tableName === getNameFromDrizzleTable(sortTable) ? aliasTable[sortTableColumnName] : sortTable[sortTableColumnName],
60
60
  order
61
61
  });
62
- selectFields[sortTableColumnName] = sortTable[sortTableColumnName];
62
+ // Only add to selectFields if not already present (avoid duplicates from getTableColumnFromPath)
63
+ const columnToAdd = sortTable[sortTableColumnName];
64
+ const alreadyExists = Object.values(selectFields).some((col)=>col === columnToAdd);
65
+ if (!alreadyExists) {
66
+ selectFields[sortTableColumnName] = columnToAdd;
67
+ }
63
68
  }
64
69
  } catch (_) {
65
70
  // continue
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildOrderBy.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { FlattenedField, Sort } from 'payload'\n\nimport { asc, desc } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases, BuildQueryResult } from './buildQuery.js'\n\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized: boolean\n rawSort?: SQL\n selectFields: Record<string, GenericColumn>\n sort?: Sort\n tableName: string\n}\n\n/**\n * Gets the order by column and direction constructed from the sort argument adds the column to the select fields and joins if necessary\n */\nexport const buildOrderBy = ({\n adapter,\n aliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n rawSort,\n selectFields,\n sort,\n tableName,\n}: Args): BuildQueryResult['orderBy'] => {\n const orderBy: BuildQueryResult['orderBy'] = []\n\n const createdAt = adapter.tables[tableName]?.createdAt\n\n if (!sort) {\n if (createdAt) {\n sort = '-createdAt'\n } else {\n sort = '-id'\n }\n }\n\n if (typeof sort === 'string') {\n sort = [sort]\n }\n\n // In the case of Mongo, when sorting by a field that is not unique, the results are not guaranteed to be in the same order each time.\n // So we add a fallback sort to ensure that the results are always in the same order.\n let fallbackSort = '-id'\n\n if (createdAt) {\n fallbackSort = '-createdAt'\n }\n\n if (!(sort.includes(fallbackSort) || sort.includes(fallbackSort.replace('-', '')))) {\n sort.push(fallbackSort)\n }\n\n for (const sortItem of sort) {\n let sortProperty: string\n let sortDirection: 'asc' | 'desc'\n if (sortItem[0] === '-') {\n sortProperty = sortItem.substring(1)\n sortDirection = 'desc'\n } else {\n sortProperty = sortItem\n sortDirection = 'asc'\n }\n try {\n const { columnName: sortTableColumnName, table: sortTable } = getTableColumnFromPath({\n adapter,\n collectionPath: sortProperty,\n fields,\n joins,\n locale,\n parentIsLocalized,\n pathSegments: sortProperty.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: sortProperty,\n })\n if (sortTable?.[sortTableColumnName]) {\n let order = sortDirection === 'asc' ? asc : desc\n\n if (rawSort) {\n order = () => rawSort\n }\n\n orderBy.push({\n column:\n aliasTable && tableName === getNameFromDrizzleTable(sortTable)\n ? aliasTable[sortTableColumnName]\n : sortTable[sortTableColumnName],\n order,\n })\n\n selectFields[sortTableColumnName] = sortTable[sortTableColumnName]\n }\n } catch (_) {\n // continue\n }\n }\n\n return orderBy\n}\n"],"names":["asc","desc","getNameFromDrizzleTable","getTableColumnFromPath","buildOrderBy","adapter","aliasTable","fields","joins","locale","parentIsLocalized","rawSort","selectFields","sort","tableName","orderBy","createdAt","tables","fallbackSort","includes","replace","push","sortItem","sortProperty","sortDirection","substring","columnName","sortTableColumnName","table","sortTable","collectionPath","pathSegments","split","value","order","column","_"],"mappings":"AAGA,SAASA,GAAG,EAAEC,IAAI,QAAQ,cAAa;AAKvC,SAASC,uBAAuB,QAAQ,0CAAyC;AACjF,SAASC,sBAAsB,QAAQ,8BAA6B;AAepE;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,YAAY,EACZC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,UAAuC,EAAE;IAE/C,MAAMC,YAAYX,QAAQY,MAAM,CAACH,UAAU,EAAEE;IAE7C,IAAI,CAACH,MAAM;QACT,IAAIG,WAAW;YACbH,OAAO;QACT,OAAO;YACLA,OAAO;QACT;IACF;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5BA,OAAO;YAACA;SAAK;IACf;IAEA,sIAAsI;IACtI,qFAAqF;IACrF,IAAIK,eAAe;IAEnB,IAAIF,WAAW;QACbE,eAAe;IACjB;IAEA,IAAI,CAAEL,CAAAA,KAAKM,QAAQ,CAACD,iBAAiBL,KAAKM,QAAQ,CAACD,aAAaE,OAAO,CAAC,KAAK,IAAG,GAAI;QAClFP,KAAKQ,IAAI,CAACH;IACZ;IAEA,KAAK,MAAMI,YAAYT,KAAM;QAC3B,IAAIU;QACJ,IAAIC;QACJ,IAAIF,QAAQ,CAAC,EAAE,KAAK,KAAK;YACvBC,eAAeD,SAASG,SAAS,CAAC;YAClCD,gBAAgB;QAClB,OAAO;YACLD,eAAeD;YACfE,gBAAgB;QAClB;QACA,IAAI;YACF,MAAM,EAAEE,YAAYC,mBAAmB,EAAEC,OAAOC,SAAS,EAAE,GAAG1B,uBAAuB;gBACnFE;gBACAyB,gBAAgBP;gBAChBhB;gBACAC;gBACAC;gBACAC;gBACAqB,cAAcR,aAAaH,OAAO,CAAC,OAAO,KAAKY,KAAK,CAAC;gBACrDpB;gBACAE;gBACAmB,OAAOV;YACT;YACA,IAAIM,WAAW,CAACF,oBAAoB,EAAE;gBACpC,IAAIO,QAAQV,kBAAkB,QAAQxB,MAAMC;gBAE5C,IAAIU,SAAS;oBACXuB,QAAQ,IAAMvB;gBAChB;gBAEAI,QAAQM,IAAI,CAAC;oBACXc,QACE7B,cAAcQ,cAAcZ,wBAAwB2B,aAChDvB,UAAU,CAACqB,oBAAoB,GAC/BE,SAAS,CAACF,oBAAoB;oBACpCO;gBACF;gBAEAtB,YAAY,CAACe,oBAAoB,GAAGE,SAAS,CAACF,oBAAoB;YACpE;QACF,EAAE,OAAOS,GAAG;QACV,WAAW;QACb;IACF;IAEA,OAAOrB;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/queries/buildOrderBy.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { FlattenedField, Sort } from 'payload'\n\nimport { asc, desc } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases, BuildQueryResult } from './buildQuery.js'\n\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized: boolean\n rawSort?: SQL\n selectFields: Record<string, GenericColumn>\n sort?: Sort\n tableName: string\n}\n\n/**\n * Gets the order by column and direction constructed from the sort argument adds the column to the select fields and joins if necessary\n */\nexport const buildOrderBy = ({\n adapter,\n aliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n rawSort,\n selectFields,\n sort,\n tableName,\n}: Args): BuildQueryResult['orderBy'] => {\n const orderBy: BuildQueryResult['orderBy'] = []\n\n const createdAt = adapter.tables[tableName]?.createdAt\n\n if (!sort) {\n if (createdAt) {\n sort = '-createdAt'\n } else {\n sort = '-id'\n }\n }\n\n if (typeof sort === 'string') {\n sort = [sort]\n }\n\n // In the case of Mongo, when sorting by a field that is not unique, the results are not guaranteed to be in the same order each time.\n // So we add a fallback sort to ensure that the results are always in the same order.\n let fallbackSort = '-id'\n\n if (createdAt) {\n fallbackSort = '-createdAt'\n }\n\n if (!(sort.includes(fallbackSort) || sort.includes(fallbackSort.replace('-', '')))) {\n sort.push(fallbackSort)\n }\n\n for (const sortItem of sort) {\n let sortProperty: string\n let sortDirection: 'asc' | 'desc'\n if (sortItem[0] === '-') {\n sortProperty = sortItem.substring(1)\n sortDirection = 'desc'\n } else {\n sortProperty = sortItem\n sortDirection = 'asc'\n }\n try {\n const { columnName: sortTableColumnName, table: sortTable } = getTableColumnFromPath({\n adapter,\n collectionPath: sortProperty,\n fields,\n joins,\n locale,\n parentIsLocalized,\n pathSegments: sortProperty.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: sortProperty,\n })\n if (sortTable?.[sortTableColumnName]) {\n let order = sortDirection === 'asc' ? asc : desc\n\n if (rawSort) {\n order = () => rawSort\n }\n\n orderBy.push({\n column:\n aliasTable && tableName === getNameFromDrizzleTable(sortTable)\n ? aliasTable[sortTableColumnName]\n : sortTable[sortTableColumnName],\n order,\n })\n\n // Only add to selectFields if not already present (avoid duplicates from getTableColumnFromPath)\n const columnToAdd = sortTable[sortTableColumnName]\n const alreadyExists = Object.values(selectFields).some((col) => col === columnToAdd)\n if (!alreadyExists) {\n selectFields[sortTableColumnName] = columnToAdd\n }\n }\n } catch (_) {\n // continue\n }\n }\n\n return orderBy\n}\n"],"names":["asc","desc","getNameFromDrizzleTable","getTableColumnFromPath","buildOrderBy","adapter","aliasTable","fields","joins","locale","parentIsLocalized","rawSort","selectFields","sort","tableName","orderBy","createdAt","tables","fallbackSort","includes","replace","push","sortItem","sortProperty","sortDirection","substring","columnName","sortTableColumnName","table","sortTable","collectionPath","pathSegments","split","value","order","column","columnToAdd","alreadyExists","Object","values","some","col","_"],"mappings":"AAGA,SAASA,GAAG,EAAEC,IAAI,QAAQ,cAAa;AAKvC,SAASC,uBAAuB,QAAQ,0CAAyC;AACjF,SAASC,sBAAsB,QAAQ,8BAA6B;AAepE;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,YAAY,EACZC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,UAAuC,EAAE;IAE/C,MAAMC,YAAYX,QAAQY,MAAM,CAACH,UAAU,EAAEE;IAE7C,IAAI,CAACH,MAAM;QACT,IAAIG,WAAW;YACbH,OAAO;QACT,OAAO;YACLA,OAAO;QACT;IACF;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5BA,OAAO;YAACA;SAAK;IACf;IAEA,sIAAsI;IACtI,qFAAqF;IACrF,IAAIK,eAAe;IAEnB,IAAIF,WAAW;QACbE,eAAe;IACjB;IAEA,IAAI,CAAEL,CAAAA,KAAKM,QAAQ,CAACD,iBAAiBL,KAAKM,QAAQ,CAACD,aAAaE,OAAO,CAAC,KAAK,IAAG,GAAI;QAClFP,KAAKQ,IAAI,CAACH;IACZ;IAEA,KAAK,MAAMI,YAAYT,KAAM;QAC3B,IAAIU;QACJ,IAAIC;QACJ,IAAIF,QAAQ,CAAC,EAAE,KAAK,KAAK;YACvBC,eAAeD,SAASG,SAAS,CAAC;YAClCD,gBAAgB;QAClB,OAAO;YACLD,eAAeD;YACfE,gBAAgB;QAClB;QACA,IAAI;YACF,MAAM,EAAEE,YAAYC,mBAAmB,EAAEC,OAAOC,SAAS,EAAE,GAAG1B,uBAAuB;gBACnFE;gBACAyB,gBAAgBP;gBAChBhB;gBACAC;gBACAC;gBACAC;gBACAqB,cAAcR,aAAaH,OAAO,CAAC,OAAO,KAAKY,KAAK,CAAC;gBACrDpB;gBACAE;gBACAmB,OAAOV;YACT;YACA,IAAIM,WAAW,CAACF,oBAAoB,EAAE;gBACpC,IAAIO,QAAQV,kBAAkB,QAAQxB,MAAMC;gBAE5C,IAAIU,SAAS;oBACXuB,QAAQ,IAAMvB;gBAChB;gBAEAI,QAAQM,IAAI,CAAC;oBACXc,QACE7B,cAAcQ,cAAcZ,wBAAwB2B,aAChDvB,UAAU,CAACqB,oBAAoB,GAC/BE,SAAS,CAACF,oBAAoB;oBACpCO;gBACF;gBAEA,iGAAiG;gBACjG,MAAME,cAAcP,SAAS,CAACF,oBAAoB;gBAClD,MAAMU,gBAAgBC,OAAOC,MAAM,CAAC3B,cAAc4B,IAAI,CAAC,CAACC,MAAQA,QAAQL;gBACxE,IAAI,CAACC,eAAe;oBAClBzB,YAAY,CAACe,oBAAoB,GAAGS;gBACtC;YACF;QACF,EAAE,OAAOM,GAAG;QACV,WAAW;QACb;IACF;IAEA,OAAO3B;AACT,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,WA68BT,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,WAy9BT,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)
@@ -114,7 +127,7 @@ import { getTableAlias } from './getTableAlias.js';
114
127
  value
115
128
  ];
116
129
  blockTypes.forEach((blockType)=>{
117
- const block = adapter.payload.blocks[blockType] ?? (field.blockReferences ?? field.blocks).find((block)=>typeof block !== 'string' && block.slug === blockType);
130
+ const block = adapter.payload.blocks[blockType] ?? field.blocks.find((block)=>typeof block !== 'string' && block.slug === blockType);
118
131
  newTableName = resolveBlockTableName(block, adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`));
119
132
  const { newAliasTable } = getTableAlias({
120
133
  adapter,
@@ -137,10 +150,9 @@ import { getTableAlias } from './getTableAlias.js';
137
150
  table: adapter.tables[tableName]
138
151
  };
139
152
  }
140
- const hasBlockField = (field.blockReferences ?? field.blocks).some((_block)=>{
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,
@@ -282,7 +294,7 @@ import { getTableAlias } from './getTableAlias.js';
282
294
  }
283
295
  if (!existingTable) {
284
296
  addJoinTable({
285
- condition: and(eq(adapter.tables[rootTableName].id, aliasRelationshipTable[`${relationshipField.field.relationTo}ID`]), like(aliasRelationshipTable.path, field.on)),
297
+ condition: and(eq(tableContainingField.id, aliasRelationshipTable[`${relationshipField.field.relationTo}ID`]), like(aliasRelationshipTable.path, field.on)),
286
298
  joins,
287
299
  queryPath: `${constraintPath}${field.name}._rels`,
288
300
  table: aliasRelationshipTable
@@ -320,10 +332,10 @@ import { getTableAlias } from './getTableAlias.js';
320
332
  aliasTable: relationshipTable,
321
333
  collectionPath: newCollectionPath,
322
334
  constraints,
323
- // relationshipFields are fields from a different collection => no parentIsLocalized
324
335
  fields: relationshipFields,
325
336
  joins,
326
337
  locale,
338
+ // A join reads from a different collection, so localization does not carry over
327
339
  parentIsLocalized: false,
328
340
  pathSegments: pathSegments.slice(1),
329
341
  rootTableName: relationshipTableName,
@@ -388,7 +400,8 @@ import { getTableAlias } from './getTableAlias.js';
388
400
  fields: adapter.payload.collections[field.collection].config.flattenedFields,
389
401
  joins,
390
402
  locale,
391
- parentIsLocalized: parentIsLocalized || field.localized,
403
+ // A join reads from a different collection, so localization does not carry over
404
+ parentIsLocalized: false,
392
405
  pathSegments: pathSegments.slice(1),
393
406
  selectFields,
394
407
  tableName: newTableName,
@@ -407,14 +420,14 @@ import { getTableAlias } from './getTableAlias.js';
407
420
  columnName = 'number';
408
421
  }
409
422
  newTableName = `${rootTableName}_${tableType}`;
410
- const existingTable = joins.find((e)=>e.queryPath === `${constraintPath}${field.name}`);
423
+ const existingTable = joins.find((e)=>e.queryPath === fieldStoragePath);
411
424
  const table = existingTable?.table ?? getTableAlias({
412
425
  adapter,
413
426
  tableName: newTableName
414
427
  }).newAliasTable;
415
428
  const joinConstraints = [
416
- eq(adapter.tables[rootTableName].id, table.parent),
417
- like(table.path, `${constraintPath}${field.name}`)
429
+ eq(tableContainingField.id, table.parent),
430
+ like(table.path, fieldStoragePath)
418
431
  ];
419
432
  if (locale && isFieldLocalized && adapter.payload.config.localization) {
420
433
  const conditions = [
@@ -426,14 +439,14 @@ import { getTableAlias } from './getTableAlias.js';
426
439
  addJoinTable({
427
440
  condition: and(...conditions),
428
441
  joins,
429
- queryPath: `${constraintPath}${field.name}`,
442
+ queryPath: fieldStoragePath,
430
443
  table
431
444
  });
432
445
  } else {
433
446
  addJoinTable({
434
447
  condition: and(...joinConstraints),
435
448
  joins,
436
- queryPath: `${constraintPath}${field.name}`,
449
+ queryPath: fieldStoragePath,
437
450
  table
438
451
  });
439
452
  }
@@ -451,6 +464,17 @@ import { getTableAlias } from './getTableAlias.js';
451
464
  {
452
465
  const newCollectionPath = pathSegments.slice(1).join('.');
453
466
  if (Array.isArray(field.relationTo) || field.hasMany) {
467
+ const relationshipPath = resolveRelationshipPath({
468
+ adapter,
469
+ fields,
470
+ locale,
471
+ parentIsLocalized,
472
+ path: field.name,
473
+ pathPrefix: constraintPath
474
+ });
475
+ if (!relationshipPath) {
476
+ throw new APIError(`Relationship path could not be resolved: ${collectionPath}`);
477
+ }
454
478
  let relationshipFields;
455
479
  const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`;
456
480
  const existingJoin = joins.find((e)=>e.queryPath === `${constraintPath}.${field.name}`);
@@ -467,18 +491,16 @@ import { getTableAlias } from './getTableAlias.js';
467
491
  aliasRelationshipTable = res.newAliasTable;
468
492
  aliasRelationshipTableName = res.newAliasTableName;
469
493
  }
470
- if (selectLocale && isFieldLocalized && adapter.payload.config.localization) {
494
+ if (selectLocale && relationshipPath.isLocalized && adapter.payload.config.localization) {
471
495
  selectFields._locale = aliasRelationshipTable.locale;
472
496
  }
473
497
  // Join in the relationships table
474
- if (locale && isFieldLocalized && adapter.payload.config.localization) {
498
+ if (relationshipPath.locale && relationshipPath.locale !== 'all' && relationshipPath.isLocalized && adapter.payload.config.localization) {
475
499
  const conditions = [
476
- eq((parentAliasTable || aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent),
477
- like(aliasRelationshipTable.path, `${constraintPath}${field.name}`)
500
+ eq(tableContainingField.id, aliasRelationshipTable.parent),
501
+ like(aliasRelationshipTable.path, relationshipPath.path)
478
502
  ];
479
- if (locale !== 'all') {
480
- conditions.push(eq(aliasRelationshipTable.locale, locale));
481
- }
503
+ conditions.push(eq(aliasRelationshipTable.locale, relationshipPath.locale));
482
504
  addJoinTable({
483
505
  condition: and(...conditions),
484
506
  joins,
@@ -488,7 +510,7 @@ import { getTableAlias } from './getTableAlias.js';
488
510
  } else {
489
511
  // Join in the relationships table
490
512
  addJoinTable({
491
- condition: and(eq((parentAliasTable || aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent), like(aliasRelationshipTable.path, `${constraintPath}${field.name}`)),
513
+ condition: and(eq(tableContainingField.id, aliasRelationshipTable.parent), like(aliasRelationshipTable.path, relationshipPath.path)),
492
514
  joins,
493
515
  queryPath: `${constraintPath}.${field.name}`,
494
516
  table: aliasRelationshipTable
@@ -606,10 +628,10 @@ import { getTableAlias } from './getTableAlias.js';
606
628
  aliasTable: newAliasTable,
607
629
  collectionPath: newCollectionPath,
608
630
  constraints,
609
- // relationshipFields are fields from a different collection => no parentIsLocalized
610
631
  fields: relationshipFields,
611
632
  joins,
612
633
  locale,
634
+ // A relationship jumps to a different collection, so localization does not carry over
613
635
  parentIsLocalized: false,
614
636
  pathSegments: pathSegments.slice(1),
615
637
  rootTableName: newTableName,
@@ -632,7 +654,7 @@ import { getTableAlias } from './getTableAlias.js';
632
654
  tableName: `${rootTableName}${adapter.localesSuffix}`
633
655
  });
634
656
  const condtions = [
635
- eq(aliasLocaleTable._parentID, adapter.tables[rootTableName].id)
657
+ eq(aliasLocaleTable._parentID, tableContainingField.id)
636
658
  ];
637
659
  if (selectLocale) {
638
660
  selectFields._locale = aliasLocaleTable._locale;
@@ -665,7 +687,8 @@ import { getTableAlias } from './getTableAlias.js';
665
687
  fields: adapter.payload.collections[field.relationTo].config.flattenedFields,
666
688
  joins,
667
689
  locale,
668
- parentIsLocalized: parentIsLocalized || field.localized,
690
+ // A relationship jumps to a different collection, so localization does not carry over
691
+ parentIsLocalized: false,
669
692
  pathSegments: pathSegments.slice(1),
670
693
  selectFields,
671
694
  tableName: newTableName,
@@ -716,7 +739,7 @@ import { getTableAlias } from './getTableAlias.js';
716
739
  aliasTable,
717
740
  collectionPath,
718
741
  columnPrefix: `${columnPrefix}${field.name}_`,
719
- constraintPath: `${constraintPath}${field.name}.`,
742
+ constraintPath: `${fieldStoragePath}.`,
720
743
  constraints,
721
744
  fields: field.flattenedFields,
722
745
  joins,