@payloadcms/drizzle 3.38.0-canary.7 → 3.38.0-internal.6b8eed8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/find/findMany.d.ts.map +1 -1
- package/dist/find/findMany.js +0 -12
- package/dist/find/findMany.js.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.js +31 -1
- package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.js.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.spec.js +2537 -0
- package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.spec.js.map +1 -0
- package/dist/postgres/predefinedMigrations/v2-v3/index.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/index.js +95 -36
- package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
- package/dist/utilities/pushDevSchema.js +7 -7
- package/dist/utilities/pushDevSchema.js.map +1 -1
- package/package.json +3 -4
|
@@ -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;
|
|
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"}
|
package/dist/find/findMany.js
CHANGED
|
@@ -2,7 +2,6 @@ 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';
|
|
6
5
|
import { getTransaction } from '../utilities/getTransaction.js';
|
|
7
6
|
import { buildFindManyArgs } from './buildFindManyArgs.js';
|
|
8
7
|
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 }) {
|
|
@@ -41,17 +40,6 @@ export const findMany = async function find({ adapter, collectionSlug, draftsEna
|
|
|
41
40
|
tableName,
|
|
42
41
|
versions
|
|
43
42
|
});
|
|
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
|
-
}
|
|
55
43
|
const selectDistinctResult = await selectDistinct({
|
|
56
44
|
adapter,
|
|
57
45
|
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 {
|
|
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,3 +1,3 @@
|
|
|
1
|
-
export type Groups = 'addColumn' | 'addConstraint' | 'dropColumn' | 'dropConstraint' | 'dropTable' | 'notNull';
|
|
1
|
+
export type Groups = 'addColumn' | 'addConstraint' | 'alterType' | 'createIndex' | 'createTable' | 'createType' | 'disableRowSecurity' | 'dropColumn' | 'dropConstraint' | 'dropIndex' | 'dropTable' | 'dropType' | 'notNull' | '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,YAAY,GACZ,gBAAgB,GAChB,WAAW,GACX,SAAS,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,YAAY,CAAA;AAgBhB,eAAO,MAAM,oBAAoB,SAAU,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA0F5E,CAAA"}
|
|
@@ -26,13 +26,43 @@ export const groupUpSQLStatements = (list)=>{
|
|
|
26
26
|
// example: ALTER TABLE "_posts_v_rels" DROP CONSTRAINT "_posts_v_rels_posts_fk";
|
|
27
27
|
dropTable: 'DROP TABLE',
|
|
28
28
|
// example: DROP TABLE "pages_rels";
|
|
29
|
-
notNull: 'NOT NULL'
|
|
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'
|
|
30
51
|
};
|
|
31
52
|
const result = Object.keys(groups).reduce((result, group)=>{
|
|
32
53
|
result[group] = [];
|
|
33
54
|
return result;
|
|
34
55
|
}, {});
|
|
56
|
+
// push multi-line changes to a single grouping
|
|
57
|
+
let isCreateTable = false;
|
|
35
58
|
for (const line of list){
|
|
59
|
+
if (isCreateTable) {
|
|
60
|
+
result.createTable.push(line);
|
|
61
|
+
if (line.includes(');')) {
|
|
62
|
+
isCreateTable = false;
|
|
63
|
+
}
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
36
66
|
Object.entries(groups).some(([key, value])=>{
|
|
37
67
|
if (line.endsWith('NOT NULL;')) {
|
|
38
68
|
// split up the ADD COLUMN and ALTER COLUMN NOT NULL statements
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.ts"],"sourcesContent":["export type Groups =\n | 'addColumn'\n | 'addConstraint'\n | 'dropColumn'\n | 'dropConstraint'\n | 'dropTable'\n | 'notNull'\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\n const result = Object.keys(groups).reduce((result, group: Groups) => {\n result[group] = []\n return result\n }, {}) as Record<Groups, string[]>\n\n for (const line of list) {\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","result","Object","keys","reduce","group","line","
|
|
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"}
|