@payloadcms/drizzle 3.92.1 → 3.94.0-internal.78c6d86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/exports/postgres.d.ts +1 -1
  2. package/dist/exports/postgres.d.ts.map +1 -1
  3. package/dist/exports/postgres.js +1 -1
  4. package/dist/exports/postgres.js.map +1 -1
  5. package/dist/exports/sqlite.d.ts +1 -0
  6. package/dist/exports/sqlite.d.ts.map +1 -1
  7. package/dist/exports/sqlite.js +1 -0
  8. package/dist/exports/sqlite.js.map +1 -1
  9. package/dist/postgres/requireDrizzleKit.d.ts +4 -0
  10. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
  11. package/dist/postgres/requireDrizzleKit.js +15 -10
  12. package/dist/postgres/requireDrizzleKit.js.map +1 -1
  13. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  14. package/dist/queries/getTableColumnFromPath.js +9 -1
  15. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  16. package/dist/schema/build.d.ts.map +1 -1
  17. package/dist/schema/build.js +47 -2
  18. package/dist/schema/build.js.map +1 -1
  19. package/dist/schema/buildRawSchema.spec.js +96 -9
  20. package/dist/schema/buildRawSchema.spec.js.map +1 -1
  21. package/dist/schema/traverseFields.d.ts.map +1 -1
  22. package/dist/schema/traverseFields.js +57 -14
  23. package/dist/schema/traverseFields.js.map +1 -1
  24. package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
  25. package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
  26. package/dist/sqlite/createRequireDrizzleKit.js +28 -0
  27. package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
  28. package/dist/sqlite/createRequireDrizzleKit.spec.js +61 -0
  29. package/dist/sqlite/createRequireDrizzleKit.spec.js.map +1 -0
  30. package/dist/sqlite/drizzleKitTooling.spec.js +92 -0
  31. package/dist/sqlite/drizzleKitTooling.spec.js.map +1 -0
  32. package/dist/sqlite/requireDrizzleKit.d.ts +1 -2
  33. package/dist/sqlite/requireDrizzleKit.d.ts.map +1 -1
  34. package/dist/sqlite/requireDrizzleKit.js +4 -10
  35. package/dist/sqlite/requireDrizzleKit.js.map +1 -1
  36. package/dist/transform/getBlockFromField.d.ts +8 -0
  37. package/dist/transform/getBlockFromField.d.ts.map +1 -0
  38. package/dist/transform/getBlockFromField.js +6 -0
  39. package/dist/transform/getBlockFromField.js.map +1 -0
  40. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  41. package/dist/transform/read/traverseFields.js +12 -3
  42. package/dist/transform/read/traverseFields.js.map +1 -1
  43. package/dist/transform/write/blocks.d.ts.map +1 -1
  44. package/dist/transform/write/blocks.js +6 -1
  45. package/dist/transform/write/blocks.js.map +1 -1
  46. package/dist/transform/write/traverseFields.js +1 -1
  47. package/dist/transform/write/traverseFields.js.map +1 -1
  48. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schema/build.ts"],"sourcesContent":["import type { FlattenedField, SanitizedCompoundIndex } from 'payload'\n\nimport { InvalidConfiguration } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n DrizzleAdapter,\n IDType,\n RawColumn,\n RawForeignKey,\n RawIndex,\n RawRelation,\n RawTable,\n RelationMap,\n SetColumnID,\n} from '../types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { buildForeignKeyName } from '../utilities/buildForeignKeyName.js'\nimport { buildIndexName } from '../utilities/buildIndexName.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n baseColumns?: Record<string, RawColumn>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseForeignKeys?: Record<string, RawForeignKey>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseIndexes?: Record<string, RawIndex>\n blocksTableNameMap: Record<string, number>\n buildNumbers?: boolean\n buildRelationships?: boolean\n compoundIndexes?: SanitizedCompoundIndex[]\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique: boolean\n fields: FlattenedField[]\n parentIsLocalized: boolean\n rootRelationships?: Set<string>\n rootRelationsToBuild?: RelationMap\n rootTableIDColType?: IDType\n rootTableName?: string\n rootUniqueRelationships?: Set<string>\n setColumnID: SetColumnID\n tableName: string\n timestamps?: boolean\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: RelationMap\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseForeignKeys = {},\n baseIndexes = {},\n blocksTableNameMap,\n compoundIndexes,\n disableNotNull,\n disableRelsTableUnique = false,\n disableUnique = false,\n fields,\n parentIsLocalized,\n rootRelationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n rootUniqueRelationships,\n setColumnID,\n tableName,\n timestamps,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const isRoot = !incomingRootTableName\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, RawColumn> = baseColumns\n const indexes: Record<string, RawIndex> = baseIndexes\n\n const localesColumns: Record<string, RawColumn> = {}\n const localesIndexes: Record<string, RawIndex> = {}\n let localesTable: RawTable\n let textsTable: RawTable\n let numbersTable: RawTable\n\n // Relationships to the base collection\n const relationships: Set<string> = rootRelationships || new Set()\n\n // Unique relationships to the base collection\n const uniqueRelationships: Set<string> = rootUniqueRelationships || new Set()\n\n let relationshipsTable: RawTable\n\n // Drizzle relations\n const relationsToBuild: RelationMap = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n const {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n blocksTableNameMap,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentIsLocalized,\n parentTableName: tableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n setColumnID,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n // split the relationsToBuild by localized and non-localized\n const localizedRelations = new Map()\n const nonLocalizedRelations = new Map()\n\n relationsToBuild.forEach(({ type, localized, relationName, target }, key) => {\n const map = localized ? localizedRelations : nonLocalizedRelations\n map.set(key, { type, relationName, target })\n })\n\n if (timestamps) {\n columns.createdAt = {\n name: 'created_at',\n type: 'timestamp',\n defaultNow: true,\n mode: 'string',\n notNull: true,\n precision: 3,\n withTimezone: true,\n }\n\n columns.updatedAt = {\n name: 'updated_at',\n type: 'timestamp',\n defaultNow: true,\n mode: 'string',\n notNull: true,\n precision: 3,\n withTimezone: true,\n }\n }\n\n const table: RawTable = {\n name: tableName,\n columns,\n foreignKeys: baseForeignKeys,\n indexes,\n }\n\n adapter.rawTables[tableName] = table\n\n if (hasLocalizedField || localizedRelations.size) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n adapter.rawTables[localeTableName] = localesTable\n\n localesColumns.id = {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n }\n\n localesColumns._locale = {\n name: '_locale',\n type: 'enum',\n locale: true,\n notNull: true,\n }\n\n localesColumns._parentID = {\n name: '_parent_id',\n type: idColType,\n notNull: true,\n }\n\n localesIndexes._localeParent = {\n name: buildIndexName({\n name: `${localeTableName}_locale_parent_id_unique`,\n adapter,\n appendSuffix: false,\n }),\n on: ['_locale', '_parentID'],\n unique: true,\n }\n\n // Dedicated index for parent-only lookups/deletes. The composite unique index above leads\n // with `_locale`, so a filter on `_parent_id` alone can't seek it (B-tree needs a\n // leftmost-prefix match) and would otherwise fall back to a full scan.\n localesIndexes._parentID = {\n name: buildIndexName({\n name: `${localeTableName}_parent_id`,\n adapter,\n }),\n on: '_parentID',\n }\n\n localesTable = {\n name: localeTableName,\n columns: localesColumns,\n foreignKeys: {\n _parentIdFk: {\n name: buildForeignKeyName({ name: `${localeTableName}_parent_id`, adapter }),\n columns: ['_parentID'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: localesIndexes,\n }\n\n adapter.rawTables[localeTableName] = localesTable\n\n const localeRelations: Record<string, RawRelation> = {\n _parentID: {\n type: 'one',\n fields: [\n {\n name: '_parentID',\n table: localeTableName,\n },\n ],\n references: ['id'],\n relationName: '_locales',\n to: tableName,\n },\n }\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n localeRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: localeTableName,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n if (type === 'many') {\n localeRelations[key] = {\n type: 'many',\n relationName: key,\n to: target,\n }\n }\n })\n adapter.rawRelations[localeTableName] = localeRelations\n }\n\n if (compoundIndexes) {\n for (const index of compoundIndexes) {\n let someLocalized: boolean | null = null\n const columns: string[] = []\n\n const getTableToUse = () => {\n if (someLocalized) {\n return localesTable\n }\n\n return table\n }\n\n for (const { path, pathHasLocalized } of index.fields) {\n if (someLocalized === null) {\n someLocalized = pathHasLocalized\n }\n\n if (someLocalized !== pathHasLocalized) {\n throw new InvalidConfiguration(\n `Compound indexes within localized and non localized fields are not supported in SQL. Expected ${path} to be ${someLocalized ? 'non' : ''} localized.`,\n )\n }\n\n const columnPath = path.replaceAll('.', '_')\n\n if (!getTableToUse().columns[columnPath]) {\n throw new InvalidConfiguration(\n `Column ${columnPath} for compound index on ${path} was not found in the ${getTableToUse().name} table.`,\n )\n }\n\n columns.push(columnPath)\n }\n\n if (someLocalized) {\n columns.push('_locale')\n }\n\n let name = columns.join('_')\n // truncate against the limit, buildIndexName will handle collisions\n if (name.length > 63) {\n name = 'compound_index'\n }\n\n const indexName = buildIndexName({ name, adapter })\n\n getTableToUse().indexes[indexName] = {\n name: indexName,\n on: columns,\n unique: disableUnique ? false : index.unique,\n }\n }\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n adapter.rawTables[textsTableName] = textsTable\n\n const columns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n\n notNull: true,\n },\n text: {\n name: 'text',\n type: 'varchar',\n },\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const textsTableIndexes: Record<string, RawIndex> = {\n orderParentIdx: {\n name: buildIndexName({\n name: `${textsTableName}_order_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['order', 'parent'],\n },\n }\n\n if (hasManyTextField === 'index') {\n textsTableIndexes.text_idx = {\n name: buildIndexName({ name: `${textsTableName}_text`, adapter }),\n on: 'text',\n }\n }\n\n if (hasLocalizedManyTextField) {\n textsTableIndexes.localeParent = {\n name: buildIndexName({\n name: `${textsTableName}_locale_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['locale', 'parent'],\n }\n }\n\n textsTable = {\n name: textsTableName,\n columns,\n foreignKeys: {\n parentFk: {\n name: buildForeignKeyName({ name: `${textsTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: textsTableIndexes,\n }\n\n adapter.rawTables[textsTableName] = textsTable\n\n adapter.rawRelations[textsTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: textsTableName,\n },\n ],\n references: ['id'],\n relationName: '_texts',\n to: tableName,\n },\n }\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n adapter.rawTables[numbersTableName] = numbersTable\n const columns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n number: {\n name: 'number',\n type: 'numeric',\n },\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n notNull: true,\n },\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const numbersTableIndexes: Record<string, RawIndex> = {\n orderParentIdx: {\n name: buildIndexName({ name: `${numbersTableName}_order_parent`, adapter }),\n on: ['order', 'parent'],\n },\n }\n\n if (hasManyNumberField === 'index') {\n numbersTableIndexes.numberIdx = {\n name: buildIndexName({ name: `${numbersTableName}_number`, adapter }),\n on: 'number',\n }\n }\n\n if (hasLocalizedManyNumberField) {\n numbersTableIndexes.localeParent = {\n name: buildIndexName({\n name: `${numbersTableName}_locale_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['locale', 'parent'],\n }\n }\n\n numbersTable = {\n name: numbersTableName,\n columns,\n foreignKeys: {\n parentFk: {\n name: buildForeignKeyName({ name: `${numbersTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: numbersTableIndexes,\n }\n\n adapter.rawTables[numbersTableName] = numbersTable\n\n adapter.rawRelations[numbersTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: numbersTableName,\n },\n ],\n references: ['id'],\n relationName: '_numbers',\n to: tableName,\n },\n }\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n order: {\n name: 'order',\n type: 'integer',\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n notNull: true,\n },\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n const relationshipIndexes: Record<string, RawIndex> = {\n order: {\n name: buildIndexName({ name: `${relationshipsTableName}_order`, adapter }),\n on: 'order',\n },\n parentIdx: {\n name: buildIndexName({ name: `${relationshipsTableName}_parent`, adapter }),\n on: 'parent',\n },\n pathIdx: {\n name: buildIndexName({ name: `${relationshipsTableName}_path`, adapter }),\n on: 'path',\n },\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipIndexes.localeIdx = {\n name: buildIndexName({ name: `${relationshipsTableName}_locale`, adapter }),\n on: 'locale',\n }\n }\n\n const relationshipForeignKeys: Record<string, RawForeignKey> = {\n parentFk: {\n name: buildForeignKeyName({ name: `${relationshipsTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = createTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\n let colType: 'integer' | 'numeric' | 'uuid' | 'varchar' = isUUIDType(adapter.idType)\n ? 'uuid'\n : 'integer'\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomIDType === 'text') {\n colType = 'varchar'\n }\n\n const colName = `${relationTo}ID`\n\n relationshipColumns[colName] = {\n name: `${formattedRelationTo}_id`,\n type: colType,\n }\n\n relationshipForeignKeys[`${relationTo}IdFk`] = {\n name: buildForeignKeyName({\n name: `${relationshipsTableName}_${toSnakeCase(relationTo)}`,\n adapter,\n }),\n columns: [colName],\n foreignColumns: [\n {\n name: 'id',\n table: formattedRelationTo,\n },\n ],\n onDelete: 'cascade',\n }\n\n const indexColumns = [colName]\n\n const unique = !disableUnique && uniqueRelationships.has(relationTo)\n\n if (unique) {\n indexColumns.push('path')\n }\n if (hasLocalizedRelationshipField) {\n indexColumns.push('locale')\n }\n\n const indexName = buildIndexName({\n name: `${relationshipsTableName}_${formattedRelationTo}_id`,\n adapter,\n })\n\n relationshipIndexes[indexName] = {\n name: indexName,\n on: indexColumns,\n unique,\n }\n })\n\n relationshipsTable = {\n name: relationshipsTableName,\n columns: relationshipColumns,\n foreignKeys: relationshipForeignKeys,\n indexes: relationshipIndexes,\n }\n\n adapter.rawTables[relationshipsTableName] = relationshipsTable\n\n const relationshipsTableRelations: Record<string, RawRelation> = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: relationshipsTableName,\n },\n ],\n references: ['id'],\n relationName: '_rels',\n to: tableName,\n },\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = createTableName({\n adapter,\n config: adapter.payload.collections[relationTo].config,\n throwValidationError: true,\n })\n const idColumnName = `${relationTo}ID`\n\n relationshipsTableRelations[idColumnName] = {\n type: 'one',\n fields: [\n {\n name: idColumnName,\n table: relationshipsTableName,\n },\n ],\n references: ['id'],\n relationName: relationTo,\n to: relatedTableName,\n }\n })\n adapter.rawRelations[relationshipsTableName] = relationshipsTableRelations\n }\n }\n\n const tableRelations: Record<string, RawRelation> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n tableRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: tableName,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n if (type === 'many') {\n tableRelations[key] = {\n type: 'many',\n relationName: relationName || key,\n to: target,\n }\n }\n })\n\n if (hasLocalizedField) {\n tableRelations._locales = {\n type: 'many',\n relationName: '_locales',\n to: localesTable.name,\n }\n }\n\n if (isRoot && textsTable) {\n tableRelations._texts = {\n type: 'many',\n relationName: '_texts',\n to: textsTable.name,\n }\n }\n\n if (isRoot && numbersTable) {\n tableRelations._numbers = {\n type: 'many',\n relationName: '_numbers',\n to: numbersTable.name,\n }\n }\n\n if (relationships.size && relationshipsTable) {\n tableRelations._rels = {\n type: 'many',\n relationName: '_rels',\n to: relationshipsTable.name,\n }\n }\n\n adapter.rawRelations[tableName] = tableRelations\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n"],"names":["InvalidConfiguration","toSnakeCase","createTableName","buildForeignKeyName","buildIndexName","isUUIDType","traverseFields","buildTable","adapter","baseColumns","baseForeignKeys","baseIndexes","blocksTableNameMap","compoundIndexes","disableNotNull","disableRelsTableUnique","disableUnique","fields","parentIsLocalized","rootRelationships","rootRelationsToBuild","rootTableIDColType","rootTableName","incomingRootTableName","rootUniqueRelationships","setColumnID","tableName","timestamps","versions","withinLocalizedArrayOrBlock","isRoot","columns","indexes","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","uniqueRelationships","relationshipsTable","relationsToBuild","Map","idColType","hasLocalizedField","hasLocalizedManyNumberField","hasLocalizedManyTextField","hasLocalizedRelationshipField","hasManyNumberField","hasManyTextField","newTableName","parentTableName","localizedRelations","nonLocalizedRelations","forEach","type","localized","relationName","target","key","map","set","createdAt","name","defaultNow","mode","notNull","precision","withTimezone","updatedAt","table","foreignKeys","rawTables","size","localeTableName","localesSuffix","id","primaryKey","_locale","locale","_parentID","_localeParent","appendSuffix","on","unique","_parentIdFk","foreignColumns","onDelete","localeRelations","references","to","rawRelations","index","someLocalized","getTableToUse","path","pathHasLocalized","columnPath","replaceAll","push","join","length","indexName","textsTableName","order","parent","text","textsTableIndexes","orderParentIdx","text_idx","localeParent","parentFk","numbersTableName","number","numbersTableIndexes","numberIdx","relationshipColumns","relationshipsTableName","relationshipsSuffix","relationshipIndexes","parentIdx","pathIdx","localeIdx","relationshipForeignKeys","relationTo","relationshipConfig","payload","collections","config","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","colName","indexColumns","has","relationshipsTableRelations","relatedTableName","idColumnName","tableRelations","_locales","_texts","_numbers","_rels"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/schema/build.ts"],"sourcesContent":["import type { FlattenedField, SanitizedCompoundIndex } from 'payload'\n\nimport { InvalidConfiguration } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n DrizzleAdapter,\n IDType,\n RawColumn,\n RawForeignKey,\n RawIndex,\n RawRelation,\n RawTable,\n RelationMap,\n SetColumnID,\n} from '../types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { buildForeignKeyName } from '../utilities/buildForeignKeyName.js'\nimport { buildIndexName } from '../utilities/buildIndexName.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { maxIdentifierLength } from '../utilities/validateIdentifierLength.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] = promoteLongInlineForeignKeys({ adapter, 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 // Dedicated index for parent-only lookups/deletes. The composite unique index above leads\n // with `_locale`, so a filter on `_parent_id` alone can't seek it (B-tree needs a\n // leftmost-prefix match) and would otherwise fall back to a full scan.\n localesIndexes._parentID = {\n name: buildIndexName({\n name: `${localeTableName}_parent_id`,\n adapter,\n }),\n on: '_parentID',\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] = promoteLongInlineForeignKeys({\n adapter,\n table: localesTable,\n })\n\n const localeRelations: Record<string, RawRelation> = {\n _parentID: {\n type: 'one',\n fields: [\n {\n name: '_parentID',\n table: localeTableName,\n },\n ],\n references: ['id'],\n relationName: '_locales',\n to: tableName,\n },\n }\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n localeRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: localeTableName,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n if (type === 'many') {\n localeRelations[key] = {\n type: 'many',\n relationName: key,\n to: target,\n }\n }\n })\n adapter.rawRelations[localeTableName] = localeRelations\n }\n\n if (compoundIndexes) {\n for (const index of compoundIndexes) {\n let someLocalized: boolean | null = null\n const columns: string[] = []\n\n const getTableToUse = () => {\n if (someLocalized) {\n return localesTable\n }\n\n return table\n }\n\n for (const { path, pathHasLocalized } of index.fields) {\n if (someLocalized === null) {\n someLocalized = pathHasLocalized\n }\n\n if (someLocalized !== pathHasLocalized) {\n throw new InvalidConfiguration(\n `Compound indexes within localized and non localized fields are not supported in SQL. Expected ${path} to be ${someLocalized ? 'non' : ''} localized.`,\n )\n }\n\n const columnPath = path.replaceAll('.', '_')\n\n if (!getTableToUse().columns[columnPath]) {\n throw new InvalidConfiguration(\n `Column ${columnPath} for compound index on ${path} was not found in the ${getTableToUse().name} table.`,\n )\n }\n\n columns.push(columnPath)\n }\n\n if (someLocalized) {\n columns.push('_locale')\n }\n\n let name = columns.join('_')\n // truncate against the limit, buildIndexName will handle collisions\n if (name.length > 63) {\n name = 'compound_index'\n }\n\n const indexName = buildIndexName({ name, adapter })\n\n getTableToUse().indexes[indexName] = {\n name: indexName,\n on: columns,\n unique: disableUnique ? false : index.unique,\n }\n }\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n adapter.rawTables[textsTableName] = textsTable\n\n const columns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n\n notNull: true,\n },\n text: {\n name: 'text',\n type: 'varchar',\n },\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const textsTableIndexes: Record<string, RawIndex> = {\n orderParentIdx: {\n name: buildIndexName({\n name: `${textsTableName}_order_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['order', 'parent'],\n },\n }\n\n if (hasManyTextField === 'index') {\n textsTableIndexes.text_idx = {\n name: buildIndexName({ name: `${textsTableName}_text`, adapter }),\n on: 'text',\n }\n }\n\n if (hasLocalizedManyTextField) {\n textsTableIndexes.localeParent = {\n name: buildIndexName({\n name: `${textsTableName}_locale_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['locale', 'parent'],\n }\n }\n\n textsTable = {\n name: textsTableName,\n columns,\n foreignKeys: {\n parentFk: {\n name: buildForeignKeyName({ name: `${textsTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: textsTableIndexes,\n }\n\n adapter.rawTables[textsTableName] = textsTable\n\n adapter.rawRelations[textsTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: textsTableName,\n },\n ],\n references: ['id'],\n relationName: '_texts',\n to: tableName,\n },\n }\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n adapter.rawTables[numbersTableName] = numbersTable\n const columns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n number: {\n name: 'number',\n type: 'numeric',\n },\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n notNull: true,\n },\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const numbersTableIndexes: Record<string, RawIndex> = {\n orderParentIdx: {\n name: buildIndexName({ name: `${numbersTableName}_order_parent`, adapter }),\n on: ['order', 'parent'],\n },\n }\n\n if (hasManyNumberField === 'index') {\n numbersTableIndexes.numberIdx = {\n name: buildIndexName({ name: `${numbersTableName}_number`, adapter }),\n on: 'number',\n }\n }\n\n if (hasLocalizedManyNumberField) {\n numbersTableIndexes.localeParent = {\n name: buildIndexName({\n name: `${numbersTableName}_locale_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['locale', 'parent'],\n }\n }\n\n numbersTable = {\n name: numbersTableName,\n columns,\n foreignKeys: {\n parentFk: {\n name: buildForeignKeyName({ name: `${numbersTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: numbersTableIndexes,\n }\n\n adapter.rawTables[numbersTableName] = numbersTable\n\n adapter.rawRelations[numbersTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: numbersTableName,\n },\n ],\n references: ['id'],\n relationName: '_numbers',\n to: tableName,\n },\n }\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n order: {\n name: 'order',\n type: 'integer',\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n notNull: true,\n },\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n const relationshipIndexes: Record<string, RawIndex> = {\n order: {\n name: buildIndexName({ name: `${relationshipsTableName}_order`, adapter }),\n on: 'order',\n },\n parentIdx: {\n name: buildIndexName({ name: `${relationshipsTableName}_parent`, adapter }),\n on: 'parent',\n },\n pathIdx: {\n name: buildIndexName({ name: `${relationshipsTableName}_path`, adapter }),\n on: 'path',\n },\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipIndexes.localeIdx = {\n name: buildIndexName({ name: `${relationshipsTableName}_locale`, adapter }),\n on: 'locale',\n }\n }\n\n const relationshipForeignKeys: Record<string, RawForeignKey> = {\n parentFk: {\n name: buildForeignKeyName({ name: `${relationshipsTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = createTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\n let colType: 'integer' | 'numeric' | 'uuid' | 'varchar' = isUUIDType(adapter.idType)\n ? 'uuid'\n : 'integer'\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomIDType === 'text') {\n colType = 'varchar'\n }\n\n const colName = `${relationTo}ID`\n\n relationshipColumns[colName] = {\n name: `${formattedRelationTo}_id`,\n type: colType,\n }\n\n relationshipForeignKeys[`${relationTo}IdFk`] = {\n name: buildForeignKeyName({\n name: `${relationshipsTableName}_${toSnakeCase(relationTo)}`,\n adapter,\n }),\n columns: [colName],\n foreignColumns: [\n {\n name: 'id',\n table: formattedRelationTo,\n },\n ],\n onDelete: 'cascade',\n }\n\n const indexColumns = [colName]\n\n const unique = !disableUnique && uniqueRelationships.has(relationTo)\n\n if (unique) {\n indexColumns.push('path')\n }\n if (hasLocalizedRelationshipField) {\n indexColumns.push('locale')\n }\n\n const indexName = buildIndexName({\n name: `${relationshipsTableName}_${formattedRelationTo}_id`,\n adapter,\n })\n\n relationshipIndexes[indexName] = {\n name: indexName,\n on: indexColumns,\n unique,\n }\n })\n\n relationshipsTable = {\n name: relationshipsTableName,\n columns: relationshipColumns,\n foreignKeys: relationshipForeignKeys,\n indexes: relationshipIndexes,\n }\n\n adapter.rawTables[relationshipsTableName] = relationshipsTable\n\n const relationshipsTableRelations: Record<string, RawRelation> = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: relationshipsTableName,\n },\n ],\n references: ['id'],\n relationName: '_rels',\n to: tableName,\n },\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = createTableName({\n adapter,\n config: adapter.payload.collections[relationTo].config,\n throwValidationError: true,\n })\n const idColumnName = `${relationTo}ID`\n\n relationshipsTableRelations[idColumnName] = {\n type: 'one',\n fields: [\n {\n name: idColumnName,\n table: relationshipsTableName,\n },\n ],\n references: ['id'],\n relationName: relationTo,\n to: relatedTableName,\n }\n })\n adapter.rawRelations[relationshipsTableName] = relationshipsTableRelations\n }\n }\n\n const tableRelations: Record<string, RawRelation> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n tableRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: tableName,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n if (type === 'many') {\n tableRelations[key] = {\n type: 'many',\n relationName: relationName || key,\n to: target,\n }\n }\n })\n\n if (hasLocalizedField) {\n tableRelations._locales = {\n type: 'many',\n relationName: '_locales',\n to: localesTable.name,\n }\n }\n\n if (isRoot && textsTable) {\n tableRelations._texts = {\n type: 'many',\n relationName: '_texts',\n to: textsTable.name,\n }\n }\n\n if (isRoot && numbersTable) {\n tableRelations._numbers = {\n type: 'many',\n relationName: '_numbers',\n to: numbersTable.name,\n }\n }\n\n if (relationships.size && relationshipsTable) {\n tableRelations._rels = {\n type: 'many',\n relationName: '_rels',\n to: relationshipsTable.name,\n }\n }\n\n adapter.rawRelations[tableName] = tableRelations\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n\n/**\n * Single-relation relationship/upload columns use Drizzle's inline `.references()`, which names\n * the foreign key `<table>_<column>_<target>_<targetColumn>_fk` with no way to override it.\n * When that name exceeds the Postgres identifier limit, Postgres stores a truncated name, so push\n * never matches it and drops and re-adds the foreign key on every run, which can fail with\n * \"already exists\". Those foreign keys are moved to explicitly named table-level foreign keys\n * instead. Shorter names keep `.references()` unchanged.\n */\nconst promoteLongInlineForeignKeys = ({\n adapter,\n table,\n}: {\n adapter: DrizzleAdapter\n table: RawTable\n}): RawTable => {\n for (const [columnKey, column] of Object.entries(table.columns)) {\n if (!column.reference) {\n continue\n }\n\n const { name: targetColumnName, onDelete, table: targetTableName } = column.reference\n const drizzleForeignKeyName = `${table.name}_${column.name}_${targetTableName}_${targetColumnName}`\n\n if (`${drizzleForeignKeyName}_fk`.length <= maxIdentifierLength) {\n continue\n }\n\n table.foreignKeys ??= {}\n table.foreignKeys[`${columnKey}Fk`] = {\n name: buildForeignKeyName({ name: drizzleForeignKeyName, adapter }),\n columns: [columnKey],\n foreignColumns: [{ name: targetColumnName, table: targetTableName }],\n onDelete,\n }\n\n delete column.reference\n }\n\n return table\n}\n"],"names":["InvalidConfiguration","toSnakeCase","createTableName","buildForeignKeyName","buildIndexName","isUUIDType","maxIdentifierLength","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","promoteLongInlineForeignKeys","size","localeTableName","localesSuffix","id","primaryKey","_locale","locale","_parentID","_localeParent","appendSuffix","on","unique","_parentIdFk","foreignColumns","onDelete","localeRelations","references","to","rawRelations","index","someLocalized","getTableToUse","path","pathHasLocalized","columnPath","replaceAll","push","join","length","indexName","textsTableName","order","parent","text","textsTableIndexes","orderParentIdx","text_idx","localeParent","parentFk","numbersTableName","number","numbersTableIndexes","numberIdx","relationshipColumns","relationshipsTableName","relationshipsSuffix","relationshipIndexes","parentIdx","pathIdx","localeIdx","relationshipForeignKeys","relationTo","relationshipConfig","payload","collections","config","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","colName","indexColumns","has","relationshipsTableRelations","relatedTableName","idColumnName","tableRelations","_locales","_texts","_numbers","_rels","columnKey","column","Object","entries","reference","targetColumnName","targetTableName","drizzleForeignKeyName"],"mappings":"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"}
@@ -185,9 +185,7 @@ describe('buildRawSchema', ()=>{
185
185
  });
186
186
  expect(warn).not.toHaveBeenCalled();
187
187
  });
188
- it('should warn about raw inline sub-table index and foreign key names that exceed 63 chars', async ()=>{
189
- // Array sub-tables assign structural index/FK names inline (not via buildIndexName/
190
- // buildForeignKeyName), so a long-but-valid array table name still overflows them.
188
+ it('should keep array sub-table index and foreign key names within 63 chars', async ()=>{
191
189
  const arrayFieldName = 'a'.repeat(58);
192
190
  const config = await sanitizeConfig({
193
191
  collections: [
@@ -215,16 +213,105 @@ describe('buildRawSchema', ()=>{
215
213
  adapter,
216
214
  setColumnID
217
215
  });
218
- const arrayTable = `p_${arrayFieldName}`;
216
+ const arrayTable = adapter.rawTables[`p_${arrayFieldName}`];
217
+ expect(arrayTable).toBeDefined();
218
+ expect(arrayTable.indexes._orderIdx.name.length).toBeLessThanOrEqual(63);
219
+ expect(arrayTable.indexes._parentIDIdx.name.length).toBeLessThanOrEqual(63);
220
+ expect(arrayTable.foreignKeys._parentIDFk.name.length).toBeLessThanOrEqual(63);
219
221
  checkTruncatedIdentifiers({
220
222
  adapter,
221
223
  logWarnings: true
222
224
  });
223
- expect(arrayTable.length).toBeLessThanOrEqual(63);
224
- expect(warn).toHaveBeenCalledTimes(1);
225
- const message = warn.mock.calls[0][0];
226
- expect(message).toContain(`${arrayTable}_order_idx`);
227
- expect(message).toContain(`${arrayTable}_parent_id_fk`);
225
+ expect(warn).not.toHaveBeenCalled();
226
+ });
227
+ it('should move a relationship foreign key past 63 chars to a named table-level foreign key', async ()=>{
228
+ const groupName = 'g'.repeat(40);
229
+ const config = await sanitizeConfig({
230
+ collections: [
231
+ {
232
+ slug: 'p',
233
+ fields: [
234
+ {
235
+ name: groupName,
236
+ type: 'group',
237
+ fields: [
238
+ {
239
+ name: 'author',
240
+ type: 'relationship',
241
+ relationTo: 'authors'
242
+ }
243
+ ]
244
+ }
245
+ ],
246
+ timestamps: false,
247
+ versions: false
248
+ },
249
+ {
250
+ slug: 'authors',
251
+ fields: [],
252
+ timestamps: false,
253
+ versions: false
254
+ }
255
+ ]
256
+ });
257
+ const adapter = createAdapter(config);
258
+ buildRawSchema({
259
+ adapter,
260
+ setColumnID
261
+ });
262
+ const table = adapter.rawTables.p;
263
+ const columnKey = `${groupName}_author`;
264
+ expect(table.columns[columnKey].reference).toBeUndefined();
265
+ const foreignKey = table.foreignKeys?.[`${columnKey}Fk`];
266
+ expect(foreignKey).toBeDefined();
267
+ expect(foreignKey?.name.length).toBeLessThanOrEqual(63);
268
+ expect(foreignKey?.name.endsWith('_fk')).toBe(true);
269
+ expect(foreignKey?.columns).toEqual([
270
+ columnKey
271
+ ]);
272
+ expect(foreignKey?.foreignColumns).toEqual([
273
+ {
274
+ name: 'id',
275
+ table: 'authors'
276
+ }
277
+ ]);
278
+ expect(foreignKey?.onDelete).toBe('set null');
279
+ });
280
+ it('should keep the inline reference for a relationship foreign key within 63 chars', async ()=>{
281
+ const config = await sanitizeConfig({
282
+ collections: [
283
+ {
284
+ slug: 'posts',
285
+ fields: [
286
+ {
287
+ name: 'author',
288
+ type: 'relationship',
289
+ relationTo: 'authors'
290
+ }
291
+ ],
292
+ timestamps: false,
293
+ versions: false
294
+ },
295
+ {
296
+ slug: 'authors',
297
+ fields: [],
298
+ timestamps: false,
299
+ versions: false
300
+ }
301
+ ]
302
+ });
303
+ const adapter = createAdapter(config);
304
+ buildRawSchema({
305
+ adapter,
306
+ setColumnID
307
+ });
308
+ const table = adapter.rawTables.posts;
309
+ expect(table.columns.author.reference).toEqual({
310
+ name: 'id',
311
+ onDelete: 'set null',
312
+ table: 'authors'
313
+ });
314
+ expect(table.foreignKeys?.authorFk).toBeUndefined();
228
315
  });
229
316
  });
230
317
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schema/buildRawSchema.spec.ts"],"sourcesContent":["import type { Block, Config, SanitizedConfig } from 'payload'\nimport { sanitizeConfig } from 'payload'\nimport { describe, expect, it, vi } from 'vitest'\n\nimport { setColumnID } from '../postgres/schema/setColumnID.js'\nimport type { DrizzleAdapter } from '../types.js'\nimport { checkTruncatedIdentifiers } from '../utilities/checkTruncatedIdentifiers.js'\nimport { buildRawSchema } from './buildRawSchema.js'\n\nconst headlineBlock: Block = {\n slug: 'headline',\n fields: [\n {\n name: 'title',\n type: 'text',\n },\n ],\n}\n\nconst createContainerBlock = (slug: string): Block => ({\n slug,\n fields: [\n {\n name: 'content',\n type: 'blocks',\n blockReferences: ['headline'],\n blocks: [],\n },\n ],\n})\n\nconst createAdapter = (\n config: SanitizedConfig,\n warn: (...args: any[]) => void = () => {},\n): DrizzleAdapter =>\n ({\n blocksAsJSON: false,\n fieldConstraints: {},\n idType: 'serial',\n localesSuffix: '_locales',\n payload: {\n blocks: Object.fromEntries(config.blocks.map((block) => [block.slug, block])),\n collections: Object.fromEntries(\n config.collections.map((collection) => [\n collection.slug,\n {\n config: collection,\n customIDType: undefined,\n },\n ]),\n ),\n config,\n logger: { warn },\n },\n rawRelations: {},\n rawTables: {},\n tableNameMap: new Map(),\n versionsSuffix: '_versions',\n }) as unknown as DrizzleAdapter\n\ndescribe('buildRawSchema', () => {\n it('should not create duplicate suffixed block tables for identical reused blocks under localized ancestors', async () => {\n const layoutBlocks = [createContainerBlock('container'), createContainerBlock('container50')]\n\n const config = await sanitizeConfig({\n blocks: [headlineBlock],\n collections: [\n {\n slug: 'pages',\n fields: [\n {\n name: 'layout',\n type: 'blocks',\n localized: true,\n blocks: layoutBlocks,\n },\n ],\n timestamps: false,\n },\n {\n slug: 'posts',\n fields: [\n {\n name: 'layout',\n type: 'blocks',\n localized: true,\n blocks: layoutBlocks,\n },\n ],\n timestamps: false,\n },\n ],\n localization: {\n defaultLocale: 'en',\n locales: ['en', 'de'],\n },\n } as Config)\n\n const adapter = createAdapter(config)\n\n buildRawSchema({\n adapter,\n setColumnID,\n })\n\n expect(adapter.rawTables.pages_blocks_headline).toBeDefined()\n expect(adapter.rawTables.pages_blocks_headline.columns._locale).toBeDefined()\n expect(adapter.rawTables.pages_blocks_headline_2).toBeUndefined()\n expect(adapter.rawTables.pages_blocks_headline_2_locales).toBeUndefined()\n expect(adapter.rawTables.posts_blocks_headline).toBeDefined()\n expect(adapter.rawTables.posts_blocks_headline.columns._locale).toBeDefined()\n expect(adapter.rawTables.posts_blocks_headline_2).toBeUndefined()\n expect(adapter.rawTables.posts_blocks_headline_2_locales).toBeUndefined()\n })\n\n it('should warn when a localized field pushes the _locales companion table past 63 chars', async () => {\n // Base table name (61 chars) is under the limit, but `${base}_locales` (69) overflows it.\n const longSlug = `localized_collection_${'x'.repeat(40)}`\n\n const config = await sanitizeConfig({\n collections: [\n {\n slug: longSlug,\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n timestamps: false,\n },\n ],\n localization: {\n defaultLocale: 'en',\n locales: ['en', 'de'],\n },\n } as Config)\n\n const warn = vi.fn()\n const adapter = createAdapter(config, warn)\n\n buildRawSchema({ adapter, setColumnID })\n\n expect(adapter.rawTables[`${longSlug}_locales`]).toBeDefined()\n\n expect(() => checkTruncatedIdentifiers({ adapter, logWarnings: true })).not.toThrow()\n expect(warn).toHaveBeenCalledTimes(1)\n expect(warn.mock.calls[0][0]).toContain(`${longSlug}_locales`)\n })\n\n it('should not warn when the _locales companion table fits within 63 chars', async () => {\n const config = await sanitizeConfig({\n collections: [\n {\n slug: 'short_localized',\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n timestamps: false,\n },\n ],\n localization: {\n defaultLocale: 'en',\n locales: ['en', 'de'],\n },\n } as Config)\n\n const warn = vi.fn()\n const adapter = createAdapter(config, warn)\n\n buildRawSchema({ adapter, setColumnID })\n\n expect(adapter.rawTables.short_localized_locales).toBeDefined()\n\n checkTruncatedIdentifiers({ adapter, logWarnings: true })\n\n expect(warn).not.toHaveBeenCalled()\n })\n\n it('should warn about raw inline sub-table index and foreign key names that exceed 63 chars', async () => {\n // Array sub-tables assign structural index/FK names inline (not via buildIndexName/\n // buildForeignKeyName), so a long-but-valid array table name still overflows them.\n const arrayFieldName = 'a'.repeat(58)\n\n const config = await sanitizeConfig({\n collections: [\n {\n slug: 'p',\n fields: [\n {\n name: arrayFieldName,\n type: 'array',\n fields: [{ name: 'title', type: 'text' }],\n },\n ],\n timestamps: false,\n },\n ],\n } as Config)\n\n const warn = vi.fn()\n const adapter = createAdapter(config, warn)\n\n buildRawSchema({ adapter, setColumnID })\n\n const arrayTable = `p_${arrayFieldName}`\n\n checkTruncatedIdentifiers({ adapter, logWarnings: true })\n\n expect(arrayTable.length).toBeLessThanOrEqual(63)\n expect(warn).toHaveBeenCalledTimes(1)\n\n const message: string = warn.mock.calls[0][0]\n\n expect(message).toContain(`${arrayTable}_order_idx`)\n expect(message).toContain(`${arrayTable}_parent_id_fk`)\n })\n})\n"],"names":["sanitizeConfig","describe","expect","it","vi","setColumnID","checkTruncatedIdentifiers","buildRawSchema","headlineBlock","slug","fields","name","type","createContainerBlock","blockReferences","blocks","createAdapter","config","warn","blocksAsJSON","fieldConstraints","idType","localesSuffix","payload","Object","fromEntries","map","block","collections","collection","customIDType","undefined","logger","rawRelations","rawTables","tableNameMap","Map","versionsSuffix","layoutBlocks","localized","timestamps","localization","defaultLocale","locales","adapter","pages_blocks_headline","toBeDefined","columns","_locale","pages_blocks_headline_2","toBeUndefined","pages_blocks_headline_2_locales","posts_blocks_headline","posts_blocks_headline_2","posts_blocks_headline_2_locales","longSlug","repeat","fn","logWarnings","not","toThrow","toHaveBeenCalledTimes","mock","calls","toContain","short_localized_locales","toHaveBeenCalled","arrayFieldName","arrayTable","length","toBeLessThanOrEqual","message"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/schema/buildRawSchema.spec.ts"],"sourcesContent":["import type { Block, Config, SanitizedConfig } from 'payload'\nimport { sanitizeConfig } from 'payload'\nimport { describe, expect, it, vi } from 'vitest'\n\nimport { setColumnID } from '../postgres/schema/setColumnID.js'\nimport type { DrizzleAdapter } from '../types.js'\nimport { checkTruncatedIdentifiers } from '../utilities/checkTruncatedIdentifiers.js'\nimport { buildRawSchema } from './buildRawSchema.js'\n\nconst headlineBlock: Block = {\n slug: 'headline',\n fields: [\n {\n name: 'title',\n type: 'text',\n },\n ],\n}\n\nconst createContainerBlock = (slug: string): Block => ({\n slug,\n fields: [\n {\n name: 'content',\n type: 'blocks',\n blockReferences: ['headline'],\n blocks: [],\n },\n ],\n})\n\nconst createAdapter = (\n config: SanitizedConfig,\n warn: (...args: any[]) => void = () => {},\n): DrizzleAdapter =>\n ({\n blocksAsJSON: false,\n fieldConstraints: {},\n idType: 'serial',\n localesSuffix: '_locales',\n payload: {\n blocks: Object.fromEntries(config.blocks.map((block) => [block.slug, block])),\n collections: Object.fromEntries(\n config.collections.map((collection) => [\n collection.slug,\n {\n config: collection,\n customIDType: undefined,\n },\n ]),\n ),\n config,\n logger: { warn },\n },\n rawRelations: {},\n rawTables: {},\n tableNameMap: new Map(),\n versionsSuffix: '_versions',\n }) as unknown as DrizzleAdapter\n\ndescribe('buildRawSchema', () => {\n it('should not create duplicate suffixed block tables for identical reused blocks under localized ancestors', async () => {\n const layoutBlocks = [createContainerBlock('container'), createContainerBlock('container50')]\n\n const config = await sanitizeConfig({\n blocks: [headlineBlock],\n collections: [\n {\n slug: 'pages',\n fields: [\n {\n name: 'layout',\n type: 'blocks',\n localized: true,\n blocks: layoutBlocks,\n },\n ],\n timestamps: false,\n },\n {\n slug: 'posts',\n fields: [\n {\n name: 'layout',\n type: 'blocks',\n localized: true,\n blocks: layoutBlocks,\n },\n ],\n timestamps: false,\n },\n ],\n localization: {\n defaultLocale: 'en',\n locales: ['en', 'de'],\n },\n } as Config)\n\n const adapter = createAdapter(config)\n\n buildRawSchema({\n adapter,\n setColumnID,\n })\n\n expect(adapter.rawTables.pages_blocks_headline).toBeDefined()\n expect(adapter.rawTables.pages_blocks_headline.columns._locale).toBeDefined()\n expect(adapter.rawTables.pages_blocks_headline_2).toBeUndefined()\n expect(adapter.rawTables.pages_blocks_headline_2_locales).toBeUndefined()\n expect(adapter.rawTables.posts_blocks_headline).toBeDefined()\n expect(adapter.rawTables.posts_blocks_headline.columns._locale).toBeDefined()\n expect(adapter.rawTables.posts_blocks_headline_2).toBeUndefined()\n expect(adapter.rawTables.posts_blocks_headline_2_locales).toBeUndefined()\n })\n\n it('should warn when a localized field pushes the _locales companion table past 63 chars', async () => {\n // Base table name (61 chars) is under the limit, but `${base}_locales` (69) overflows it.\n const longSlug = `localized_collection_${'x'.repeat(40)}`\n\n const config = await sanitizeConfig({\n collections: [\n {\n slug: longSlug,\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n timestamps: false,\n },\n ],\n localization: {\n defaultLocale: 'en',\n locales: ['en', 'de'],\n },\n } as Config)\n\n const warn = vi.fn()\n const adapter = createAdapter(config, warn)\n\n buildRawSchema({ adapter, setColumnID })\n\n expect(adapter.rawTables[`${longSlug}_locales`]).toBeDefined()\n\n expect(() => checkTruncatedIdentifiers({ adapter, logWarnings: true })).not.toThrow()\n expect(warn).toHaveBeenCalledTimes(1)\n expect(warn.mock.calls[0][0]).toContain(`${longSlug}_locales`)\n })\n\n it('should not warn when the _locales companion table fits within 63 chars', async () => {\n const config = await sanitizeConfig({\n collections: [\n {\n slug: 'short_localized',\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n timestamps: false,\n },\n ],\n localization: {\n defaultLocale: 'en',\n locales: ['en', 'de'],\n },\n } as Config)\n\n const warn = vi.fn()\n const adapter = createAdapter(config, warn)\n\n buildRawSchema({ adapter, setColumnID })\n\n expect(adapter.rawTables.short_localized_locales).toBeDefined()\n\n checkTruncatedIdentifiers({ adapter, logWarnings: true })\n\n expect(warn).not.toHaveBeenCalled()\n })\n\n it('should keep array sub-table index and foreign key names within 63 chars', async () => {\n const arrayFieldName = 'a'.repeat(58)\n\n const config = await sanitizeConfig({\n collections: [\n {\n slug: 'p',\n fields: [\n {\n name: arrayFieldName,\n type: 'array',\n fields: [{ name: 'title', type: 'text' }],\n },\n ],\n timestamps: false,\n },\n ],\n } as Config)\n\n const warn = vi.fn()\n const adapter = createAdapter(config, warn)\n\n buildRawSchema({ adapter, setColumnID })\n\n const arrayTable = adapter.rawTables[`p_${arrayFieldName}`]\n\n expect(arrayTable).toBeDefined()\n expect(arrayTable.indexes._orderIdx.name.length).toBeLessThanOrEqual(63)\n expect(arrayTable.indexes._parentIDIdx.name.length).toBeLessThanOrEqual(63)\n expect(arrayTable.foreignKeys._parentIDFk.name.length).toBeLessThanOrEqual(63)\n\n checkTruncatedIdentifiers({ adapter, logWarnings: true })\n\n expect(warn).not.toHaveBeenCalled()\n })\n\n it('should move a relationship foreign key past 63 chars to a named table-level foreign key', async () => {\n const groupName = 'g'.repeat(40)\n\n const config = await sanitizeConfig({\n collections: [\n {\n slug: 'p',\n fields: [\n {\n name: groupName,\n type: 'group',\n fields: [{ name: 'author', type: 'relationship', relationTo: 'authors' }],\n },\n ],\n timestamps: false,\n versions: false,\n },\n {\n slug: 'authors',\n fields: [],\n timestamps: false,\n versions: false,\n },\n ],\n } as Config)\n\n const adapter = createAdapter(config)\n\n buildRawSchema({ adapter, setColumnID })\n\n const table = adapter.rawTables.p\n const columnKey = `${groupName}_author`\n\n expect(table.columns[columnKey].reference).toBeUndefined()\n\n const foreignKey = table.foreignKeys?.[`${columnKey}Fk`]\n\n expect(foreignKey).toBeDefined()\n expect(foreignKey?.name.length).toBeLessThanOrEqual(63)\n expect(foreignKey?.name.endsWith('_fk')).toBe(true)\n expect(foreignKey?.columns).toEqual([columnKey])\n expect(foreignKey?.foreignColumns).toEqual([{ name: 'id', table: 'authors' }])\n expect(foreignKey?.onDelete).toBe('set null')\n })\n\n it('should keep the inline reference for a relationship foreign key within 63 chars', async () => {\n const config = await sanitizeConfig({\n collections: [\n {\n slug: 'posts',\n fields: [{ name: 'author', type: 'relationship', relationTo: 'authors' }],\n timestamps: false,\n versions: false,\n },\n {\n slug: 'authors',\n fields: [],\n timestamps: false,\n versions: false,\n },\n ],\n } as Config)\n\n const adapter = createAdapter(config)\n\n buildRawSchema({ adapter, setColumnID })\n\n const table = adapter.rawTables.posts\n\n expect(table.columns.author.reference).toEqual({\n name: 'id',\n onDelete: 'set null',\n table: 'authors',\n })\n expect(table.foreignKeys?.authorFk).toBeUndefined()\n })\n})\n"],"names":["sanitizeConfig","describe","expect","it","vi","setColumnID","checkTruncatedIdentifiers","buildRawSchema","headlineBlock","slug","fields","name","type","createContainerBlock","blockReferences","blocks","createAdapter","config","warn","blocksAsJSON","fieldConstraints","idType","localesSuffix","payload","Object","fromEntries","map","block","collections","collection","customIDType","undefined","logger","rawRelations","rawTables","tableNameMap","Map","versionsSuffix","layoutBlocks","localized","timestamps","localization","defaultLocale","locales","adapter","pages_blocks_headline","toBeDefined","columns","_locale","pages_blocks_headline_2","toBeUndefined","pages_blocks_headline_2_locales","posts_blocks_headline","posts_blocks_headline_2","posts_blocks_headline_2_locales","longSlug","repeat","fn","logWarnings","not","toThrow","toHaveBeenCalledTimes","mock","calls","toContain","short_localized_locales","toHaveBeenCalled","arrayFieldName","arrayTable","indexes","_orderIdx","length","toBeLessThanOrEqual","_parentIDIdx","foreignKeys","_parentIDFk","groupName","relationTo","versions","table","p","columnKey","reference","foreignKey","endsWith","toBe","toEqual","foreignColumns","onDelete","posts","author","authorFk"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAW7C,OAAO,KAAK,EACV,cAAc,EACd,MAAM,EACN,SAAS,EAET,QAAQ,EAER,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAA;AAgBpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAClC,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACjC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACzC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,gBAAgB,EAAE,WAAW,CAAA;IAC7B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,WAAW,CAAA;IACxB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,sZA0BxB,IAAI,KAAG,MAm7BT,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAW7C,OAAO,KAAK,EACV,cAAc,EACd,MAAM,EACN,SAAS,EAET,QAAQ,EAER,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAA;AAiBpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAClC,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACjC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACzC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,gBAAgB,EAAE,WAAW,CAAA;IAC7B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,WAAW,CAAA;IACxB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,sZA0BxB,IAAI,KAAG,MAm7BT,CAAA"}
@@ -2,6 +2,7 @@ import { InvalidConfiguration } from 'payload';
2
2
  import { fieldAffectsData, fieldIsVirtual, fieldShouldBeLocalized, optionIsObject } from 'payload/shared';
3
3
  import toSnakeCase from 'to-snake-case';
4
4
  import { createTableName } from '../createTableName.js';
5
+ import { buildForeignKeyName } from '../utilities/buildForeignKeyName.js';
5
6
  import { buildIndexName } from '../utilities/buildIndexName.js';
6
7
  import { getArrayRelationName } from '../utilities/getArrayRelationName.js';
7
8
  import { hasLocalesTable } from '../utilities/hasLocalesTable.js';
@@ -105,19 +106,28 @@ export const traverseFields = ({ adapter, blocksTableNameMap, columnPrefix, colu
105
106
  };
106
107
  const baseIndexes = {
107
108
  _orderIdx: {
108
- name: `${arrayTableName}_order_idx`,
109
+ name: buildIndexName({
110
+ name: `${arrayTableName}_order`,
111
+ adapter
112
+ }),
109
113
  on: [
110
114
  '_order'
111
115
  ]
112
116
  },
113
117
  _parentIDIdx: {
114
- name: `${arrayTableName}_parent_id_idx`,
118
+ name: buildIndexName({
119
+ name: `${arrayTableName}_parent_id`,
120
+ adapter
121
+ }),
115
122
  on: '_parentID'
116
123
  }
117
124
  };
118
125
  const baseForeignKeys = {
119
126
  _parentIDFk: {
120
- name: `${arrayTableName}_parent_id_fk`,
127
+ name: buildForeignKeyName({
128
+ name: `${arrayTableName}_parent_id`,
129
+ adapter
130
+ }),
121
131
  columns: [
122
132
  '_parentID'
123
133
  ],
@@ -139,7 +149,10 @@ export const traverseFields = ({ adapter, blocksTableNameMap, columnPrefix, colu
139
149
  notNull: true
140
150
  };
141
151
  baseIndexes._localeIdx = {
142
- name: `${arrayTableName}_locale_idx`,
152
+ name: buildIndexName({
153
+ name: `${arrayTableName}_locale`,
154
+ adapter
155
+ }),
143
156
  on: '_locale'
144
157
  };
145
158
  }
@@ -307,23 +320,35 @@ export const traverseFields = ({ adapter, blocksTableNameMap, columnPrefix, colu
307
320
  };
308
321
  const baseIndexes = {
309
322
  _orderIdx: {
310
- name: `${blockTableName}_order_idx`,
323
+ name: buildIndexName({
324
+ name: `${blockTableName}_order`,
325
+ adapter
326
+ }),
311
327
  on: '_order'
312
328
  },
313
329
  _parentIDIdx: {
314
- name: `${blockTableName}_parent_id_idx`,
330
+ name: buildIndexName({
331
+ name: `${blockTableName}_parent_id`,
332
+ adapter
333
+ }),
315
334
  on: [
316
335
  '_parentID'
317
336
  ]
318
337
  },
319
338
  _pathIdx: {
320
- name: `${blockTableName}_path_idx`,
339
+ name: buildIndexName({
340
+ name: `${blockTableName}_path`,
341
+ adapter
342
+ }),
321
343
  on: '_path'
322
344
  }
323
345
  };
324
346
  const baseForeignKeys = {
325
347
  _parentIdFk: {
326
- name: `${blockTableName}_parent_id_fk`,
348
+ name: buildForeignKeyName({
349
+ name: `${blockTableName}_parent_id`,
350
+ adapter
351
+ }),
327
352
  columns: [
328
353
  '_parentID'
329
354
  ],
@@ -344,7 +369,10 @@ export const traverseFields = ({ adapter, blocksTableNameMap, columnPrefix, colu
344
369
  notNull: true
345
370
  };
346
371
  baseIndexes._localeIdx = {
347
- name: `${blockTableName}_locale_idx`,
372
+ name: buildIndexName({
373
+ name: `${blockTableName}_locale`,
374
+ adapter
375
+ }),
348
376
  on: '_locale'
349
377
  };
350
378
  }
@@ -624,17 +652,26 @@ export const traverseFields = ({ adapter, blocksTableNameMap, columnPrefix, colu
624
652
  };
625
653
  const baseIndexes = {
626
654
  orderIdx: {
627
- name: `${selectTableName}_order_idx`,
655
+ name: buildIndexName({
656
+ name: `${selectTableName}_order`,
657
+ adapter
658
+ }),
628
659
  on: 'order'
629
660
  },
630
661
  parentIdx: {
631
- name: `${selectTableName}_parent_idx`,
662
+ name: buildIndexName({
663
+ name: `${selectTableName}_parent`,
664
+ adapter
665
+ }),
632
666
  on: 'parent'
633
667
  }
634
668
  };
635
669
  const baseForeignKeys = {
636
670
  parentFk: {
637
- name: `${selectTableName}_parent_fk`,
671
+ name: buildForeignKeyName({
672
+ name: `${selectTableName}_parent`,
673
+ adapter
674
+ }),
638
675
  columns: [
639
676
  'parent'
640
677
  ],
@@ -656,13 +693,19 @@ export const traverseFields = ({ adapter, blocksTableNameMap, columnPrefix, colu
656
693
  notNull: true
657
694
  };
658
695
  baseIndexes.localeIdx = {
659
- name: `${selectTableName}_locale_idx`,
696
+ name: buildIndexName({
697
+ name: `${selectTableName}_locale`,
698
+ adapter
699
+ }),
660
700
  on: 'locale'
661
701
  };
662
702
  }
663
703
  if (field.index) {
664
704
  baseIndexes.value = {
665
- name: `${selectTableName}_value_idx`,
705
+ name: buildIndexName({
706
+ name: `${selectTableName}_value`,
707
+ adapter
708
+ }),
666
709
  on: 'value'
667
710
  };
668
711
  }