@payloadcms/drizzle 4.0.0-internal.fec2230 → 4.0.0-internal.ff27d6e

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 (262) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +25 -3
  3. package/dist/count.js.map +1 -1
  4. package/dist/countGlobalVersions.js +8 -3
  5. package/dist/countGlobalVersions.js.map +1 -1
  6. package/dist/countVersions.d.ts.map +1 -1
  7. package/dist/countVersions.js +29 -4
  8. package/dist/countVersions.js.map +1 -1
  9. package/dist/createGlobalVersion.d.ts.map +1 -1
  10. package/dist/createGlobalVersion.js +17 -2
  11. package/dist/createGlobalVersion.js.map +1 -1
  12. package/dist/createVersion.d.ts.map +1 -1
  13. package/dist/createVersion.js +12 -1
  14. package/dist/createVersion.js.map +1 -1
  15. package/dist/deleteBranchGlobal.d.ts +10 -0
  16. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  17. package/dist/deleteBranchGlobal.js +27 -0
  18. package/dist/deleteBranchGlobal.js.map +1 -0
  19. package/dist/deleteOne.d.ts.map +1 -1
  20. package/dist/deleteOne.js +25 -1
  21. package/dist/deleteOne.js.map +1 -1
  22. package/dist/exports/postgres.d.ts +2 -1
  23. package/dist/exports/postgres.d.ts.map +1 -1
  24. package/dist/exports/postgres.js +2 -1
  25. package/dist/exports/postgres.js.map +1 -1
  26. package/dist/exports/sqlite.d.ts +2 -1
  27. package/dist/exports/sqlite.d.ts.map +1 -1
  28. package/dist/exports/sqlite.js +2 -1
  29. package/dist/exports/sqlite.js.map +1 -1
  30. package/dist/find/buildFindManyArgs.d.ts +3 -2
  31. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  32. package/dist/find/buildFindManyArgs.js +2 -1
  33. package/dist/find/buildFindManyArgs.js.map +1 -1
  34. package/dist/find/buildPolymorphicJoinQuery.d.ts +40 -0
  35. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  36. package/dist/find/buildPolymorphicJoinQuery.js +163 -0
  37. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  38. package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
  39. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  40. package/dist/find/buildPolymorphicJoinWhere.js +301 -0
  41. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  42. package/dist/find/createPolymorphicJoinWherePlan.d.ts +38 -0
  43. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  44. package/dist/find/createPolymorphicJoinWherePlan.js +200 -0
  45. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  46. package/dist/find/findMany.d.ts +6 -1
  47. package/dist/find/findMany.d.ts.map +1 -1
  48. package/dist/find/findMany.js +16 -3
  49. package/dist/find/findMany.js.map +1 -1
  50. package/dist/find/traverseFields.d.ts +3 -2
  51. package/dist/find/traverseFields.d.ts.map +1 -1
  52. package/dist/find/traverseFields.js +82 -198
  53. package/dist/find/traverseFields.js.map +1 -1
  54. package/dist/find.d.ts.map +1 -1
  55. package/dist/find.js +32 -4
  56. package/dist/find.js.map +1 -1
  57. package/dist/findDistinct.d.ts.map +1 -1
  58. package/dist/findDistinct.js +104 -8
  59. package/dist/findDistinct.js.map +1 -1
  60. package/dist/findGlobal.d.ts.map +1 -1
  61. package/dist/findGlobal.js +24 -5
  62. package/dist/findGlobal.js.map +1 -1
  63. package/dist/findGlobalVersions.js +8 -3
  64. package/dist/findGlobalVersions.js.map +1 -1
  65. package/dist/findOne.d.ts +1 -1
  66. package/dist/findOne.d.ts.map +1 -1
  67. package/dist/findOne.js +30 -3
  68. package/dist/findOne.js.map +1 -1
  69. package/dist/findVersions.d.ts.map +1 -1
  70. package/dist/findVersions.js +32 -5
  71. package/dist/findVersions.js.map +1 -1
  72. package/dist/index.d.ts +3 -8
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +3 -8
  75. package/dist/index.js.map +1 -1
  76. package/dist/migrate.d.ts.map +1 -1
  77. package/dist/migrate.js +6 -2
  78. package/dist/migrate.js.map +1 -1
  79. package/dist/migrateDown.d.ts.map +1 -1
  80. package/dist/migrateDown.js +5 -2
  81. package/dist/migrateDown.js.map +1 -1
  82. package/dist/migrateFresh.d.ts.map +1 -1
  83. package/dist/migrateFresh.js +5 -2
  84. package/dist/migrateFresh.js.map +1 -1
  85. package/dist/migrateRefresh.d.ts.map +1 -1
  86. package/dist/migrateRefresh.js +6 -2
  87. package/dist/migrateRefresh.js.map +1 -1
  88. package/dist/migrateReset.d.ts.map +1 -1
  89. package/dist/migrateReset.js +6 -2
  90. package/dist/migrateReset.js.map +1 -1
  91. package/dist/postgres/createJSONQuery/index.js +3 -3
  92. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  93. package/dist/postgres/insert.d.ts.map +1 -1
  94. package/dist/postgres/insert.js +4 -2
  95. package/dist/postgres/insert.js.map +1 -1
  96. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  97. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  98. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  99. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  100. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  101. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  102. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  103. package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
  104. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  105. package/dist/postgres/requireDrizzleKit.d.ts +4 -0
  106. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
  107. package/dist/postgres/requireDrizzleKit.js +16 -10
  108. package/dist/postgres/requireDrizzleKit.js.map +1 -1
  109. package/dist/postgres/types.d.ts +4 -0
  110. package/dist/postgres/types.d.ts.map +1 -1
  111. package/dist/postgres/types.js.map +1 -1
  112. package/dist/queries/buildAndOrConditions.d.ts +3 -2
  113. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  114. package/dist/queries/buildAndOrConditions.js +2 -1
  115. package/dist/queries/buildAndOrConditions.js.map +1 -1
  116. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  117. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  118. package/dist/queries/buildBranchVisibility.js +48 -0
  119. package/dist/queries/buildBranchVisibility.js.map +1 -0
  120. package/dist/queries/buildOrderBy.d.ts +3 -2
  121. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  122. package/dist/queries/buildOrderBy.js +2 -1
  123. package/dist/queries/buildOrderBy.js.map +1 -1
  124. package/dist/queries/buildQuery.d.ts +3 -2
  125. package/dist/queries/buildQuery.d.ts.map +1 -1
  126. package/dist/queries/buildQuery.js +4 -2
  127. package/dist/queries/buildQuery.js.map +1 -1
  128. package/dist/queries/getTableColumnFromPath.d.ts +3 -2
  129. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  130. package/dist/queries/getTableColumnFromPath.js +176 -29
  131. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  132. package/dist/queries/parseParams.d.ts +3 -2
  133. package/dist/queries/parseParams.d.ts.map +1 -1
  134. package/dist/queries/parseParams.js +63 -3
  135. package/dist/queries/parseParams.js.map +1 -1
  136. package/dist/queryDrafts.d.ts.map +1 -1
  137. package/dist/queryDrafts.js +27 -5
  138. package/dist/queryDrafts.js.map +1 -1
  139. package/dist/schema/build.d.ts.map +1 -1
  140. package/dist/schema/build.js +28 -20
  141. package/dist/schema/build.js.map +1 -1
  142. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  143. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  144. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  145. package/dist/sqlite/createJSONQuery/index.js +6 -5
  146. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  147. package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
  148. package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
  149. package/dist/sqlite/createRequireDrizzleKit.js +15 -0
  150. package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
  151. package/dist/sqlite/execute.js.map +1 -1
  152. package/dist/sqlite/insert.d.ts.map +1 -1
  153. package/dist/sqlite/insert.js +9 -4
  154. package/dist/sqlite/insert.js.map +1 -1
  155. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  156. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  157. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  158. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  159. package/dist/sqlite/types.d.ts +4 -0
  160. package/dist/sqlite/types.d.ts.map +1 -1
  161. package/dist/sqlite/types.js.map +1 -1
  162. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  163. package/dist/transactions/beginTransaction.js +13 -5
  164. package/dist/transactions/beginTransaction.js.map +1 -1
  165. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  166. package/dist/transactions/commitTransaction.js +1 -5
  167. package/dist/transactions/commitTransaction.js.map +1 -1
  168. package/dist/transform/read/traverseFields.js.map +1 -1
  169. package/dist/transform/write/array.d.ts +3 -2
  170. package/dist/transform/write/array.d.ts.map +1 -1
  171. package/dist/transform/write/array.js +2 -1
  172. package/dist/transform/write/array.js.map +1 -1
  173. package/dist/transform/write/blocks.d.ts +3 -2
  174. package/dist/transform/write/blocks.d.ts.map +1 -1
  175. package/dist/transform/write/blocks.js +2 -1
  176. package/dist/transform/write/blocks.js.map +1 -1
  177. package/dist/transform/write/index.d.ts.map +1 -1
  178. package/dist/transform/write/index.js +2 -0
  179. package/dist/transform/write/index.js.map +1 -1
  180. package/dist/transform/write/traverseFields.d.ts +2 -1
  181. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  182. package/dist/transform/write/traverseFields.js +48 -21
  183. package/dist/transform/write/traverseFields.js.map +1 -1
  184. package/dist/transform/write/types.d.ts +7 -0
  185. package/dist/transform/write/types.d.ts.map +1 -1
  186. package/dist/transform/write/types.js.map +1 -1
  187. package/dist/types.d.ts +3 -2
  188. package/dist/types.d.ts.map +1 -1
  189. package/dist/types.js.map +1 -1
  190. package/dist/updateGlobal.d.ts +5 -1
  191. package/dist/updateGlobal.d.ts.map +1 -1
  192. package/dist/updateGlobal.js +96 -4
  193. package/dist/updateGlobal.js.map +1 -1
  194. package/dist/updateOne.d.ts.map +1 -1
  195. package/dist/updateOne.js +93 -4
  196. package/dist/updateOne.js.map +1 -1
  197. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  198. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  199. package/dist/upsertBranchGlobalChange.js +35 -0
  200. package/dist/upsertBranchGlobalChange.js.map +1 -0
  201. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  202. package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
  203. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  204. package/dist/upsertRow/index.d.ts +1 -1
  205. package/dist/upsertRow/index.d.ts.map +1 -1
  206. package/dist/upsertRow/index.js +156 -46
  207. package/dist/upsertRow/index.js.map +1 -1
  208. package/dist/upsertRow/types.d.ts +3 -0
  209. package/dist/upsertRow/types.d.ts.map +1 -1
  210. package/dist/upsertRow/types.js.map +1 -1
  211. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  212. package/dist/utilities/blocksToJsonMigrator.js +7 -18
  213. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  214. package/dist/utilities/buildCreateMigration.js +1 -1
  215. package/dist/utilities/buildCreateMigration.js.map +1 -1
  216. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  217. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  218. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  219. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  220. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  221. package/dist/utilities/createSchemaGenerator.js +7 -12
  222. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  223. package/dist/utilities/executeSchemaHooks.js +1 -1
  224. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  225. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  226. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  227. package/dist/utilities/formatGeneratedFile.js +58 -0
  228. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  229. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  230. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  231. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  232. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  233. package/dist/utilities/getTransaction.js.map +1 -1
  234. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  235. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  236. package/dist/utilities/parseJSONPathSegment.js +17 -0
  237. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  238. package/dist/utilities/pushDevSchema.js +1 -1
  239. package/dist/utilities/pushDevSchema.js.map +1 -1
  240. package/package.json +17 -19
  241. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js +0 -91
  242. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js.map +0 -1
  243. package/dist/postgres/query/postgresUnaccent.spec.js +0 -71
  244. package/dist/postgres/query/postgresUnaccent.spec.js.map +0 -1
  245. package/dist/queries/buildOperatorConstraint.spec.js +0 -348
  246. package/dist/queries/buildOperatorConstraint.spec.js.map +0 -1
  247. package/dist/queries/validateOperatorHandlers.spec.js +0 -142
  248. package/dist/queries/validateOperatorHandlers.spec.js.map +0 -1
  249. package/dist/schema/buildRawSchema.spec.js +0 -290
  250. package/dist/schema/buildRawSchema.spec.js.map +0 -1
  251. package/dist/sqlite/requireDrizzleKit.d.ts +0 -3
  252. package/dist/sqlite/requireDrizzleKit.d.ts.map +0 -1
  253. package/dist/sqlite/requireDrizzleKit.js +0 -12
  254. package/dist/sqlite/requireDrizzleKit.js.map +0 -1
  255. package/dist/upsertRow/handleUpsertError.spec.js +0 -42
  256. package/dist/upsertRow/handleUpsertError.spec.js.map +0 -1
  257. package/dist/utilities/checkTruncatedIdentifiers.spec.js +0 -301
  258. package/dist/utilities/checkTruncatedIdentifiers.spec.js.map +0 -1
  259. package/dist/utilities/isValidStringID.spec.js +0 -15
  260. package/dist/utilities/isValidStringID.spec.js.map +0 -1
  261. package/dist/utilities/validateIdentifierLength.spec.js +0 -19
  262. package/dist/utilities/validateIdentifierLength.spec.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { FlattenedField, HasManyRelationshipOperator, Operator, Sort, Where } from 'payload'\n\nimport {\n aliasedTable,\n and,\n eq,\n exists,\n getTableName,\n isNotNull,\n isNull,\n like,\n notExists,\n notInArray,\n or,\n sql,\n} from 'drizzle-orm'\nimport { PgUUID } from 'drizzle-orm/pg-core'\nimport { APIError, QueryError } from 'payload'\nimport {\n hasManyRelationshipOperatorSet,\n isNestedRelationshipQuery,\n validOperatorSet,\n} from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\nimport type { DrizzleResolvedOperator } from './operatorMap.js'\n\nimport { escapeSQLValue } from '../utilities/escapeSQLValue.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { isValidStringID } from '../utilities/isValidStringID.js'\nimport { DistinctSymbol, isRawConstraint } from '../utilities/rawConstraint.js'\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { buildOperatorConstraint } from './buildOperatorConstraint.js'\nimport { getTableAlias } from './getTableAlias.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\nimport { resolveRelationshipPath } from './resolveRelationshipPath.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\nexport type QueryContext = { rawSort?: SQL; sort: Sort }\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n context: QueryContext\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized: boolean\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n where: Where\n}\n\nexport function parseParams({\n adapter,\n aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n selectFields,\n selectLocale,\n tableName,\n where,\n}: Args): SQL {\n let result: SQL\n const constraints: SQL[] = []\n\n if (typeof where === 'object' && Object.keys(where).length > 0) {\n // We need to determine if the whereKey is an AND, OR, or a schema path\n for (const relationOrPath of Object.keys(where)) {\n if (relationOrPath) {\n const condition = where[relationOrPath]\n let conditionOperator: typeof and | typeof or\n if (relationOrPath.toLowerCase() === 'and') {\n conditionOperator = and\n } else if (relationOrPath.toLowerCase() === 'or') {\n conditionOperator = or\n }\n if (Array.isArray(condition)) {\n const builtConditions = buildAndOrConditions({\n adapter,\n aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n selectFields,\n selectLocale,\n tableName,\n where: condition,\n })\n if (builtConditions.length > 0) {\n result = conditionOperator(...builtConditions)\n }\n } else {\n // It's a path - and there can be multiple comparisons on a single path.\n // For example - title like 'test' and title not equal to 'tester'\n // So we need to loop on keys again here to handle each operator independently\n const pathOperators = where[relationOrPath]\n if (typeof pathOperators === 'object') {\n for (let operator of Object.keys(pathOperators)) {\n if (validOperatorSet.has(operator as Operator)) {\n const val = where[relationOrPath][operator]\n const originalOperator = operator as Operator\n\n if (\n hasManyRelationshipOperatorSet.has(operator as HasManyRelationshipOperator) &&\n isNestedRelationshipQuery(val) &&\n !isRawConstraint(val)\n ) {\n const relationshipPath = resolveRelationshipPath({\n adapter,\n fields,\n locale,\n parentIsLocalized,\n path: relationOrPath.replace(/__/g, '.'),\n })\n\n if (\n relationshipPath?.field.hasMany &&\n typeof relationshipPath.field.relationTo === 'string'\n ) {\n constraints.push(\n buildHasManyRelationshipCondition({\n adapter,\n aliasTable,\n fields,\n locale,\n operator: operator as HasManyRelationshipOperator,\n parentIsLocalized,\n relationOrPath,\n tableName,\n where: val,\n }),\n )\n continue\n }\n }\n\n const {\n columnName,\n columns,\n constraints: queryConstraints,\n field,\n getNotNullColumnByValue,\n pathSegments,\n rawColumn,\n table,\n } = getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath: relationOrPath,\n fields,\n joins,\n locale,\n parentIsLocalized,\n pathSegments: relationOrPath.replace(/__/g, '.').split('.'),\n selectFields,\n selectLocale,\n tableName,\n value: val,\n })\n\n const resolvedColumn =\n rawColumn ||\n (aliasTable && tableName === getNameFromDrizzleTable(table)\n ? aliasTable[columnName]\n : table[columnName])\n\n if (val === DistinctSymbol) {\n selectFields['_selected'] = resolvedColumn\n break\n }\n\n queryConstraints.forEach(({ columnName: col, table: constraintTable, value }) => {\n if (typeof value === 'string' && value.indexOf('%') > -1) {\n constraints.push(adapter.operators.like(constraintTable[col], value))\n } else {\n constraints.push(adapter.operators.equals(constraintTable[col], value))\n }\n })\n\n if (\n (['json', 'richText'].includes(field.type) ||\n (field.type === 'blocks' && adapter.blocksAsJSON)) &&\n Array.isArray(pathSegments) &&\n pathSegments.length > 1\n ) {\n if (adapter.name === 'postgres') {\n const constraint = adapter.createJSONQuery({\n column: rawColumn || table[columnName],\n operator,\n pathSegments,\n value: val,\n })\n\n constraints.push(sql.raw(constraint))\n break\n }\n\n const segments = pathSegments.slice(1)\n segments.unshift(table[columnName].name)\n\n if (field.type === 'richText') {\n // use the table name from the nearest join to handle blocks, arrays, etc. or use the tableName arg\n const jsonTable =\n joins.length === 0\n ? tableName\n : joins[joins.length - 1].table[\n Object.getOwnPropertySymbols(joins[joins.length - 1].table)[0]\n ]\n const jsonQuery = adapter.createJSONQuery({\n operator,\n pathSegments: segments,\n table: jsonTable,\n treatAsArray: ['children'],\n treatRootAsArray: true,\n value: val,\n })\n\n constraints.push(sql.raw(jsonQuery))\n break\n }\n\n const jsonQuery = adapter.convertPathToJSONTraversal(pathSegments)\n const operatorKeys: Record<string, { operator: string; wildcard: string }> = {\n contains: { operator: 'like', wildcard: '%' },\n equals: { operator: '=', wildcard: '' },\n exists: { operator: val === true ? 'is not null' : 'is null', wildcard: '' },\n in: { operator: 'in', wildcard: '' },\n like: { operator: 'like', wildcard: '%' },\n not_equals: { operator: '<>', wildcard: '' },\n not_in: { operator: 'not in', wildcard: '' },\n not_like: { operator: 'not like', wildcard: '%' },\n }\n\n let formattedValue = val\n if (\n adapter.name === 'sqlite' &&\n operator === 'equals' &&\n (typeof val === 'number' || typeof val === 'boolean')\n ) {\n formattedValue = val\n } else if (['in', 'not_in'].includes(operator) && Array.isArray(val)) {\n formattedValue = `(${val.map((v) => `${escapeSQLValue(v)}`).join(',')})`\n } else {\n formattedValue = `'${operatorKeys[operator].wildcard}${escapeSQLValue(val)}${operatorKeys[operator].wildcard}'`\n }\n if (operator === 'exists') {\n formattedValue = ''\n }\n\n let jsonQuerySelector = `${table[columnName].name}${jsonQuery}`\n\n if (adapter.name === 'sqlite' && operator === 'not_like') {\n jsonQuerySelector = `COALESCE(${table[columnName].name}${jsonQuery}, '')`\n }\n\n const rawSQLQuery = `${jsonQuerySelector} ${operatorKeys[operator].operator} ${formattedValue}`\n\n constraints.push(sql.raw(rawSQLQuery))\n\n break\n }\n\n if (getNotNullColumnByValue) {\n const columnName = getNotNullColumnByValue(val)\n if (columnName) {\n constraints.push(isNotNull(table[columnName]))\n } else {\n throw new QueryError([{ path: relationOrPath }])\n }\n break\n }\n\n if (\n operator === 'like' &&\n (field.type === 'number' ||\n field.type === 'relationship' ||\n field.type === 'upload' ||\n table[columnName].columnType === 'PgUUID')\n ) {\n operator = 'equals'\n }\n\n if (operator === 'like') {\n constraints.push(\n and(\n ...val.split(' ').map((word) =>\n buildOperatorConstraint({\n adapter,\n column: table[columnName],\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: 'like',\n value: `%${word}%`,\n }),\n ),\n ),\n )\n break\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n columns,\n field,\n isUUID: table?.[columnName] instanceof PgUUID,\n operator,\n relationOrPath,\n val,\n })\n\n if (sanitizedQueryValue === null) {\n break\n }\n\n const {\n columns: queryColumns,\n operator: queryOperator,\n value: queryValue,\n } = sanitizedQueryValue\n\n // Handle polymorphic relationships by value\n if (queryColumns) {\n if (!queryColumns.length) {\n break\n }\n\n let wrapOperator = or\n\n if (queryValue === null && ['equals', 'not_equals'].includes(operator)) {\n if (operator === 'equals') {\n wrapOperator = and\n }\n\n constraints.push(\n wrapOperator(\n ...queryColumns.map(({ rawColumn }) =>\n operator === 'equals' ? isNull(rawColumn) : isNotNull(rawColumn),\n ),\n ),\n )\n break\n }\n\n if (['not_equals', 'not_in'].includes(operator)) {\n wrapOperator = and\n }\n\n constraints.push(\n wrapOperator(\n ...queryColumns.map(({ rawColumn, value }) =>\n buildOperatorConstraint({\n adapter,\n column: rawColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: queryOperator as DrizzleResolvedOperator,\n value,\n }),\n ),\n ),\n )\n\n break\n }\n\n if (queryOperator === 'not_equals' && queryValue !== null) {\n constraints.push(\n or(\n isNull(resolvedColumn),\n buildOperatorConstraint({\n adapter,\n column: resolvedColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: 'not_equals',\n value: queryValue,\n }),\n ),\n )\n break\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(queryValue) &&\n queryOperator === 'not_in'\n ) {\n constraints.push(\n sql`(${notInArray(table[columnName], queryValue)} OR\n ${table[columnName]}\n IS\n NULL)`,\n )\n\n break\n }\n\n if (operator === 'equals' && queryValue === null) {\n constraints.push(isNull(resolvedColumn))\n break\n }\n\n if (operator === 'not_equals' && queryValue === null) {\n constraints.push(isNotNull(resolvedColumn))\n break\n }\n\n if (field.type === 'point' && adapter.name === 'postgres') {\n switch (operator) {\n case 'intersects': {\n constraints.push(\n sql`ST_Intersects(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n case 'near': {\n const [lng, lat, maxDistance, minDistance] = queryValue as number[]\n const geoConstraints: SQL[] = []\n\n if (typeof maxDistance === 'number' && !Number.isNaN(maxDistance)) {\n geoConstraints.push(\n sql`ST_DWithin(${table[columnName]}::geography, ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)::geography, ${maxDistance})`,\n )\n }\n\n if (typeof minDistance === 'number' && !Number.isNaN(minDistance)) {\n geoConstraints.push(\n sql`ST_Distance(${table[columnName]}::geography, ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)::geography) >= ${minDistance}`,\n )\n }\n if (geoConstraints.length) {\n context.sort = relationOrPath\n context.rawSort = sql`${table[columnName]} <-> ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)`\n constraints.push(and(...geoConstraints))\n }\n break\n }\n\n case 'within': {\n constraints.push(\n sql`ST_Within(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n default:\n break\n }\n break\n }\n\n const orConditions: SQL<unknown>[] = []\n let resolvedQueryValue = queryValue\n if (\n operator === 'in' &&\n Array.isArray(queryValue) &&\n queryValue.some((v) => v === null)\n ) {\n orConditions.push(isNull(resolvedColumn))\n resolvedQueryValue = queryValue.filter((v) => v !== null)\n }\n\n if (\n operator === 'contains' &&\n Array.isArray(queryValue) &&\n 'hasMany' in field &&\n field.hasMany &&\n ['number', 'select', 'text'].includes(field.type)\n ) {\n // Create OR conditions for each value in the array\n orConditions.push(\n ...queryValue.map((val) =>\n buildOperatorConstraint({\n adapter,\n column: resolvedColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: queryOperator as DrizzleResolvedOperator,\n value: val,\n }),\n ),\n )\n // Set constraint to combine all OR conditions\n const constraint = orConditions.length > 0 ? or(...orConditions) : undefined\n if (constraint) {\n constraints.push(constraint)\n }\n break\n }\n\n let constraint = buildOperatorConstraint({\n adapter,\n column: resolvedColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: queryOperator as DrizzleResolvedOperator,\n value: resolvedQueryValue,\n })\n\n if (\n adapter.limitedBoundParameters &&\n (operator === 'in' || operator === 'not_in') &&\n relationOrPath === 'id' &&\n Array.isArray(queryValue)\n ) {\n let isInvalid = false\n for (const val of queryValue) {\n if (typeof val === 'number' || val === null) {\n continue\n }\n if (typeof val === 'string') {\n if (!isValidStringID(val)) {\n isInvalid = true\n break\n } else {\n continue\n }\n }\n isInvalid = true\n break\n }\n\n if (isInvalid) {\n throw new APIError(`Invalid ID value in ${JSON.stringify(queryValue)}`)\n }\n\n constraints.push(\n sql.raw(\n `\"${getTableName(resolvedColumn.table)}\".\"${resolvedColumn.name}\" ${operator === 'in' ? 'IN' : 'NOT IN'} (${queryValue\n .map((e) => {\n if (e === null) {\n return `NULL`\n }\n\n if (typeof e === 'number') {\n return e\n }\n\n return `'${e}'`\n })\n .join(',')})`,\n ),\n )\n break\n }\n\n if (orConditions.length) {\n orConditions.push(constraint)\n constraint = or(...orConditions)\n }\n constraints.push(constraint)\n }\n }\n }\n }\n }\n }\n }\n if (constraints.length > 0) {\n if (result) {\n result = and(result, ...constraints)\n } else {\n result = and(...constraints)\n }\n }\n if (constraints.length === 1 && !result) {\n ;[result] = constraints\n }\n\n return result\n}\n\n/**\n * Builds a SQL condition for an operator containing a nested has-many relationship query.\n *\n * `contains`: at least one related document matches.\n * `not_equals`: no related documents match.\n * `equals`: all related documents match; an empty relationship also matches.\n *\n * A normal dotted relationship query adds joins to the parent query. That cannot implement\n * the negative cases, because they must inspect all relationship rows before deciding whether to\n * include the parent. A correlated `EXISTS` subquery keeps that decision scoped to one parent.\n *\n * @example\n * ```ts\n * // Find burgers with no unhealthy ingredients.\n * const where = {\n * ingredients: {\n * not_equals: {\n * isHealthy: { equals: false },\n * },\n * },\n * }\n * ```\n */\nfunction buildHasManyRelationshipCondition({\n adapter,\n aliasTable,\n fields,\n locale,\n operator,\n parentIsLocalized,\n relationOrPath,\n tableName,\n where,\n}: {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n locale?: string\n operator: HasManyRelationshipOperator\n parentIsLocalized: boolean\n relationOrPath: string\n tableName: string\n where: Where\n}): SQL {\n const relationshipFieldPath = relationOrPath.replace(/__/g, '.')\n\n if (!where || typeof where !== 'object' || Array.isArray(where)) {\n throw new QueryError([{ path: `${relationshipFieldPath}.${operator}` }])\n }\n\n const relationshipPath = resolveRelationshipPath({\n adapter,\n fields,\n locale,\n parentIsLocalized,\n path: relationshipFieldPath,\n })\n\n if (!relationshipPath) {\n throw new QueryError([{ path: `${relationshipFieldPath}.${operator}` }])\n }\n\n const relationshipField = relationshipPath.field\n\n if (!relationshipField.hasMany || typeof relationshipField.relationTo !== 'string') {\n throw new QueryError([{ path: `${relationshipFieldPath}.${operator}` }])\n }\n\n // Every related document matches an empty query, including when there are no related documents.\n if (operator === 'equals' && Object.keys(where).length === 0) {\n return sql`true`\n }\n\n const relationshipTableName = `${tableName}${adapter.relationshipsSuffix}`\n const relatedCollection = adapter.payload.collections[relationshipField.relationTo]\n const relatedTableName = adapter.tableNameMap.get(toSnakeCase(relatedCollection.config.slug))\n const relationshipLocale = relationshipPath.locale\n const { newAliasTable: relationshipTable } = getTableAlias({\n adapter,\n tableName: relationshipTableName,\n })\n const { newAliasTable: relatedTable } = getTableAlias({\n adapter,\n tableName: relatedTableName,\n })\n\n // Parse the nested `where` exactly like a normal query, but start from the related collection\n // and keep its joins inside the subquery.\n const nestedJoins: BuildQueryJoinAliases = []\n const relatedDocumentWhere =\n Object.keys(where).length > 0\n ? parseParams({\n adapter,\n aliasTable: relatedTable,\n context: { sort: undefined },\n fields: relatedCollection.config.flattenedFields,\n joins: nestedJoins,\n locale: relationshipLocale,\n parentIsLocalized: false,\n selectFields: {},\n tableName: relatedTableName,\n where,\n })\n : undefined\n\n // Correlate relationship rows back to the parent document currently being considered by the\n // outer query. The stored path distinguishes this field from other relationships on the parent.\n const outerTable = aliasTable ?? aliasedTable(adapter.tables[tableName], tableName)\n const relationshipRowConstraints: SQL[] = [\n eq(relationshipTable.parent, outerTable.id),\n relationshipPath.path.includes('%')\n ? like(relationshipTable.path, relationshipPath.path)\n : eq(relationshipTable.path, relationshipPath.path),\n ]\n\n if (relationshipLocale && relationshipLocale !== 'all' && relationshipPath.isLocalized) {\n relationshipRowConstraints.push(eq(relationshipTable.locale, relationshipLocale))\n }\n\n const relatedDocumentConstraints = [\n eq(relatedTable.id, relationshipTable[`${relationshipField.relationTo}ID`]),\n ]\n\n if (relatedDocumentWhere) {\n relatedDocumentConstraints.push(relatedDocumentWhere)\n }\n\n let relatedDocumentSubquery = (adapter.drizzle as any)\n .select({ id: relatedTable.id })\n .from(relatedTable)\n .$dynamic()\n\n for (const join of nestedJoins) {\n relatedDocumentSubquery = relatedDocumentSubquery[join.type ?? 'leftJoin'](\n join.table,\n join.condition,\n )\n }\n\n relatedDocumentSubquery = relatedDocumentSubquery.where(and(...relatedDocumentConstraints))\n\n const buildRelationshipRowsSubquery = (relatedDocumentCheck: SQL) =>\n (adapter.drizzle as any)\n .select({ id: relationshipTable.parent })\n .from(relationshipTable)\n .where(and(...relationshipRowConstraints, relatedDocumentCheck))\n\n switch (operator) {\n case 'contains':\n return exists(buildRelationshipRowsSubquery(exists(relatedDocumentSubquery)))\n\n case 'equals':\n // All related documents match when no relationship row points to one that fails.\n return notExists(buildRelationshipRowsSubquery(notExists(relatedDocumentSubquery)))\n\n case 'not_equals':\n return notExists(buildRelationshipRowsSubquery(exists(relatedDocumentSubquery)))\n }\n}\n"],"names":["aliasedTable","and","eq","exists","getTableName","isNotNull","isNull","like","notExists","notInArray","or","sql","PgUUID","APIError","QueryError","hasManyRelationshipOperatorSet","isNestedRelationshipQuery","validOperatorSet","toSnakeCase","escapeSQLValue","getNameFromDrizzleTable","isValidStringID","DistinctSymbol","isRawConstraint","buildAndOrConditions","buildOperatorConstraint","getTableAlias","getTableColumnFromPath","resolveRelationshipPath","sanitizeQueryValue","parseParams","adapter","aliasTable","context","fields","joins","locale","parentIsLocalized","selectFields","selectLocale","tableName","where","result","constraints","Object","keys","length","relationOrPath","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","pathOperators","operator","has","val","originalOperator","relationshipPath","path","replace","field","hasMany","relationTo","push","buildHasManyRelationshipCondition","columnName","columns","queryConstraints","getNotNullColumnByValue","pathSegments","rawColumn","table","collectionPath","split","value","resolvedColumn","forEach","col","constraintTable","indexOf","operators","equals","includes","type","blocksAsJSON","name","constraint","createJSONQuery","column","raw","segments","slice","unshift","jsonTable","getOwnPropertySymbols","jsonQuery","treatAsArray","treatRootAsArray","convertPathToJSONTraversal","operatorKeys","contains","wildcard","in","not_equals","not_in","not_like","formattedValue","map","v","join","jsonQuerySelector","rawSQLQuery","columnType","word","resolvedOperator","sanitizedQueryValue","isUUID","queryColumns","queryOperator","queryValue","wrapOperator","JSON","stringify","lng","lat","maxDistance","minDistance","geoConstraints","Number","isNaN","sort","rawSort","orConditions","resolvedQueryValue","some","filter","undefined","limitedBoundParameters","isInvalid","e","relationshipFieldPath","relationshipField","relationshipTableName","relationshipsSuffix","relatedCollection","payload","collections","relatedTableName","tableNameMap","get","config","slug","relationshipLocale","newAliasTable","relationshipTable","relatedTable","nestedJoins","relatedDocumentWhere","flattenedFields","outerTable","tables","relationshipRowConstraints","parent","id","isLocalized","relatedDocumentConstraints","relatedDocumentSubquery","drizzle","select","from","$dynamic","buildRelationshipRowsSubquery","relatedDocumentCheck"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type {\n FlattenedField,\n HasManyRelationshipOperator,\n Operator,\n PayloadRequest,\n Sort,\n Where,\n} from 'payload'\n\nimport {\n aliasedTable,\n and,\n eq,\n exists,\n getTableName,\n isNotNull,\n isNull,\n like,\n notExists,\n notInArray,\n or,\n sql,\n} from 'drizzle-orm'\nimport { PgUUID } from 'drizzle-orm/pg-core'\nimport { APIError, getFieldByPath, QueryError } from 'payload'\nimport {\n hasManyRelationshipOperatorSet,\n isNestedRelationshipQuery,\n validOperatorSet,\n} from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\nimport type { DrizzleResolvedOperator } from './operatorMap.js'\n\nimport { escapeSQLValue } from '../utilities/escapeSQLValue.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { isValidStringID } from '../utilities/isValidStringID.js'\nimport { DistinctSymbol, isRawConstraint } from '../utilities/rawConstraint.js'\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { buildOperatorConstraint } from './buildOperatorConstraint.js'\nimport { getTableAlias } from './getTableAlias.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\nimport { resolveRelationshipPath } from './resolveRelationshipPath.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\nexport type QueryContext = { rawSort?: SQL; sort: Sort }\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n context: QueryContext\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized: boolean\n req?: Partial<PayloadRequest>\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n where: Where\n}\n\nexport function parseParams({\n adapter,\n aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n req,\n selectFields,\n selectLocale,\n tableName,\n where,\n}: Args): SQL {\n let result: SQL\n const constraints: SQL[] = []\n\n if (typeof where === 'object' && Object.keys(where).length > 0) {\n // We need to determine if the whereKey is an AND, OR, or a schema path\n for (const relationOrPath of Object.keys(where)) {\n if (relationOrPath) {\n const condition = where[relationOrPath]\n let conditionOperator: typeof and | typeof or\n if (relationOrPath.toLowerCase() === 'and') {\n conditionOperator = and\n } else if (relationOrPath.toLowerCase() === 'or') {\n conditionOperator = or\n }\n if (Array.isArray(condition)) {\n const builtConditions = buildAndOrConditions({\n adapter,\n aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n req,\n selectFields,\n selectLocale,\n tableName,\n where: condition,\n })\n if (builtConditions.length > 0) {\n result = conditionOperator(...builtConditions)\n }\n } else {\n // It's a path - and there can be multiple comparisons on a single path.\n // For example - title like 'test' and title not equal to 'tester'\n // So we need to loop on keys again here to handle each operator independently\n const pathOperators = where[relationOrPath]\n if (typeof pathOperators === 'object') {\n for (let operator of Object.keys(pathOperators)) {\n if (validOperatorSet.has(operator as Operator)) {\n const val = where[relationOrPath][operator]\n const originalOperator = operator as Operator\n\n if (\n hasManyRelationshipOperatorSet.has(operator as HasManyRelationshipOperator) &&\n isNestedRelationshipQuery(val) &&\n !isRawConstraint(val)\n ) {\n const relationshipPath = resolveRelationshipPath({\n adapter,\n fields,\n locale,\n parentIsLocalized,\n path: relationOrPath.replace(/__/g, '.'),\n })\n\n if (\n relationshipPath?.field.hasMany &&\n typeof relationshipPath.field.relationTo === 'string'\n ) {\n constraints.push(\n buildHasManyRelationshipCondition({\n adapter,\n aliasTable,\n fields,\n locale,\n operator: operator as HasManyRelationshipOperator,\n parentIsLocalized,\n relationOrPath,\n tableName,\n where: val,\n }),\n )\n continue\n }\n\n // A join points to many related documents. Expanding the nested query into\n // prefixed dot-paths reuses the join's shared table alias, so every condition is\n // evaluated against the same joined row (same-document `contains` semantics).\n if (operator === 'contains' && !relationshipPath) {\n const joinField = getFieldByPath({\n fields,\n path: relationOrPath.replace(/__/g, '.'),\n })?.field\n\n if (joinField?.type === 'join') {\n constraints.push(\n parseParams({\n adapter,\n aliasTable,\n context,\n fields,\n joins,\n locale,\n parentIsLocalized,\n req,\n selectFields,\n selectLocale,\n tableName,\n where: prefixJoinContainsWhere({\n prefix: relationOrPath,\n where: val,\n }),\n }),\n )\n continue\n }\n }\n }\n\n const {\n columnName,\n columns,\n constraints: queryConstraints,\n field,\n getNotNullColumnByValue,\n pathSegments,\n rawColumn,\n table,\n } = getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath: relationOrPath,\n fields,\n joins,\n locale,\n parentIsLocalized,\n pathSegments: relationOrPath.replace(/__/g, '.').split('.'),\n req,\n selectFields,\n selectLocale,\n tableName,\n value: val,\n })\n\n const resolvedColumn =\n rawColumn ||\n (aliasTable && tableName === getNameFromDrizzleTable(table)\n ? aliasTable[columnName]\n : table[columnName])\n\n if (val === DistinctSymbol) {\n selectFields['_selected'] = resolvedColumn\n break\n }\n\n queryConstraints.forEach(({ columnName: col, table: constraintTable, value }) => {\n if (typeof value === 'string' && value.indexOf('%') > -1) {\n constraints.push(adapter.operators.like(constraintTable[col], value))\n } else {\n constraints.push(adapter.operators.equals(constraintTable[col], value))\n }\n })\n\n if (\n (['json', 'richText'].includes(field.type) ||\n (field.type === 'blocks' && adapter.blocksAsJSON)) &&\n Array.isArray(pathSegments) &&\n pathSegments.length > 1\n ) {\n if (adapter.name === 'postgres') {\n const constraint = adapter.createJSONQuery({\n column: rawColumn || table[columnName],\n operator,\n pathSegments,\n value: val,\n })\n\n constraints.push(sql.raw(constraint))\n break\n }\n\n const segments = pathSegments.slice(1)\n segments.unshift(table[columnName].name)\n\n if (field.type === 'richText') {\n // use the table name from the nearest join to handle blocks, arrays, etc. or use the tableName arg\n const jsonTable =\n joins.length === 0\n ? tableName\n : joins[joins.length - 1].table[\n Object.getOwnPropertySymbols(joins[joins.length - 1].table)[0]\n ]\n const jsonQuery = adapter.createJSONQuery({\n operator,\n pathSegments: segments,\n table: jsonTable,\n treatAsArray: ['children'],\n treatRootAsArray: true,\n value: val,\n })\n\n constraints.push(sql.raw(jsonQuery))\n break\n }\n\n const jsonQuery = adapter.convertPathToJSONTraversal(pathSegments)\n const operatorKeys: Record<string, { operator: string; wildcard: string }> = {\n contains: { operator: 'like', wildcard: '%' },\n equals: { operator: '=', wildcard: '' },\n exists: { operator: val === true ? 'is not null' : 'is null', wildcard: '' },\n in: { operator: 'in', wildcard: '' },\n like: { operator: 'like', wildcard: '%' },\n not_equals: { operator: '<>', wildcard: '' },\n not_in: { operator: 'not in', wildcard: '' },\n not_like: { operator: 'not like', wildcard: '%' },\n }\n\n let formattedValue = val\n if (\n adapter.name === 'sqlite' &&\n operator === 'equals' &&\n (typeof val === 'number' || typeof val === 'boolean')\n ) {\n formattedValue = val\n } else if (['in', 'not_in'].includes(operator) && Array.isArray(val)) {\n formattedValue = `(${val\n .map((v) => {\n const escaped = escapeSQLValue(v)\n return typeof v === 'string' ? `'${escaped}'` : String(escaped)\n })\n .join(',')})`\n } else {\n formattedValue = `'${operatorKeys[operator].wildcard}${escapeSQLValue(val)}${operatorKeys[operator].wildcard}'`\n }\n if (operator === 'exists') {\n formattedValue = ''\n }\n\n let jsonQuerySelector = `${table[columnName].name}${jsonQuery}`\n\n if (adapter.name === 'sqlite' && operator === 'not_like') {\n jsonQuerySelector = `COALESCE(${table[columnName].name}${jsonQuery}, '')`\n }\n\n const rawSQLQuery = `${jsonQuerySelector} ${operatorKeys[operator].operator} ${formattedValue}`\n\n constraints.push(sql.raw(rawSQLQuery))\n\n break\n }\n\n if (getNotNullColumnByValue) {\n const columnName = getNotNullColumnByValue(val)\n if (columnName) {\n constraints.push(isNotNull(table[columnName]))\n } else {\n throw new QueryError([{ path: relationOrPath }])\n }\n break\n }\n\n if (\n operator === 'like' &&\n (field.type === 'number' ||\n field.type === 'relationship' ||\n field.type === 'upload' ||\n table[columnName].columnType === 'PgUUID')\n ) {\n operator = 'equals'\n }\n\n if (operator === 'like') {\n constraints.push(\n and(\n ...val.split(' ').map((word) =>\n buildOperatorConstraint({\n adapter,\n column: table[columnName],\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: 'like',\n value: `%${word}%`,\n }),\n ),\n ),\n )\n break\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n columns,\n field,\n isUUID: table?.[columnName] instanceof PgUUID,\n operator,\n relationOrPath,\n val,\n })\n\n if (sanitizedQueryValue === null) {\n break\n }\n\n const {\n columns: queryColumns,\n operator: queryOperator,\n value: queryValue,\n } = sanitizedQueryValue\n\n // Handle polymorphic relationships by value\n if (queryColumns) {\n if (!queryColumns.length) {\n break\n }\n\n let wrapOperator = or\n\n if (queryValue === null && ['equals', 'not_equals'].includes(operator)) {\n if (operator === 'equals') {\n wrapOperator = and\n }\n\n constraints.push(\n wrapOperator(\n ...queryColumns.map(({ rawColumn }) =>\n operator === 'equals' ? isNull(rawColumn) : isNotNull(rawColumn),\n ),\n ),\n )\n break\n }\n\n if (['not_equals', 'not_in'].includes(operator)) {\n wrapOperator = and\n }\n\n constraints.push(\n wrapOperator(\n ...queryColumns.map(({ rawColumn, value }) =>\n buildOperatorConstraint({\n adapter,\n column: rawColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: queryOperator as DrizzleResolvedOperator,\n value,\n }),\n ),\n ),\n )\n\n break\n }\n\n if (queryOperator === 'not_equals' && queryValue !== null) {\n constraints.push(\n or(\n isNull(resolvedColumn),\n buildOperatorConstraint({\n adapter,\n column: resolvedColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: 'not_equals',\n value: queryValue,\n }),\n ),\n )\n break\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(queryValue) &&\n queryOperator === 'not_in'\n ) {\n constraints.push(\n sql`(${notInArray(table[columnName], queryValue)} OR\n ${table[columnName]}\n IS\n NULL)`,\n )\n\n break\n }\n\n if (operator === 'equals' && queryValue === null) {\n constraints.push(isNull(resolvedColumn))\n break\n }\n\n if (operator === 'not_equals' && queryValue === null) {\n constraints.push(isNotNull(resolvedColumn))\n break\n }\n\n if (field.type === 'point' && adapter.name === 'postgres') {\n switch (operator) {\n case 'intersects': {\n constraints.push(\n sql`ST_Intersects(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n case 'near': {\n const [lng, lat, maxDistance, minDistance] = queryValue as number[]\n const geoConstraints: SQL[] = []\n\n if (typeof maxDistance === 'number' && !Number.isNaN(maxDistance)) {\n geoConstraints.push(\n sql`ST_DWithin(${table[columnName]}::geography, ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)::geography, ${maxDistance})`,\n )\n }\n\n if (typeof minDistance === 'number' && !Number.isNaN(minDistance)) {\n geoConstraints.push(\n sql`ST_Distance(${table[columnName]}::geography, ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)::geography) >= ${minDistance}`,\n )\n }\n if (geoConstraints.length) {\n context.sort = relationOrPath\n context.rawSort = sql`${table[columnName]} <-> ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326)`\n constraints.push(and(...geoConstraints))\n }\n break\n }\n\n case 'within': {\n constraints.push(\n sql`ST_Within(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n default:\n break\n }\n break\n }\n\n const orConditions: SQL<unknown>[] = []\n let resolvedQueryValue = queryValue\n if (\n operator === 'in' &&\n Array.isArray(queryValue) &&\n queryValue.some((v) => v === null)\n ) {\n orConditions.push(isNull(resolvedColumn))\n resolvedQueryValue = queryValue.filter((v) => v !== null)\n }\n\n if (\n operator === 'contains' &&\n Array.isArray(queryValue) &&\n 'hasMany' in field &&\n field.hasMany &&\n ['number', 'select', 'text'].includes(field.type)\n ) {\n // Create OR conditions for each value in the array\n orConditions.push(\n ...queryValue.map((val) =>\n buildOperatorConstraint({\n adapter,\n column: resolvedColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: queryOperator as DrizzleResolvedOperator,\n value: val,\n }),\n ),\n )\n // Set constraint to combine all OR conditions\n const constraint = orConditions.length > 0 ? or(...orConditions) : undefined\n if (constraint) {\n constraints.push(constraint)\n }\n break\n }\n\n let constraint = buildOperatorConstraint({\n adapter,\n column: resolvedColumn,\n field,\n locale,\n originalOperator,\n path: relationOrPath,\n resolvedOperator: queryOperator as DrizzleResolvedOperator,\n value: resolvedQueryValue,\n })\n\n if (\n adapter.limitedBoundParameters &&\n (operator === 'in' || operator === 'not_in') &&\n relationOrPath === 'id' &&\n Array.isArray(queryValue)\n ) {\n let isInvalid = false\n for (const val of queryValue) {\n if (typeof val === 'number' || val === null) {\n continue\n }\n if (typeof val === 'string') {\n if (!isValidStringID(val)) {\n isInvalid = true\n break\n } else {\n continue\n }\n }\n isInvalid = true\n break\n }\n\n if (isInvalid) {\n throw new APIError(`Invalid ID value in ${JSON.stringify(queryValue)}`)\n }\n\n constraints.push(\n sql.raw(\n `\"${getTableName(resolvedColumn.table)}\".\"${resolvedColumn.name}\" ${operator === 'in' ? 'IN' : 'NOT IN'} (${queryValue\n .map((e) => {\n if (e === null) {\n return `NULL`\n }\n\n if (typeof e === 'number') {\n return e\n }\n\n return `'${e}'`\n })\n .join(',')})`,\n ),\n )\n break\n }\n\n if (orConditions.length) {\n orConditions.push(constraint)\n constraint = or(...orConditions)\n }\n constraints.push(constraint)\n }\n }\n }\n }\n }\n }\n }\n if (constraints.length > 0) {\n if (result) {\n result = and(result, ...constraints)\n } else {\n result = and(...constraints)\n }\n }\n if (constraints.length === 1 && !result) {\n ;[result] = constraints\n }\n\n return result\n}\n\n/**\n * Prefixes every field path in a join's nested `contains` query with the join field's path, so the\n * query can be resolved through the join's shared table alias.\n *\n * @example\n * ```ts\n * prefixJoinContainsWhere({ prefix: 'comments', where: { and: [{ text: { equals: 'hi' } }] } })\n * // => { and: [{ 'comments.text': { equals: 'hi' } }] }\n * ```\n */\nfunction prefixJoinContainsWhere({ prefix, where }: { prefix: string; where: Where }): Where {\n const prefixedWhere: Where = {}\n\n for (const [key, value] of Object.entries(where)) {\n if (['and', 'or'].includes(key.toLowerCase()) && Array.isArray(value)) {\n prefixedWhere[key] = value.map((nestedWhere) =>\n prefixJoinContainsWhere({ prefix, where: nestedWhere }),\n )\n } else {\n prefixedWhere[`${prefix}.${key}`] = value\n }\n }\n\n return prefixedWhere\n}\n\n/**\n * Builds a SQL condition for an operator containing a nested has-many relationship query.\n *\n * `contains`: at least one related document matches.\n * `not_equals`: no related documents match.\n * `equals`: all related documents match; an empty relationship also matches.\n *\n * A normal dotted relationship query adds joins to the parent query. That cannot implement\n * the negative cases, because they must inspect all relationship rows before deciding whether to\n * include the parent. A correlated `EXISTS` subquery keeps that decision scoped to one parent.\n *\n * @example\n * ```ts\n * // Find burgers with no unhealthy ingredients.\n * const where = {\n * ingredients: {\n * not_equals: {\n * isHealthy: { equals: false },\n * },\n * },\n * }\n * ```\n */\nfunction buildHasManyRelationshipCondition({\n adapter,\n aliasTable,\n fields,\n locale,\n operator,\n parentIsLocalized,\n relationOrPath,\n tableName,\n where,\n}: {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n locale?: string\n operator: HasManyRelationshipOperator\n parentIsLocalized: boolean\n relationOrPath: string\n tableName: string\n where: Where\n}): SQL {\n const relationshipFieldPath = relationOrPath.replace(/__/g, '.')\n\n if (!where || typeof where !== 'object' || Array.isArray(where)) {\n throw new QueryError([{ path: `${relationshipFieldPath}.${operator}` }])\n }\n\n const relationshipPath = resolveRelationshipPath({\n adapter,\n fields,\n locale,\n parentIsLocalized,\n path: relationshipFieldPath,\n })\n\n if (!relationshipPath) {\n throw new QueryError([{ path: `${relationshipFieldPath}.${operator}` }])\n }\n\n const relationshipField = relationshipPath.field\n\n if (!relationshipField.hasMany || typeof relationshipField.relationTo !== 'string') {\n throw new QueryError([{ path: `${relationshipFieldPath}.${operator}` }])\n }\n\n // Every related document matches an empty query, including when there are no related documents.\n if (operator === 'equals' && Object.keys(where).length === 0) {\n return sql`true`\n }\n\n const relationshipTableName = `${tableName}${adapter.relationshipsSuffix}`\n const relatedCollection = adapter.payload.collections[relationshipField.relationTo]\n const relatedTableName = adapter.tableNameMap.get(toSnakeCase(relatedCollection.config.slug))\n const relationshipLocale = relationshipPath.locale\n const { newAliasTable: relationshipTable } = getTableAlias({\n adapter,\n tableName: relationshipTableName,\n })\n const { newAliasTable: relatedTable } = getTableAlias({\n adapter,\n tableName: relatedTableName,\n })\n\n // Parse the nested `where` exactly like a normal query, but start from the related collection\n // and keep its joins inside the subquery.\n const nestedJoins: BuildQueryJoinAliases = []\n const relatedDocumentWhere =\n Object.keys(where).length > 0\n ? parseParams({\n adapter,\n aliasTable: relatedTable,\n context: { sort: undefined },\n fields: relatedCollection.config.flattenedFields,\n joins: nestedJoins,\n locale: relationshipLocale,\n parentIsLocalized: false,\n selectFields: {},\n tableName: relatedTableName,\n where,\n })\n : undefined\n\n // Correlate relationship rows back to the parent document currently being considered by the\n // outer query. The stored path distinguishes this field from other relationships on the parent.\n const outerTable = aliasTable ?? aliasedTable(adapter.tables[tableName], tableName)\n const relationshipRowConstraints: SQL[] = [\n eq(relationshipTable.parent, outerTable.id),\n relationshipPath.path.includes('%')\n ? like(relationshipTable.path, relationshipPath.path)\n : eq(relationshipTable.path, relationshipPath.path),\n ]\n\n if (relationshipLocale && relationshipLocale !== 'all' && relationshipPath.isLocalized) {\n relationshipRowConstraints.push(eq(relationshipTable.locale, relationshipLocale))\n }\n\n const relatedDocumentConstraints = [\n eq(relatedTable.id, relationshipTable[`${relationshipField.relationTo}ID`]),\n ]\n\n if (relatedDocumentWhere) {\n relatedDocumentConstraints.push(relatedDocumentWhere)\n }\n\n let relatedDocumentSubquery = (adapter.drizzle as any)\n .select({ id: relatedTable.id })\n .from(relatedTable)\n .$dynamic()\n\n for (const join of nestedJoins) {\n relatedDocumentSubquery = relatedDocumentSubquery[join.type ?? 'leftJoin'](\n join.table,\n join.condition,\n )\n }\n\n relatedDocumentSubquery = relatedDocumentSubquery.where(and(...relatedDocumentConstraints))\n\n const buildRelationshipRowsSubquery = (relatedDocumentCheck: SQL) =>\n (adapter.drizzle as any)\n .select({ id: relationshipTable.parent })\n .from(relationshipTable)\n .where(and(...relationshipRowConstraints, relatedDocumentCheck))\n\n switch (operator) {\n case 'contains':\n return exists(buildRelationshipRowsSubquery(exists(relatedDocumentSubquery)))\n\n case 'equals':\n // All related documents match when no relationship row points to one that fails.\n return notExists(buildRelationshipRowsSubquery(notExists(relatedDocumentSubquery)))\n\n case 'not_equals':\n return notExists(buildRelationshipRowsSubquery(exists(relatedDocumentSubquery)))\n }\n}\n"],"names":["aliasedTable","and","eq","exists","getTableName","isNotNull","isNull","like","notExists","notInArray","or","sql","PgUUID","APIError","getFieldByPath","QueryError","hasManyRelationshipOperatorSet","isNestedRelationshipQuery","validOperatorSet","toSnakeCase","escapeSQLValue","getNameFromDrizzleTable","isValidStringID","DistinctSymbol","isRawConstraint","buildAndOrConditions","buildOperatorConstraint","getTableAlias","getTableColumnFromPath","resolveRelationshipPath","sanitizeQueryValue","parseParams","adapter","aliasTable","context","fields","joins","locale","parentIsLocalized","req","selectFields","selectLocale","tableName","where","result","constraints","Object","keys","length","relationOrPath","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","pathOperators","operator","has","val","originalOperator","relationshipPath","path","replace","field","hasMany","relationTo","push","buildHasManyRelationshipCondition","joinField","type","prefixJoinContainsWhere","prefix","columnName","columns","queryConstraints","getNotNullColumnByValue","pathSegments","rawColumn","table","collectionPath","split","value","resolvedColumn","forEach","col","constraintTable","indexOf","operators","equals","includes","blocksAsJSON","name","constraint","createJSONQuery","column","raw","segments","slice","unshift","jsonTable","getOwnPropertySymbols","jsonQuery","treatAsArray","treatRootAsArray","convertPathToJSONTraversal","operatorKeys","contains","wildcard","in","not_equals","not_in","not_like","formattedValue","map","v","escaped","String","join","jsonQuerySelector","rawSQLQuery","columnType","word","resolvedOperator","sanitizedQueryValue","isUUID","queryColumns","queryOperator","queryValue","wrapOperator","JSON","stringify","lng","lat","maxDistance","minDistance","geoConstraints","Number","isNaN","sort","rawSort","orConditions","resolvedQueryValue","some","filter","undefined","limitedBoundParameters","isInvalid","e","prefixedWhere","key","entries","nestedWhere","relationshipFieldPath","relationshipField","relationshipTableName","relationshipsSuffix","relatedCollection","payload","collections","relatedTableName","tableNameMap","get","config","slug","relationshipLocale","newAliasTable","relationshipTable","relatedTable","nestedJoins","relatedDocumentWhere","flattenedFields","outerTable","tables","relationshipRowConstraints","parent","id","isLocalized","relatedDocumentConstraints","relatedDocumentSubquery","drizzle","select","from","$dynamic","buildRelationshipRowsSubquery","relatedDocumentCheck"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"queryDrafts.d.ts","sourceRoot":"","sources":["../src/queryDrafts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,SAAS,CAAA;AASrE,eAAO,MAAM,WAAW,EAAE,WAwCzB,CAAA"}
1
+ {"version":3,"file":"queryDrafts.d.ts","sourceRoot":"","sources":["../src/queryDrafts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,SAAS,CAAA;AAiBrE,eAAO,MAAM,WAAW,EAAE,WAuDzB,CAAA"}
@@ -1,17 +1,32 @@
1
- import { buildVersionCollectionFields, combineQueries } from 'payload';
1
+ import { buildVersionCollectionFields, combineQueries, projectBranchVersionParent, resolveBranchReadState, resolveBranchVersionQuery, rewriteBranchVersionParents, withBranchVersionSelect } from 'payload';
2
2
  import toSnakeCase from 'to-snake-case';
3
3
  import { findMany } from './find/findMany.js';
4
- export const queryDrafts = async function queryDrafts({ collection, joins, limit, locale, page = 1, pagination, req, select, sort, where }) {
4
+ export const queryDrafts = async function queryDrafts({ branch, collection, joins, limit, locale, page = 1, pagination, req, select, sort, where }) {
5
5
  const collectionConfig = this.payload.collections[collection].config;
6
6
  const tableName = this.tableNameMap.get(`_${toSnakeCase(collectionConfig.slug)}${this.versionsSuffix}`);
7
7
  const fields = buildVersionCollectionFields(this.payload.config, collectionConfig, true);
8
+ const branchReadState = resolveBranchReadState({
9
+ branch,
10
+ collectionSlug: collection,
11
+ req
12
+ });
13
+ const branchedWhere = branchReadState.useBranching ? rewriteBranchVersionParents(where) : await resolveBranchVersionQuery({
14
+ branch,
15
+ collectionSlug: collection,
16
+ req,
17
+ where
18
+ });
8
19
  const combinedWhere = combineQueries({
9
20
  latest: {
10
21
  equals: true
11
22
  }
12
- }, where);
23
+ }, branchedWhere ?? {});
13
24
  const result = await findMany({
14
25
  adapter: this,
26
+ branchVisibility: branchReadState.useBranching ? {
27
+ branch: branchReadState.branch,
28
+ collectionSlug: collection
29
+ } : undefined,
15
30
  collectionSlug: collection,
16
31
  fields,
17
32
  joins,
@@ -20,7 +35,12 @@ export const queryDrafts = async function queryDrafts({ collection, joins, limit
20
35
  page,
21
36
  pagination,
22
37
  req,
23
- select,
38
+ select: withBranchVersionSelect({
39
+ branch,
40
+ collectionSlug: collection,
41
+ req,
42
+ select
43
+ }),
24
44
  sort,
25
45
  tableName,
26
46
  versions: true,
@@ -29,8 +49,10 @@ export const queryDrafts = async function queryDrafts({ collection, joins, limit
29
49
  return {
30
50
  ...result,
31
51
  docs: result.docs.map((doc)=>{
52
+ // A branch version's `parent` is the shadow row's primary key, so the
53
+ // canonical document ID comes from `_branchParent` when present.
32
54
  doc = {
33
- id: doc.parent,
55
+ id: projectBranchVersionParent(doc),
34
56
  ...doc.version
35
57
  };
36
58
  return doc;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/queryDrafts.ts"],"sourcesContent":["import type { QueryDrafts, SanitizedCollectionConfig } from 'payload'\n\nimport { buildVersionCollectionFields, combineQueries } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { findMany } from './find/findMany.js'\n\nexport const queryDrafts: QueryDrafts = async function queryDrafts(\n this: DrizzleAdapter,\n { collection, joins, limit, locale, page = 1, pagination, req, select, sort, where },\n) {\n const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config\n const tableName = this.tableNameMap.get(\n `_${toSnakeCase(collectionConfig.slug)}${this.versionsSuffix}`,\n )\n const fields = buildVersionCollectionFields(this.payload.config, collectionConfig, true)\n\n const combinedWhere = combineQueries({ latest: { equals: true } }, where)\n\n const result = await findMany({\n adapter: this,\n collectionSlug: collection,\n fields,\n joins,\n limit,\n locale,\n page,\n pagination,\n req,\n select,\n sort,\n tableName,\n versions: true,\n where: combinedWhere,\n })\n\n return {\n ...result,\n docs: result.docs.map((doc) => {\n doc = {\n id: doc.parent,\n ...doc.version,\n }\n\n return doc\n }),\n }\n}\n"],"names":["buildVersionCollectionFields","combineQueries","toSnakeCase","findMany","queryDrafts","collection","joins","limit","locale","page","pagination","req","select","sort","where","collectionConfig","payload","collections","config","tableName","tableNameMap","get","slug","versionsSuffix","fields","combinedWhere","latest","equals","result","adapter","collectionSlug","versions","docs","map","doc","id","parent","version"],"mappings":"AAEA,SAASA,4BAA4B,EAAEC,cAAc,QAAQ,UAAS;AACtE,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,QAAQ,QAAQ,qBAAoB;AAE7C,OAAO,MAAMC,cAA2B,eAAeA,YAErD,EAAEC,UAAU,EAAEC,KAAK,EAAEC,KAAK,EAAEC,MAAM,EAAEC,OAAO,CAAC,EAAEC,UAAU,EAAEC,GAAG,EAAEC,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE;IAEpF,MAAMC,mBAA8C,IAAI,CAACC,OAAO,CAACC,WAAW,CAACZ,WAAW,CAACa,MAAM;IAC/F,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CACrC,CAAC,CAAC,EAAEnB,YAAYa,iBAAiBO,IAAI,IAAI,IAAI,CAACC,cAAc,EAAE;IAEhE,MAAMC,SAASxB,6BAA6B,IAAI,CAACgB,OAAO,CAACE,MAAM,EAAEH,kBAAkB;IAEnF,MAAMU,gBAAgBxB,eAAe;QAAEyB,QAAQ;YAAEC,QAAQ;QAAK;IAAE,GAAGb;IAEnE,MAAMc,SAAS,MAAMzB,SAAS;QAC5B0B,SAAS,IAAI;QACbC,gBAAgBzB;QAChBmB;QACAlB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAM;QACAY,UAAU;QACVjB,OAAOW;IACT;IAEA,OAAO;QACL,GAAGG,MAAM;QACTI,MAAMJ,OAAOI,IAAI,CAACC,GAAG,CAAC,CAACC;YACrBA,MAAM;gBACJC,IAAID,IAAIE,MAAM;gBACd,GAAGF,IAAIG,OAAO;YAChB;YAEA,OAAOH;QACT;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../src/queryDrafts.ts"],"sourcesContent":["import type { QueryDrafts, SanitizedCollectionConfig } from 'payload'\n\nimport {\n buildVersionCollectionFields,\n combineQueries,\n projectBranchVersionParent,\n resolveBranchReadState,\n resolveBranchVersionQuery,\n rewriteBranchVersionParents,\n withBranchVersionSelect,\n} from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { findMany } from './find/findMany.js'\n\nexport const queryDrafts: QueryDrafts = async function queryDrafts(\n this: DrizzleAdapter,\n { branch, collection, joins, limit, locale, page = 1, pagination, req, select, sort, where },\n) {\n const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config\n const tableName = this.tableNameMap.get(\n `_${toSnakeCase(collectionConfig.slug)}${this.versionsSuffix}`,\n )\n const fields = buildVersionCollectionFields(this.payload.config, collectionConfig, true)\n\n const branchReadState = resolveBranchReadState({ branch, collectionSlug: collection, req })\n const branchedWhere = branchReadState.useBranching\n ? rewriteBranchVersionParents(where)\n : await resolveBranchVersionQuery({\n branch,\n collectionSlug: collection,\n req,\n where,\n })\n\n const combinedWhere = combineQueries({ latest: { equals: true } }, branchedWhere ?? {})\n\n const result = await findMany({\n adapter: this,\n branchVisibility: branchReadState.useBranching\n ? { branch: branchReadState.branch, collectionSlug: collection }\n : undefined,\n collectionSlug: collection,\n fields,\n joins,\n limit,\n locale,\n page,\n pagination,\n req,\n select: withBranchVersionSelect({ branch, collectionSlug: collection, req, select }),\n sort,\n tableName,\n versions: true,\n where: combinedWhere,\n })\n\n return {\n ...result,\n docs: result.docs.map((doc) => {\n // A branch version's `parent` is the shadow row's primary key, so the\n // canonical document ID comes from `_branchParent` when present.\n doc = {\n id: projectBranchVersionParent(doc),\n ...doc.version,\n }\n\n return doc\n }),\n }\n}\n"],"names":["buildVersionCollectionFields","combineQueries","projectBranchVersionParent","resolveBranchReadState","resolveBranchVersionQuery","rewriteBranchVersionParents","withBranchVersionSelect","toSnakeCase","findMany","queryDrafts","branch","collection","joins","limit","locale","page","pagination","req","select","sort","where","collectionConfig","payload","collections","config","tableName","tableNameMap","get","slug","versionsSuffix","fields","branchReadState","collectionSlug","branchedWhere","useBranching","combinedWhere","latest","equals","result","adapter","branchVisibility","undefined","versions","docs","map","doc","id","version"],"mappings":"AAEA,SACEA,4BAA4B,EAC5BC,cAAc,EACdC,0BAA0B,EAC1BC,sBAAsB,EACtBC,yBAAyB,EACzBC,2BAA2B,EAC3BC,uBAAuB,QAClB,UAAS;AAChB,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,QAAQ,QAAQ,qBAAoB;AAE7C,OAAO,MAAMC,cAA2B,eAAeA,YAErD,EAAEC,MAAM,EAAEC,UAAU,EAAEC,KAAK,EAAEC,KAAK,EAAEC,MAAM,EAAEC,OAAO,CAAC,EAAEC,UAAU,EAAEC,GAAG,EAAEC,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE;IAE5F,MAAMC,mBAA8C,IAAI,CAACC,OAAO,CAACC,WAAW,CAACZ,WAAW,CAACa,MAAM;IAC/F,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CACrC,CAAC,CAAC,EAAEpB,YAAYc,iBAAiBO,IAAI,IAAI,IAAI,CAACC,cAAc,EAAE;IAEhE,MAAMC,SAAS9B,6BAA6B,IAAI,CAACsB,OAAO,CAACE,MAAM,EAAEH,kBAAkB;IAEnF,MAAMU,kBAAkB5B,uBAAuB;QAAEO;QAAQsB,gBAAgBrB;QAAYM;IAAI;IACzF,MAAMgB,gBAAgBF,gBAAgBG,YAAY,GAC9C7B,4BAA4Be,SAC5B,MAAMhB,0BAA0B;QAC9BM;QACAsB,gBAAgBrB;QAChBM;QACAG;IACF;IAEJ,MAAMe,gBAAgBlC,eAAe;QAAEmC,QAAQ;YAAEC,QAAQ;QAAK;IAAE,GAAGJ,iBAAiB,CAAC;IAErF,MAAMK,SAAS,MAAM9B,SAAS;QAC5B+B,SAAS,IAAI;QACbC,kBAAkBT,gBAAgBG,YAAY,GAC1C;YAAExB,QAAQqB,gBAAgBrB,MAAM;YAAEsB,gBAAgBrB;QAAW,IAC7D8B;QACJT,gBAAgBrB;QAChBmB;QACAlB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC,QAAQZ,wBAAwB;YAAEI;YAAQsB,gBAAgBrB;YAAYM;YAAKC;QAAO;QAClFC;QACAM;QACAiB,UAAU;QACVtB,OAAOe;IACT;IAEA,OAAO;QACL,GAAGG,MAAM;QACTK,MAAML,OAAOK,IAAI,CAACC,GAAG,CAAC,CAACC;YACrB,sEAAsE;YACtE,iEAAiE;YACjEA,MAAM;gBACJC,IAAI5C,2BAA2B2C;gBAC/B,GAAGA,IAAIE,OAAO;YAChB;YAEA,OAAOF;QACT;IACF;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/schema/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAKrE,OAAO,KAAK,EACV,cAAc,EACd,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EAGR,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAA;AAQpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACvC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC/C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACtC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAA;IAC1C,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrC,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;IACnC,gBAAgB,EAAE,WAAW,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,UAAU,0XAsBpB,IAAI,KAAG,MAisBT,CAAA"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/schema/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAKrE,OAAO,KAAK,EACV,cAAc,EACd,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EAGR,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAA;AAQpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACvC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC/C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACtC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAA;IAC1C,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrC,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;IACnC,gBAAgB,EAAE,WAAW,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,UAAU,0XAsBpB,IAAI,KAAG,MA+sBT,CAAA"}
@@ -1,4 +1,4 @@
1
- import { InvalidConfiguration } from 'payload';
1
+ import { branchField, InvalidConfiguration, MAIN_BRANCH } from 'payload';
2
2
  import toSnakeCase from 'to-snake-case';
3
3
  import { createTableName } from '../createTableName.js';
4
4
  import { buildForeignKeyName } from '../utilities/buildForeignKeyName.js';
@@ -110,13 +110,13 @@ export const buildTable = ({ adapter, baseColumns = {}, baseForeignKeys = {}, ba
110
110
  };
111
111
  localesIndexes._localeParent = {
112
112
  name: buildIndexName({
113
- name: `${localeTableName}_locale_parent_id_unique`,
113
+ name: `${localeTableName}_parent_id_locale_unique`,
114
114
  adapter,
115
115
  appendSuffix: false
116
116
  }),
117
117
  on: [
118
- '_locale',
119
- '_parentID'
118
+ '_parentID',
119
+ '_locale'
120
120
  ],
121
121
  unique: true
122
122
  };
@@ -189,28 +189,31 @@ export const buildTable = ({ adapter, baseColumns = {}, baseForeignKeys = {}, ba
189
189
  }
190
190
  if (compoundIndexes) {
191
191
  for (const index of compoundIndexes){
192
- let someLocalized = null;
192
+ const hasLocalizedField = index.fields.some((field)=>field.pathHasLocalized);
193
+ const canStoreInLocalesTable = index.fields.every(({ path, pathHasLocalized })=>pathHasLocalized || path === branchField);
194
+ const shouldUseLocalesTable = hasLocalizedField && canStoreInLocalesTable;
193
195
  const columns = [];
194
- const getTableToUse = ()=>{
195
- if (someLocalized) {
196
- return localesTable;
197
- }
198
- return table;
199
- };
196
+ const tableToUse = shouldUseLocalesTable ? localesTable : table;
200
197
  for (const { path, pathHasLocalized } of index.fields){
201
- if (someLocalized === null) {
202
- someLocalized = pathHasLocalized;
203
- }
204
- if (someLocalized !== pathHasLocalized) {
205
- throw new InvalidConfiguration(`Compound indexes within localized and non localized fields are not supported in SQL. Expected ${path} to be ${someLocalized ? 'non' : ''} localized.`);
198
+ const canStoreFieldInTable = pathHasLocalized === shouldUseLocalesTable || shouldUseLocalesTable && path === branchField;
199
+ if (!canStoreFieldInTable) {
200
+ throw new InvalidConfiguration(`Compound indexes within localized and non localized fields are not supported in SQL. Expected ${path} to be ${shouldUseLocalesTable ? '' : 'non'} localized.`);
206
201
  }
207
202
  const columnPath = path.replaceAll('.', '_');
208
- if (!getTableToUse().columns[columnPath]) {
209
- throw new InvalidConfiguration(`Column ${columnPath} for compound index on ${path} was not found in the ${getTableToUse().name} table.`);
203
+ if (shouldUseLocalesTable && path === branchField && !tableToUse.columns[columnPath]) {
204
+ tableToUse.columns[columnPath] = {
205
+ name: branchField,
206
+ type: 'varchar',
207
+ default: MAIN_BRANCH,
208
+ notNull: true
209
+ };
210
+ }
211
+ if (!tableToUse.columns[columnPath]) {
212
+ throw new InvalidConfiguration(`Column ${columnPath} for compound index on ${path} was not found in the ${tableToUse.name} table.`);
210
213
  }
211
214
  columns.push(columnPath);
212
215
  }
213
- if (someLocalized) {
216
+ if (shouldUseLocalesTable) {
214
217
  columns.push('_locale');
215
218
  }
216
219
  let name = columns.join('_');
@@ -222,11 +225,16 @@ export const buildTable = ({ adapter, baseColumns = {}, baseForeignKeys = {}, ba
222
225
  name,
223
226
  adapter
224
227
  });
225
- getTableToUse().indexes[indexName] = {
228
+ tableToUse.indexes[indexName] = {
226
229
  name: indexName,
227
230
  on: columns,
228
231
  unique: disableUnique ? false : index.unique
229
232
  };
233
+ const userFields = index.fields.filter(({ path })=>path !== branchField);
234
+ if (!disableUnique && index.unique && userFields.length === 1) {
235
+ adapter.fieldConstraints[tableToUse.name] ??= {};
236
+ adapter.fieldConstraints[tableToUse.name][indexName] = userFields[0].path;
237
+ }
230
238
  }
231
239
  }
232
240
  if (isRoot) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schema/build.ts"],"sourcesContent":["import type { FlattenedField, SanitizedCompoundIndex } from 'payload'\n\nimport { InvalidConfiguration } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n DrizzleAdapter,\n IDType,\n RawColumn,\n RawForeignKey,\n RawIndex,\n RawRelation,\n RawTable,\n RelationMap,\n SetColumnID,\n} from '../types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { buildForeignKeyName } from '../utilities/buildForeignKeyName.js'\nimport { buildIndexName } from '../utilities/buildIndexName.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n baseColumns?: Record<string, RawColumn>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseForeignKeys?: Record<string, RawForeignKey>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseIndexes?: Record<string, RawIndex>\n blocksTableNameMap: Record<string, number>\n buildNumbers?: boolean\n buildRelationships?: boolean\n compoundIndexes?: SanitizedCompoundIndex[]\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique: boolean\n fields: FlattenedField[]\n parentIsLocalized: boolean\n rootRelationships?: Set<string>\n rootRelationsToBuild?: RelationMap\n rootTableIDColType?: IDType\n rootTableName?: string\n rootUniqueRelationships?: Set<string>\n setColumnID: SetColumnID\n tableName: string\n timestamps?: boolean\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: RelationMap\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseForeignKeys = {},\n baseIndexes = {},\n blocksTableNameMap,\n compoundIndexes,\n disableNotNull,\n disableRelsTableUnique = false,\n disableUnique = false,\n fields,\n parentIsLocalized,\n rootRelationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n rootUniqueRelationships,\n setColumnID,\n tableName,\n timestamps,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const isRoot = !incomingRootTableName\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, RawColumn> = baseColumns\n const indexes: Record<string, RawIndex> = baseIndexes\n\n const localesColumns: Record<string, RawColumn> = {}\n const localesIndexes: Record<string, RawIndex> = {}\n let localesTable: RawTable\n let textsTable: RawTable\n let numbersTable: RawTable\n\n // Relationships to the base collection\n const relationships: Set<string> = rootRelationships || new Set()\n\n // Unique relationships to the base collection\n const uniqueRelationships: Set<string> = rootUniqueRelationships || new Set()\n\n let relationshipsTable: RawTable\n\n // Drizzle relations\n const relationsToBuild: RelationMap = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n const {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n blocksTableNameMap,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentIsLocalized,\n parentTableName: tableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n setColumnID,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n // split the relationsToBuild by localized and non-localized\n const localizedRelations = new Map()\n const nonLocalizedRelations = new Map()\n\n relationsToBuild.forEach(({ type, localized, relationName, target }, key) => {\n const map = localized ? localizedRelations : nonLocalizedRelations\n map.set(key, { type, relationName, target })\n })\n\n if (timestamps) {\n columns.createdAt = {\n name: 'created_at',\n type: 'timestamp',\n defaultNow: true,\n mode: 'string',\n notNull: true,\n precision: 3,\n withTimezone: true,\n }\n\n columns.updatedAt = {\n name: 'updated_at',\n type: 'timestamp',\n defaultNow: true,\n mode: 'string',\n notNull: true,\n precision: 3,\n withTimezone: true,\n }\n }\n\n const table: RawTable = {\n name: tableName,\n columns,\n foreignKeys: baseForeignKeys,\n indexes,\n }\n\n adapter.rawTables[tableName] = table\n\n if (hasLocalizedField || localizedRelations.size) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n adapter.rawTables[localeTableName] = localesTable\n\n localesColumns.id = {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n }\n\n localesColumns._locale = {\n name: '_locale',\n type: 'enum',\n locale: true,\n notNull: true,\n }\n\n localesColumns._parentID = {\n name: '_parent_id',\n type: idColType,\n notNull: true,\n }\n\n localesIndexes._localeParent = {\n name: buildIndexName({\n name: `${localeTableName}_locale_parent_id_unique`,\n adapter,\n appendSuffix: false,\n }),\n on: ['_locale', '_parentID'],\n unique: true,\n }\n\n localesTable = {\n name: localeTableName,\n columns: localesColumns,\n foreignKeys: {\n _parentIdFk: {\n name: buildForeignKeyName({ name: `${localeTableName}_parent_id`, adapter }),\n columns: ['_parentID'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: localesIndexes,\n }\n\n adapter.rawTables[localeTableName] = localesTable\n\n const localeRelations: Record<string, RawRelation> = {\n _parentID: {\n type: 'one',\n fields: [\n {\n name: '_parentID',\n table: localeTableName,\n },\n ],\n references: ['id'],\n relationName: '_locales',\n to: tableName,\n },\n }\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n localeRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: localeTableName,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n if (type === 'many') {\n localeRelations[key] = {\n type: 'many',\n relationName: key,\n to: target,\n }\n }\n })\n adapter.rawRelations[localeTableName] = localeRelations\n }\n\n if (compoundIndexes) {\n for (const index of compoundIndexes) {\n let someLocalized: boolean | null = null\n const columns: string[] = []\n\n const getTableToUse = () => {\n if (someLocalized) {\n return localesTable\n }\n\n return table\n }\n\n for (const { path, pathHasLocalized } of index.fields) {\n if (someLocalized === null) {\n someLocalized = pathHasLocalized\n }\n\n if (someLocalized !== pathHasLocalized) {\n throw new InvalidConfiguration(\n `Compound indexes within localized and non localized fields are not supported in SQL. Expected ${path} to be ${someLocalized ? 'non' : ''} localized.`,\n )\n }\n\n const columnPath = path.replaceAll('.', '_')\n\n if (!getTableToUse().columns[columnPath]) {\n throw new InvalidConfiguration(\n `Column ${columnPath} for compound index on ${path} was not found in the ${getTableToUse().name} table.`,\n )\n }\n\n columns.push(columnPath)\n }\n\n if (someLocalized) {\n columns.push('_locale')\n }\n\n let name = columns.join('_')\n // truncate against the limit, buildIndexName will handle collisions\n if (name.length > 63) {\n name = 'compound_index'\n }\n\n const indexName = buildIndexName({ name, adapter })\n\n getTableToUse().indexes[indexName] = {\n name: indexName,\n on: columns,\n unique: disableUnique ? false : index.unique,\n }\n }\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n adapter.rawTables[textsTableName] = textsTable\n\n const columns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n\n notNull: true,\n },\n text: {\n name: 'text',\n type: 'varchar',\n },\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const textsTableIndexes: Record<string, RawIndex> = {\n orderParentIdx: {\n name: buildIndexName({\n name: `${textsTableName}_order_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['order', 'parent'],\n },\n }\n\n if (hasManyTextField === 'index') {\n textsTableIndexes.text_idx = {\n name: buildIndexName({ name: `${textsTableName}_text`, adapter }),\n on: 'text',\n }\n }\n\n if (hasLocalizedManyTextField) {\n textsTableIndexes.localeParent = {\n name: buildIndexName({\n name: `${textsTableName}_locale_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['locale', 'parent'],\n }\n }\n\n textsTable = {\n name: textsTableName,\n columns,\n foreignKeys: {\n parentFk: {\n name: buildForeignKeyName({ name: `${textsTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: textsTableIndexes,\n }\n\n adapter.rawTables[textsTableName] = textsTable\n\n adapter.rawRelations[textsTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: textsTableName,\n },\n ],\n references: ['id'],\n relationName: '_texts',\n to: tableName,\n },\n }\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n adapter.rawTables[numbersTableName] = numbersTable\n const columns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n number: {\n name: 'number',\n type: 'numeric',\n },\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n notNull: true,\n },\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const numbersTableIndexes: Record<string, RawIndex> = {\n orderParentIdx: {\n name: buildIndexName({ name: `${numbersTableName}_order_parent`, adapter }),\n on: ['order', 'parent'],\n },\n }\n\n if (hasManyNumberField === 'index') {\n numbersTableIndexes.numberIdx = {\n name: buildIndexName({ name: `${numbersTableName}_number`, adapter }),\n on: 'number',\n }\n }\n\n if (hasLocalizedManyNumberField) {\n numbersTableIndexes.localeParent = {\n name: buildIndexName({\n name: `${numbersTableName}_locale_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['locale', 'parent'],\n }\n }\n\n numbersTable = {\n name: numbersTableName,\n columns,\n foreignKeys: {\n parentFk: {\n name: buildForeignKeyName({ name: `${numbersTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: numbersTableIndexes,\n }\n\n adapter.rawTables[numbersTableName] = numbersTable\n\n adapter.rawRelations[numbersTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: numbersTableName,\n },\n ],\n references: ['id'],\n relationName: '_numbers',\n to: tableName,\n },\n }\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n order: {\n name: 'order',\n type: 'integer',\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n notNull: true,\n },\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n const relationshipIndexes: Record<string, RawIndex> = {\n order: {\n name: buildIndexName({ name: `${relationshipsTableName}_order`, adapter }),\n on: 'order',\n },\n parentIdx: {\n name: buildIndexName({ name: `${relationshipsTableName}_parent`, adapter }),\n on: 'parent',\n },\n pathIdx: {\n name: buildIndexName({ name: `${relationshipsTableName}_path`, adapter }),\n on: 'path',\n },\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipIndexes.localeIdx = {\n name: buildIndexName({ name: `${relationshipsTableName}_locale`, adapter }),\n on: 'locale',\n }\n }\n\n const relationshipForeignKeys: Record<string, RawForeignKey> = {\n parentFk: {\n name: buildForeignKeyName({ name: `${relationshipsTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = createTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\n let colType: 'integer' | 'numeric' | 'uuid' | 'varchar' = isUUIDType(adapter.idType)\n ? 'uuid'\n : 'integer'\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomIDType === 'text') {\n colType = 'varchar'\n }\n\n const colName = `${relationTo}ID`\n\n relationshipColumns[colName] = {\n name: `${formattedRelationTo}_id`,\n type: colType,\n }\n\n relationshipForeignKeys[`${relationTo}IdFk`] = {\n name: buildForeignKeyName({\n name: `${relationshipsTableName}_${toSnakeCase(relationTo)}`,\n adapter,\n }),\n columns: [colName],\n foreignColumns: [\n {\n name: 'id',\n table: formattedRelationTo,\n },\n ],\n onDelete: 'cascade',\n }\n\n const indexColumns = [colName]\n\n const unique = !disableUnique && uniqueRelationships.has(relationTo)\n\n if (unique) {\n indexColumns.push('path')\n }\n if (hasLocalizedRelationshipField) {\n indexColumns.push('locale')\n }\n\n const indexName = buildIndexName({\n name: `${relationshipsTableName}_${formattedRelationTo}_id`,\n adapter,\n })\n\n relationshipIndexes[indexName] = {\n name: indexName,\n on: indexColumns,\n unique,\n }\n })\n\n relationshipsTable = {\n name: relationshipsTableName,\n columns: relationshipColumns,\n foreignKeys: relationshipForeignKeys,\n indexes: relationshipIndexes,\n }\n\n adapter.rawTables[relationshipsTableName] = relationshipsTable\n\n const relationshipsTableRelations: Record<string, RawRelation> = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: relationshipsTableName,\n },\n ],\n references: ['id'],\n relationName: '_rels',\n to: tableName,\n },\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = createTableName({\n adapter,\n config: adapter.payload.collections[relationTo].config,\n throwValidationError: true,\n })\n const idColumnName = `${relationTo}ID`\n\n relationshipsTableRelations[idColumnName] = {\n type: 'one',\n fields: [\n {\n name: idColumnName,\n table: relationshipsTableName,\n },\n ],\n references: ['id'],\n relationName: relationTo,\n to: relatedTableName,\n }\n })\n adapter.rawRelations[relationshipsTableName] = relationshipsTableRelations\n }\n }\n\n const tableRelations: Record<string, RawRelation> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n tableRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: tableName,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n if (type === 'many') {\n tableRelations[key] = {\n type: 'many',\n relationName: relationName || key,\n to: target,\n }\n }\n })\n\n if (hasLocalizedField) {\n tableRelations._locales = {\n type: 'many',\n relationName: '_locales',\n to: localesTable.name,\n }\n }\n\n if (isRoot && textsTable) {\n tableRelations._texts = {\n type: 'many',\n relationName: '_texts',\n to: textsTable.name,\n }\n }\n\n if (isRoot && numbersTable) {\n tableRelations._numbers = {\n type: 'many',\n relationName: '_numbers',\n to: numbersTable.name,\n }\n }\n\n if (relationships.size && relationshipsTable) {\n tableRelations._rels = {\n type: 'many',\n relationName: '_rels',\n to: relationshipsTable.name,\n }\n }\n\n adapter.rawRelations[tableName] = tableRelations\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n"],"names":["InvalidConfiguration","toSnakeCase","createTableName","buildForeignKeyName","buildIndexName","isUUIDType","traverseFields","buildTable","adapter","baseColumns","baseForeignKeys","baseIndexes","blocksTableNameMap","compoundIndexes","disableNotNull","disableRelsTableUnique","disableUnique","fields","parentIsLocalized","rootRelationships","rootRelationsToBuild","rootTableIDColType","rootTableName","incomingRootTableName","rootUniqueRelationships","setColumnID","tableName","timestamps","versions","withinLocalizedArrayOrBlock","isRoot","columns","indexes","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","uniqueRelationships","relationshipsTable","relationsToBuild","Map","idColType","hasLocalizedField","hasLocalizedManyNumberField","hasLocalizedManyTextField","hasLocalizedRelationshipField","hasManyNumberField","hasManyTextField","newTableName","parentTableName","localizedRelations","nonLocalizedRelations","forEach","type","localized","relationName","target","key","map","set","createdAt","name","defaultNow","mode","notNull","precision","withTimezone","updatedAt","table","foreignKeys","rawTables","size","localeTableName","localesSuffix","id","primaryKey","_locale","locale","_parentID","_localeParent","appendSuffix","on","unique","_parentIdFk","foreignColumns","onDelete","localeRelations","references","to","rawRelations","index","someLocalized","getTableToUse","path","pathHasLocalized","columnPath","replaceAll","push","join","length","indexName","textsTableName","order","parent","text","textsTableIndexes","orderParentIdx","text_idx","localeParent","parentFk","numbersTableName","number","numbersTableIndexes","numberIdx","relationshipColumns","relationshipsTableName","relationshipsSuffix","relationshipIndexes","parentIdx","pathIdx","localeIdx","relationshipForeignKeys","relationTo","relationshipConfig","payload","collections","config","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","colName","indexColumns","has","relationshipsTableRelations","relatedTableName","idColumnName","tableRelations","_locales","_texts","_numbers","_rels"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/schema/build.ts"],"sourcesContent":["import type { FlattenedField, SanitizedCompoundIndex } from 'payload'\n\nimport { branchField, InvalidConfiguration, MAIN_BRANCH } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n DrizzleAdapter,\n IDType,\n RawColumn,\n RawForeignKey,\n RawIndex,\n RawRelation,\n RawTable,\n RelationMap,\n SetColumnID,\n} from '../types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { buildForeignKeyName } from '../utilities/buildForeignKeyName.js'\nimport { buildIndexName } from '../utilities/buildIndexName.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n baseColumns?: Record<string, RawColumn>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseForeignKeys?: Record<string, RawForeignKey>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseIndexes?: Record<string, RawIndex>\n blocksTableNameMap: Record<string, number>\n buildNumbers?: boolean\n buildRelationships?: boolean\n compoundIndexes?: SanitizedCompoundIndex[]\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique: boolean\n fields: FlattenedField[]\n parentIsLocalized: boolean\n rootRelationships?: Set<string>\n rootRelationsToBuild?: RelationMap\n rootTableIDColType?: IDType\n rootTableName?: string\n rootUniqueRelationships?: Set<string>\n setColumnID: SetColumnID\n tableName: string\n timestamps?: boolean\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: RelationMap\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseForeignKeys = {},\n baseIndexes = {},\n blocksTableNameMap,\n compoundIndexes,\n disableNotNull,\n disableRelsTableUnique = false,\n disableUnique = false,\n fields,\n parentIsLocalized,\n rootRelationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n rootUniqueRelationships,\n setColumnID,\n tableName,\n timestamps,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const isRoot = !incomingRootTableName\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, RawColumn> = baseColumns\n const indexes: Record<string, RawIndex> = baseIndexes\n\n const localesColumns: Record<string, RawColumn> = {}\n const localesIndexes: Record<string, RawIndex> = {}\n let localesTable: RawTable\n let textsTable: RawTable\n let numbersTable: RawTable\n\n // Relationships to the base collection\n const relationships: Set<string> = rootRelationships || new Set()\n\n // Unique relationships to the base collection\n const uniqueRelationships: Set<string> = rootUniqueRelationships || new Set()\n\n let relationshipsTable: RawTable\n\n // Drizzle relations\n const relationsToBuild: RelationMap = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n const {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n blocksTableNameMap,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentIsLocalized,\n parentTableName: tableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n setColumnID,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n // split the relationsToBuild by localized and non-localized\n const localizedRelations = new Map()\n const nonLocalizedRelations = new Map()\n\n relationsToBuild.forEach(({ type, localized, relationName, target }, key) => {\n const map = localized ? localizedRelations : nonLocalizedRelations\n map.set(key, { type, relationName, target })\n })\n\n if (timestamps) {\n columns.createdAt = {\n name: 'created_at',\n type: 'timestamp',\n defaultNow: true,\n mode: 'string',\n notNull: true,\n precision: 3,\n withTimezone: true,\n }\n\n columns.updatedAt = {\n name: 'updated_at',\n type: 'timestamp',\n defaultNow: true,\n mode: 'string',\n notNull: true,\n precision: 3,\n withTimezone: true,\n }\n }\n\n const table: RawTable = {\n name: tableName,\n columns,\n foreignKeys: baseForeignKeys,\n indexes,\n }\n\n adapter.rawTables[tableName] = table\n\n if (hasLocalizedField || localizedRelations.size) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n adapter.rawTables[localeTableName] = localesTable\n\n localesColumns.id = {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n }\n\n localesColumns._locale = {\n name: '_locale',\n type: 'enum',\n locale: true,\n notNull: true,\n }\n\n localesColumns._parentID = {\n name: '_parent_id',\n type: idColType,\n notNull: true,\n }\n\n localesIndexes._localeParent = {\n name: buildIndexName({\n name: `${localeTableName}_parent_id_locale_unique`,\n adapter,\n appendSuffix: false,\n }),\n on: ['_parentID', '_locale'],\n unique: true,\n }\n\n localesTable = {\n name: localeTableName,\n columns: localesColumns,\n foreignKeys: {\n _parentIdFk: {\n name: buildForeignKeyName({ name: `${localeTableName}_parent_id`, adapter }),\n columns: ['_parentID'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: localesIndexes,\n }\n\n adapter.rawTables[localeTableName] = localesTable\n\n const localeRelations: Record<string, RawRelation> = {\n _parentID: {\n type: 'one',\n fields: [\n {\n name: '_parentID',\n table: localeTableName,\n },\n ],\n references: ['id'],\n relationName: '_locales',\n to: tableName,\n },\n }\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n localeRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: localeTableName,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n if (type === 'many') {\n localeRelations[key] = {\n type: 'many',\n relationName: key,\n to: target,\n }\n }\n })\n adapter.rawRelations[localeTableName] = localeRelations\n }\n\n if (compoundIndexes) {\n for (const index of compoundIndexes) {\n const hasLocalizedField = index.fields.some((field) => field.pathHasLocalized)\n const canStoreInLocalesTable = index.fields.every(\n ({ path, pathHasLocalized }) => pathHasLocalized || path === branchField,\n )\n const shouldUseLocalesTable = hasLocalizedField && canStoreInLocalesTable\n const columns: string[] = []\n\n const tableToUse = shouldUseLocalesTable ? localesTable : table\n\n for (const { path, pathHasLocalized } of index.fields) {\n const canStoreFieldInTable =\n pathHasLocalized === shouldUseLocalesTable ||\n (shouldUseLocalesTable && path === branchField)\n\n if (!canStoreFieldInTable) {\n throw new InvalidConfiguration(\n `Compound indexes within localized and non localized fields are not supported in SQL. Expected ${path} to be ${shouldUseLocalesTable ? '' : 'non'} localized.`,\n )\n }\n\n const columnPath = path.replaceAll('.', '_')\n\n if (shouldUseLocalesTable && path === branchField && !tableToUse.columns[columnPath]) {\n tableToUse.columns[columnPath] = {\n name: branchField,\n type: 'varchar',\n default: MAIN_BRANCH,\n notNull: true,\n }\n }\n\n if (!tableToUse.columns[columnPath]) {\n throw new InvalidConfiguration(\n `Column ${columnPath} for compound index on ${path} was not found in the ${tableToUse.name} table.`,\n )\n }\n\n columns.push(columnPath)\n }\n\n if (shouldUseLocalesTable) {\n columns.push('_locale')\n }\n\n let name = columns.join('_')\n // truncate against the limit, buildIndexName will handle collisions\n if (name.length > 63) {\n name = 'compound_index'\n }\n\n const indexName = buildIndexName({ name, adapter })\n\n tableToUse.indexes[indexName] = {\n name: indexName,\n on: columns,\n unique: disableUnique ? false : index.unique,\n }\n\n const userFields = index.fields.filter(({ path }) => path !== branchField)\n\n if (!disableUnique && index.unique && userFields.length === 1) {\n adapter.fieldConstraints[tableToUse.name] ??= {}\n adapter.fieldConstraints[tableToUse.name][indexName] = userFields[0].path\n }\n }\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n adapter.rawTables[textsTableName] = textsTable\n\n const columns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n\n notNull: true,\n },\n text: {\n name: 'text',\n type: 'varchar',\n },\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const textsTableIndexes: Record<string, RawIndex> = {\n orderParentIdx: {\n name: buildIndexName({\n name: `${textsTableName}_order_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['order', 'parent'],\n },\n }\n\n if (hasManyTextField === 'index') {\n textsTableIndexes.text_idx = {\n name: buildIndexName({ name: `${textsTableName}_text`, adapter }),\n on: 'text',\n }\n }\n\n if (hasLocalizedManyTextField) {\n textsTableIndexes.localeParent = {\n name: buildIndexName({\n name: `${textsTableName}_locale_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['locale', 'parent'],\n }\n }\n\n textsTable = {\n name: textsTableName,\n columns,\n foreignKeys: {\n parentFk: {\n name: buildForeignKeyName({ name: `${textsTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: textsTableIndexes,\n }\n\n adapter.rawTables[textsTableName] = textsTable\n\n adapter.rawRelations[textsTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: textsTableName,\n },\n ],\n references: ['id'],\n relationName: '_texts',\n to: tableName,\n },\n }\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n adapter.rawTables[numbersTableName] = numbersTable\n const columns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n number: {\n name: 'number',\n type: 'numeric',\n },\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n notNull: true,\n },\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const numbersTableIndexes: Record<string, RawIndex> = {\n orderParentIdx: {\n name: buildIndexName({ name: `${numbersTableName}_order_parent`, adapter }),\n on: ['order', 'parent'],\n },\n }\n\n if (hasManyNumberField === 'index') {\n numbersTableIndexes.numberIdx = {\n name: buildIndexName({ name: `${numbersTableName}_number`, adapter }),\n on: 'number',\n }\n }\n\n if (hasLocalizedManyNumberField) {\n numbersTableIndexes.localeParent = {\n name: buildIndexName({\n name: `${numbersTableName}_locale_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['locale', 'parent'],\n }\n }\n\n numbersTable = {\n name: numbersTableName,\n columns,\n foreignKeys: {\n parentFk: {\n name: buildForeignKeyName({ name: `${numbersTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: numbersTableIndexes,\n }\n\n adapter.rawTables[numbersTableName] = numbersTable\n\n adapter.rawRelations[numbersTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: numbersTableName,\n },\n ],\n references: ['id'],\n relationName: '_numbers',\n to: tableName,\n },\n }\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n order: {\n name: 'order',\n type: 'integer',\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n notNull: true,\n },\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n const relationshipIndexes: Record<string, RawIndex> = {\n order: {\n name: buildIndexName({ name: `${relationshipsTableName}_order`, adapter }),\n on: 'order',\n },\n parentIdx: {\n name: buildIndexName({ name: `${relationshipsTableName}_parent`, adapter }),\n on: 'parent',\n },\n pathIdx: {\n name: buildIndexName({ name: `${relationshipsTableName}_path`, adapter }),\n on: 'path',\n },\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipIndexes.localeIdx = {\n name: buildIndexName({ name: `${relationshipsTableName}_locale`, adapter }),\n on: 'locale',\n }\n }\n\n const relationshipForeignKeys: Record<string, RawForeignKey> = {\n parentFk: {\n name: buildForeignKeyName({ name: `${relationshipsTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = createTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\n let colType: 'integer' | 'numeric' | 'uuid' | 'varchar' = isUUIDType(adapter.idType)\n ? 'uuid'\n : 'integer'\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomIDType === 'text') {\n colType = 'varchar'\n }\n\n const colName = `${relationTo}ID`\n\n relationshipColumns[colName] = {\n name: `${formattedRelationTo}_id`,\n type: colType,\n }\n\n relationshipForeignKeys[`${relationTo}IdFk`] = {\n name: buildForeignKeyName({\n name: `${relationshipsTableName}_${toSnakeCase(relationTo)}`,\n adapter,\n }),\n columns: [colName],\n foreignColumns: [\n {\n name: 'id',\n table: formattedRelationTo,\n },\n ],\n onDelete: 'cascade',\n }\n\n const indexColumns = [colName]\n\n const unique = !disableUnique && uniqueRelationships.has(relationTo)\n\n if (unique) {\n indexColumns.push('path')\n }\n if (hasLocalizedRelationshipField) {\n indexColumns.push('locale')\n }\n\n const indexName = buildIndexName({\n name: `${relationshipsTableName}_${formattedRelationTo}_id`,\n adapter,\n })\n\n relationshipIndexes[indexName] = {\n name: indexName,\n on: indexColumns,\n unique,\n }\n })\n\n relationshipsTable = {\n name: relationshipsTableName,\n columns: relationshipColumns,\n foreignKeys: relationshipForeignKeys,\n indexes: relationshipIndexes,\n }\n\n adapter.rawTables[relationshipsTableName] = relationshipsTable\n\n const relationshipsTableRelations: Record<string, RawRelation> = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: relationshipsTableName,\n },\n ],\n references: ['id'],\n relationName: '_rels',\n to: tableName,\n },\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = createTableName({\n adapter,\n config: adapter.payload.collections[relationTo].config,\n throwValidationError: true,\n })\n const idColumnName = `${relationTo}ID`\n\n relationshipsTableRelations[idColumnName] = {\n type: 'one',\n fields: [\n {\n name: idColumnName,\n table: relationshipsTableName,\n },\n ],\n references: ['id'],\n relationName: relationTo,\n to: relatedTableName,\n }\n })\n adapter.rawRelations[relationshipsTableName] = relationshipsTableRelations\n }\n }\n\n const tableRelations: Record<string, RawRelation> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n tableRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: tableName,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n if (type === 'many') {\n tableRelations[key] = {\n type: 'many',\n relationName: relationName || key,\n to: target,\n }\n }\n })\n\n if (hasLocalizedField) {\n tableRelations._locales = {\n type: 'many',\n relationName: '_locales',\n to: localesTable.name,\n }\n }\n\n if (isRoot && textsTable) {\n tableRelations._texts = {\n type: 'many',\n relationName: '_texts',\n to: textsTable.name,\n }\n }\n\n if (isRoot && numbersTable) {\n tableRelations._numbers = {\n type: 'many',\n relationName: '_numbers',\n to: numbersTable.name,\n }\n }\n\n if (relationships.size && relationshipsTable) {\n tableRelations._rels = {\n type: 'many',\n relationName: '_rels',\n to: relationshipsTable.name,\n }\n }\n\n adapter.rawRelations[tableName] = tableRelations\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n"],"names":["branchField","InvalidConfiguration","MAIN_BRANCH","toSnakeCase","createTableName","buildForeignKeyName","buildIndexName","isUUIDType","traverseFields","buildTable","adapter","baseColumns","baseForeignKeys","baseIndexes","blocksTableNameMap","compoundIndexes","disableNotNull","disableRelsTableUnique","disableUnique","fields","parentIsLocalized","rootRelationships","rootRelationsToBuild","rootTableIDColType","rootTableName","incomingRootTableName","rootUniqueRelationships","setColumnID","tableName","timestamps","versions","withinLocalizedArrayOrBlock","isRoot","columns","indexes","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","uniqueRelationships","relationshipsTable","relationsToBuild","Map","idColType","hasLocalizedField","hasLocalizedManyNumberField","hasLocalizedManyTextField","hasLocalizedRelationshipField","hasManyNumberField","hasManyTextField","newTableName","parentTableName","localizedRelations","nonLocalizedRelations","forEach","type","localized","relationName","target","key","map","set","createdAt","name","defaultNow","mode","notNull","precision","withTimezone","updatedAt","table","foreignKeys","rawTables","size","localeTableName","localesSuffix","id","primaryKey","_locale","locale","_parentID","_localeParent","appendSuffix","on","unique","_parentIdFk","foreignColumns","onDelete","localeRelations","references","to","rawRelations","index","some","field","pathHasLocalized","canStoreInLocalesTable","every","path","shouldUseLocalesTable","tableToUse","canStoreFieldInTable","columnPath","replaceAll","default","push","join","length","indexName","userFields","filter","fieldConstraints","textsTableName","order","parent","text","textsTableIndexes","orderParentIdx","text_idx","localeParent","parentFk","numbersTableName","number","numbersTableIndexes","numberIdx","relationshipColumns","relationshipsTableName","relationshipsSuffix","relationshipIndexes","parentIdx","pathIdx","localeIdx","relationshipForeignKeys","relationTo","relationshipConfig","payload","collections","config","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","colName","indexColumns","has","relationshipsTableRelations","relatedTableName","idColumnName","tableRelations","_locales","_texts","_numbers","_rels"],"mappings":"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"}