@payloadcms/drizzle 3.38.0-internal.78d3ba4 → 3.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/find/findMany.d.ts.map +1 -1
  2. package/dist/find/findMany.js +12 -0
  3. package/dist/find/findMany.js.map +1 -1
  4. package/dist/find/traverseFields.d.ts.map +1 -1
  5. package/dist/find/traverseFields.js +6 -1
  6. package/dist/find/traverseFields.js.map +1 -1
  7. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts +1 -1
  8. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts.map +1 -1
  9. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.js +72 -44
  10. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.js.map +1 -1
  11. package/dist/postgres/predefinedMigrations/v2-v3/index.d.ts.map +1 -1
  12. package/dist/postgres/predefinedMigrations/v2-v3/index.js +6 -7
  13. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  14. package/dist/queries/buildOrderBy.d.ts +3 -2
  15. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  16. package/dist/queries/buildOrderBy.js +6 -2
  17. package/dist/queries/buildOrderBy.js.map +1 -1
  18. package/dist/queries/buildQuery.d.ts.map +1 -1
  19. package/dist/queries/buildQuery.js +1 -0
  20. package/dist/queries/buildQuery.js.map +1 -1
  21. package/dist/queries/parseParams.d.ts +1 -0
  22. package/dist/queries/parseParams.d.ts.map +1 -1
  23. package/dist/queries/parseParams.js +1 -0
  24. package/dist/queries/parseParams.js.map +1 -1
  25. package/dist/schema/traverseFields.d.ts.map +1 -1
  26. package/dist/schema/traverseFields.js +6 -1
  27. package/dist/schema/traverseFields.js.map +1 -1
  28. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  29. package/dist/transform/read/traverseFields.js +6 -3
  30. package/dist/transform/read/traverseFields.js.map +1 -1
  31. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  32. package/dist/utilities/createSchemaGenerator.js +2 -0
  33. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  34. package/dist/utilities/getArrayRelationName.d.ts +7 -0
  35. package/dist/utilities/getArrayRelationName.d.ts.map +1 -0
  36. package/dist/utilities/getArrayRelationName.js +8 -0
  37. package/dist/utilities/getArrayRelationName.js.map +1 -0
  38. package/dist/utilities/pushDevSchema.js +7 -7
  39. package/dist/utilities/pushDevSchema.js.map +1 -1
  40. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../src/find/findMany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAQjD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAEhC,eAAO,MAAM,QAAQ,oLAiBlB,IAAI;;;;;;;;;;;EA4IN,CAAA"}
1
+ {"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../src/find/findMany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AASjD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAEhC,eAAO,MAAM,QAAQ,oLAiBlB,IAAI;;;;;;;;;;;EAgKN,CAAA"}
@@ -2,6 +2,7 @@ import { inArray } from 'drizzle-orm';
2
2
  import buildQuery from '../queries/buildQuery.js';
3
3
  import { selectDistinct } from '../queries/selectDistinct.js';
4
4
  import { transform } from '../transform/read/index.js';
5
+ import { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js';
5
6
  import { getTransaction } from '../utilities/getTransaction.js';
6
7
  import { buildFindManyArgs } from './buildFindManyArgs.js';
7
8
  export const findMany = async function find({ adapter, collectionSlug, draftsEnabled, fields, joins: joinQuery, limit: limitArg, locale, page = 1, pagination, req, select, skip, sort, tableName, versions, where: whereArg }) {
@@ -40,6 +41,17 @@ export const findMany = async function find({ adapter, collectionSlug, draftsEna
40
41
  tableName,
41
42
  versions
42
43
  });
44
+ if (orderBy) {
45
+ for(const key in selectFields){
46
+ const column = selectFields[key];
47
+ if (column.primary) {
48
+ continue;
49
+ }
50
+ if (!orderBy.some((col)=>col.column.name === column.name && getNameFromDrizzleTable(col.column.table) === getNameFromDrizzleTable(column.table))) {
51
+ delete selectFields[key];
52
+ }
53
+ }
54
+ }
43
55
  const selectDistinctResult = await selectDistinct({
44
56
  adapter,
45
57
  db,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/find/findMany.ts"],"sourcesContent":["import type { FindArgs, FlattenedField, TypeWithID } from 'payload'\n\nimport { inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport buildQuery from '../queries/buildQuery.js'\nimport { selectDistinct } from '../queries/selectDistinct.js'\nimport { transform } from '../transform/read/index.js'\nimport { getTransaction } from '../utilities/getTransaction.js'\nimport { buildFindManyArgs } from './buildFindManyArgs.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n fields: FlattenedField[]\n tableName: string\n versions?: boolean\n} & Omit<FindArgs, 'collection'>\n\nexport const findMany = async function find({\n adapter,\n collectionSlug,\n draftsEnabled,\n fields,\n joins: joinQuery,\n limit: limitArg,\n locale,\n page = 1,\n pagination,\n req,\n select,\n skip,\n sort,\n tableName,\n versions,\n where: whereArg,\n}: Args) {\n const db = await getTransaction(adapter, req)\n let limit = limitArg\n let totalDocs: number\n let totalPages: number\n let hasPrevPage: boolean\n let hasNextPage: boolean\n let pagingCounter: number\n const offset = skip || (page - 1) * limit\n\n if (limit === 0) {\n pagination = false\n limit = undefined\n }\n\n const { joins, orderBy, selectFields, where } = buildQuery({\n adapter,\n fields,\n locale,\n sort,\n tableName,\n where: whereArg,\n })\n\n const orderedIDMap: Record<number | string, number> = {}\n let orderedIDs: (number | string)[]\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n collectionSlug,\n depth: 0,\n draftsEnabled,\n fields,\n joinQuery,\n joins,\n locale,\n select,\n tableName,\n versions,\n })\n const selectDistinctResult = await selectDistinct({\n adapter,\n db,\n joins,\n query: ({ query }) => {\n if (orderBy) {\n query = query.orderBy(() => orderBy.map(({ column, order }) => order(column)))\n }\n return query.offset(offset).limit(limit)\n },\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult) {\n if (selectDistinctResult.length === 0) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 0,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n }\n } else {\n // set the id in an object for sorting later\n selectDistinctResult.forEach(({ id }, i) => {\n orderedIDMap[id] = i\n })\n orderedIDs = Object.keys(orderedIDMap)\n findManyArgs.where = inArray(adapter.tables[tableName].id, orderedIDs)\n }\n } else {\n findManyArgs.limit = limit\n findManyArgs.offset = offset\n findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column))\n\n if (where) {\n findManyArgs.where = where\n }\n }\n\n const findPromise = db.query[tableName].findMany(findManyArgs)\n\n if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) {\n totalDocs = await adapter.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n totalPages = typeof limit === 'number' && limit !== 0 ? Math.ceil(totalDocs / limit) : 1\n hasPrevPage = page > 1\n hasNextPage = totalPages > page\n pagingCounter = (page - 1) * limit + 1\n }\n\n const rawDocs = await findPromise\n // sort rawDocs from selectQuery\n if (Object.keys(orderedIDMap).length > 0) {\n rawDocs.sort((a, b) => orderedIDMap[a.id] - orderedIDMap[b.id])\n }\n\n if (pagination === false || !totalDocs) {\n totalDocs = rawDocs.length\n totalPages = 1\n pagingCounter = 1\n hasPrevPage = false\n hasNextPage = false\n }\n\n const docs = rawDocs.map((data: TypeWithID) => {\n return transform({\n adapter,\n config: adapter.payload.config,\n data,\n fields,\n joinQuery,\n tableName,\n })\n })\n\n return {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limitArg,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n"],"names":["inArray","buildQuery","selectDistinct","transform","getTransaction","buildFindManyArgs","findMany","find","adapter","collectionSlug","draftsEnabled","fields","joins","joinQuery","limit","limitArg","locale","page","pagination","req","select","skip","sort","tableName","versions","where","whereArg","db","totalDocs","totalPages","hasPrevPage","hasNextPage","pagingCounter","offset","undefined","orderBy","selectFields","orderedIDMap","orderedIDs","findManyArgs","depth","selectDistinctResult","query","map","column","order","length","docs","nextPage","prevPage","forEach","id","i","Object","keys","tables","findPromise","countDistinct","Math","ceil","rawDocs","a","b","data","config","payload"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/find/findMany.ts"],"sourcesContent":["import type { FindArgs, FlattenedField, TypeWithID } from 'payload'\n\nimport { inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport buildQuery from '../queries/buildQuery.js'\nimport { selectDistinct } from '../queries/selectDistinct.js'\nimport { transform } from '../transform/read/index.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTransaction } from '../utilities/getTransaction.js'\nimport { buildFindManyArgs } from './buildFindManyArgs.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n fields: FlattenedField[]\n tableName: string\n versions?: boolean\n} & Omit<FindArgs, 'collection'>\n\nexport const findMany = async function find({\n adapter,\n collectionSlug,\n draftsEnabled,\n fields,\n joins: joinQuery,\n limit: limitArg,\n locale,\n page = 1,\n pagination,\n req,\n select,\n skip,\n sort,\n tableName,\n versions,\n where: whereArg,\n}: Args) {\n const db = await getTransaction(adapter, req)\n let limit = limitArg\n let totalDocs: number\n let totalPages: number\n let hasPrevPage: boolean\n let hasNextPage: boolean\n let pagingCounter: number\n const offset = skip || (page - 1) * limit\n\n if (limit === 0) {\n pagination = false\n limit = undefined\n }\n\n const { joins, orderBy, selectFields, where } = buildQuery({\n adapter,\n fields,\n locale,\n sort,\n tableName,\n where: whereArg,\n })\n\n const orderedIDMap: Record<number | string, number> = {}\n let orderedIDs: (number | string)[]\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n collectionSlug,\n depth: 0,\n draftsEnabled,\n fields,\n joinQuery,\n joins,\n locale,\n select,\n tableName,\n versions,\n })\n\n if (orderBy) {\n for (const key in selectFields) {\n const column = selectFields[key]\n if (column.primary) {\n continue\n }\n\n if (\n !orderBy.some(\n (col) =>\n col.column.name === column.name &&\n getNameFromDrizzleTable(col.column.table) === getNameFromDrizzleTable(column.table),\n )\n ) {\n delete selectFields[key]\n }\n }\n }\n\n const selectDistinctResult = await selectDistinct({\n adapter,\n db,\n joins,\n query: ({ query }) => {\n if (orderBy) {\n query = query.orderBy(() => orderBy.map(({ column, order }) => order(column)))\n }\n return query.offset(offset).limit(limit)\n },\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult) {\n if (selectDistinctResult.length === 0) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 0,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n }\n } else {\n // set the id in an object for sorting later\n selectDistinctResult.forEach(({ id }, i) => {\n orderedIDMap[id] = i\n })\n orderedIDs = Object.keys(orderedIDMap)\n findManyArgs.where = inArray(adapter.tables[tableName].id, orderedIDs)\n }\n } else {\n findManyArgs.limit = limit\n findManyArgs.offset = offset\n findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column))\n\n if (where) {\n findManyArgs.where = where\n }\n }\n\n const findPromise = db.query[tableName].findMany(findManyArgs)\n\n if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) {\n totalDocs = await adapter.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n totalPages = typeof limit === 'number' && limit !== 0 ? Math.ceil(totalDocs / limit) : 1\n hasPrevPage = page > 1\n hasNextPage = totalPages > page\n pagingCounter = (page - 1) * limit + 1\n }\n\n const rawDocs = await findPromise\n // sort rawDocs from selectQuery\n if (Object.keys(orderedIDMap).length > 0) {\n rawDocs.sort((a, b) => orderedIDMap[a.id] - orderedIDMap[b.id])\n }\n\n if (pagination === false || !totalDocs) {\n totalDocs = rawDocs.length\n totalPages = 1\n pagingCounter = 1\n hasPrevPage = false\n hasNextPage = false\n }\n\n const docs = rawDocs.map((data: TypeWithID) => {\n return transform({\n adapter,\n config: adapter.payload.config,\n data,\n fields,\n joinQuery,\n tableName,\n })\n })\n\n return {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limitArg,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n"],"names":["inArray","buildQuery","selectDistinct","transform","getNameFromDrizzleTable","getTransaction","buildFindManyArgs","findMany","find","adapter","collectionSlug","draftsEnabled","fields","joins","joinQuery","limit","limitArg","locale","page","pagination","req","select","skip","sort","tableName","versions","where","whereArg","db","totalDocs","totalPages","hasPrevPage","hasNextPage","pagingCounter","offset","undefined","orderBy","selectFields","orderedIDMap","orderedIDs","findManyArgs","depth","key","column","primary","some","col","name","table","selectDistinctResult","query","map","order","length","docs","nextPage","prevPage","forEach","id","i","Object","keys","tables","findPromise","countDistinct","Math","ceil","rawDocs","a","b","data","config","payload"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AA8CpD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE;QAChB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,cAAc,gRAsBxB,iBAAiB,4BA4qBnB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AA+CpD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE;QAChB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,cAAc,gRAsBxB,iBAAiB,4BAirBnB,CAAA"}
@@ -5,6 +5,7 @@ import toSnakeCase from 'to-snake-case';
5
5
  import buildQuery from '../queries/buildQuery.js';
6
6
  import { getTableAlias } from '../queries/getTableAlias.js';
7
7
  import { operatorMap } from '../queries/operatorMap.js';
8
+ import { getArrayRelationName } from '../utilities/getArrayRelationName.js';
8
9
  import { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js';
9
10
  import { jsonAggBuildObject } from '../utilities/json.js';
10
11
  import { rawConstraint } from '../utilities/rawConstraint.js';
@@ -105,7 +106,11 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
105
106
  with: {}
106
107
  };
107
108
  }
108
- const relationName = field.dbName ? `_${arrayTableName}` : `${path}${field.name}`;
109
+ const relationName = getArrayRelationName({
110
+ field,
111
+ path: `${path}${field.name}`,
112
+ tableName: arrayTableName
113
+ });
109
114
  currentArgs.with[relationName] = withArray;
110
115
  traverseFields({
111
116
  _locales: withArray.with._locales,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/find/traverseFields.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { SQLiteSelect, SQLiteSelectBase } from 'drizzle-orm/sqlite-core'\n\nimport { and, asc, count, desc, eq, or, sql } from 'drizzle-orm'\nimport {\n appendVersionToQueryKey,\n buildVersionCollectionFields,\n combineQueries,\n type FlattenedField,\n getQueryDraftsSort,\n type JoinQuery,\n type SelectMode,\n type SelectType,\n type Where,\n} from 'payload'\nimport { fieldIsVirtual, fieldShouldBeLocalized } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js'\nimport type { Result } from './buildFindManyArgs.js'\n\nimport buildQuery from '../queries/buildQuery.js'\nimport { getTableAlias } from '../queries/getTableAlias.js'\nimport { operatorMap } from '../queries/operatorMap.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { jsonAggBuildObject } from '../utilities/json.js'\nimport { rawConstraint } from '../utilities/rawConstraint.js'\n\nconst flattenAllWherePaths = (where: Where, paths: string[]) => {\n for (const k in where) {\n if (['AND', 'OR'].includes(k.toUpperCase())) {\n if (Array.isArray(where[k])) {\n for (const whereField of where[k]) {\n flattenAllWherePaths(whereField, paths)\n }\n }\n } else {\n // TODO: explore how to support arrays/relationship querying.\n paths.push(k.split('.').join('_'))\n }\n }\n}\n\nconst buildSQLWhere = (where: Where, alias: string) => {\n for (const k in where) {\n if (['AND', 'OR'].includes(k.toUpperCase())) {\n if (Array.isArray(where[k])) {\n const op = 'AND' === k.toUpperCase() ? and : or\n const accumulated = []\n for (const whereField of where[k]) {\n accumulated.push(buildSQLWhere(whereField, alias))\n }\n return op(...accumulated)\n }\n } else {\n const payloadOperator = Object.keys(where[k])[0]\n const value = where[k][payloadOperator]\n\n return operatorMap[payloadOperator](sql.raw(`\"${alias}\".\"${k.split('.').join('_')}\"`), value)\n }\n }\n}\n\ntype SQLSelect = SQLiteSelectBase<any, any, any, any>\n\ntype TraverseFieldArgs = {\n _locales: Result\n adapter: DrizzleAdapter\n collectionSlug?: string\n currentArgs: Result\n currentTableName: string\n depth?: number\n draftsEnabled?: boolean\n fields: FlattenedField[]\n joinQuery: JoinQuery\n joins?: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized?: boolean\n path: string\n select?: SelectType\n selectAllOnCurrentLevel?: boolean\n selectMode?: SelectMode\n tablePath: string\n topLevelArgs: Record<string, unknown>\n topLevelTableName: string\n versions?: boolean\n withTabledFields: {\n numbers?: boolean\n rels?: boolean\n texts?: boolean\n }\n}\n\nexport const traverseFields = ({\n _locales,\n adapter,\n collectionSlug,\n currentArgs,\n currentTableName,\n depth,\n draftsEnabled,\n fields,\n joinQuery = {},\n joins,\n locale,\n parentIsLocalized = false,\n path,\n select,\n selectAllOnCurrentLevel = false,\n selectMode,\n tablePath,\n topLevelArgs,\n topLevelTableName,\n versions,\n withTabledFields,\n}: TraverseFieldArgs) => {\n fields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n const isFieldLocalized = fieldShouldBeLocalized({\n field,\n parentIsLocalized,\n })\n\n // handle simple relationship\n if (\n depth > 0 &&\n (field.type === 'upload' || field.type === 'relationship') &&\n !field.hasMany &&\n typeof field.relationTo === 'string'\n ) {\n if (isFieldLocalized) {\n _locales.with[`${path}${field.name}`] = true\n } else {\n currentArgs.with[`${path}${field.name}`] = true\n }\n }\n\n switch (field.type) {\n case 'array': {\n const arraySelect = selectAllOnCurrentLevel ? true : select?.[field.name]\n\n if (select) {\n if (\n (selectMode === 'include' && typeof arraySelect === 'undefined') ||\n (selectMode === 'exclude' && arraySelect === false)\n ) {\n break\n }\n }\n\n const withArray: Result = {\n columns:\n typeof arraySelect === 'object'\n ? {\n id: true,\n _order: true,\n }\n : {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const arrayTableName = adapter.tableNameMap.get(\n `${currentTableName}_${tablePath}${toSnakeCase(field.name)}`,\n )\n\n if (typeof arraySelect === 'object') {\n if (adapter.tables[arrayTableName]._locale) {\n withArray.columns._locale = true\n }\n\n if (adapter.tables[arrayTableName]._uuid) {\n withArray.columns._uuid = true\n }\n }\n\n const arrayTableNameWithLocales = `${arrayTableName}${adapter.localesSuffix}`\n\n if (adapter.tables[arrayTableNameWithLocales]) {\n withArray.with._locales = {\n columns:\n typeof arraySelect === 'object'\n ? {\n _locale: true,\n }\n : {\n id: false,\n _parentID: false,\n },\n with: {},\n }\n }\n\n const relationName = field.dbName ? `_${arrayTableName}` : `${path}${field.name}`\n currentArgs.with[relationName] = withArray\n\n traverseFields({\n _locales: withArray.with._locales,\n adapter,\n currentArgs: withArray,\n currentTableName: arrayTableName,\n depth,\n draftsEnabled,\n fields: field.flattenedFields,\n joinQuery,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: '',\n select: typeof arraySelect === 'object' ? arraySelect : undefined,\n selectMode,\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n withTabledFields,\n })\n\n if (\n typeof arraySelect === 'object' &&\n withArray.with._locales &&\n Object.keys(withArray.with._locales).length === 1\n ) {\n delete withArray.with._locales\n }\n\n break\n }\n\n case 'blocks': {\n const blocksSelect = selectAllOnCurrentLevel ? true : select?.[field.name]\n\n if (select) {\n if (\n (selectMode === 'include' && !blocksSelect) ||\n (selectMode === 'exclude' && blocksSelect === false)\n ) {\n break\n }\n }\n\n ;(field.blockReferences ?? field.blocks).forEach((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n const blockKey = `_blocks_${block.slug}`\n\n let blockSelect: boolean | SelectType | undefined\n\n let blockSelectMode = selectMode\n\n if (selectMode === 'include' && blocksSelect === true) {\n blockSelect = true\n }\n\n if (typeof blocksSelect === 'object') {\n if (typeof blocksSelect[block.slug] === 'object') {\n blockSelect = blocksSelect[block.slug]\n } else if (\n (selectMode === 'include' && typeof blocksSelect[block.slug] === 'undefined') ||\n (selectMode === 'exclude' && blocksSelect[block.slug] === false)\n ) {\n blockSelect = {}\n blockSelectMode = 'include'\n } else if (selectMode === 'include' && blocksSelect[block.slug] === true) {\n blockSelect = true\n }\n }\n\n if (!topLevelArgs[blockKey]) {\n const withBlock: Result = {\n columns:\n typeof blockSelect === 'object'\n ? {\n id: true,\n _order: true,\n _path: true,\n }\n : {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const tableName = adapter.tableNameMap.get(\n `${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`,\n )\n\n if (typeof blockSelect === 'object') {\n if (adapter.tables[tableName]._locale) {\n withBlock.columns._locale = true\n }\n\n if (adapter.tables[tableName]._uuid) {\n withBlock.columns._uuid = true\n }\n }\n\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`]) {\n withBlock.with._locales = {\n with: {},\n }\n\n if (typeof blockSelect === 'object') {\n withBlock.with._locales.columns = {\n _locale: true,\n }\n }\n }\n topLevelArgs.with[blockKey] = withBlock\n\n traverseFields({\n _locales: withBlock.with._locales,\n adapter,\n currentArgs: withBlock,\n currentTableName: tableName,\n depth,\n draftsEnabled,\n fields: block.flattenedFields,\n joinQuery,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: '',\n select: typeof blockSelect === 'object' ? blockSelect : undefined,\n selectMode: blockSelectMode,\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n withTabledFields,\n })\n\n if (\n typeof blockSelect === 'object' &&\n withBlock.with._locales &&\n Object.keys(withBlock.with._locales.columns).length === 1\n ) {\n delete withBlock.with._locales\n }\n }\n })\n\n break\n }\n\n case 'group':\n case 'tab': {\n const fieldSelect = select?.[field.name]\n\n if (fieldSelect === false) {\n break\n }\n\n traverseFields({\n _locales,\n adapter,\n collectionSlug,\n currentArgs,\n currentTableName,\n depth,\n draftsEnabled,\n fields: field.flattenedFields,\n joinQuery,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${path}${field.name}_`,\n select: typeof fieldSelect === 'object' ? fieldSelect : undefined,\n selectAllOnCurrentLevel:\n selectAllOnCurrentLevel ||\n fieldSelect === true ||\n (selectMode === 'exclude' && typeof fieldSelect === 'undefined'),\n selectMode,\n tablePath: `${tablePath}${toSnakeCase(field.name)}_`,\n topLevelArgs,\n topLevelTableName,\n versions,\n withTabledFields,\n })\n\n break\n }\n case 'join': {\n // when `joinsQuery` is false, do not join\n if (joinQuery === false) {\n break\n }\n\n if (\n (select && selectMode === 'include' && !select[field.name]) ||\n (selectMode === 'exclude' && select[field.name] === false)\n ) {\n break\n }\n\n const joinSchemaPath = `${path.replaceAll('_', '.')}${field.name}`\n\n if (joinQuery[joinSchemaPath] === false) {\n break\n }\n\n const {\n count: shouldCount = false,\n limit: limitArg = field.defaultLimit ?? 10,\n page,\n sort = field.defaultSort,\n where,\n } = joinQuery[joinSchemaPath] || {}\n let limit = limitArg\n\n if (limit !== 0) {\n // get an additional document and slice it later to determine if there is a next page\n limit += 1\n }\n\n const columnName = `${path.replaceAll('.', '_')}${field.name}`\n\n const db = adapter.drizzle as LibSQLDatabase\n\n if (Array.isArray(field.collection)) {\n let currentQuery: null | SQLSelect = null\n const onPath = field.on.split('.').join('_')\n\n if (Array.isArray(sort)) {\n throw new Error('Not implemented')\n }\n\n let sanitizedSort = sort\n\n if (!sanitizedSort) {\n if (\n field.collection.some((collection) =>\n adapter.payload.collections[collection].config.fields.some(\n (f) => f.type === 'date' && f.name === 'createdAt',\n ),\n )\n ) {\n sanitizedSort = '-createdAt'\n } else {\n sanitizedSort = 'id'\n }\n }\n\n const sortOrder = sanitizedSort.startsWith('-') ? desc : asc\n sanitizedSort = sanitizedSort.replace('-', '')\n\n const sortPath = sanitizedSort.split('.').join('_')\n\n const wherePaths: string[] = []\n\n if (where) {\n flattenAllWherePaths(where, wherePaths)\n }\n\n for (const collection of field.collection) {\n const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(collection))\n\n const table = adapter.tables[joinCollectionTableName]\n\n const sortColumn = table[sortPath]\n\n const selectFields = {\n id: adapter.tables[joinCollectionTableName].id,\n parent: sql`${adapter.tables[joinCollectionTableName][onPath]}`.as(onPath),\n relationTo: sql`${collection}`.as('relationTo'),\n sortPath: sql`${sortColumn ? sortColumn : null}`.as('sortPath'),\n }\n\n // Select for WHERE and Fallback NULL\n for (const path of wherePaths) {\n if (adapter.tables[joinCollectionTableName][path]) {\n selectFields[path] = sql`${adapter.tables[joinCollectionTableName][path]}`.as(path)\n // Allow to filter by collectionSlug\n } else if (path !== 'relationTo') {\n selectFields[path] = sql`null`.as(path)\n }\n }\n\n const query = db.select(selectFields).from(adapter.tables[joinCollectionTableName])\n if (currentQuery === null) {\n currentQuery = query as unknown as SQLSelect\n } else {\n currentQuery = currentQuery.unionAll(query) as SQLSelect\n }\n }\n\n const subQueryAlias = `${columnName}_subquery`\n\n let sqlWhere = eq(\n adapter.tables[currentTableName].id,\n sql.raw(`\"${subQueryAlias}\".\"${onPath}\"`),\n )\n\n if (where && Object.keys(where).length > 0) {\n sqlWhere = and(sqlWhere, buildSQLWhere(where, subQueryAlias))\n }\n\n if (shouldCount) {\n currentArgs.extras[`${columnName}_count`] = sql`${db\n .select({ count: count() })\n .from(sql`${currentQuery.as(subQueryAlias)}`)\n .where(sqlWhere)}`.as(`${columnName}_count`)\n }\n\n currentQuery = currentQuery.orderBy(sortOrder(sql`\"sortPath\"`)) as SQLSelect\n\n if (page && limit !== 0) {\n const offset = (page - 1) * limit\n if (offset > 0) {\n currentQuery = currentQuery.offset(offset) as SQLSelect\n }\n }\n\n if (limit) {\n currentQuery = currentQuery.limit(limit) as SQLSelect\n }\n\n currentArgs.extras[columnName] = sql`${db\n .select({\n id: jsonAggBuildObject(adapter, {\n id: sql.raw(`\"${subQueryAlias}\".\"id\"`),\n relationTo: sql.raw(`\"${subQueryAlias}\".\"relationTo\"`),\n }),\n })\n .from(sql`${currentQuery.as(subQueryAlias)}`)\n .where(sqlWhere)}`.as(columnName)\n } else {\n const useDrafts =\n (versions || draftsEnabled) &&\n Boolean(adapter.payload.collections[field.collection].config.versions.drafts)\n\n const fields = useDrafts\n ? buildVersionCollectionFields(\n adapter.payload.config,\n adapter.payload.collections[field.collection].config,\n true,\n )\n : adapter.payload.collections[field.collection].config.flattenedFields\n\n const joinCollectionTableName = adapter.tableNameMap.get(\n useDrafts\n ? `_${toSnakeCase(field.collection)}${adapter.versionsSuffix}`\n : toSnakeCase(field.collection),\n )\n\n const joins: BuildQueryJoinAliases = []\n\n const currentIDColumn = versions\n ? adapter.tables[currentTableName].parent\n : adapter.tables[currentTableName].id\n\n let joinQueryWhere: Where\n\n if (Array.isArray(field.targetField.relationTo)) {\n joinQueryWhere = {\n [field.on]: {\n equals: {\n relationTo: collectionSlug,\n value: rawConstraint(currentIDColumn),\n },\n },\n }\n } else {\n joinQueryWhere = {\n [field.on]: {\n equals: rawConstraint(currentIDColumn),\n },\n }\n }\n\n if (where && Object.keys(where).length) {\n joinQueryWhere = {\n and: [joinQueryWhere, where],\n }\n }\n\n if (useDrafts) {\n joinQueryWhere = combineQueries(appendVersionToQueryKey(joinQueryWhere), {\n latest: { equals: true },\n })\n }\n\n const columnName = `${path.replaceAll('.', '_')}${field.name}`\n\n const subQueryAlias = `${columnName}_alias`\n\n const { newAliasTable } = getTableAlias({\n adapter,\n tableName: joinCollectionTableName,\n })\n\n const {\n orderBy,\n selectFields,\n where: subQueryWhere,\n } = buildQuery({\n adapter,\n aliasTable: newAliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n selectLocale: true,\n sort: useDrafts\n ? getQueryDraftsSort({\n collectionConfig: adapter.payload.collections[field.collection].config,\n sort,\n })\n : sort,\n tableName: joinCollectionTableName,\n where: joinQueryWhere,\n })\n\n for (let key in selectFields) {\n const val = selectFields[key]\n\n if (val.table && getNameFromDrizzleTable(val.table) === joinCollectionTableName) {\n delete selectFields[key]\n key = key.split('.').pop()\n selectFields[key] = newAliasTable[key]\n }\n }\n\n if (useDrafts) {\n selectFields.parent = newAliasTable.parent\n }\n\n let query: SQLiteSelect = db\n .select(selectFields as any)\n .from(newAliasTable)\n .where(subQueryWhere)\n .orderBy(() => orderBy.map(({ column, order }) => order(column)))\n .$dynamic()\n\n joins.forEach(({ type, condition, table }) => {\n query = query[type ?? 'leftJoin'](table, condition)\n })\n\n if (page && limit !== 0) {\n const offset = (page - 1) * limit - 1\n if (offset > 0) {\n query = query.offset(offset)\n }\n }\n\n if (limit !== 0) {\n query = query.limit(limit)\n }\n\n const subQuery = query.as(subQueryAlias)\n\n if (shouldCount) {\n currentArgs.extras[`${columnName}_count`] = sql`${db\n .select({\n count: count(),\n })\n .from(\n sql`${db\n .select(selectFields as any)\n .from(newAliasTable)\n .where(subQueryWhere)\n .as(`${subQueryAlias}_count_subquery`)}`,\n )}`.as(`${subQueryAlias}_count`)\n }\n\n currentArgs.extras[columnName] = sql`${db\n .select({\n result: jsonAggBuildObject(adapter, {\n id: sql.raw(`\"${subQueryAlias}\".${useDrafts ? 'parent_id' : 'id'}`),\n ...(selectFields._locale && {\n locale: sql.raw(`\"${subQueryAlias}\".${selectFields._locale.name}`),\n }),\n }),\n })\n .from(sql`${subQuery}`)}`.as(subQueryAlias)\n }\n\n break\n }\n\n case 'point': {\n if (adapter.name === 'sqlite') {\n break\n }\n\n const args = isFieldLocalized ? _locales : currentArgs\n if (!args.columns) {\n args.columns = {}\n }\n\n if (!args.extras) {\n args.extras = {}\n }\n\n const name = `${path}${field.name}`\n\n // Drizzle handles that poorly. See https://github.com/drizzle-team/drizzle-orm/issues/2526\n // Additionally, this way we format the column value straight in the database using ST_AsGeoJSON\n args.columns[name] = false\n\n let shouldSelect = false\n\n if (select || selectAllOnCurrentLevel) {\n if (\n selectAllOnCurrentLevel ||\n (selectMode === 'include' && select[field.name] === true) ||\n (selectMode === 'exclude' && typeof select[field.name] === 'undefined')\n ) {\n shouldSelect = true\n }\n } else {\n shouldSelect = true\n }\n\n if (shouldSelect) {\n args.extras[name] = sql.raw(`ST_AsGeoJSON(${toSnakeCase(name)})::jsonb`).as(name)\n }\n break\n }\n\n case 'select': {\n if (select && !selectAllOnCurrentLevel) {\n if (\n (selectMode === 'include' && !select[field.name]) ||\n (selectMode === 'exclude' && select[field.name] === false)\n ) {\n break\n }\n }\n\n if (field.hasMany) {\n const withSelect: Result = {\n columns: {\n id: false,\n order: false,\n parent: false,\n },\n orderBy: ({ order }, { asc }) => [asc(order)],\n }\n\n currentArgs.with[`${path}${field.name}`] = withSelect\n break\n }\n\n if (select || selectAllOnCurrentLevel) {\n const fieldPath = `${path}${field.name}`\n\n if ((isFieldLocalized || parentIsLocalized) && _locales) {\n _locales.columns[fieldPath] = true\n } else if (adapter.tables[currentTableName]?.[fieldPath]) {\n currentArgs.columns[fieldPath] = true\n }\n }\n\n break\n }\n\n default: {\n if (!select && !selectAllOnCurrentLevel) {\n break\n }\n\n if (\n selectAllOnCurrentLevel ||\n (selectMode === 'include' && select[field.name] === true) ||\n (selectMode === 'exclude' && typeof select[field.name] === 'undefined')\n ) {\n const fieldPath = `${path}${field.name}`\n\n if ((isFieldLocalized || parentIsLocalized) && _locales) {\n _locales.columns[fieldPath] = true\n } else if (adapter.tables[currentTableName]?.[fieldPath]) {\n currentArgs.columns[fieldPath] = true\n }\n\n if (\n !withTabledFields.rels &&\n (field.type === 'relationship' || field.type === 'upload') &&\n (field.hasMany || Array.isArray(field.relationTo))\n ) {\n withTabledFields.rels = true\n }\n\n if (!withTabledFields.numbers && field.type === 'number' && field.hasMany) {\n withTabledFields.numbers = true\n }\n\n if (!withTabledFields.texts && field.type === 'text' && field.hasMany) {\n withTabledFields.texts = true\n }\n }\n\n break\n }\n }\n })\n\n return topLevelArgs\n}\n"],"names":["and","asc","count","desc","eq","or","sql","appendVersionToQueryKey","buildVersionCollectionFields","combineQueries","getQueryDraftsSort","fieldIsVirtual","fieldShouldBeLocalized","toSnakeCase","buildQuery","getTableAlias","operatorMap","getNameFromDrizzleTable","jsonAggBuildObject","rawConstraint","flattenAllWherePaths","where","paths","k","includes","toUpperCase","Array","isArray","whereField","push","split","join","buildSQLWhere","alias","op","accumulated","payloadOperator","Object","keys","value","raw","traverseFields","_locales","adapter","collectionSlug","currentArgs","currentTableName","depth","draftsEnabled","fields","joinQuery","joins","locale","parentIsLocalized","path","select","selectAllOnCurrentLevel","selectMode","tablePath","topLevelArgs","topLevelTableName","versions","withTabledFields","forEach","field","isFieldLocalized","type","hasMany","relationTo","with","name","arraySelect","withArray","columns","id","_order","_parentID","orderBy","arrayTableName","tableNameMap","get","tables","_locale","_uuid","arrayTableNameWithLocales","localesSuffix","relationName","dbName","flattenedFields","localized","undefined","length","blocksSelect","blockReferences","blocks","_block","block","payload","blockKey","slug","blockSelect","blockSelectMode","withBlock","_path","tableName","fieldSelect","joinSchemaPath","replaceAll","shouldCount","limit","limitArg","defaultLimit","page","sort","defaultSort","columnName","db","drizzle","collection","currentQuery","onPath","on","Error","sanitizedSort","some","collections","config","f","sortOrder","startsWith","replace","sortPath","wherePaths","joinCollectionTableName","table","sortColumn","selectFields","parent","as","query","from","unionAll","subQueryAlias","sqlWhere","extras","offset","useDrafts","Boolean","drafts","versionsSuffix","currentIDColumn","joinQueryWhere","targetField","equals","latest","newAliasTable","subQueryWhere","aliasTable","selectLocale","collectionConfig","key","val","pop","map","column","order","$dynamic","condition","subQuery","result","args","shouldSelect","withSelect","fieldPath","rels","numbers","texts"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/find/traverseFields.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { SQLiteSelect, SQLiteSelectBase } from 'drizzle-orm/sqlite-core'\n\nimport { and, asc, count, desc, eq, or, sql } from 'drizzle-orm'\nimport {\n appendVersionToQueryKey,\n buildVersionCollectionFields,\n combineQueries,\n type FlattenedField,\n getQueryDraftsSort,\n type JoinQuery,\n type SelectMode,\n type SelectType,\n type Where,\n} from 'payload'\nimport { fieldIsVirtual, fieldShouldBeLocalized } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js'\nimport type { Result } from './buildFindManyArgs.js'\n\nimport buildQuery from '../queries/buildQuery.js'\nimport { getTableAlias } from '../queries/getTableAlias.js'\nimport { operatorMap } from '../queries/operatorMap.js'\nimport { getArrayRelationName } from '../utilities/getArrayRelationName.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { jsonAggBuildObject } from '../utilities/json.js'\nimport { rawConstraint } from '../utilities/rawConstraint.js'\n\nconst flattenAllWherePaths = (where: Where, paths: string[]) => {\n for (const k in where) {\n if (['AND', 'OR'].includes(k.toUpperCase())) {\n if (Array.isArray(where[k])) {\n for (const whereField of where[k]) {\n flattenAllWherePaths(whereField, paths)\n }\n }\n } else {\n // TODO: explore how to support arrays/relationship querying.\n paths.push(k.split('.').join('_'))\n }\n }\n}\n\nconst buildSQLWhere = (where: Where, alias: string) => {\n for (const k in where) {\n if (['AND', 'OR'].includes(k.toUpperCase())) {\n if (Array.isArray(where[k])) {\n const op = 'AND' === k.toUpperCase() ? and : or\n const accumulated = []\n for (const whereField of where[k]) {\n accumulated.push(buildSQLWhere(whereField, alias))\n }\n return op(...accumulated)\n }\n } else {\n const payloadOperator = Object.keys(where[k])[0]\n const value = where[k][payloadOperator]\n\n return operatorMap[payloadOperator](sql.raw(`\"${alias}\".\"${k.split('.').join('_')}\"`), value)\n }\n }\n}\n\ntype SQLSelect = SQLiteSelectBase<any, any, any, any>\n\ntype TraverseFieldArgs = {\n _locales: Result\n adapter: DrizzleAdapter\n collectionSlug?: string\n currentArgs: Result\n currentTableName: string\n depth?: number\n draftsEnabled?: boolean\n fields: FlattenedField[]\n joinQuery: JoinQuery\n joins?: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized?: boolean\n path: string\n select?: SelectType\n selectAllOnCurrentLevel?: boolean\n selectMode?: SelectMode\n tablePath: string\n topLevelArgs: Record<string, unknown>\n topLevelTableName: string\n versions?: boolean\n withTabledFields: {\n numbers?: boolean\n rels?: boolean\n texts?: boolean\n }\n}\n\nexport const traverseFields = ({\n _locales,\n adapter,\n collectionSlug,\n currentArgs,\n currentTableName,\n depth,\n draftsEnabled,\n fields,\n joinQuery = {},\n joins,\n locale,\n parentIsLocalized = false,\n path,\n select,\n selectAllOnCurrentLevel = false,\n selectMode,\n tablePath,\n topLevelArgs,\n topLevelTableName,\n versions,\n withTabledFields,\n}: TraverseFieldArgs) => {\n fields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n const isFieldLocalized = fieldShouldBeLocalized({\n field,\n parentIsLocalized,\n })\n\n // handle simple relationship\n if (\n depth > 0 &&\n (field.type === 'upload' || field.type === 'relationship') &&\n !field.hasMany &&\n typeof field.relationTo === 'string'\n ) {\n if (isFieldLocalized) {\n _locales.with[`${path}${field.name}`] = true\n } else {\n currentArgs.with[`${path}${field.name}`] = true\n }\n }\n\n switch (field.type) {\n case 'array': {\n const arraySelect = selectAllOnCurrentLevel ? true : select?.[field.name]\n\n if (select) {\n if (\n (selectMode === 'include' && typeof arraySelect === 'undefined') ||\n (selectMode === 'exclude' && arraySelect === false)\n ) {\n break\n }\n }\n\n const withArray: Result = {\n columns:\n typeof arraySelect === 'object'\n ? {\n id: true,\n _order: true,\n }\n : {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const arrayTableName = adapter.tableNameMap.get(\n `${currentTableName}_${tablePath}${toSnakeCase(field.name)}`,\n )\n\n if (typeof arraySelect === 'object') {\n if (adapter.tables[arrayTableName]._locale) {\n withArray.columns._locale = true\n }\n\n if (adapter.tables[arrayTableName]._uuid) {\n withArray.columns._uuid = true\n }\n }\n\n const arrayTableNameWithLocales = `${arrayTableName}${adapter.localesSuffix}`\n\n if (adapter.tables[arrayTableNameWithLocales]) {\n withArray.with._locales = {\n columns:\n typeof arraySelect === 'object'\n ? {\n _locale: true,\n }\n : {\n id: false,\n _parentID: false,\n },\n with: {},\n }\n }\n\n const relationName = getArrayRelationName({\n field,\n path: `${path}${field.name}`,\n tableName: arrayTableName,\n })\n\n currentArgs.with[relationName] = withArray\n\n traverseFields({\n _locales: withArray.with._locales,\n adapter,\n currentArgs: withArray,\n currentTableName: arrayTableName,\n depth,\n draftsEnabled,\n fields: field.flattenedFields,\n joinQuery,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: '',\n select: typeof arraySelect === 'object' ? arraySelect : undefined,\n selectMode,\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n withTabledFields,\n })\n\n if (\n typeof arraySelect === 'object' &&\n withArray.with._locales &&\n Object.keys(withArray.with._locales).length === 1\n ) {\n delete withArray.with._locales\n }\n\n break\n }\n\n case 'blocks': {\n const blocksSelect = selectAllOnCurrentLevel ? true : select?.[field.name]\n\n if (select) {\n if (\n (selectMode === 'include' && !blocksSelect) ||\n (selectMode === 'exclude' && blocksSelect === false)\n ) {\n break\n }\n }\n\n ;(field.blockReferences ?? field.blocks).forEach((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n const blockKey = `_blocks_${block.slug}`\n\n let blockSelect: boolean | SelectType | undefined\n\n let blockSelectMode = selectMode\n\n if (selectMode === 'include' && blocksSelect === true) {\n blockSelect = true\n }\n\n if (typeof blocksSelect === 'object') {\n if (typeof blocksSelect[block.slug] === 'object') {\n blockSelect = blocksSelect[block.slug]\n } else if (\n (selectMode === 'include' && typeof blocksSelect[block.slug] === 'undefined') ||\n (selectMode === 'exclude' && blocksSelect[block.slug] === false)\n ) {\n blockSelect = {}\n blockSelectMode = 'include'\n } else if (selectMode === 'include' && blocksSelect[block.slug] === true) {\n blockSelect = true\n }\n }\n\n if (!topLevelArgs[blockKey]) {\n const withBlock: Result = {\n columns:\n typeof blockSelect === 'object'\n ? {\n id: true,\n _order: true,\n _path: true,\n }\n : {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const tableName = adapter.tableNameMap.get(\n `${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`,\n )\n\n if (typeof blockSelect === 'object') {\n if (adapter.tables[tableName]._locale) {\n withBlock.columns._locale = true\n }\n\n if (adapter.tables[tableName]._uuid) {\n withBlock.columns._uuid = true\n }\n }\n\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`]) {\n withBlock.with._locales = {\n with: {},\n }\n\n if (typeof blockSelect === 'object') {\n withBlock.with._locales.columns = {\n _locale: true,\n }\n }\n }\n topLevelArgs.with[blockKey] = withBlock\n\n traverseFields({\n _locales: withBlock.with._locales,\n adapter,\n currentArgs: withBlock,\n currentTableName: tableName,\n depth,\n draftsEnabled,\n fields: block.flattenedFields,\n joinQuery,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: '',\n select: typeof blockSelect === 'object' ? blockSelect : undefined,\n selectMode: blockSelectMode,\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n withTabledFields,\n })\n\n if (\n typeof blockSelect === 'object' &&\n withBlock.with._locales &&\n Object.keys(withBlock.with._locales.columns).length === 1\n ) {\n delete withBlock.with._locales\n }\n }\n })\n\n break\n }\n\n case 'group':\n case 'tab': {\n const fieldSelect = select?.[field.name]\n\n if (fieldSelect === false) {\n break\n }\n\n traverseFields({\n _locales,\n adapter,\n collectionSlug,\n currentArgs,\n currentTableName,\n depth,\n draftsEnabled,\n fields: field.flattenedFields,\n joinQuery,\n joins,\n locale,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${path}${field.name}_`,\n select: typeof fieldSelect === 'object' ? fieldSelect : undefined,\n selectAllOnCurrentLevel:\n selectAllOnCurrentLevel ||\n fieldSelect === true ||\n (selectMode === 'exclude' && typeof fieldSelect === 'undefined'),\n selectMode,\n tablePath: `${tablePath}${toSnakeCase(field.name)}_`,\n topLevelArgs,\n topLevelTableName,\n versions,\n withTabledFields,\n })\n\n break\n }\n case 'join': {\n // when `joinsQuery` is false, do not join\n if (joinQuery === false) {\n break\n }\n\n if (\n (select && selectMode === 'include' && !select[field.name]) ||\n (selectMode === 'exclude' && select[field.name] === false)\n ) {\n break\n }\n\n const joinSchemaPath = `${path.replaceAll('_', '.')}${field.name}`\n\n if (joinQuery[joinSchemaPath] === false) {\n break\n }\n\n const {\n count: shouldCount = false,\n limit: limitArg = field.defaultLimit ?? 10,\n page,\n sort = field.defaultSort,\n where,\n } = joinQuery[joinSchemaPath] || {}\n let limit = limitArg\n\n if (limit !== 0) {\n // get an additional document and slice it later to determine if there is a next page\n limit += 1\n }\n\n const columnName = `${path.replaceAll('.', '_')}${field.name}`\n\n const db = adapter.drizzle as LibSQLDatabase\n\n if (Array.isArray(field.collection)) {\n let currentQuery: null | SQLSelect = null\n const onPath = field.on.split('.').join('_')\n\n if (Array.isArray(sort)) {\n throw new Error('Not implemented')\n }\n\n let sanitizedSort = sort\n\n if (!sanitizedSort) {\n if (\n field.collection.some((collection) =>\n adapter.payload.collections[collection].config.fields.some(\n (f) => f.type === 'date' && f.name === 'createdAt',\n ),\n )\n ) {\n sanitizedSort = '-createdAt'\n } else {\n sanitizedSort = 'id'\n }\n }\n\n const sortOrder = sanitizedSort.startsWith('-') ? desc : asc\n sanitizedSort = sanitizedSort.replace('-', '')\n\n const sortPath = sanitizedSort.split('.').join('_')\n\n const wherePaths: string[] = []\n\n if (where) {\n flattenAllWherePaths(where, wherePaths)\n }\n\n for (const collection of field.collection) {\n const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(collection))\n\n const table = adapter.tables[joinCollectionTableName]\n\n const sortColumn = table[sortPath]\n\n const selectFields = {\n id: adapter.tables[joinCollectionTableName].id,\n parent: sql`${adapter.tables[joinCollectionTableName][onPath]}`.as(onPath),\n relationTo: sql`${collection}`.as('relationTo'),\n sortPath: sql`${sortColumn ? sortColumn : null}`.as('sortPath'),\n }\n\n // Select for WHERE and Fallback NULL\n for (const path of wherePaths) {\n if (adapter.tables[joinCollectionTableName][path]) {\n selectFields[path] = sql`${adapter.tables[joinCollectionTableName][path]}`.as(path)\n // Allow to filter by collectionSlug\n } else if (path !== 'relationTo') {\n selectFields[path] = sql`null`.as(path)\n }\n }\n\n const query = db.select(selectFields).from(adapter.tables[joinCollectionTableName])\n if (currentQuery === null) {\n currentQuery = query as unknown as SQLSelect\n } else {\n currentQuery = currentQuery.unionAll(query) as SQLSelect\n }\n }\n\n const subQueryAlias = `${columnName}_subquery`\n\n let sqlWhere = eq(\n adapter.tables[currentTableName].id,\n sql.raw(`\"${subQueryAlias}\".\"${onPath}\"`),\n )\n\n if (where && Object.keys(where).length > 0) {\n sqlWhere = and(sqlWhere, buildSQLWhere(where, subQueryAlias))\n }\n\n if (shouldCount) {\n currentArgs.extras[`${columnName}_count`] = sql`${db\n .select({ count: count() })\n .from(sql`${currentQuery.as(subQueryAlias)}`)\n .where(sqlWhere)}`.as(`${columnName}_count`)\n }\n\n currentQuery = currentQuery.orderBy(sortOrder(sql`\"sortPath\"`)) as SQLSelect\n\n if (page && limit !== 0) {\n const offset = (page - 1) * limit\n if (offset > 0) {\n currentQuery = currentQuery.offset(offset) as SQLSelect\n }\n }\n\n if (limit) {\n currentQuery = currentQuery.limit(limit) as SQLSelect\n }\n\n currentArgs.extras[columnName] = sql`${db\n .select({\n id: jsonAggBuildObject(adapter, {\n id: sql.raw(`\"${subQueryAlias}\".\"id\"`),\n relationTo: sql.raw(`\"${subQueryAlias}\".\"relationTo\"`),\n }),\n })\n .from(sql`${currentQuery.as(subQueryAlias)}`)\n .where(sqlWhere)}`.as(columnName)\n } else {\n const useDrafts =\n (versions || draftsEnabled) &&\n Boolean(adapter.payload.collections[field.collection].config.versions.drafts)\n\n const fields = useDrafts\n ? buildVersionCollectionFields(\n adapter.payload.config,\n adapter.payload.collections[field.collection].config,\n true,\n )\n : adapter.payload.collections[field.collection].config.flattenedFields\n\n const joinCollectionTableName = adapter.tableNameMap.get(\n useDrafts\n ? `_${toSnakeCase(field.collection)}${adapter.versionsSuffix}`\n : toSnakeCase(field.collection),\n )\n\n const joins: BuildQueryJoinAliases = []\n\n const currentIDColumn = versions\n ? adapter.tables[currentTableName].parent\n : adapter.tables[currentTableName].id\n\n let joinQueryWhere: Where\n\n if (Array.isArray(field.targetField.relationTo)) {\n joinQueryWhere = {\n [field.on]: {\n equals: {\n relationTo: collectionSlug,\n value: rawConstraint(currentIDColumn),\n },\n },\n }\n } else {\n joinQueryWhere = {\n [field.on]: {\n equals: rawConstraint(currentIDColumn),\n },\n }\n }\n\n if (where && Object.keys(where).length) {\n joinQueryWhere = {\n and: [joinQueryWhere, where],\n }\n }\n\n if (useDrafts) {\n joinQueryWhere = combineQueries(appendVersionToQueryKey(joinQueryWhere), {\n latest: { equals: true },\n })\n }\n\n const columnName = `${path.replaceAll('.', '_')}${field.name}`\n\n const subQueryAlias = `${columnName}_alias`\n\n const { newAliasTable } = getTableAlias({\n adapter,\n tableName: joinCollectionTableName,\n })\n\n const {\n orderBy,\n selectFields,\n where: subQueryWhere,\n } = buildQuery({\n adapter,\n aliasTable: newAliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n selectLocale: true,\n sort: useDrafts\n ? getQueryDraftsSort({\n collectionConfig: adapter.payload.collections[field.collection].config,\n sort,\n })\n : sort,\n tableName: joinCollectionTableName,\n where: joinQueryWhere,\n })\n\n for (let key in selectFields) {\n const val = selectFields[key]\n\n if (val.table && getNameFromDrizzleTable(val.table) === joinCollectionTableName) {\n delete selectFields[key]\n key = key.split('.').pop()\n selectFields[key] = newAliasTable[key]\n }\n }\n\n if (useDrafts) {\n selectFields.parent = newAliasTable.parent\n }\n\n let query: SQLiteSelect = db\n .select(selectFields as any)\n .from(newAliasTable)\n .where(subQueryWhere)\n .orderBy(() => orderBy.map(({ column, order }) => order(column)))\n .$dynamic()\n\n joins.forEach(({ type, condition, table }) => {\n query = query[type ?? 'leftJoin'](table, condition)\n })\n\n if (page && limit !== 0) {\n const offset = (page - 1) * limit - 1\n if (offset > 0) {\n query = query.offset(offset)\n }\n }\n\n if (limit !== 0) {\n query = query.limit(limit)\n }\n\n const subQuery = query.as(subQueryAlias)\n\n if (shouldCount) {\n currentArgs.extras[`${columnName}_count`] = sql`${db\n .select({\n count: count(),\n })\n .from(\n sql`${db\n .select(selectFields as any)\n .from(newAliasTable)\n .where(subQueryWhere)\n .as(`${subQueryAlias}_count_subquery`)}`,\n )}`.as(`${subQueryAlias}_count`)\n }\n\n currentArgs.extras[columnName] = sql`${db\n .select({\n result: jsonAggBuildObject(adapter, {\n id: sql.raw(`\"${subQueryAlias}\".${useDrafts ? 'parent_id' : 'id'}`),\n ...(selectFields._locale && {\n locale: sql.raw(`\"${subQueryAlias}\".${selectFields._locale.name}`),\n }),\n }),\n })\n .from(sql`${subQuery}`)}`.as(subQueryAlias)\n }\n\n break\n }\n\n case 'point': {\n if (adapter.name === 'sqlite') {\n break\n }\n\n const args = isFieldLocalized ? _locales : currentArgs\n if (!args.columns) {\n args.columns = {}\n }\n\n if (!args.extras) {\n args.extras = {}\n }\n\n const name = `${path}${field.name}`\n\n // Drizzle handles that poorly. See https://github.com/drizzle-team/drizzle-orm/issues/2526\n // Additionally, this way we format the column value straight in the database using ST_AsGeoJSON\n args.columns[name] = false\n\n let shouldSelect = false\n\n if (select || selectAllOnCurrentLevel) {\n if (\n selectAllOnCurrentLevel ||\n (selectMode === 'include' && select[field.name] === true) ||\n (selectMode === 'exclude' && typeof select[field.name] === 'undefined')\n ) {\n shouldSelect = true\n }\n } else {\n shouldSelect = true\n }\n\n if (shouldSelect) {\n args.extras[name] = sql.raw(`ST_AsGeoJSON(${toSnakeCase(name)})::jsonb`).as(name)\n }\n break\n }\n\n case 'select': {\n if (select && !selectAllOnCurrentLevel) {\n if (\n (selectMode === 'include' && !select[field.name]) ||\n (selectMode === 'exclude' && select[field.name] === false)\n ) {\n break\n }\n }\n\n if (field.hasMany) {\n const withSelect: Result = {\n columns: {\n id: false,\n order: false,\n parent: false,\n },\n orderBy: ({ order }, { asc }) => [asc(order)],\n }\n\n currentArgs.with[`${path}${field.name}`] = withSelect\n break\n }\n\n if (select || selectAllOnCurrentLevel) {\n const fieldPath = `${path}${field.name}`\n\n if ((isFieldLocalized || parentIsLocalized) && _locales) {\n _locales.columns[fieldPath] = true\n } else if (adapter.tables[currentTableName]?.[fieldPath]) {\n currentArgs.columns[fieldPath] = true\n }\n }\n\n break\n }\n\n default: {\n if (!select && !selectAllOnCurrentLevel) {\n break\n }\n\n if (\n selectAllOnCurrentLevel ||\n (selectMode === 'include' && select[field.name] === true) ||\n (selectMode === 'exclude' && typeof select[field.name] === 'undefined')\n ) {\n const fieldPath = `${path}${field.name}`\n\n if ((isFieldLocalized || parentIsLocalized) && _locales) {\n _locales.columns[fieldPath] = true\n } else if (adapter.tables[currentTableName]?.[fieldPath]) {\n currentArgs.columns[fieldPath] = true\n }\n\n if (\n !withTabledFields.rels &&\n (field.type === 'relationship' || field.type === 'upload') &&\n (field.hasMany || Array.isArray(field.relationTo))\n ) {\n withTabledFields.rels = true\n }\n\n if (!withTabledFields.numbers && field.type === 'number' && field.hasMany) {\n withTabledFields.numbers = true\n }\n\n if (!withTabledFields.texts && field.type === 'text' && field.hasMany) {\n withTabledFields.texts = true\n }\n }\n\n break\n }\n }\n })\n\n return topLevelArgs\n}\n"],"names":["and","asc","count","desc","eq","or","sql","appendVersionToQueryKey","buildVersionCollectionFields","combineQueries","getQueryDraftsSort","fieldIsVirtual","fieldShouldBeLocalized","toSnakeCase","buildQuery","getTableAlias","operatorMap","getArrayRelationName","getNameFromDrizzleTable","jsonAggBuildObject","rawConstraint","flattenAllWherePaths","where","paths","k","includes","toUpperCase","Array","isArray","whereField","push","split","join","buildSQLWhere","alias","op","accumulated","payloadOperator","Object","keys","value","raw","traverseFields","_locales","adapter","collectionSlug","currentArgs","currentTableName","depth","draftsEnabled","fields","joinQuery","joins","locale","parentIsLocalized","path","select","selectAllOnCurrentLevel","selectMode","tablePath","topLevelArgs","topLevelTableName","versions","withTabledFields","forEach","field","isFieldLocalized","type","hasMany","relationTo","with","name","arraySelect","withArray","columns","id","_order","_parentID","orderBy","arrayTableName","tableNameMap","get","tables","_locale","_uuid","arrayTableNameWithLocales","localesSuffix","relationName","tableName","flattenedFields","localized","undefined","length","blocksSelect","blockReferences","blocks","_block","block","payload","blockKey","slug","blockSelect","blockSelectMode","withBlock","_path","fieldSelect","joinSchemaPath","replaceAll","shouldCount","limit","limitArg","defaultLimit","page","sort","defaultSort","columnName","db","drizzle","collection","currentQuery","onPath","on","Error","sanitizedSort","some","collections","config","f","sortOrder","startsWith","replace","sortPath","wherePaths","joinCollectionTableName","table","sortColumn","selectFields","parent","as","query","from","unionAll","subQueryAlias","sqlWhere","extras","offset","useDrafts","Boolean","drafts","versionsSuffix","currentIDColumn","joinQueryWhere","targetField","equals","latest","newAliasTable","subQueryWhere","aliasTable","selectLocale","collectionConfig","key","val","pop","map","column","order","$dynamic","condition","subQuery","result","args","shouldSelect","withSelect","fieldPath","rels","numbers","texts"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export type Groups = 'addColumn' | 'addConstraint' | 'alterType' | 'createIndex' | 'createTable' | 'createType' | 'disableRowSecurity' | 'dropColumn' | 'dropConstraint' | 'dropIndex' | 'dropTable' | 'dropType' | 'notNull' | 'setDefault';
1
+ export type Groups = 'addColumn' | 'addConstraint' | 'alterType' | 'createIndex' | 'createTable' | 'createType' | 'disableRowSecurity' | 'dropColumn' | 'dropConstraint' | 'dropIndex' | 'dropTable' | 'dropType' | 'notNull' | 'renameColumn' | 'setDefault';
2
2
  export declare const groupUpSQLStatements: (list: string[]) => Record<Groups, string[]>;
3
3
  //# sourceMappingURL=groupUpSQLStatements.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"groupUpSQLStatements.d.ts","sourceRoot":"","sources":["../../../../src/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GACd,WAAW,GACX,eAAe,GACf,WAAW,GACX,aAAa,GACb,aAAa,GACb,YAAY,GACZ,oBAAoB,GACpB,YAAY,GACZ,gBAAgB,GAChB,WAAW,GACX,WAAW,GACX,UAAU,GACV,SAAS,GACT,YAAY,CAAA;AAgBhB,eAAO,MAAM,oBAAoB,SAAU,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA0F5E,CAAA"}
1
+ {"version":3,"file":"groupUpSQLStatements.d.ts","sourceRoot":"","sources":["../../../../src/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GACd,WAAW,GACX,eAAe,GACf,WAAW,GACX,aAAa,GACb,aAAa,GACb,YAAY,GACZ,oBAAoB,GACpB,YAAY,GACZ,gBAAgB,GAChB,WAAW,GACX,WAAW,GACX,UAAU,GACV,SAAS,GACT,cAAc,GACd,YAAY,CAAA;AAqBhB,eAAO,MAAM,oBAAoB,SAAU,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAgI5E,CAAA"}
@@ -1,53 +1,77 @@
1
1
  /**
2
- * Convert an "ADD COLUMN" statement to an "ALTER COLUMN" statement
3
- * example: ALTER TABLE "pages_blocks_my_block" ADD COLUMN "person_id" integer NOT NULL;
4
- * to: ALTER TABLE "pages_blocks_my_block" ALTER COLUMN "person_id" SET NOT NULL;
5
- * @param sql
2
+ * Convert an "ADD COLUMN" statement to an "ALTER COLUMN" statement.
3
+ * Works with or without a schema name.
4
+ *
5
+ * Examples:
6
+ * 'ALTER TABLE "pages_blocks_my_block" ADD COLUMN "person_id" integer NOT NULL;'
7
+ * => 'ALTER TABLE "pages_blocks_my_block" ALTER COLUMN "person_id" SET NOT NULL;'
8
+ *
9
+ * 'ALTER TABLE "public"."pages_blocks_my_block" ADD COLUMN "person_id" integer NOT NULL;'
10
+ * => 'ALTER TABLE "public"."pages_blocks_my_block" ALTER COLUMN "person_id" SET NOT NULL;'
6
11
  */ function convertAddColumnToAlterColumn(sql) {
7
12
  // Regular expression to match the ADD COLUMN statement with its constraints
8
- const regex = /ALTER TABLE ("[^"]+")\.(".*?") ADD COLUMN ("[^"]+") [\w\s]+ NOT NULL;/;
13
+ const regex = /ALTER TABLE ((?:"[^"]+"\.)?"[^"]+") ADD COLUMN ("[^"]+") [^;]*?NOT NULL;/i;
9
14
  // Replace the matched part with "ALTER COLUMN ... SET NOT NULL;"
10
- return sql.replace(regex, 'ALTER TABLE $1.$2 ALTER COLUMN $3 SET NOT NULL;');
15
+ return sql.replace(regex, 'ALTER TABLE $1 ALTER COLUMN $2 SET NOT NULL;');
11
16
  }
12
17
  export const groupUpSQLStatements = (list)=>{
13
18
  const groups = {
14
- addColumn: 'ADD COLUMN',
15
- // example: ALTER TABLE "posts" ADD COLUMN "category_id" integer
16
- addConstraint: 'ADD CONSTRAINT',
17
- //example:
18
- // DO $$ BEGIN
19
- // ALTER TABLE "pages_blocks_my_block" ADD CONSTRAINT "pages_blocks_my_block_person_id_users_id_fk" FOREIGN KEY ("person_id") REFERENCES "users"("id") ON DELETE cascade ON UPDATE no action;
20
- // EXCEPTION
21
- // WHEN duplicate_object THEN null;
22
- // END $$;
23
- dropColumn: 'DROP COLUMN',
24
- // example: ALTER TABLE "_posts_v_rels" DROP COLUMN IF EXISTS "posts_id";
25
- dropConstraint: 'DROP CONSTRAINT',
26
- // example: ALTER TABLE "_posts_v_rels" DROP CONSTRAINT "_posts_v_rels_posts_fk";
27
- dropTable: 'DROP TABLE',
28
- // example: DROP TABLE "pages_rels";
29
- notNull: 'NOT NULL',
30
- // example: ALTER TABLE "pages_blocks_my_block" ALTER COLUMN "person_id" SET NOT NULL;
31
- createType: 'CREATE TYPE',
32
- // example: CREATE TYPE "public"."enum__pages_v_published_locale" AS ENUM('en', 'es');
33
- alterType: 'ALTER TYPE',
34
- // example: ALTER TYPE "public"."enum_pages_blocks_cta" ADD VALUE 'copy';
35
- createTable: 'CREATE TABLE',
36
- // example: CREATE TABLE IF NOT EXISTS "payload_locked_documents" (
37
- // "id" serial PRIMARY KEY NOT NULL,
38
- // "global_slug" varchar,
39
- // "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
40
- // "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
41
- // );
42
- disableRowSecurity: 'DISABLE ROW LEVEL SECURITY;',
43
- // example: ALTER TABLE "categories_rels" DISABLE ROW LEVEL SECURITY;
44
- dropIndex: 'DROP INDEX IF EXISTS',
45
- // example: DROP INDEX IF EXISTS "pages_title_idx";
46
- setDefault: 'SET DEFAULT',
47
- // example: ALTER TABLE "pages" ALTER COLUMN "_status" SET DEFAULT 'draft';
48
- createIndex: 'INDEX IF NOT EXISTS',
49
- // example: CREATE INDEX IF NOT EXISTS "payload_locked_documents_global_slug_idx" ON "payload_locked_documents" USING btree ("global_slug");
50
- dropType: 'DROP TYPE'
19
+ /**
20
+ * example: ALTER TABLE "posts" ADD COLUMN "category_id" integer
21
+ */ addColumn: 'ADD COLUMN',
22
+ /**
23
+ * example:
24
+ * DO $$ BEGIN
25
+ * ALTER TABLE "pages_blocks_my_block" ADD CONSTRAINT "pages_blocks_my_block_person_id_users_id_fk" FOREIGN KEY ("person_id") REFERENCES "users"("id") ON DELETE cascade ON UPDATE no action;
26
+ * EXCEPTION
27
+ * WHEN duplicate_object THEN null;
28
+ * END $$;
29
+ */ addConstraint: 'ADD CONSTRAINT',
30
+ /**
31
+ * example: CREATE TABLE IF NOT EXISTS "payload_locked_documents" (
32
+ * "id" serial PRIMARY KEY NOT NULL,
33
+ * "global_slug" varchar,
34
+ * "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
35
+ * "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
36
+ * );
37
+ */ createTable: 'CREATE TABLE',
38
+ /**
39
+ * example: ALTER TABLE "_posts_v_rels" DROP COLUMN IF EXISTS "posts_id";
40
+ */ dropColumn: 'DROP COLUMN',
41
+ /**
42
+ * example: ALTER TABLE "_posts_v_rels" DROP CONSTRAINT "_posts_v_rels_posts_fk";
43
+ */ dropConstraint: 'DROP CONSTRAINT',
44
+ /**
45
+ * example: DROP TABLE "pages_rels";
46
+ */ dropTable: 'DROP TABLE',
47
+ /**
48
+ * example: ALTER TABLE "pages_blocks_my_block" ALTER COLUMN "person_id" SET NOT NULL;
49
+ */ notNull: 'NOT NULL',
50
+ /**
51
+ * example: CREATE TYPE "public"."enum__pages_v_published_locale" AS ENUM('en', 'es');
52
+ */ createType: 'CREATE TYPE',
53
+ /**
54
+ * example: ALTER TYPE "public"."enum_pages_blocks_cta" ADD VALUE 'copy';
55
+ */ alterType: 'ALTER TYPE',
56
+ /**
57
+ * example: ALTER TABLE "categories_rels" DISABLE ROW LEVEL SECURITY;
58
+ */ disableRowSecurity: 'DISABLE ROW LEVEL SECURITY;',
59
+ /**
60
+ * example: DROP INDEX IF EXISTS "pages_title_idx";
61
+ */ dropIndex: 'DROP INDEX IF EXISTS',
62
+ /**
63
+ * example: ALTER TABLE "pages" ALTER COLUMN "_status" SET DEFAULT 'draft';
64
+ */ setDefault: 'SET DEFAULT',
65
+ /**
66
+ * example: CREATE INDEX IF NOT EXISTS "payload_locked_documents_global_slug_idx" ON "payload_locked_documents" USING btree ("global_slug");
67
+ */ createIndex: 'INDEX IF NOT EXISTS',
68
+ /**
69
+ * example: DROP TYPE "public"."enum__pages_v_published_locale";
70
+ */ dropType: 'DROP TYPE',
71
+ /**
72
+ * columns were renamed from camelCase to snake_case
73
+ * example: ALTER TABLE "forms" RENAME COLUMN "confirmationType" TO "confirmation_type";
74
+ */ renameColumn: 'RENAME COLUMN'
51
75
  };
52
76
  const result = Object.keys(groups).reduce((result, group)=>{
53
77
  result[group] = [];
@@ -75,7 +99,11 @@ export const groupUpSQLStatements = (list)=>{
75
99
  return true;
76
100
  }
77
101
  if (line.includes(value)) {
78
- result[key].push(line);
102
+ let statement = line;
103
+ if (key === 'dropConstraint') {
104
+ statement = line.replace('" DROP CONSTRAINT "', '" DROP CONSTRAINT IF EXISTS "');
105
+ }
106
+ result[key].push(statement);
79
107
  return true;
80
108
  }
81
109
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.ts"],"sourcesContent":["export type Groups =\n | 'addColumn'\n | 'addConstraint'\n | 'alterType'\n | 'createIndex'\n | 'createTable'\n | 'createType'\n | 'disableRowSecurity'\n | 'dropColumn'\n | 'dropConstraint'\n | 'dropIndex'\n | 'dropTable'\n | 'dropType'\n | 'notNull'\n | 'setDefault'\n\n/**\n * Convert an \"ADD COLUMN\" statement to an \"ALTER COLUMN\" statement\n * example: ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer NOT NULL;\n * to: ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;\n * @param sql\n */\nfunction convertAddColumnToAlterColumn(sql) {\n // Regular expression to match the ADD COLUMN statement with its constraints\n const regex = /ALTER TABLE (\"[^\"]+\")\\.(\".*?\") ADD COLUMN (\"[^\"]+\") [\\w\\s]+ NOT NULL;/\n\n // Replace the matched part with \"ALTER COLUMN ... SET NOT NULL;\"\n return sql.replace(regex, 'ALTER TABLE $1.$2 ALTER COLUMN $3 SET NOT NULL;')\n}\n\nexport const groupUpSQLStatements = (list: string[]): Record<Groups, string[]> => {\n const groups = {\n addColumn: 'ADD COLUMN',\n // example: ALTER TABLE \"posts\" ADD COLUMN \"category_id\" integer\n\n addConstraint: 'ADD CONSTRAINT',\n //example:\n // DO $$ BEGIN\n // ALTER TABLE \"pages_blocks_my_block\" ADD CONSTRAINT \"pages_blocks_my_block_person_id_users_id_fk\" FOREIGN KEY (\"person_id\") REFERENCES \"users\"(\"id\") ON DELETE cascade ON UPDATE no action;\n // EXCEPTION\n // WHEN duplicate_object THEN null;\n // END $$;\n\n dropColumn: 'DROP COLUMN',\n // example: ALTER TABLE \"_posts_v_rels\" DROP COLUMN IF EXISTS \"posts_id\";\n\n dropConstraint: 'DROP CONSTRAINT',\n // example: ALTER TABLE \"_posts_v_rels\" DROP CONSTRAINT \"_posts_v_rels_posts_fk\";\n\n dropTable: 'DROP TABLE',\n // example: DROP TABLE \"pages_rels\";\n\n notNull: 'NOT NULL',\n // example: ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;\n\n createType: 'CREATE TYPE',\n // example: CREATE TYPE \"public\".\"enum__pages_v_published_locale\" AS ENUM('en', 'es');\n\n alterType: 'ALTER TYPE',\n // example: ALTER TYPE \"public\".\"enum_pages_blocks_cta\" ADD VALUE 'copy';\n\n createTable: 'CREATE TABLE',\n // example: CREATE TABLE IF NOT EXISTS \"payload_locked_documents\" (\n // \t\"id\" serial PRIMARY KEY NOT NULL,\n // \t\"global_slug\" varchar,\n // \t\"updated_at\" timestamp(3) with time zone DEFAULT now() NOT NULL,\n // \t\"created_at\" timestamp(3) with time zone DEFAULT now() NOT NULL\n // );\n\n disableRowSecurity: 'DISABLE ROW LEVEL SECURITY;',\n // example: ALTER TABLE \"categories_rels\" DISABLE ROW LEVEL SECURITY;\n\n dropIndex: 'DROP INDEX IF EXISTS',\n // example: DROP INDEX IF EXISTS \"pages_title_idx\";\n\n setDefault: 'SET DEFAULT',\n // example: ALTER TABLE \"pages\" ALTER COLUMN \"_status\" SET DEFAULT 'draft';\n\n createIndex: 'INDEX IF NOT EXISTS',\n // example: CREATE INDEX IF NOT EXISTS \"payload_locked_documents_global_slug_idx\" ON \"payload_locked_documents\" USING btree (\"global_slug\");\n\n dropType: 'DROP TYPE',\n // example: DROP TYPE \"public\".\"enum__pages_v_published_locale\";\n }\n\n const result = Object.keys(groups).reduce((result, group: Groups) => {\n result[group] = []\n return result\n }, {}) as Record<Groups, string[]>\n\n // push multi-line changes to a single grouping\n let isCreateTable = false\n\n for (const line of list) {\n if (isCreateTable) {\n result.createTable.push(line)\n if (line.includes(');')) {\n isCreateTable = false\n }\n continue\n }\n Object.entries(groups).some(([key, value]) => {\n if (line.endsWith('NOT NULL;')) {\n // split up the ADD COLUMN and ALTER COLUMN NOT NULL statements\n // example: ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer NOT NULL;\n // becomes two separate statements:\n // 1. ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer;\n // 2. ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;\n result.addColumn.push(line.replace(' NOT NULL;', ';'))\n result.notNull.push(convertAddColumnToAlterColumn(line))\n return true\n }\n if (line.includes(value)) {\n result[key].push(line)\n return true\n }\n })\n }\n\n return result\n}\n"],"names":["convertAddColumnToAlterColumn","sql","regex","replace","groupUpSQLStatements","list","groups","addColumn","addConstraint","dropColumn","dropConstraint","dropTable","notNull","createType","alterType","createTable","disableRowSecurity","dropIndex","setDefault","createIndex","dropType","result","Object","keys","reduce","group","isCreateTable","line","push","includes","entries","some","key","value","endsWith"],"mappings":"AAgBA;;;;;CAKC,GACD,SAASA,8BAA8BC,GAAG;IACxC,4EAA4E;IAC5E,MAAMC,QAAQ;IAEd,iEAAiE;IACjE,OAAOD,IAAIE,OAAO,CAACD,OAAO;AAC5B;AAEA,OAAO,MAAME,uBAAuB,CAACC;IACnC,MAAMC,SAAS;QACbC,WAAW;QACX,gEAAgE;QAEhEC,eAAe;QACf,UAAU;QACV,cAAc;QACd,8LAA8L;QAC9L,YAAY;QACZ,oCAAoC;QACpC,UAAU;QAEVC,YAAY;QACZ,yEAAyE;QAEzEC,gBAAgB;QAChB,iFAAiF;QAEjFC,WAAW;QACX,oCAAoC;QAEpCC,SAAS;QACT,sFAAsF;QAEtFC,YAAY;QACZ,sFAAsF;QAEtFC,WAAW;QACX,yEAAyE;QAEzEC,aAAa;QACb,qEAAqE;QACrE,uCAAuC;QACvC,4BAA4B;QAC5B,sEAAsE;QACtE,qEAAqE;QACrE,OAAO;QAEPC,oBAAoB;QACpB,qEAAqE;QAErEC,WAAW;QACX,mDAAmD;QAEnDC,YAAY;QACZ,2EAA2E;QAE3EC,aAAa;QACb,4IAA4I;QAE5IC,UAAU;IAEZ;IAEA,MAAMC,SAASC,OAAOC,IAAI,CAACjB,QAAQkB,MAAM,CAAC,CAACH,QAAQI;QACjDJ,MAAM,CAACI,MAAM,GAAG,EAAE;QAClB,OAAOJ;IACT,GAAG,CAAC;IAEJ,+CAA+C;IAC/C,IAAIK,gBAAgB;IAEpB,KAAK,MAAMC,QAAQtB,KAAM;QACvB,IAAIqB,eAAe;YACjBL,OAAON,WAAW,CAACa,IAAI,CAACD;YACxB,IAAIA,KAAKE,QAAQ,CAAC,OAAO;gBACvBH,gBAAgB;YAClB;YACA;QACF;QACAJ,OAAOQ,OAAO,CAACxB,QAAQyB,IAAI,CAAC,CAAC,CAACC,KAAKC,MAAM;YACvC,IAAIN,KAAKO,QAAQ,CAAC,cAAc;gBAC9B,+DAA+D;gBAC/D,wFAAwF;gBACxF,mCAAmC;gBACnC,0EAA0E;gBAC1E,kFAAkF;gBAClFb,OAAOd,SAAS,CAACqB,IAAI,CAACD,KAAKxB,OAAO,CAAC,cAAc;gBACjDkB,OAAOT,OAAO,CAACgB,IAAI,CAAC5B,8BAA8B2B;gBAClD,OAAO;YACT;YACA,IAAIA,KAAKE,QAAQ,CAACI,QAAQ;gBACxBZ,MAAM,CAACW,IAAI,CAACJ,IAAI,CAACD;gBACjB,OAAO;YACT;QACF;IACF;IAEA,OAAON;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../../src/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.ts"],"sourcesContent":["export type Groups =\n | 'addColumn'\n | 'addConstraint'\n | 'alterType'\n | 'createIndex'\n | 'createTable'\n | 'createType'\n | 'disableRowSecurity'\n | 'dropColumn'\n | 'dropConstraint'\n | 'dropIndex'\n | 'dropTable'\n | 'dropType'\n | 'notNull'\n | 'renameColumn'\n | 'setDefault'\n\n/**\n * Convert an \"ADD COLUMN\" statement to an \"ALTER COLUMN\" statement.\n * Works with or without a schema name.\n *\n * Examples:\n * 'ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer NOT NULL;'\n * => 'ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;'\n *\n * 'ALTER TABLE \"public\".\"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer NOT NULL;'\n * => 'ALTER TABLE \"public\".\"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;'\n */\nfunction convertAddColumnToAlterColumn(sql) {\n // Regular expression to match the ADD COLUMN statement with its constraints\n const regex = /ALTER TABLE ((?:\"[^\"]+\"\\.)?\"[^\"]+\") ADD COLUMN (\"[^\"]+\") [^;]*?NOT NULL;/i\n\n // Replace the matched part with \"ALTER COLUMN ... SET NOT NULL;\"\n return sql.replace(regex, 'ALTER TABLE $1 ALTER COLUMN $2 SET NOT NULL;')\n}\n\nexport const groupUpSQLStatements = (list: string[]): Record<Groups, string[]> => {\n const groups = {\n /**\n * example: ALTER TABLE \"posts\" ADD COLUMN \"category_id\" integer\n */\n addColumn: 'ADD COLUMN',\n\n /**\n * example:\n * DO $$ BEGIN\n * ALTER TABLE \"pages_blocks_my_block\" ADD CONSTRAINT \"pages_blocks_my_block_person_id_users_id_fk\" FOREIGN KEY (\"person_id\") REFERENCES \"users\"(\"id\") ON DELETE cascade ON UPDATE no action;\n * EXCEPTION\n * WHEN duplicate_object THEN null;\n * END $$;\n */\n addConstraint: 'ADD CONSTRAINT',\n\n /**\n * example: CREATE TABLE IF NOT EXISTS \"payload_locked_documents\" (\n * \"id\" serial PRIMARY KEY NOT NULL,\n * \"global_slug\" varchar,\n * \"updated_at\" timestamp(3) with time zone DEFAULT now() NOT NULL,\n * \"created_at\" timestamp(3) with time zone DEFAULT now() NOT NULL\n * );\n */\n createTable: 'CREATE TABLE',\n\n /**\n * example: ALTER TABLE \"_posts_v_rels\" DROP COLUMN IF EXISTS \"posts_id\";\n */\n dropColumn: 'DROP COLUMN',\n\n /**\n * example: ALTER TABLE \"_posts_v_rels\" DROP CONSTRAINT \"_posts_v_rels_posts_fk\";\n */\n dropConstraint: 'DROP CONSTRAINT',\n\n /**\n * example: DROP TABLE \"pages_rels\";\n */\n dropTable: 'DROP TABLE',\n\n /**\n * example: ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;\n */\n notNull: 'NOT NULL',\n\n /**\n * example: CREATE TYPE \"public\".\"enum__pages_v_published_locale\" AS ENUM('en', 'es');\n */\n createType: 'CREATE TYPE',\n\n /**\n * example: ALTER TYPE \"public\".\"enum_pages_blocks_cta\" ADD VALUE 'copy';\n */\n alterType: 'ALTER TYPE',\n\n /**\n * example: ALTER TABLE \"categories_rels\" DISABLE ROW LEVEL SECURITY;\n */\n disableRowSecurity: 'DISABLE ROW LEVEL SECURITY;',\n\n /**\n * example: DROP INDEX IF EXISTS \"pages_title_idx\";\n */\n dropIndex: 'DROP INDEX IF EXISTS',\n\n /**\n * example: ALTER TABLE \"pages\" ALTER COLUMN \"_status\" SET DEFAULT 'draft';\n */\n setDefault: 'SET DEFAULT',\n\n /**\n * example: CREATE INDEX IF NOT EXISTS \"payload_locked_documents_global_slug_idx\" ON \"payload_locked_documents\" USING btree (\"global_slug\");\n */\n createIndex: 'INDEX IF NOT EXISTS',\n\n /**\n * example: DROP TYPE \"public\".\"enum__pages_v_published_locale\";\n */\n dropType: 'DROP TYPE',\n\n /**\n * columns were renamed from camelCase to snake_case\n * example: ALTER TABLE \"forms\" RENAME COLUMN \"confirmationType\" TO \"confirmation_type\";\n */\n renameColumn: 'RENAME COLUMN',\n }\n\n const result = Object.keys(groups).reduce((result, group: Groups) => {\n result[group] = []\n return result\n }, {}) as Record<Groups, string[]>\n\n // push multi-line changes to a single grouping\n let isCreateTable = false\n\n for (const line of list) {\n if (isCreateTable) {\n result.createTable.push(line)\n if (line.includes(');')) {\n isCreateTable = false\n }\n continue\n }\n Object.entries(groups).some(([key, value]) => {\n if (line.endsWith('NOT NULL;')) {\n // split up the ADD COLUMN and ALTER COLUMN NOT NULL statements\n // example: ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer NOT NULL;\n // becomes two separate statements:\n // 1. ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer;\n // 2. ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;\n result.addColumn.push(line.replace(' NOT NULL;', ';'))\n result.notNull.push(convertAddColumnToAlterColumn(line))\n return true\n }\n if (line.includes(value)) {\n let statement = line\n if (key === 'dropConstraint') {\n statement = line.replace('\" DROP CONSTRAINT \"', '\" DROP CONSTRAINT IF EXISTS \"')\n }\n result[key].push(statement)\n return true\n }\n })\n }\n\n return result\n}\n"],"names":["convertAddColumnToAlterColumn","sql","regex","replace","groupUpSQLStatements","list","groups","addColumn","addConstraint","createTable","dropColumn","dropConstraint","dropTable","notNull","createType","alterType","disableRowSecurity","dropIndex","setDefault","createIndex","dropType","renameColumn","result","Object","keys","reduce","group","isCreateTable","line","push","includes","entries","some","key","value","endsWith","statement"],"mappings":"AAiBA;;;;;;;;;;CAUC,GACD,SAASA,8BAA8BC,GAAG;IACxC,4EAA4E;IAC5E,MAAMC,QAAQ;IAEd,iEAAiE;IACjE,OAAOD,IAAIE,OAAO,CAACD,OAAO;AAC5B;AAEA,OAAO,MAAME,uBAAuB,CAACC;IACnC,MAAMC,SAAS;QACb;;KAEC,GACDC,WAAW;QAEX;;;;;;;KAOC,GACDC,eAAe;QAEf;;;;;;;KAOC,GACDC,aAAa;QAEb;;KAEC,GACDC,YAAY;QAEZ;;KAEC,GACDC,gBAAgB;QAEhB;;KAEC,GACDC,WAAW;QAEX;;KAEC,GACDC,SAAS;QAET;;KAEC,GACDC,YAAY;QAEZ;;KAEC,GACDC,WAAW;QAEX;;KAEC,GACDC,oBAAoB;QAEpB;;KAEC,GACDC,WAAW;QAEX;;KAEC,GACDC,YAAY;QAEZ;;KAEC,GACDC,aAAa;QAEb;;KAEC,GACDC,UAAU;QAEV;;;KAGC,GACDC,cAAc;IAChB;IAEA,MAAMC,SAASC,OAAOC,IAAI,CAAClB,QAAQmB,MAAM,CAAC,CAACH,QAAQI;QACjDJ,MAAM,CAACI,MAAM,GAAG,EAAE;QAClB,OAAOJ;IACT,GAAG,CAAC;IAEJ,+CAA+C;IAC/C,IAAIK,gBAAgB;IAEpB,KAAK,MAAMC,QAAQvB,KAAM;QACvB,IAAIsB,eAAe;YACjBL,OAAOb,WAAW,CAACoB,IAAI,CAACD;YACxB,IAAIA,KAAKE,QAAQ,CAAC,OAAO;gBACvBH,gBAAgB;YAClB;YACA;QACF;QACAJ,OAAOQ,OAAO,CAACzB,QAAQ0B,IAAI,CAAC,CAAC,CAACC,KAAKC,MAAM;YACvC,IAAIN,KAAKO,QAAQ,CAAC,cAAc;gBAC9B,+DAA+D;gBAC/D,wFAAwF;gBACxF,mCAAmC;gBACnC,0EAA0E;gBAC1E,kFAAkF;gBAClFb,OAAOf,SAAS,CAACsB,IAAI,CAACD,KAAKzB,OAAO,CAAC,cAAc;gBACjDmB,OAAOT,OAAO,CAACgB,IAAI,CAAC7B,8BAA8B4B;gBAClD,OAAO;YACT;YACA,IAAIA,KAAKE,QAAQ,CAACI,QAAQ;gBACxB,IAAIE,YAAYR;gBAChB,IAAIK,QAAQ,kBAAkB;oBAC5BG,YAAYR,KAAKzB,OAAO,CAAC,uBAAuB;gBAClD;gBACAmB,MAAM,CAACW,IAAI,CAACJ,IAAI,CAACO;gBACjB,OAAO;YACT;QACF;IACF;IAEA,OAAOd;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/postgres/predefinedMigrations/v2-v3/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAetD,KAAK,IAAI,GAAG;IACV,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAC9B,CAAA;AAaD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,4BAAmC,IAAI,kBA2SxE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/postgres/predefinedMigrations/v2-v3/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAetD,KAAK,IAAI,GAAG;IACV,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAC9B,CAAA;AAaD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,4BAAmC,IAAI,kBAqSxE,CAAA"}
@@ -32,11 +32,7 @@ const runStatementGroup = async ({ adapter, db, debug, statements })=>{
32
32
  const dir = payload.db.migrationDir;
33
33
  // get the drizzle migrateUpSQL from drizzle using the last schema
34
34
  const { generateDrizzleJson, generateMigration, upSnapshot } = adapter.requireDrizzleKit();
35
- const toSnapshot = {};
36
- for (const key of Object.keys(adapter.schema).filter((key)=>!key.startsWith('payload_locked_documents'))){
37
- toSnapshot[key] = adapter.schema[key];
38
- }
39
- const drizzleJsonAfter = generateDrizzleJson(toSnapshot);
35
+ const drizzleJsonAfter = generateDrizzleJson(adapter.schema);
40
36
  // Get the previous migration snapshot
41
37
  const previousSnapshot = fs.readdirSync(dir).filter((file)=>file.endsWith('.json') && !file.endsWith('relationships_v2_v3.json')).sort().reverse()?.[0];
42
38
  if (!previousSnapshot) {
@@ -74,8 +70,8 @@ const runStatementGroup = async ({ adapter, db, debug, statements })=>{
74
70
  await runStatementGroup({
75
71
  adapter,
76
72
  db,
77
- debug: debug ? 'DISABLING ROW LEVEL SECURITY' : null,
78
- statements: sqlUpStatements.disableRowSecurity
73
+ debug: debug ? 'RENAMING COLUMNS' : null,
74
+ statements: sqlUpStatements.renameColumn
79
75
  });
80
76
  await runStatementGroup({
81
77
  adapter,
@@ -97,6 +93,9 @@ const runStatementGroup = async ({ adapter, db, debug, statements })=>{
97
93
  statements: sqlUpStatements.createIndex
98
94
  });
99
95
  for (const collection of payload.config.collections){
96
+ if (collection.slug === 'payload-locked-documents') {
97
+ continue;
98
+ }
100
99
  const tableName = adapter.tableNameMap.get(toSnakeCase(collection.slug));
101
100
  const pathsToQuery = new Set();
102
101
  traverseFields({