@payloadcms/drizzle 4.0.0-internal.ea6e8f8 → 4.0.0-internal.ec73d44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/find/buildPolymorphicJoinQuery.d.ts +3 -2
- package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -1
- package/dist/find/buildPolymorphicJoinQuery.js +16 -5
- package/dist/find/buildPolymorphicJoinQuery.js.map +1 -1
- package/dist/find/buildPolymorphicJoinWhere.js +1 -1
- package/dist/find/buildPolymorphicJoinWhere.js.map +1 -1
- package/dist/find/createPolymorphicJoinWherePlan.d.ts +2 -1
- package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -1
- package/dist/find/createPolymorphicJoinWherePlan.js +14 -5
- package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -1
- package/dist/find/traverseFields.d.ts.map +1 -1
- package/dist/find/traverseFields.js +1 -0
- package/dist/find/traverseFields.js.map +1 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -8
- package/dist/index.js.map +1 -1
- package/dist/queries/getTableColumnFromPath.js.map +1 -1
- package/dist/schema/build.js +3 -3
- package/dist/schema/build.js.map +1 -1
- package/dist/sqlite/execute.js.map +1 -1
- package/dist/transform/read/traverseFields.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/upsertRow/index.js.map +1 -1
- package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
- package/dist/utilities/blocksToJsonMigrator.js +6 -17
- package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
- package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
- package/dist/utilities/createSchemaGenerator.js +7 -12
- package/dist/utilities/createSchemaGenerator.js.map +1 -1
- package/dist/utilities/executeSchemaHooks.js +1 -1
- package/dist/utilities/executeSchemaHooks.js.map +1 -1
- package/dist/utilities/formatGeneratedFile.d.ts +10 -0
- package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
- package/dist/utilities/formatGeneratedFile.js +58 -0
- package/dist/utilities/formatGeneratedFile.js.map +1 -0
- package/dist/utilities/getTransaction.js.map +1 -1
- package/package.json +16 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/queries/getTableColumnFromPath.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { SQLiteTableWithColumns } from 'drizzle-orm/sqlite-core'\nimport type {\n FlattenedBlock,\n FlattenedField,\n NumberField,\n PayloadRequest,\n RelationshipField,\n TextField,\n Where,\n} from 'payload'\n\nimport { and, eq, getTableName, isNull, like, notInArray, or, sql } from 'drizzle-orm'\nimport { type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { APIError, getBranchPredicateSync, getFieldByPath, resolveBranchReadState } from 'payload'\nimport { fieldShouldBeLocalized, tabHasName } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\nimport { validate as uuidValidate } from 'uuid'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { isPolymorphicRelationship } from '../utilities/isPolymorphicRelationship.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { jsonBuildObject } from '../utilities/json.js'\nimport { DistinctSymbol } from '../utilities/rawConstraint.js'\nimport { resolveBlockTableName } from '../utilities/validateExistingBlockIsIdentical.js'\nimport { addJoinTable } from './addJoinTable.js'\nimport { buildBranchVisibility } from './buildBranchVisibility.js'\nimport { getTableAlias } from './getTableAlias.js'\nimport { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRelationshipPath.js'\n\ntype Constraint = {\n columnName: string\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n value: unknown\n}\n\ntype TableColumn = {\n columnName?: string\n columns?: {\n idType: 'number' | 'text' | 'uuid'\n rawColumn: SQL<unknown>\n }[]\n constraints: Constraint[]\n field: FlattenedField\n getNotNullColumnByValue?: (val: unknown) => string\n pathSegments?: string[]\n rawColumn?: SQL\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n}\n\ntype Args = {\n adapter: DrizzleAdapter\n /** The current table when a query is being built with an alias, such as inside a subquery. */\n aliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n collectionPath: string\n columnPrefix?: string\n constraintPath?: string\n constraints?: Constraint[]\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n /** The aliased table that owns a field nested inside an array or block. */\n parentAliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n parentIsLocalized: boolean\n pathSegments: string[]\n req?: Partial<PayloadRequest>\n rootTableName?: string\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n /**\n * If creating a new table name for arrays and blocks, this suffix should be appended to the table name\n */\n tableNameSuffix?: string\n /**\n * The raw value of the query before sanitization\n */\n value: unknown\n}\n\nconst getRelationshipJoinCondition = ({\n adapter,\n collectionSlug,\n relationshipID,\n req,\n table,\n value,\n}: {\n adapter: DrizzleAdapter\n collectionSlug: string\n relationshipID: GenericColumn\n req?: Partial<PayloadRequest>\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n value: unknown\n}): SQL => {\n const branchReadState = resolveBranchReadState({ collectionSlug, req })\n const branchPredicate = branchReadState.useBranching\n ? null\n : getBranchPredicateSync({ collectionSlug, req })\n const shouldMatchCanonicalID = Boolean(\n table._branchDocID &&\n (branchReadState.useBranching || branchPredicate || value === DistinctSymbol),\n )\n const identityCondition = shouldMatchCanonicalID\n ? or(eq(table.id, relationshipID), eq(table._branchDocID, relationshipID))\n : eq(table.id, relationshipID)\n const branchCondition = getBranchTableCondition({ adapter, collectionSlug, req, table })\n\n return branchCondition ? and(identityCondition, branchCondition) : identityCondition\n}\n\nconst getBranchTableCondition = ({\n adapter,\n collectionSlug,\n req,\n table,\n}: {\n adapter: DrizzleAdapter\n collectionSlug: string\n req?: Partial<PayloadRequest>\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n}): SQL | undefined => {\n const branchReadState = resolveBranchReadState({ collectionSlug, req })\n\n if (branchReadState.useBranching) {\n return buildBranchVisibility({\n adapter,\n branch: branchReadState.branch,\n collectionSlug,\n table,\n })\n }\n\n const branchPredicate = getBranchPredicateSync({ collectionSlug, req })\n\n return branchPredicate\n ? buildBranchPredicateCondition({ table, where: branchPredicate })\n : undefined\n}\n\nconst buildBranchPredicateCondition = ({\n table,\n where,\n}: {\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n where: Where\n}): SQL | undefined => {\n const conditions: SQL[] = []\n\n for (const [fieldName, condition] of Object.entries(where)) {\n if ((fieldName === 'and' || fieldName === 'or') && Array.isArray(condition)) {\n const nestedConditions = condition\n .map((nestedWhere) => buildBranchPredicateCondition({ table, where: nestedWhere }))\n .filter((nestedCondition): nestedCondition is SQL => Boolean(nestedCondition))\n const nestedResult = fieldName === 'and' ? and(...nestedConditions) : or(...nestedConditions)\n\n if (nestedResult) {\n conditions.push(nestedResult)\n }\n continue\n }\n\n const column = table[fieldName]\n\n if (!column || !condition || typeof condition !== 'object') {\n continue\n }\n\n if ('equals' in condition) {\n conditions.push(condition.equals === null ? isNull(column) : eq(column, condition.equals))\n }\n\n if ('not_in' in condition && Array.isArray(condition.not_in) && condition.not_in.length > 0) {\n conditions.push(notInArray(column, condition.not_in))\n }\n }\n\n return conditions.length === 1 ? conditions[0] : and(...conditions)\n}\n\n/**\n * Resolves a field path to the database table and column that store its value.\n *\n * While walking through relationships, arrays, and blocks, the function adds the joins required\n * to reach the final column. Table aliases are used when the path is resolved inside a subquery.\n *\n * @example\n * Resolving `movies.name` adds joins from the parent collection to its relationship table and then\n * to the `movies` table. The returned column is `movies.name`.\n *\n * @returns The final field and column, plus any extra constraints discovered while resolving it.\n */\nexport const getTableColumnFromPath = ({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix = '',\n constraintPath: incomingConstraintPath,\n constraints = [],\n fields,\n joins,\n locale: incomingLocale,\n parentAliasTable,\n parentIsLocalized,\n pathSegments: incomingSegments,\n req,\n rootTableName: incomingRootTableName,\n selectFields,\n selectLocale,\n tableName,\n tableNameSuffix = '',\n value,\n}: Args): TableColumn => {\n const fieldPath = incomingSegments[0]\n let locale = incomingLocale\n const rootTableName = incomingRootTableName || tableName\n const tableContainingField = parentAliasTable ?? aliasTable ?? adapter.tables[rootTableName]\n let constraintPath = incomingConstraintPath || ''\n\n const field = fields.find((fieldToFind) => fieldToFind.name === fieldPath)\n let newTableName = tableName\n\n if (!field && fieldPath === 'id') {\n const idTable = aliasTable ?? adapter.tables[newTableName]\n\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: idTable,\n }\n }\n\n let localizedPathQuery = false\n if (field) {\n const pathSegments = [...incomingSegments]\n const fieldStoragePath = appendFieldToStoragePath({ field, path: constraintPath })\n\n const isFieldLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n // If next segment is a locale,\n // we need to take it out and use it as the locale from this point on\n if (isFieldLocalized && adapter.payload.config.localization) {\n const matchedLocale = adapter.payload.config.localization.localeCodes.find(\n (locale) => locale === pathSegments[1],\n )\n\n if (matchedLocale) {\n locale = matchedLocale\n localizedPathQuery = true\n pathSegments.splice(1, 1)\n }\n }\n\n switch (field.type) {\n case 'array': {\n newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const arrayParentTable = aliasTable || adapter.tables[tableName]\n\n constraintPath = `${fieldStoragePath}.`\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [eq(arrayParentTable.id, adapter.tables[newTableName]._parentID)]\n\n if (selectLocale) {\n selectFields._locale = adapter.tables[newTableName]._locale\n }\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n addJoinTable({\n condition: and(...conditions),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(arrayParentTable.id, adapter.tables[newTableName]._parentID),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentAliasTable: aliasTable,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n }\n case 'blocks': {\n if (adapter.blocksAsJSON) {\n break\n }\n let blockTableColumn: TableColumn\n let newTableName: string\n\n // handle blockType queries\n if (pathSegments[1] === 'blockType') {\n // find the block config using the value\n const blockTypes = Array.isArray(value) ? value : [value]\n blockTypes.forEach((blockType) => {\n const block =\n adapter.payload.blocks[blockType] ??\n (field.blocks.find(\n (block) => typeof block !== 'string' && block.slug === blockType,\n ) as FlattenedBlock | undefined)\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n\n joins.push({\n condition: eq(adapter.tables[tableName].id, newAliasTable._parentID),\n table: newAliasTable,\n })\n constraints.push({\n columnName: '_path',\n table: newAliasTable,\n value: `${constraintPath}${pathSegments[0]}`,\n })\n })\n return {\n constraints,\n field,\n getNotNullColumnByValue: () => 'id',\n table: adapter.tables[tableName],\n }\n }\n\n const hasBlockField = field.blocks.some((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n let result: TableColumn\n const blockConstraints = []\n const blockSelectFields = {}\n\n let blockJoin: BuildQueryJoinAliases[0]\n if (isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n blockJoin = {\n condition: and(...conditions),\n table: adapter.tables[newTableName],\n }\n } else {\n blockJoin = {\n condition: eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n table: adapter.tables[newTableName],\n }\n }\n\n // Create a new reference for nested joins\n const newJoins = [...joins]\n\n try {\n result = getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath: `${fieldStoragePath}.`,\n constraints: blockConstraints,\n fields: block.flattenedFields,\n joins: newJoins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName,\n selectFields: blockSelectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } catch (_) {\n // this is fine, not every block will have the field\n }\n if (!result) {\n return\n }\n blockTableColumn = result\n constraints = constraints.concat(blockConstraints)\n selectFields = { ...selectFields, ...blockSelectFields }\n\n const previousLength = joins.length\n joins.push(blockJoin)\n // Append new joins AFTER the block join to prevent errors with missing FROM clause.\n if (newJoins.length > previousLength) {\n for (let i = previousLength; i < newJoins.length; i++) {\n joins.push(newJoins[i])\n }\n }\n return true\n })\n if (hasBlockField) {\n return {\n columnName: blockTableColumn.columnName,\n constraints,\n field: blockTableColumn.field,\n pathSegments: pathSegments.slice(1),\n rawColumn: blockTableColumn.rawColumn,\n table: blockTableColumn.table,\n }\n }\n break\n }\n\n case 'group': {\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n let condition = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${fieldStoragePath}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n\n case 'join': {\n if (Array.isArray(field.collection)) {\n throw new APIError('Not supported')\n }\n\n const newCollectionPath = pathSegments.slice(1).join('.')\n\n // Filtering through a polymorphic `on` relationship is not supported: it is stored in the\n // `_rels` table with no direct column to correlate on, which would otherwise build invalid SQL.\n const onRelationshipField = getFieldByPath({\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n path: field.on,\n })?.field\n\n if (\n onRelationshipField &&\n (onRelationshipField.type === 'relationship' || onRelationshipField.type === 'upload') &&\n Array.isArray(onRelationshipField.relationTo)\n ) {\n throw new APIError('Not supported')\n }\n\n if (field.hasMany) {\n const relationTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}._rels`,\n )\n\n const aliasRelationshipTable = (existingTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n const relationshipField = getFieldByPath({\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n path: field.on,\n })\n if (!relationshipField) {\n throw new APIError('Relationship was not found')\n }\n\n if (!existingTable) {\n addJoinTable({\n condition: and(\n eq(\n tableContainingField.id,\n aliasRelationshipTable[\n `${(relationshipField.field as RelationshipField).relationTo as string}ID`\n ],\n ),\n like(aliasRelationshipTable.path, field.on),\n ),\n joins,\n queryPath: `${constraintPath}${field.name}._rels`,\n table: aliasRelationshipTable,\n })\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'parent',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: aliasRelationshipTable,\n }\n }\n\n const relationshipConfig = adapter.payload.collections[field.collection].config\n const relationshipTableName = adapter.tableNameMap.get(\n toSnakeCase(relationshipConfig.slug),\n )\n\n // parent to relationship join table\n const relationshipFields = relationshipConfig.flattenedFields\n\n const existingMainTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )\n\n const relationshipTable = (existingMainTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationshipTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n if (!existingMainTable) {\n const branchCondition = getBranchTableCondition({\n adapter,\n collectionSlug: field.collection,\n req,\n table: relationshipTable,\n })\n const relationshipCondition = eq(aliasRelationshipTable.parent, relationshipTable.id)\n\n joins.push({\n condition: branchCondition\n ? and(relationshipCondition, branchCondition)\n : relationshipCondition,\n queryPath: `${constraintPath}${field.name}`,\n table: relationshipTable,\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: relationshipTable,\n collectionPath: newCollectionPath,\n constraints,\n fields: relationshipFields,\n joins,\n locale,\n // A join reads from a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName: relationshipTableName,\n selectFields,\n selectLocale,\n tableName: relationshipTableName,\n value,\n })\n }\n\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.collection].config.slug),\n )\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )?.table\n const newAliasTable =\n existingTable || getTableAlias({ adapter, tableName: newTableName }).newAliasTable\n\n if (!existingTable) {\n const onSegments = field.on.split('.')\n const collectionFlattenedFields =\n adapter.payload.collections[field.collection].config.flattenedFields\n const firstSegField =\n onSegments.length > 1\n ? collectionFlattenedFields.find((f) => f.name === onSegments[0])\n : null\n\n const arrayTableName =\n firstSegField?.type === 'array'\n ? adapter.tableNameMap.get(`${newTableName}_${toSnakeCase(onSegments[0])}`)\n : undefined\n\n if (arrayTableName) {\n // join from main table to array table\n const { newAliasTable: arrayAliasTable } = getTableAlias({\n adapter,\n tableName: arrayTableName,\n })\n\n joins.push({\n condition: eq(\n arrayAliasTable[onSegments.slice(1).join('_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n ),\n queryPath: `${constraintPath}${field.name}._array`,\n table: arrayAliasTable,\n })\n\n joins.push({\n condition: (() => {\n const relationshipCondition = eq(newAliasTable['id'], arrayAliasTable._parentID)\n const branchCondition = getBranchTableCondition({\n adapter,\n collectionSlug: field.collection,\n req,\n table: newAliasTable,\n })\n\n return branchCondition\n ? and(relationshipCondition, branchCondition)\n : relationshipCondition\n })(),\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n } else {\n const relationshipCondition = eq(\n newAliasTable[field.on.replaceAll('.', '_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n )\n const branchCondition = getBranchTableCondition({\n adapter,\n collectionSlug: field.collection,\n req,\n table: newAliasTable,\n })\n\n joins.push({\n condition: branchCondition\n ? and(relationshipCondition, branchCondition)\n : relationshipCondition,\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n }\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: newAliasTable,\n }\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n joins,\n locale,\n // A join reads from a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n req,\n selectFields,\n tableName: newTableName,\n value,\n })\n\n break\n }\n\n case 'number':\n case 'text': {\n if (field.hasMany) {\n let tableType = 'texts'\n let columnName = 'text'\n if (field.type === 'number') {\n tableType = 'numbers'\n columnName = 'number'\n }\n newTableName = `${rootTableName}_${tableType}`\n\n const existingTable = joins.find((e) => e.queryPath === fieldStoragePath)\n\n const table = (existingTable?.table ??\n getTableAlias({ adapter, tableName: newTableName })\n .newAliasTable) as PgTableWithColumns<any>\n\n const joinConstraints = [\n eq(tableContainingField.id, table.parent),\n like(table.path, fieldStoragePath),\n ]\n\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [...joinConstraints]\n\n if (locale !== 'all') {\n conditions.push(eq(table._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: fieldStoragePath,\n table,\n })\n } else {\n addJoinTable({\n condition: and(...joinConstraints),\n joins,\n queryPath: fieldStoragePath,\n table,\n })\n }\n\n return {\n columnName,\n constraints,\n field,\n table,\n }\n }\n break\n }\n case 'relationship':\n case 'upload': {\n const newCollectionPath = pathSegments.slice(1).join('.')\n const relationshipQueryPath = `${getTableName(tableContainingField)}.${fieldStoragePath}._rels`\n const targetQueryPath = `${getTableName(tableContainingField)}.${fieldStoragePath}._target`\n\n if (Array.isArray(field.relationTo) || field.hasMany) {\n const relationshipPath = resolveRelationshipPath({\n adapter,\n fields,\n locale,\n parentIsLocalized,\n path: field.name,\n pathPrefix: constraintPath,\n })\n\n if (!relationshipPath) {\n throw new APIError(`Relationship path could not be resolved: ${collectionPath}`)\n }\n\n let relationshipFields: FlattenedField[]\n const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`\n\n const existingJoin = joins.find((e) => e.queryPath === relationshipQueryPath)\n\n let aliasRelationshipTable: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n let aliasRelationshipTableName: string\n if (existingJoin) {\n aliasRelationshipTable = existingJoin.table\n aliasRelationshipTableName = getTableName(existingJoin.table)\n } else {\n const res = getTableAlias({\n adapter,\n tableName: relationTableName,\n })\n aliasRelationshipTable = res.newAliasTable\n aliasRelationshipTableName = res.newAliasTableName\n }\n\n if (selectLocale && relationshipPath.isLocalized && adapter.payload.config.localization) {\n selectFields._locale = aliasRelationshipTable.locale\n }\n\n // Join in the relationships table\n if (\n relationshipPath.locale &&\n relationshipPath.locale !== 'all' &&\n relationshipPath.isLocalized &&\n adapter.payload.config.localization\n ) {\n const conditions = [\n eq(tableContainingField.id, aliasRelationshipTable.parent),\n like(aliasRelationshipTable.path, relationshipPath.path),\n ]\n\n conditions.push(eq(aliasRelationshipTable.locale, relationshipPath.locale))\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: relationshipQueryPath,\n table: aliasRelationshipTable,\n })\n } else {\n // Join in the relationships table\n addJoinTable({\n condition: and(\n eq(tableContainingField.id, aliasRelationshipTable.parent),\n like(aliasRelationshipTable.path, relationshipPath.path),\n ),\n joins,\n queryPath: relationshipQueryPath,\n table: aliasRelationshipTable,\n })\n }\n\n selectFields[`${relationTableName}.path`] = aliasRelationshipTable.path\n\n let newAliasTable\n\n if (typeof field.relationTo === 'string') {\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n newTableName = adapter.tableNameMap.get(toSnakeCase(relationshipConfig.slug))\n\n // parent to relationship join table\n relationshipFields = relationshipConfig.flattenedFields\n const existingTargetJoin = joins.find((join) => join.queryPath === targetQueryPath)\n\n if (existingTargetJoin) {\n newAliasTable = existingTargetJoin.table\n } else {\n ;({ newAliasTable } = getTableAlias({ adapter, tableName: newTableName }))\n\n const relationshipID = aliasRelationshipTable[`${field.relationTo}ID`]\n const condition = getRelationshipJoinCondition({\n adapter,\n collectionSlug: field.relationTo,\n relationshipID,\n req,\n table: newAliasTable,\n value,\n })\n\n joins.push({\n condition,\n queryPath: targetQueryPath,\n table: newAliasTable,\n })\n }\n\n if (newCollectionPath === '' || (newCollectionPath === 'id' && !existingTargetJoin)) {\n return {\n columnName: `${field.relationTo}ID`,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n }\n } else if (newCollectionPath === 'value') {\n const hasCustomCollectionWithCustomID = field.relationTo.some(\n (relationTo) => !!adapter.payload.collections[relationTo].customIDType,\n )\n\n const columns: TableColumn['columns'] = field.relationTo\n .map((relationTo) => {\n let idType: 'number' | 'text' | 'uuid' = isUUIDType(adapter.idType)\n ? 'uuid'\n : 'number'\n\n const { customIDType } = adapter.payload.collections[relationTo]\n\n if (customIDType) {\n idType = customIDType\n }\n\n const idTypeTextOrUuid = idType === 'text' || idType === 'uuid'\n\n // Do not add the column to OR if we know that it can't match by the type\n // We can't do the same with idType: 'number' because `value` can be from the REST search query params\n if (typeof value === 'number' && idTypeTextOrUuid) {\n return null\n }\n\n if (\n Array.isArray(value) &&\n value.every((val) => typeof val === 'number') &&\n idTypeTextOrUuid\n ) {\n return null\n }\n\n // Do not add the UUID type column if incoming query value doesn't match UUID. If there aren't any collections with\n // a custom ID type, we skip this check\n // We need this because Postgres throws an error if querying by UUID column with a value that isn't a valid UUID.\n if (\n value &&\n !Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID\n ) {\n if (!uuidValidate(value)) {\n return null\n }\n }\n\n if (\n Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID &&\n !value.some((val) => uuidValidate(val))\n ) {\n return null\n }\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n idType,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n }\n })\n .filter(Boolean)\n\n return {\n columns,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n } else if (newCollectionPath === 'relationTo') {\n const relationTo = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n\n return {\n constraints,\n field,\n getNotNullColumnByValue: (val) => {\n const matchedRelation = relationTo.find((relation) => relation === val)\n if (matchedRelation) {\n return `${matchedRelation}ID`\n }\n return undefined\n },\n table: aliasRelationshipTable,\n }\n } else if (isPolymorphicRelationship(value)) {\n const { relationTo } = value\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n constraints,\n field,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n table: aliasRelationshipTable,\n }\n } else if (value === DistinctSymbol) {\n const obj: Record<string, SQL> = {}\n\n field.relationTo.forEach((relationTo) => {\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n obj[relationTo] = sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`)\n })\n\n let rawColumn = jsonBuildObject(adapter, obj)\n if (adapter.name === 'postgres') {\n rawColumn = sql`${rawColumn}::text`\n }\n\n return {\n constraints,\n field,\n rawColumn,\n table: aliasRelationshipTable,\n }\n } else {\n throw new APIError('Not supported')\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraints,\n fields: relationshipFields,\n joins,\n locale,\n // A relationship jumps to a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName: newTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } else if (\n pathSegments.length > 1 &&\n (!(pathSegments.length === 2 && pathSegments[1] === 'id') ||\n joins.some((join) => join.queryPath === targetQueryPath))\n ) {\n // simple relationships\n const columnName = `${columnPrefix}${field.name}`\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.relationTo].config.slug),\n )\n const existingTargetJoin = joins.find((join) => join.queryPath === targetQueryPath)\n const newAliasTable = (existingTargetJoin?.table ??\n getTableAlias({ adapter, tableName: newTableName }).newAliasTable) as ReturnType<\n typeof getTableAlias\n >['newAliasTable']\n\n if (!existingTargetJoin && isFieldLocalized && adapter.payload.config.localization) {\n const { newAliasTable: aliasLocaleTable } = getTableAlias({\n adapter,\n tableName: `${rootTableName}${adapter.localesSuffix}`,\n })\n\n const condtions = [eq(aliasLocaleTable._parentID, tableContainingField.id)]\n\n if (selectLocale) {\n selectFields._locale = aliasLocaleTable._locale\n }\n\n if (locale !== 'all') {\n condtions.push(eq(aliasLocaleTable._locale, locale))\n }\n\n const localesTable = adapter.tables[`${rootTableName}${adapter.localesSuffix}`]\n\n addJoinTable({\n condition: and(...condtions),\n joins,\n table: localesTable,\n })\n\n const condition = getRelationshipJoinCondition({\n adapter,\n collectionSlug: field.relationTo,\n relationshipID: localesTable[columnName],\n req,\n table: newAliasTable,\n value,\n })\n\n joins.push({\n condition,\n queryPath: targetQueryPath,\n table: newAliasTable,\n })\n } else if (!existingTargetJoin) {\n const relationshipID = aliasTable\n ? aliasTable[columnName]\n : adapter.tables[tableName][columnName]\n const condition = getRelationshipJoinCondition({\n adapter,\n collectionSlug: field.relationTo,\n relationshipID,\n req,\n table: newAliasTable,\n value,\n })\n\n joins.push({ condition, queryPath: targetQueryPath, table: newAliasTable })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.relationTo].config.flattenedFields,\n joins,\n locale,\n // A relationship jumps to a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n req,\n selectFields,\n tableName: newTableName,\n value,\n })\n }\n\n break\n }\n\n case 'select': {\n if (field.hasMany) {\n const newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const idColumn = (aliasTable ?? adapter.tables[tableName]).id\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(idColumn, adapter.tables[newTableName].parent),\n eq(adapter.tables[newTableName]._locale, locale),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(idColumn, adapter.tables[newTableName].parent),\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return {\n columnName: 'value',\n constraints,\n field,\n table: adapter.tables[newTableName],\n }\n }\n break\n }\n\n case 'tab': {\n if (tabHasName(field)) {\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${fieldStoragePath}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix,\n value,\n })\n }\n\n default: {\n // fall through\n break\n }\n }\n\n let newTable = adapter.tables[newTableName]\n\n if (isFieldLocalized && adapter.payload.config.localization) {\n // If localized, we go to localized table and set aliasTable to undefined\n // so it is not picked up below to be used as targetTable\n const parentTable = aliasTable || adapter.tables[tableName]\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n // use an alias because the same query may contain constraints with different locale value\n if (localizedPathQuery) {\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n newTable = newAliasTable\n } else {\n newTable = adapter.tables[newTableName]\n }\n\n let condition = eq(parentTable.id, newTable._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(newTable._locale, locale))\n }\n\n if (selectLocale) {\n selectFields._locale = newTable._locale\n }\n\n addJoinTable({\n condition,\n joins,\n table: newTable,\n })\n\n aliasTable = undefined\n }\n\n const targetTable = aliasTable || newTable\n\n selectFields[`${newTableName}.${columnPrefix}${field.name}`] =\n targetTable[`${columnPrefix}${field.name}`]\n\n return {\n columnName: `${columnPrefix}${field.name}`,\n constraints,\n field,\n pathSegments,\n table: targetTable,\n }\n }\n\n throw new APIError(`Cannot find field for path at ${fieldPath}`)\n}\n"],"names":["and","eq","getTableName","isNull","like","notInArray","or","sql","APIError","getBranchPredicateSync","getFieldByPath","resolveBranchReadState","fieldShouldBeLocalized","tabHasName","toSnakeCase","validate","uuidValidate","isPolymorphicRelationship","isUUIDType","jsonBuildObject","DistinctSymbol","resolveBlockTableName","addJoinTable","buildBranchVisibility","getTableAlias","appendFieldToStoragePath","resolveRelationshipPath","getRelationshipJoinCondition","adapter","collectionSlug","relationshipID","req","table","value","branchReadState","branchPredicate","useBranching","shouldMatchCanonicalID","Boolean","_branchDocID","identityCondition","id","branchCondition","getBranchTableCondition","branch","buildBranchPredicateCondition","where","undefined","conditions","fieldName","condition","Object","entries","Array","isArray","nestedConditions","map","nestedWhere","filter","nestedCondition","nestedResult","push","column","equals","not_in","length","getTableColumnFromPath","aliasTable","collectionPath","columnPrefix","constraintPath","incomingConstraintPath","constraints","fields","joins","locale","incomingLocale","parentAliasTable","parentIsLocalized","pathSegments","incomingSegments","rootTableName","incomingRootTableName","selectFields","selectLocale","tableName","tableNameSuffix","fieldPath","tableContainingField","tables","field","find","fieldToFind","name","newTableName","idTable","columnName","type","idType","localizedPathQuery","fieldStoragePath","path","isFieldLocalized","payload","config","localization","matchedLocale","localeCodes","splice","tableNameMap","get","arrayParentTable","_parentID","_locale","isOneToMany","flattenedFields","localized","slice","blocksAsJSON","blockTableColumn","blockTypes","forEach","blockType","block","blocks","slug","newAliasTable","getNotNullColumnByValue","hasBlockField","some","_block","result","blockConstraints","blockSelectFields","blockJoin","newJoins","_","concat","previousLength","i","rawColumn","localesSuffix","collection","newCollectionPath","join","onRelationshipField","collections","on","relationTo","hasMany","relationTableName","relationshipsSuffix","existingTable","e","queryPath","aliasRelationshipTable","relationshipField","relationshipConfig","relationshipTableName","relationshipFields","existingMainTable","relationshipTable","relationshipCondition","parent","onSegments","split","collectionFlattenedFields","firstSegField","f","arrayTableName","arrayAliasTable","replaceAll","tableType","joinConstraints","relationshipQueryPath","targetQueryPath","relationshipPath","pathPrefix","existingJoin","aliasRelationshipTableName","res","newAliasTableName","isLocalized","existingTargetJoin","hasCustomCollectionWithCustomID","customIDType","columns","idTypeTextOrUuid","every","val","raw","matchedRelation","relation","obj","aliasLocaleTable","condtions","localesTable","idColumn","newTable","parentTable","targetTable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/queries/getTableColumnFromPath.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { SQLiteTableWithColumns } from 'drizzle-orm/sqlite-core'\nimport type {\n FlattenedBlock,\n FlattenedField,\n NumberField,\n PayloadRequest,\n RelationshipField,\n TextField,\n Where,\n} from 'payload'\n\nimport { and, eq, getTableName, isNull, like, notInArray, or, sql } from 'drizzle-orm'\nimport { type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { APIError, getBranchPredicateSync, getFieldByPath, resolveBranchReadState } from 'payload'\nimport { fieldShouldBeLocalized, tabHasName } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\nimport { validate as uuidValidate } from 'uuid'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { isPolymorphicRelationship } from '../utilities/isPolymorphicRelationship.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { jsonBuildObject } from '../utilities/json.js'\nimport { DistinctSymbol } from '../utilities/rawConstraint.js'\nimport { resolveBlockTableName } from '../utilities/validateExistingBlockIsIdentical.js'\nimport { addJoinTable } from './addJoinTable.js'\nimport { buildBranchVisibility } from './buildBranchVisibility.js'\nimport { getTableAlias } from './getTableAlias.js'\nimport { appendFieldToStoragePath, resolveRelationshipPath } from './resolveRelationshipPath.js'\n\ntype Constraint = {\n columnName: string\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n value: unknown\n}\n\ntype TableColumn = {\n columnName?: string\n columns?: {\n idType: 'number' | 'text' | 'uuid'\n rawColumn: SQL<unknown>\n }[]\n constraints: Constraint[]\n field: FlattenedField\n getNotNullColumnByValue?: (val: unknown) => string\n pathSegments?: string[]\n rawColumn?: SQL\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n}\n\ntype Args = {\n adapter: DrizzleAdapter\n /** The current table when a query is being built with an alias, such as inside a subquery. */\n aliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n collectionPath: string\n columnPrefix?: string\n constraintPath?: string\n constraints?: Constraint[]\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n /** The aliased table that owns a field nested inside an array or block. */\n parentAliasTable?: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n parentIsLocalized: boolean\n pathSegments: string[]\n req?: Partial<PayloadRequest>\n rootTableName?: string\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n /**\n * If creating a new table name for arrays and blocks, this suffix should be appended to the table name\n */\n tableNameSuffix?: string\n /**\n * The raw value of the query before sanitization\n */\n value: unknown\n}\n\nconst getRelationshipJoinCondition = ({\n adapter,\n collectionSlug,\n relationshipID,\n req,\n table,\n value,\n}: {\n adapter: DrizzleAdapter\n collectionSlug: string\n relationshipID: GenericColumn\n req?: Partial<PayloadRequest>\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n value: unknown\n}): SQL => {\n const branchReadState = resolveBranchReadState({ collectionSlug, req })\n const branchPredicate = branchReadState.useBranching\n ? null\n : getBranchPredicateSync({ collectionSlug, req })\n const shouldMatchCanonicalID = Boolean(\n table._branchDocID &&\n (branchReadState.useBranching || branchPredicate || value === DistinctSymbol),\n )\n const identityCondition = shouldMatchCanonicalID\n ? or(eq(table.id, relationshipID), eq(table._branchDocID, relationshipID))\n : eq(table.id, relationshipID)\n const branchCondition = getBranchTableCondition({ adapter, collectionSlug, req, table })\n\n return branchCondition ? and(identityCondition, branchCondition) : identityCondition\n}\n\nconst getBranchTableCondition = ({\n adapter,\n collectionSlug,\n req,\n table,\n}: {\n adapter: DrizzleAdapter\n collectionSlug: string\n req?: Partial<PayloadRequest>\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n}): SQL | undefined => {\n const branchReadState = resolveBranchReadState({ collectionSlug, req })\n\n if (branchReadState.useBranching) {\n return buildBranchVisibility({\n adapter,\n branch: branchReadState.branch,\n collectionSlug,\n table,\n })\n }\n\n const branchPredicate = getBranchPredicateSync({ collectionSlug, req })\n\n return branchPredicate\n ? buildBranchPredicateCondition({ table, where: branchPredicate })\n : undefined\n}\n\nconst buildBranchPredicateCondition = ({\n table,\n where,\n}: {\n table: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n where: Where\n}): SQL | undefined => {\n const conditions: SQL[] = []\n\n for (const [fieldName, condition] of Object.entries(where)) {\n if ((fieldName === 'and' || fieldName === 'or') && Array.isArray(condition)) {\n const nestedConditions = condition\n .map((nestedWhere) => buildBranchPredicateCondition({ table, where: nestedWhere }))\n .filter((nestedCondition): nestedCondition is SQL => Boolean(nestedCondition))\n const nestedResult = fieldName === 'and' ? and(...nestedConditions) : or(...nestedConditions)\n\n if (nestedResult) {\n conditions.push(nestedResult)\n }\n continue\n }\n\n const column = table[fieldName]\n\n if (!column || !condition || typeof condition !== 'object') {\n continue\n }\n\n if ('equals' in condition) {\n conditions.push(condition.equals === null ? isNull(column) : eq(column, condition.equals))\n }\n\n if ('not_in' in condition && Array.isArray(condition.not_in) && condition.not_in.length > 0) {\n conditions.push(notInArray(column, condition.not_in))\n }\n }\n\n return conditions.length === 1 ? conditions[0] : and(...conditions)\n}\n\n/**\n * Resolves a field path to the database table and column that store its value.\n *\n * While walking through relationships, arrays, and blocks, the function adds the joins required\n * to reach the final column. Table aliases are used when the path is resolved inside a subquery.\n *\n * @example\n * Resolving `movies.name` adds joins from the parent collection to its relationship table and then\n * to the `movies` table. The returned column is `movies.name`.\n *\n * @returns The final field and column, plus any extra constraints discovered while resolving it.\n */\nexport const getTableColumnFromPath = ({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix = '',\n constraintPath: incomingConstraintPath,\n constraints = [],\n fields,\n joins,\n locale: incomingLocale,\n parentAliasTable,\n parentIsLocalized,\n pathSegments: incomingSegments,\n req,\n rootTableName: incomingRootTableName,\n selectFields,\n selectLocale,\n tableName,\n tableNameSuffix = '',\n value,\n}: Args): TableColumn => {\n const fieldPath = incomingSegments[0]\n let locale = incomingLocale\n const rootTableName = incomingRootTableName || tableName\n const tableContainingField = parentAliasTable ?? aliasTable ?? adapter.tables[rootTableName]\n let constraintPath = incomingConstraintPath || ''\n\n const field = fields.find((fieldToFind) => fieldToFind.name === fieldPath)\n let newTableName = tableName\n\n if (!field && fieldPath === 'id') {\n const idTable = aliasTable ?? adapter.tables[newTableName]\n\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: idTable,\n }\n }\n\n let localizedPathQuery = false\n if (field) {\n const pathSegments = [...incomingSegments]\n const fieldStoragePath = appendFieldToStoragePath({ field, path: constraintPath })\n\n const isFieldLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n // If next segment is a locale,\n // we need to take it out and use it as the locale from this point on\n if (isFieldLocalized && adapter.payload.config.localization) {\n const matchedLocale = adapter.payload.config.localization.localeCodes.find(\n (locale) => locale === pathSegments[1],\n )\n\n if (matchedLocale) {\n locale = matchedLocale\n localizedPathQuery = true\n pathSegments.splice(1, 1)\n }\n }\n\n switch (field.type) {\n case 'array': {\n newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const arrayParentTable = aliasTable || adapter.tables[tableName]\n\n constraintPath = `${fieldStoragePath}.`\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [eq(arrayParentTable.id, adapter.tables[newTableName]._parentID)]\n\n if (selectLocale) {\n selectFields._locale = adapter.tables[newTableName]._locale\n }\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n addJoinTable({\n condition: and(...conditions),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(arrayParentTable.id, adapter.tables[newTableName]._parentID),\n isOneToMany: true,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentAliasTable: aliasTable,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n }\n case 'blocks': {\n if (adapter.blocksAsJSON) {\n break\n }\n let blockTableColumn: TableColumn\n let newTableName: string\n\n // handle blockType queries\n if (pathSegments[1] === 'blockType') {\n // find the block config using the value\n const blockTypes = Array.isArray(value) ? value : [value]\n blockTypes.forEach((blockType) => {\n const block =\n adapter.payload.blocks[blockType] ??\n (field.blocks.find(\n (block) => typeof block !== 'string' && block.slug === blockType,\n ) as FlattenedBlock | undefined)\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n\n joins.push({\n condition: eq(adapter.tables[tableName].id, newAliasTable._parentID),\n table: newAliasTable,\n })\n constraints.push({\n columnName: '_path',\n table: newAliasTable,\n value: `${constraintPath}${pathSegments[0]}`,\n })\n })\n return {\n constraints,\n field,\n getNotNullColumnByValue: () => 'id',\n table: adapter.tables[tableName],\n }\n }\n\n const hasBlockField = field.blocks.some((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n\n newTableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${tableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n let result: TableColumn\n const blockConstraints = []\n const blockSelectFields = {}\n\n let blockJoin: BuildQueryJoinAliases[0]\n if (isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n blockJoin = {\n condition: and(...conditions),\n table: adapter.tables[newTableName],\n }\n } else {\n blockJoin = {\n condition: eq(\n (aliasTable || adapter.tables[tableName]).id,\n adapter.tables[newTableName]._parentID,\n ),\n table: adapter.tables[newTableName],\n }\n }\n\n // Create a new reference for nested joins\n const newJoins = [...joins]\n\n try {\n result = getTableColumnFromPath({\n adapter,\n collectionPath,\n constraintPath: `${fieldStoragePath}.`,\n constraints: blockConstraints,\n fields: block.flattenedFields,\n joins: newJoins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName,\n selectFields: blockSelectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } catch (_) {\n // this is fine, not every block will have the field\n }\n if (!result) {\n return\n }\n blockTableColumn = result\n constraints = constraints.concat(blockConstraints)\n selectFields = { ...selectFields, ...blockSelectFields }\n\n const previousLength = joins.length\n joins.push(blockJoin)\n // Append new joins AFTER the block join to prevent errors with missing FROM clause.\n if (newJoins.length > previousLength) {\n for (let i = previousLength; i < newJoins.length; i++) {\n joins.push(newJoins[i])\n }\n }\n return true\n })\n if (hasBlockField) {\n return {\n columnName: blockTableColumn.columnName,\n constraints,\n field: blockTableColumn.field,\n pathSegments: pathSegments.slice(1),\n rawColumn: blockTableColumn.rawColumn,\n table: blockTableColumn.table,\n }\n }\n break\n }\n\n case 'group': {\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n let condition = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition,\n joins,\n table: adapter.tables[newTableName],\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${fieldStoragePath}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n\n case 'join': {\n if (Array.isArray(field.collection)) {\n throw new APIError('Not supported')\n }\n\n const newCollectionPath = pathSegments.slice(1).join('.')\n\n // Filtering through a polymorphic `on` relationship is not supported: it is stored in the\n // `_rels` table with no direct column to correlate on, which would otherwise build invalid SQL.\n const onRelationshipField = getFieldByPath({\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n path: field.on,\n })?.field\n\n if (\n onRelationshipField &&\n (onRelationshipField.type === 'relationship' || onRelationshipField.type === 'upload') &&\n Array.isArray(onRelationshipField.relationTo)\n ) {\n throw new APIError('Not supported')\n }\n\n if (field.hasMany) {\n const relationTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}._rels`,\n )\n\n const aliasRelationshipTable = (existingTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n const relationshipField = getFieldByPath({\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n path: field.on,\n })\n if (!relationshipField) {\n throw new APIError('Relationship was not found')\n }\n\n if (!existingTable) {\n addJoinTable({\n condition: and(\n eq(\n tableContainingField.id,\n aliasRelationshipTable[\n `${(relationshipField.field as RelationshipField).relationTo as string}ID`\n ],\n ),\n like(aliasRelationshipTable.path, field.on),\n ),\n joins,\n queryPath: `${constraintPath}${field.name}._rels`,\n table: aliasRelationshipTable,\n })\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'parent',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: aliasRelationshipTable,\n }\n }\n\n const relationshipConfig = adapter.payload.collections[field.collection].config\n const relationshipTableName = adapter.tableNameMap.get(\n toSnakeCase(relationshipConfig.slug),\n )\n\n // parent to relationship join table\n const relationshipFields = relationshipConfig.flattenedFields\n\n const existingMainTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )\n\n const relationshipTable = (existingMainTable?.table ??\n getTableAlias({\n adapter,\n tableName: relationshipTableName,\n }).newAliasTable) as PgTableWithColumns<any>\n\n if (!existingMainTable) {\n const branchCondition = getBranchTableCondition({\n adapter,\n collectionSlug: field.collection,\n req,\n table: relationshipTable,\n })\n const relationshipCondition = eq(aliasRelationshipTable.parent, relationshipTable.id)\n\n joins.push({\n condition: branchCondition\n ? and(relationshipCondition, branchCondition)\n : relationshipCondition,\n queryPath: `${constraintPath}${field.name}`,\n table: relationshipTable,\n })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: relationshipTable,\n collectionPath: newCollectionPath,\n constraints,\n fields: relationshipFields,\n joins,\n locale,\n // A join reads from a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName: relationshipTableName,\n selectFields,\n selectLocale,\n tableName: relationshipTableName,\n value,\n })\n }\n\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.collection].config.slug),\n )\n\n const existingTable = joins.find(\n (e) => e.queryPath === `${constraintPath}${field.name}`,\n )?.table\n const newAliasTable =\n existingTable || getTableAlias({ adapter, tableName: newTableName }).newAliasTable\n\n if (!existingTable) {\n const onSegments = field.on.split('.')\n const collectionFlattenedFields =\n adapter.payload.collections[field.collection].config.flattenedFields\n const firstSegField =\n onSegments.length > 1\n ? collectionFlattenedFields.find((f) => f.name === onSegments[0])\n : null\n\n const arrayTableName =\n firstSegField?.type === 'array'\n ? adapter.tableNameMap.get(`${newTableName}_${toSnakeCase(onSegments[0])}`)\n : undefined\n\n if (arrayTableName) {\n // join from main table to array table\n const { newAliasTable: arrayAliasTable } = getTableAlias({\n adapter,\n tableName: arrayTableName,\n })\n\n joins.push({\n condition: eq(\n arrayAliasTable[onSegments.slice(1).join('_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n ),\n queryPath: `${constraintPath}${field.name}._array`,\n table: arrayAliasTable,\n })\n\n joins.push({\n condition: (() => {\n const relationshipCondition = eq(newAliasTable['id'], arrayAliasTable._parentID)\n const branchCondition = getBranchTableCondition({\n adapter,\n collectionSlug: field.collection,\n req,\n table: newAliasTable,\n })\n\n return branchCondition\n ? and(relationshipCondition, branchCondition)\n : relationshipCondition\n })(),\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n } else {\n const relationshipCondition = eq(\n newAliasTable[field.on.replaceAll('.', '_')],\n aliasTable ? aliasTable.id : adapter.tables[tableName].id,\n )\n const branchCondition = getBranchTableCondition({\n adapter,\n collectionSlug: field.collection,\n req,\n table: newAliasTable,\n })\n\n joins.push({\n condition: branchCondition\n ? and(relationshipCondition, branchCondition)\n : relationshipCondition,\n queryPath: `${constraintPath}${field.name}`,\n table: newAliasTable,\n })\n }\n }\n\n if (newCollectionPath === 'id') {\n return {\n columnName: 'id',\n constraints,\n field: {\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as NumberField | TextField,\n table: newAliasTable,\n }\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.collection].config.flattenedFields,\n joins,\n locale,\n // A join reads from a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n req,\n selectFields,\n tableName: newTableName,\n value,\n })\n\n break\n }\n\n case 'number':\n case 'text': {\n if (field.hasMany) {\n let tableType = 'texts'\n let columnName = 'text'\n if (field.type === 'number') {\n tableType = 'numbers'\n columnName = 'number'\n }\n newTableName = `${rootTableName}_${tableType}`\n\n const existingTable = joins.find((e) => e.queryPath === fieldStoragePath)\n\n const table = (existingTable?.table ??\n getTableAlias({ adapter, tableName: newTableName })\n .newAliasTable) as PgTableWithColumns<any>\n\n const joinConstraints = [\n eq(tableContainingField.id, table.parent),\n like(table.path, fieldStoragePath),\n ]\n\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [...joinConstraints]\n\n if (locale !== 'all') {\n conditions.push(eq(table._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: fieldStoragePath,\n table,\n })\n } else {\n addJoinTable({\n condition: and(...joinConstraints),\n joins,\n queryPath: fieldStoragePath,\n table,\n })\n }\n\n return {\n columnName,\n constraints,\n field,\n table,\n }\n }\n break\n }\n case 'relationship':\n case 'upload': {\n const newCollectionPath = pathSegments.slice(1).join('.')\n const relationshipQueryPath = `${getTableName(tableContainingField)}.${fieldStoragePath}._rels`\n const targetQueryPath = `${getTableName(tableContainingField)}.${fieldStoragePath}._target`\n\n if (Array.isArray(field.relationTo) || field.hasMany) {\n const relationshipPath = resolveRelationshipPath({\n adapter,\n fields,\n locale,\n parentIsLocalized,\n path: field.name,\n pathPrefix: constraintPath,\n })\n\n if (!relationshipPath) {\n throw new APIError(`Relationship path could not be resolved: ${collectionPath}`)\n }\n\n let relationshipFields: FlattenedField[]\n const relationTableName = `${rootTableName}${adapter.relationshipsSuffix}`\n\n const existingJoin = joins.find((e) => e.queryPath === relationshipQueryPath)\n\n let aliasRelationshipTable: PgTableWithColumns<any> | SQLiteTableWithColumns<any>\n let aliasRelationshipTableName: string\n if (existingJoin) {\n aliasRelationshipTable = existingJoin.table\n aliasRelationshipTableName = getTableName(existingJoin.table)\n } else {\n const res = getTableAlias({\n adapter,\n tableName: relationTableName,\n })\n aliasRelationshipTable = res.newAliasTable\n aliasRelationshipTableName = res.newAliasTableName\n }\n\n if (selectLocale && relationshipPath.isLocalized && adapter.payload.config.localization) {\n selectFields._locale = aliasRelationshipTable.locale\n }\n\n // Join in the relationships table\n if (\n relationshipPath.locale &&\n relationshipPath.locale !== 'all' &&\n relationshipPath.isLocalized &&\n adapter.payload.config.localization\n ) {\n const conditions = [\n eq(tableContainingField.id, aliasRelationshipTable.parent),\n like(aliasRelationshipTable.path, relationshipPath.path),\n ]\n\n conditions.push(eq(aliasRelationshipTable.locale, relationshipPath.locale))\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n queryPath: relationshipQueryPath,\n table: aliasRelationshipTable,\n })\n } else {\n // Join in the relationships table\n addJoinTable({\n condition: and(\n eq(tableContainingField.id, aliasRelationshipTable.parent),\n like(aliasRelationshipTable.path, relationshipPath.path),\n ),\n joins,\n queryPath: relationshipQueryPath,\n table: aliasRelationshipTable,\n })\n }\n\n selectFields[`${relationTableName}.path`] = aliasRelationshipTable.path\n\n let newAliasTable\n\n if (typeof field.relationTo === 'string') {\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n newTableName = adapter.tableNameMap.get(toSnakeCase(relationshipConfig.slug))\n\n // parent to relationship join table\n relationshipFields = relationshipConfig.flattenedFields\n const existingTargetJoin = joins.find((join) => join.queryPath === targetQueryPath)\n\n if (existingTargetJoin) {\n newAliasTable = existingTargetJoin.table\n } else {\n ;({ newAliasTable } = getTableAlias({ adapter, tableName: newTableName }))\n\n const relationshipID = aliasRelationshipTable[`${field.relationTo}ID`]\n const condition = getRelationshipJoinCondition({\n adapter,\n collectionSlug: field.relationTo,\n relationshipID,\n req,\n table: newAliasTable,\n value,\n })\n\n joins.push({\n condition,\n queryPath: targetQueryPath,\n table: newAliasTable,\n })\n }\n\n if (newCollectionPath === '' || (newCollectionPath === 'id' && !existingTargetJoin)) {\n return {\n columnName: `${field.relationTo}ID`,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n }\n } else if (newCollectionPath === 'value') {\n const hasCustomCollectionWithCustomID = field.relationTo.some(\n (relationTo) => !!adapter.payload.collections[relationTo].customIDType,\n )\n\n const columns: TableColumn['columns'] = field.relationTo\n .map((relationTo) => {\n let idType: 'number' | 'text' | 'uuid' = isUUIDType(adapter.idType)\n ? 'uuid'\n : 'number'\n\n const { customIDType } = adapter.payload.collections[relationTo]\n\n if (customIDType) {\n idType = customIDType\n }\n\n const idTypeTextOrUuid = idType === 'text' || idType === 'uuid'\n\n // Do not add the column to OR if we know that it can't match by the type\n // We can't do the same with idType: 'number' because `value` can be from the REST search query params\n if (typeof value === 'number' && idTypeTextOrUuid) {\n return null\n }\n\n if (\n Array.isArray(value) &&\n value.every((val) => typeof val === 'number') &&\n idTypeTextOrUuid\n ) {\n return null\n }\n\n // Do not add the UUID type column if incoming query value doesn't match UUID. If there aren't any collections with\n // a custom ID type, we skip this check\n // We need this because Postgres throws an error if querying by UUID column with a value that isn't a valid UUID.\n if (\n value &&\n !Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID\n ) {\n if (!uuidValidate(value)) {\n return null\n }\n }\n\n if (\n Array.isArray(value) &&\n idType === 'uuid' &&\n hasCustomCollectionWithCustomID &&\n !value.some((val) => uuidValidate(val))\n ) {\n return null\n }\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n idType,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n }\n })\n .filter(Boolean)\n\n return {\n columns,\n constraints,\n field,\n table: aliasRelationshipTable,\n }\n } else if (newCollectionPath === 'relationTo') {\n const relationTo = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n\n return {\n constraints,\n field,\n getNotNullColumnByValue: (val) => {\n const matchedRelation = relationTo.find((relation) => relation === val)\n if (matchedRelation) {\n return `${matchedRelation}ID`\n }\n return undefined\n },\n table: aliasRelationshipTable,\n }\n } else if (isPolymorphicRelationship(value)) {\n const { relationTo } = value\n\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n return {\n constraints,\n field,\n rawColumn: sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`),\n table: aliasRelationshipTable,\n }\n } else if (value === DistinctSymbol) {\n const obj: Record<string, SQL> = {}\n\n field.relationTo.forEach((relationTo) => {\n const relationTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[relationTo].config.slug),\n )\n\n obj[relationTo] = sql.raw(`\"${aliasRelationshipTableName}\".\"${relationTableName}_id\"`)\n })\n\n let rawColumn = jsonBuildObject(adapter, obj)\n if (adapter.name === 'postgres') {\n rawColumn = sql`${rawColumn}::text`\n }\n\n return {\n constraints,\n field,\n rawColumn,\n table: aliasRelationshipTable,\n }\n } else {\n throw new APIError('Not supported')\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraints,\n fields: relationshipFields,\n joins,\n locale,\n // A relationship jumps to a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName: newTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n value,\n })\n } else if (\n pathSegments.length > 1 &&\n (!(pathSegments.length === 2 && pathSegments[1] === 'id') ||\n joins.some((join) => join.queryPath === targetQueryPath))\n ) {\n // simple relationships\n const columnName = `${columnPrefix}${field.name}`\n const newTableName = adapter.tableNameMap.get(\n toSnakeCase(adapter.payload.collections[field.relationTo].config.slug),\n )\n const existingTargetJoin = joins.find((join) => join.queryPath === targetQueryPath)\n const newAliasTable = (existingTargetJoin?.table ??\n getTableAlias({ adapter, tableName: newTableName }).newAliasTable) as ReturnType<\n typeof getTableAlias\n >['newAliasTable']\n\n if (!existingTargetJoin && isFieldLocalized && adapter.payload.config.localization) {\n const { newAliasTable: aliasLocaleTable } = getTableAlias({\n adapter,\n tableName: `${rootTableName}${adapter.localesSuffix}`,\n })\n\n const condtions = [eq(aliasLocaleTable._parentID, tableContainingField.id)]\n\n if (selectLocale) {\n selectFields._locale = aliasLocaleTable._locale\n }\n\n if (locale !== 'all') {\n condtions.push(eq(aliasLocaleTable._locale, locale))\n }\n\n const localesTable = adapter.tables[`${rootTableName}${adapter.localesSuffix}`]\n\n addJoinTable({\n condition: and(...condtions),\n joins,\n table: localesTable,\n })\n\n const condition = getRelationshipJoinCondition({\n adapter,\n collectionSlug: field.relationTo,\n relationshipID: localesTable[columnName],\n req,\n table: newAliasTable,\n value,\n })\n\n joins.push({\n condition,\n queryPath: targetQueryPath,\n table: newAliasTable,\n })\n } else if (!existingTargetJoin) {\n const relationshipID = aliasTable\n ? aliasTable[columnName]\n : adapter.tables[tableName][columnName]\n const condition = getRelationshipJoinCondition({\n adapter,\n collectionSlug: field.relationTo,\n relationshipID,\n req,\n table: newAliasTable,\n value,\n })\n\n joins.push({ condition, queryPath: targetQueryPath, table: newAliasTable })\n }\n\n return getTableColumnFromPath({\n adapter,\n aliasTable: newAliasTable,\n collectionPath: newCollectionPath,\n constraintPath: '',\n constraints,\n fields: adapter.payload.collections[field.relationTo].config.flattenedFields,\n joins,\n locale,\n // A relationship jumps to a different collection, so localization does not carry over\n parentIsLocalized: false,\n pathSegments: pathSegments.slice(1),\n req,\n selectFields,\n tableName: newTableName,\n value,\n })\n }\n\n break\n }\n\n case 'select': {\n if (field.hasMany) {\n const newTableName = adapter.tableNameMap.get(\n `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`,\n )\n\n const idColumn = (aliasTable ?? adapter.tables[tableName]).id\n if (locale && isFieldLocalized && adapter.payload.config.localization) {\n const conditions = [\n eq(idColumn, adapter.tables[newTableName].parent),\n eq(adapter.tables[newTableName]._locale, locale),\n ]\n\n if (locale !== 'all') {\n conditions.push(eq(adapter.tables[newTableName]._locale, locale))\n }\n\n addJoinTable({\n condition: and(...conditions),\n joins,\n table: adapter.tables[newTableName],\n })\n } else {\n addJoinTable({\n condition: eq(idColumn, adapter.tables[newTableName].parent),\n joins,\n table: adapter.tables[newTableName],\n })\n }\n\n return {\n columnName: 'value',\n constraints,\n field,\n table: adapter.tables[newTableName],\n }\n }\n break\n }\n\n case 'tab': {\n if (tabHasName(field)) {\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix: `${columnPrefix}${field.name}_`,\n constraintPath: `${fieldStoragePath}.`,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,\n value,\n })\n }\n return getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath,\n columnPrefix,\n constraintPath,\n constraints,\n fields: field.flattenedFields,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n pathSegments: pathSegments.slice(1),\n req,\n rootTableName,\n selectFields,\n selectLocale,\n tableName: newTableName,\n tableNameSuffix,\n value,\n })\n }\n\n default: {\n // fall through\n break\n }\n }\n\n let newTable = adapter.tables[newTableName]\n\n if (isFieldLocalized && adapter.payload.config.localization) {\n // If localized, we go to localized table and set aliasTable to undefined\n // so it is not picked up below to be used as targetTable\n const parentTable = aliasTable || adapter.tables[tableName]\n newTableName = `${tableName}${adapter.localesSuffix}`\n\n // use an alias because the same query may contain constraints with different locale value\n if (localizedPathQuery) {\n const { newAliasTable } = getTableAlias({ adapter, tableName: newTableName })\n newTable = newAliasTable\n } else {\n newTable = adapter.tables[newTableName]\n }\n\n let condition = eq(parentTable.id, newTable._parentID)\n\n if (locale !== 'all') {\n condition = and(condition, eq(newTable._locale, locale))\n }\n\n if (selectLocale) {\n selectFields._locale = newTable._locale\n }\n\n addJoinTable({\n condition,\n joins,\n table: newTable,\n })\n\n aliasTable = undefined\n }\n\n const targetTable = aliasTable || newTable\n\n selectFields[`${newTableName}.${columnPrefix}${field.name}`] =\n targetTable[`${columnPrefix}${field.name}`]\n\n return {\n columnName: `${columnPrefix}${field.name}`,\n constraints,\n field,\n pathSegments,\n table: targetTable,\n }\n }\n\n throw new APIError(`Cannot find field for path at ${fieldPath}`)\n}\n"],"names":["and","eq","getTableName","isNull","like","notInArray","or","sql","APIError","getBranchPredicateSync","getFieldByPath","resolveBranchReadState","fieldShouldBeLocalized","tabHasName","toSnakeCase","validate","uuidValidate","isPolymorphicRelationship","isUUIDType","jsonBuildObject","DistinctSymbol","resolveBlockTableName","addJoinTable","buildBranchVisibility","getTableAlias","appendFieldToStoragePath","resolveRelationshipPath","getRelationshipJoinCondition","adapter","collectionSlug","relationshipID","req","table","value","branchReadState","branchPredicate","useBranching","shouldMatchCanonicalID","Boolean","_branchDocID","identityCondition","id","branchCondition","getBranchTableCondition","branch","buildBranchPredicateCondition","where","undefined","conditions","fieldName","condition","Object","entries","Array","isArray","nestedConditions","map","nestedWhere","filter","nestedCondition","nestedResult","push","column","equals","not_in","length","getTableColumnFromPath","aliasTable","collectionPath","columnPrefix","constraintPath","incomingConstraintPath","constraints","fields","joins","locale","incomingLocale","parentAliasTable","parentIsLocalized","pathSegments","incomingSegments","rootTableName","incomingRootTableName","selectFields","selectLocale","tableName","tableNameSuffix","fieldPath","tableContainingField","tables","field","find","fieldToFind","name","newTableName","idTable","columnName","type","idType","localizedPathQuery","fieldStoragePath","path","isFieldLocalized","payload","config","localization","matchedLocale","localeCodes","splice","tableNameMap","get","arrayParentTable","_parentID","_locale","isOneToMany","flattenedFields","localized","slice","blocksAsJSON","blockTableColumn","blockTypes","forEach","blockType","block","blocks","slug","newAliasTable","getNotNullColumnByValue","hasBlockField","some","_block","result","blockConstraints","blockSelectFields","blockJoin","newJoins","_","concat","previousLength","i","rawColumn","localesSuffix","collection","newCollectionPath","join","onRelationshipField","collections","on","relationTo","hasMany","relationTableName","relationshipsSuffix","existingTable","e","queryPath","aliasRelationshipTable","relationshipField","relationshipConfig","relationshipTableName","relationshipFields","existingMainTable","relationshipTable","relationshipCondition","parent","onSegments","split","collectionFlattenedFields","firstSegField","f","arrayTableName","arrayAliasTable","replaceAll","tableType","joinConstraints","relationshipQueryPath","targetQueryPath","relationshipPath","pathPrefix","existingJoin","aliasRelationshipTableName","res","newAliasTableName","isLocalized","existingTargetJoin","hasCustomCollectionWithCustomID","customIDType","columns","idTypeTextOrUuid","every","val","raw","matchedRelation","relation","obj","aliasLocaleTable","condtions","localesTable","idColumn","newTable","parentTable","targetTable"],"mappings":"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"}
|
package/dist/schema/build.js
CHANGED
|
@@ -110,13 +110,13 @@ export const buildTable = ({ adapter, baseColumns = {}, baseForeignKeys = {}, ba
|
|
|
110
110
|
};
|
|
111
111
|
localesIndexes._localeParent = {
|
|
112
112
|
name: buildIndexName({
|
|
113
|
-
name: `${localeTableName}
|
|
113
|
+
name: `${localeTableName}_parent_id_locale_unique`,
|
|
114
114
|
adapter,
|
|
115
115
|
appendSuffix: false
|
|
116
116
|
}),
|
|
117
117
|
on: [
|
|
118
|
-
'
|
|
119
|
-
'
|
|
118
|
+
'_parentID',
|
|
119
|
+
'_locale'
|
|
120
120
|
],
|
|
121
121
|
unique: true
|
|
122
122
|
};
|
package/dist/schema/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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}_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 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 }\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","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 }\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","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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sqlite/execute.ts"],"sourcesContent":["import { sql } from 'drizzle-orm'\n\nimport type { Execute } from './types.js'\n\nexport const execute: Execute<any> = function execute({ db, drizzle, raw, sql: statement }) {\n const executeFrom =
|
|
1
|
+
{"version":3,"sources":["../../src/sqlite/execute.ts"],"sourcesContent":["import { sql } from 'drizzle-orm'\n\nimport type { Execute } from './types.js'\n\nexport const execute: Execute<any> = function execute({ db, drizzle, raw, sql: statement }) {\n const executeFrom = db ?? drizzle\n\n if (raw) {\n const result = executeFrom.run(sql.raw(raw))\n return result\n } else {\n const result = executeFrom.run(statement)\n return result\n }\n}\n"],"names":["sql","execute","db","drizzle","raw","statement","executeFrom","result","run"],"mappings":"AAAA,SAASA,GAAG,QAAQ,cAAa;AAIjC,OAAO,MAAMC,UAAwB,SAASA,QAAQ,EAAEC,EAAE,EAAEC,OAAO,EAAEC,GAAG,EAAEJ,KAAKK,SAAS,EAAE;IACxF,MAAMC,cAAcJ,MAAMC;IAE1B,IAAIC,KAAK;QACP,MAAMG,SAASD,YAAYE,GAAG,CAACR,IAAII,GAAG,CAACA;QACvC,OAAOG;IACT,OAAO;QACL,MAAMA,SAASD,YAAYE,GAAG,CAACH;QAC/B,OAAOE;IACT;AACF,EAAC"}
|