drizzle-kit 0.23.2 → 0.24.0-38d6dab
Sign up to get free protection for your applications and to get access to all the features.
- package/api.d.mts +20 -4
- package/api.d.ts +20 -4
- package/api.js +1315 -404
- package/api.mjs +1315 -404
- package/bin.cjs +1658 -394
- package/package.json +1 -1
- package/utils.js +14 -0
- package/utils.mjs +12 -0
package/bin.cjs
CHANGED
@@ -6561,6 +6561,16 @@ var init_sqliteSchema = __esm({
|
|
6561
6561
|
});
|
6562
6562
|
|
6563
6563
|
// src/utils.ts
|
6564
|
+
function isPgArrayType(sqlType) {
|
6565
|
+
return sqlType.match(/.*\[\d*\].*|.*\[\].*/g) !== null;
|
6566
|
+
}
|
6567
|
+
function findAddedAndRemoved(columnNames1, columnNames2) {
|
6568
|
+
const set1 = new Set(columnNames1);
|
6569
|
+
const set2 = new Set(columnNames2);
|
6570
|
+
const addedColumns = columnNames2.filter((it) => !set1.has(it));
|
6571
|
+
const removedColumns = columnNames1.filter((it) => !set2.has(it));
|
6572
|
+
return { addedColumns, removedColumns };
|
6573
|
+
}
|
6564
6574
|
var import_fs, import_path, import_url, copy, objectValues, assertV1OutFolder, dryJournal, prepareOutFolder, validatorForDialect, validateWithReport, prepareMigrationFolder, prepareMigrationMeta, schemaRenameKey, tableRenameKey, columnRenameKey, normaliseSQLiteUrl;
|
6565
6575
|
var init_utils = __esm({
|
6566
6576
|
"src/utils.ts"() {
|
@@ -11358,7 +11368,8 @@ var init_cli = __esm({
|
|
11358
11368
|
schemaFilter: unionType([stringType(), stringType().array()]).optional().default(["public"]),
|
11359
11369
|
extensionsFilters: literalType("postgis").array().optional(),
|
11360
11370
|
verbose: booleanType().optional(),
|
11361
|
-
strict: booleanType().optional()
|
11371
|
+
strict: booleanType().optional(),
|
11372
|
+
driver: driver.optional()
|
11362
11373
|
}).passthrough();
|
11363
11374
|
pullParams = objectType({
|
11364
11375
|
config: stringType().optional(),
|
@@ -17362,7 +17373,8 @@ var init_utils4 = __esm({
|
|
17362
17373
|
breakpoints: breakpoints || true,
|
17363
17374
|
schema: schema5,
|
17364
17375
|
out: out || "drizzle",
|
17365
|
-
bundle: driver2 === "expo"
|
17376
|
+
bundle: driver2 === "expo",
|
17377
|
+
driver: driver2
|
17366
17378
|
};
|
17367
17379
|
};
|
17368
17380
|
flattenDatabaseCredentials = (config) => {
|
@@ -17390,6 +17402,7 @@ var init_utils4 = __esm({
|
|
17390
17402
|
const raw2 = flattenDatabaseCredentials(
|
17391
17403
|
from === "config" ? await drizzleConfigFromFile(options.config) : options
|
17392
17404
|
);
|
17405
|
+
raw2.driver ||= options.driver;
|
17393
17406
|
raw2.verbose ||= options.verbose;
|
17394
17407
|
raw2.strict ||= options.strict;
|
17395
17408
|
const parsed = pushParams.safeParse(raw2);
|
@@ -17464,7 +17477,8 @@ var init_utils4 = __esm({
|
|
17464
17477
|
force: options.force ?? false,
|
17465
17478
|
credentials: parsed2.data,
|
17466
17479
|
tablesFilter,
|
17467
|
-
schemasFilter
|
17480
|
+
schemasFilter,
|
17481
|
+
driver: config.driver
|
17468
17482
|
};
|
17469
17483
|
}
|
17470
17484
|
assertUnreachable(config.dialect);
|
@@ -18107,7 +18121,7 @@ We have encountered a collision between the index name on columns ${source_defau
|
|
18107
18121
|
onUpdate = true;
|
18108
18122
|
}
|
18109
18123
|
const newColumn = {
|
18110
|
-
default: columnDefault === null ? void 0 : /^-?[\d.]+(?:e-?\d+)?$/.test(columnDefault) && !columnType.startsWith(
|
18124
|
+
default: columnDefault === null ? void 0 : /^-?[\d.]+(?:e-?\d+)?$/.test(columnDefault) && !["decimal", "char", "varchar"].some((type) => columnType.startsWith(type)) ? Number(columnDefault) : isDefaultAnExpression ? clearDefaults(columnDefault, collation) : `'${columnDefault}'`,
|
18111
18125
|
autoincrement: isAutoincrement,
|
18112
18126
|
name: columnName,
|
18113
18127
|
type: changedType,
|
@@ -18406,6 +18420,30 @@ function minRangeForIdentityBasedOn(columnType) {
|
|
18406
18420
|
function stringFromDatabaseIdentityProperty(field) {
|
18407
18421
|
return typeof field === "string" ? field : typeof field === "undefined" ? void 0 : typeof field === "bigint" ? field.toString() : String(field);
|
18408
18422
|
}
|
18423
|
+
function buildArrayString(array, sqlType) {
|
18424
|
+
sqlType = sqlType.split("[")[0];
|
18425
|
+
const values = array.map((value) => {
|
18426
|
+
if (typeof value === "number" || typeof value === "bigint") {
|
18427
|
+
return value.toString();
|
18428
|
+
} else if (typeof value === "boolean") {
|
18429
|
+
return value ? "true" : "false";
|
18430
|
+
} else if (Array.isArray(value)) {
|
18431
|
+
return buildArrayString(value, sqlType);
|
18432
|
+
} else if (value instanceof Date) {
|
18433
|
+
if (sqlType === "date") {
|
18434
|
+
return `"${value.toISOString().split("T")[0]}"`;
|
18435
|
+
} else if (sqlType === "timestamp") {
|
18436
|
+
return `"${value.toISOString().replace("T", " ").slice(0, 23)}"`;
|
18437
|
+
} else {
|
18438
|
+
return `"${value.toISOString()}"`;
|
18439
|
+
}
|
18440
|
+
} else if (typeof value === "object") {
|
18441
|
+
return `"${JSON.stringify(value).replaceAll('"', '\\"')}"`;
|
18442
|
+
}
|
18443
|
+
return `"${value}"`;
|
18444
|
+
}).join(",");
|
18445
|
+
return `{${values}}`;
|
18446
|
+
}
|
18409
18447
|
var import_drizzle_orm5, import_pg_core2, import_pg_core3, dialect5, indexName2, generatePgSnapshot, trimChar, fromDatabase2, columnToDefault, defaultForColumn;
|
18410
18448
|
var init_pgSerializer = __esm({
|
18411
18449
|
"src/serializer/pgSerializer.ts"() {
|
@@ -18416,6 +18454,7 @@ var init_pgSerializer = __esm({
|
|
18416
18454
|
import_pg_core3 = require("drizzle-orm/pg-core");
|
18417
18455
|
init_vector();
|
18418
18456
|
init_outputs();
|
18457
|
+
init_utils();
|
18419
18458
|
init_serializer();
|
18420
18459
|
dialect5 = new import_pg_core2.PgDialect();
|
18421
18460
|
indexName2 = (tableName, columns) => {
|
@@ -18524,6 +18563,11 @@ ${withStyle.errorWarning(`We've found duplicated unique constraint names in ${so
|
|
18524
18563
|
} else {
|
18525
18564
|
columnToSet.default = `'${column7.default.toISOString()}'`;
|
18526
18565
|
}
|
18566
|
+
} else if (isPgArrayType(sqlTypeLowered) && Array.isArray(column7.default)) {
|
18567
|
+
columnToSet.default = `'${buildArrayString(
|
18568
|
+
column7.default,
|
18569
|
+
sqlTypeLowered
|
18570
|
+
)}'::${sqlTypeLowered}`;
|
18527
18571
|
} else {
|
18528
18572
|
columnToSet.default = column7.default;
|
18529
18573
|
}
|
@@ -19570,7 +19614,7 @@ The unique constraint ${source_default.underline.blue(
|
|
19570
19614
|
primaryKeys.forEach((it) => {
|
19571
19615
|
if (it.columns.length > 1) {
|
19572
19616
|
primaryKeysObject[it.getName()] = {
|
19573
|
-
columns: it.columns.map((it2) => it2.name)
|
19617
|
+
columns: it.columns.map((it2) => it2.name),
|
19574
19618
|
name: it.getName()
|
19575
19619
|
};
|
19576
19620
|
} else {
|
@@ -19696,7 +19740,6 @@ The unique constraint ${source_default.underline.blue(
|
|
19696
19740
|
}
|
19697
19741
|
for (const [key, value] of Object.entries(tableToPk)) {
|
19698
19742
|
if (value.length > 1) {
|
19699
|
-
value.sort();
|
19700
19743
|
result[key].compositePrimaryKeys = {
|
19701
19744
|
[`${key}_${value.join("_")}_pk`]: {
|
19702
19745
|
columns: value,
|
@@ -22820,7 +22863,20 @@ var init_jsonDiffer = __esm({
|
|
22820
22863
|
});
|
22821
22864
|
|
22822
22865
|
// src/sqlgenerator.ts
|
22823
|
-
|
22866
|
+
function fromJson(statements, dialect7, action, driver2, json2) {
|
22867
|
+
const result = statements.flatMap((statement) => {
|
22868
|
+
const filtered = convertors.filter((it) => {
|
22869
|
+
return it.can(statement, dialect7, driver2);
|
22870
|
+
});
|
22871
|
+
const convertor = filtered.length === 1 ? filtered[0] : void 0;
|
22872
|
+
if (!convertor) {
|
22873
|
+
return "";
|
22874
|
+
}
|
22875
|
+
return convertor.convert(statement, json2, action);
|
22876
|
+
}).filter((it) => it !== "");
|
22877
|
+
return result;
|
22878
|
+
}
|
22879
|
+
var pgNativeTypes, isPgNativeType, Convertor, PgCreateTableConvertor, MySqlCreateTableConvertor, SQLiteCreateTableConvertor, PgAlterTableAlterColumnSetGenerated, PgAlterTableAlterColumnDropGenerated, PgAlterTableAlterColumnAlterGenerated, PgAlterTableAddUniqueConstraintConvertor, PgAlterTableDropUniqueConstraintConvertor, MySQLAlterTableAddUniqueConstraintConvertor, MySQLAlterTableDropUniqueConstraintConvertor, SQLiteAlterTableAddUniqueConstraintConvertor, SQLiteAlterTableDropUniqueConstraintConvertor, CreatePgSequenceConvertor, DropPgSequenceConvertor, RenamePgSequenceConvertor, MovePgSequenceConvertor, AlterPgSequenceConvertor, CreateTypeEnumConvertor, AlterTypeAddValueConvertor, PgDropTableConvertor, MySQLDropTableConvertor, SQLiteDropTableConvertor, PgRenameTableConvertor, SqliteRenameTableConvertor, MySqlRenameTableConvertor, PgAlterTableRenameColumnConvertor, MySqlAlterTableRenameColumnConvertor, SQLiteAlterTableRenameColumnConvertor, PgAlterTableDropColumnConvertor, MySqlAlterTableDropColumnConvertor, SQLiteAlterTableDropColumnConvertor, PgAlterTableAddColumnConvertor, MySqlAlterTableAddColumnConvertor, SQLiteAlterTableAddColumnConvertor, PgAlterTableAlterColumnSetTypeConvertor, SQLiteAlterTableAlterColumnSetTypeConvertor, PgAlterTableAlterColumnSetDefaultConvertor, SqliteAlterTableAlterColumnSetDefaultConvertor, PgAlterTableAlterColumnDropDefaultConvertor, PgAlterTableAlterColumnDropGeneratedConvertor, PgAlterTableAlterColumnSetExpressionConvertor, PgAlterTableAlterColumnAlterrGeneratedConvertor, SqliteAlterTableAlterColumnDropGeneratedConvertor, SqliteAlterTableAlterColumnSetExpressionConvertor, SqliteAlterTableAlterColumnAlterGeneratedConvertor, MySqlAlterTableAlterColumnAlterrGeneratedConvertor, MySqlAlterTableAddPk, MySqlAlterTableDropPk, LibSQLModifyColumn, MySqlModifyColumn, SqliteAlterTableAlterColumnDropDefaultConvertor, PgAlterTableCreateCompositePrimaryKeyConvertor, PgAlterTableDeleteCompositePrimaryKeyConvertor, PgAlterTableAlterCompositePrimaryKeyConvertor, MySqlAlterTableCreateCompositePrimaryKeyConvertor, MySqlAlterTableDeleteCompositePrimaryKeyConvertor, MySqlAlterTableAlterCompositePrimaryKeyConvertor, SqliteAlterTableCreateCompositePrimaryKeyConvertor, SqliteAlterTableDeleteCompositePrimaryKeyConvertor, SqliteAlterTableAlterCompositePrimaryKeyConvertor, PgAlterTableAlterColumnSetPrimaryKeyConvertor, PgAlterTableAlterColumnDropPrimaryKeyConvertor, PgAlterTableAlterColumnSetNotNullConvertor, SqliteAlterTableAlterColumnSetNotNullConvertor, SqliteAlterTableAlterColumnSetAutoincrementConvertor, SqliteAlterTableAlterColumnDropAutoincrementConvertor, PgAlterTableAlterColumnDropNotNullConvertor, SqliteAlterTableAlterColumnDropNotNullConvertor, PgCreateForeignKeyConvertor, SqliteCreateForeignKeyConvertor, LibSQLCreateForeignKeyConvertor, MySqlCreateForeignKeyConvertor, PgAlterForeignKeyConvertor, SqliteAlterForeignKeyConvertor, PgDeleteForeignKeyConvertor, SqliteDeleteForeignKeyConvertor, LibSQLDeleteForeignKeyConvertor, MySqlDeleteForeignKeyConvertor, CreatePgIndexConvertor, CreateMySqlIndexConvertor, CreateSqliteIndexConvertor, PgDropIndexConvertor, PgCreateSchemaConvertor, PgRenameSchemaConvertor, PgDropSchemaConvertor, PgAlterTableSetSchemaConvertor, PgAlterTableSetNewSchemaConvertor, PgAlterTableRemoveFromSchemaConvertor, SqliteDropIndexConvertor, MySqlDropIndexConvertor, SQLiteRecreateTableConvertor, LibSQLRecreateTableConvertor, convertors;
|
22824
22880
|
var init_sqlgenerator = __esm({
|
22825
22881
|
"src/sqlgenerator.ts"() {
|
22826
22882
|
"use strict";
|
@@ -23339,7 +23395,7 @@ var init_sqlgenerator = __esm({
|
|
23339
23395
|
}
|
23340
23396
|
convert(statement) {
|
23341
23397
|
const { tableName, oldColumnName, newColumnName } = statement;
|
23342
|
-
return `ALTER TABLE \`${tableName}\` RENAME COLUMN
|
23398
|
+
return `ALTER TABLE \`${tableName}\` RENAME COLUMN "${oldColumnName}" TO "${newColumnName}";`;
|
23343
23399
|
}
|
23344
23400
|
};
|
23345
23401
|
PgAlterTableDropColumnConvertor = class extends Convertor {
|
@@ -23441,8 +23497,8 @@ var init_sqlgenerator = __esm({
|
|
23441
23497
|
}
|
23442
23498
|
};
|
23443
23499
|
SQLiteAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
|
23444
|
-
can(statement, dialect7) {
|
23445
|
-
return statement.type === "alter_table_alter_column_set_type" && dialect7 === "sqlite";
|
23500
|
+
can(statement, dialect7, driver2) {
|
23501
|
+
return statement.type === "alter_table_alter_column_set_type" && dialect7 === "sqlite" && !driver2;
|
23446
23502
|
}
|
23447
23503
|
convert(statement) {
|
23448
23504
|
return `/*
|
@@ -23753,6 +23809,46 @@ var init_sqlgenerator = __esm({
|
|
23753
23809
|
return `ALTER TABLE \`${statement.tableName}\` DROP PRIMARY KEY`;
|
23754
23810
|
}
|
23755
23811
|
};
|
23812
|
+
LibSQLModifyColumn = class extends Convertor {
|
23813
|
+
can(statement, dialect7, driver2) {
|
23814
|
+
return (statement.type === "alter_table_alter_column_set_type" || statement.type === "alter_table_alter_column_drop_notnull" || statement.type === "alter_table_alter_column_set_notnull" || statement.type === "alter_table_alter_column_set_default" || statement.type === "alter_table_alter_column_drop_default") && dialect7 === "sqlite" && driver2 === "turso";
|
23815
|
+
}
|
23816
|
+
convert(statement, json2) {
|
23817
|
+
const { tableName, columnName } = statement;
|
23818
|
+
let columnType = ``;
|
23819
|
+
let columnDefault = "";
|
23820
|
+
let columnNotNull = "";
|
23821
|
+
switch (statement.type) {
|
23822
|
+
case "alter_table_alter_column_set_type":
|
23823
|
+
columnType = ` ${statement.newDataType}`;
|
23824
|
+
columnDefault = statement.columnDefault ? ` DEFAULT ${statement.columnDefault}` : "";
|
23825
|
+
columnNotNull = statement.columnNotNull ? ` NOT NULL` : "";
|
23826
|
+
break;
|
23827
|
+
case "alter_table_alter_column_drop_notnull":
|
23828
|
+
columnType = ` ${statement.newDataType}`;
|
23829
|
+
columnDefault = statement.columnDefault ? ` DEFAULT ${statement.columnDefault}` : "";
|
23830
|
+
columnNotNull = "";
|
23831
|
+
break;
|
23832
|
+
case "alter_table_alter_column_set_notnull":
|
23833
|
+
columnType = ` ${statement.newDataType}`;
|
23834
|
+
columnDefault = statement.columnDefault ? ` DEFAULT ${statement.columnDefault}` : "";
|
23835
|
+
columnNotNull = ` NOT NULL`;
|
23836
|
+
break;
|
23837
|
+
case "alter_table_alter_column_set_default":
|
23838
|
+
columnType = ` ${statement.newDataType}`;
|
23839
|
+
columnDefault = ` DEFAULT ${statement.newDefaultValue}`;
|
23840
|
+
columnNotNull = statement.columnNotNull ? ` NOT NULL` : "";
|
23841
|
+
break;
|
23842
|
+
case "alter_table_alter_column_drop_default":
|
23843
|
+
columnType = ` ${statement.newDataType}`;
|
23844
|
+
columnDefault = "";
|
23845
|
+
columnNotNull = statement.columnNotNull ? ` NOT NULL` : "";
|
23846
|
+
break;
|
23847
|
+
}
|
23848
|
+
columnDefault = columnDefault instanceof Date ? columnDefault.toISOString() : columnDefault;
|
23849
|
+
return `ALTER TABLE \`${tableName}\` ALTER COLUMN "${columnName}" TO "${columnName}"${columnType}${columnNotNull}${columnDefault};`;
|
23850
|
+
}
|
23851
|
+
};
|
23756
23852
|
MySqlModifyColumn = class extends Convertor {
|
23757
23853
|
can(statement, dialect7) {
|
23758
23854
|
return (statement.type === "alter_table_alter_column_set_type" || statement.type === "alter_table_alter_column_set_notnull" || statement.type === "alter_table_alter_column_drop_notnull" || statement.type === "alter_table_alter_column_drop_on_update" || statement.type === "alter_table_alter_column_set_on_update" || statement.type === "alter_table_alter_column_set_autoincrement" || statement.type === "alter_table_alter_column_drop_autoincrement" || statement.type === "alter_table_alter_column_set_default" || statement.type === "alter_table_alter_column_drop_default" || statement.type === "alter_table_alter_column_set_generated" || statement.type === "alter_table_alter_column_drop_generated") && dialect7 === "mysql";
|
@@ -24094,8 +24190,8 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24094
24190
|
}
|
24095
24191
|
};
|
24096
24192
|
SqliteAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
|
24097
|
-
can(statement, dialect7) {
|
24098
|
-
return statement.type === "alter_table_alter_column_set_notnull" && dialect7 === "sqlite";
|
24193
|
+
can(statement, dialect7, driver2) {
|
24194
|
+
return statement.type === "alter_table_alter_column_set_notnull" && dialect7 === "sqlite" && !driver2;
|
24099
24195
|
}
|
24100
24196
|
convert(statement) {
|
24101
24197
|
return `/*
|
@@ -24109,8 +24205,8 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24109
24205
|
}
|
24110
24206
|
};
|
24111
24207
|
SqliteAlterTableAlterColumnSetAutoincrementConvertor = class extends Convertor {
|
24112
|
-
can(statement, dialect7) {
|
24113
|
-
return statement.type === "alter_table_alter_column_set_autoincrement" && dialect7 === "sqlite";
|
24208
|
+
can(statement, dialect7, driver2) {
|
24209
|
+
return statement.type === "alter_table_alter_column_set_autoincrement" && dialect7 === "sqlite" && !driver2;
|
24114
24210
|
}
|
24115
24211
|
convert(statement) {
|
24116
24212
|
return `/*
|
@@ -24124,8 +24220,8 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24124
24220
|
}
|
24125
24221
|
};
|
24126
24222
|
SqliteAlterTableAlterColumnDropAutoincrementConvertor = class extends Convertor {
|
24127
|
-
can(statement, dialect7) {
|
24128
|
-
return statement.type === "alter_table_alter_column_drop_autoincrement" && dialect7 === "sqlite";
|
24223
|
+
can(statement, dialect7, driver2) {
|
24224
|
+
return statement.type === "alter_table_alter_column_drop_autoincrement" && dialect7 === "sqlite" && !driver2;
|
24129
24225
|
}
|
24130
24226
|
convert(statement) {
|
24131
24227
|
return `/*
|
@@ -24149,8 +24245,8 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24149
24245
|
}
|
24150
24246
|
};
|
24151
24247
|
SqliteAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
|
24152
|
-
can(statement, dialect7) {
|
24153
|
-
return statement.type === "alter_table_alter_column_drop_notnull" && dialect7 === "sqlite";
|
24248
|
+
can(statement, dialect7, driver2) {
|
24249
|
+
return statement.type === "alter_table_alter_column_drop_notnull" && dialect7 === "sqlite" && !driver2;
|
24154
24250
|
}
|
24155
24251
|
convert(statement) {
|
24156
24252
|
return `/*
|
@@ -24194,8 +24290,8 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24194
24290
|
}
|
24195
24291
|
};
|
24196
24292
|
SqliteCreateForeignKeyConvertor = class extends Convertor {
|
24197
|
-
can(statement, dialect7) {
|
24198
|
-
return statement.type === "create_reference" && dialect7 === "sqlite";
|
24293
|
+
can(statement, dialect7, driver2) {
|
24294
|
+
return statement.type === "create_reference" && dialect7 === "sqlite" && !driver2;
|
24199
24295
|
}
|
24200
24296
|
convert(statement) {
|
24201
24297
|
return `/*
|
@@ -24207,6 +24303,32 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24207
24303
|
*/`;
|
24208
24304
|
}
|
24209
24305
|
};
|
24306
|
+
LibSQLCreateForeignKeyConvertor = class extends Convertor {
|
24307
|
+
can(statement, dialect7, driver2) {
|
24308
|
+
return statement.type === "create_reference" && dialect7 === "sqlite" && driver2 === "turso";
|
24309
|
+
}
|
24310
|
+
convert(statement, json2, action) {
|
24311
|
+
const { columnsFrom, columnsTo, tableFrom, onDelete, onUpdate, tableTo } = action === "push" ? SQLiteSquasher.unsquashPushFK(statement.data) : SQLiteSquasher.unsquashFK(statement.data);
|
24312
|
+
const { columnDefault, columnNotNull, columnType, isMulticolumn } = statement;
|
24313
|
+
if (isMulticolumn) {
|
24314
|
+
return `/*
|
24315
|
+
LibSQL does not support "Creating foreign key on multiple columns" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
24316
|
+
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
24317
|
+
https://www.sqlite.org/lang_altertable.html
|
24318
|
+
|
24319
|
+
Due to that we don't generate migration automatically and it has to be done manually
|
24320
|
+
*/`;
|
24321
|
+
}
|
24322
|
+
const onDeleteStatement = onDelete ? ` ON DELETE ${onDelete}` : "";
|
24323
|
+
const onUpdateStatement = onUpdate ? ` ON UPDATE ${onUpdate}` : "";
|
24324
|
+
const columnsDefaultValue = columnDefault ? ` DEFAULT ${columnDefault}` : "";
|
24325
|
+
const columnNotNullValue = columnNotNull ? ` NOT NULL` : "";
|
24326
|
+
const columnTypeValue = columnType ? ` ${columnType}` : "";
|
24327
|
+
const columnFrom = columnsFrom[0];
|
24328
|
+
const columnTo = columnsTo[0];
|
24329
|
+
return `ALTER TABLE \`${tableFrom}\` ALTER COLUMN "${columnFrom}" TO "${columnFrom}"${columnTypeValue}${columnNotNullValue}${columnsDefaultValue} REFERENCES ${tableTo}(${columnTo})${onDeleteStatement}${onUpdateStatement};`;
|
24330
|
+
}
|
24331
|
+
};
|
24210
24332
|
MySqlCreateForeignKeyConvertor = class extends Convertor {
|
24211
24333
|
can(statement, dialect7) {
|
24212
24334
|
return statement.type === "create_reference" && dialect7 === "mysql";
|
@@ -24280,8 +24402,8 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24280
24402
|
}
|
24281
24403
|
};
|
24282
24404
|
SqliteDeleteForeignKeyConvertor = class extends Convertor {
|
24283
|
-
can(statement, dialect7) {
|
24284
|
-
return statement.type === "delete_reference" && dialect7 === "sqlite";
|
24405
|
+
can(statement, dialect7, driver2) {
|
24406
|
+
return statement.type === "delete_reference" && dialect7 === "sqlite" && !driver2;
|
24285
24407
|
}
|
24286
24408
|
convert(statement) {
|
24287
24409
|
return `/*
|
@@ -24293,6 +24415,29 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24293
24415
|
*/`;
|
24294
24416
|
}
|
24295
24417
|
};
|
24418
|
+
LibSQLDeleteForeignKeyConvertor = class extends Convertor {
|
24419
|
+
can(statement, dialect7, driver2) {
|
24420
|
+
return statement.type === "delete_reference" && dialect7 === "sqlite" && driver2 === "turso";
|
24421
|
+
}
|
24422
|
+
convert(statement, json2, action) {
|
24423
|
+
const { columnsFrom, tableFrom } = action === "push" ? SQLiteSquasher.unsquashPushFK(statement.data) : SQLiteSquasher.unsquashFK(statement.data);
|
24424
|
+
const { columnDefault, columnNotNull, columnType, isMulticolumn } = statement;
|
24425
|
+
if (isMulticolumn) {
|
24426
|
+
return `/*
|
24427
|
+
LibSQL does not support "Creating foreign key on multiple columns" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
24428
|
+
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
24429
|
+
https://www.sqlite.org/lang_altertable.html
|
24430
|
+
|
24431
|
+
Due to that we don't generate migration automatically and it has to be done manually
|
24432
|
+
*/`;
|
24433
|
+
}
|
24434
|
+
const columnsDefaultValue = columnDefault ? ` DEFAULT ${columnDefault}` : "";
|
24435
|
+
const columnNotNullValue = columnNotNull ? ` NOT NULL` : "";
|
24436
|
+
const columnTypeValue = columnType ? ` ${columnType}` : "";
|
24437
|
+
const columnFrom = columnsFrom[0];
|
24438
|
+
return `ALTER TABLE \`${tableFrom}\` ALTER COLUMN "${columnFrom}" TO "${columnFrom}"${columnTypeValue}${columnNotNullValue}${columnsDefaultValue};`;
|
24439
|
+
}
|
24440
|
+
};
|
24296
24441
|
MySqlDeleteForeignKeyConvertor = class extends Convertor {
|
24297
24442
|
can(statement, dialect7) {
|
24298
24443
|
return statement.type === "delete_reference" && dialect7 === "mysql";
|
@@ -24458,10 +24603,90 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24458
24603
|
return `DROP INDEX \`${name}\` ON \`${statement.tableName}\`;`;
|
24459
24604
|
}
|
24460
24605
|
};
|
24606
|
+
SQLiteRecreateTableConvertor = class extends Convertor {
|
24607
|
+
can(statement, dialect7, driver2) {
|
24608
|
+
return statement.type === "recreate_table" && dialect7 === "sqlite" && !driver2;
|
24609
|
+
}
|
24610
|
+
convert(statement) {
|
24611
|
+
const { tableName, columns, compositePKs, referenceData } = statement;
|
24612
|
+
const columnNames = columns.map((it) => `"${it.name}"`).join(", ");
|
24613
|
+
const sqlStatements = [];
|
24614
|
+
sqlStatements.push(
|
24615
|
+
new SqliteRenameTableConvertor().convert({
|
24616
|
+
fromSchema: "",
|
24617
|
+
tableNameFrom: tableName,
|
24618
|
+
tableNameTo: `__old__generate_${tableName}`,
|
24619
|
+
toSchema: "",
|
24620
|
+
type: "rename_table"
|
24621
|
+
})
|
24622
|
+
);
|
24623
|
+
sqlStatements.push(
|
24624
|
+
new SQLiteCreateTableConvertor().convert({
|
24625
|
+
type: "sqlite_create_table",
|
24626
|
+
tableName,
|
24627
|
+
columns,
|
24628
|
+
referenceData,
|
24629
|
+
compositePKs
|
24630
|
+
})
|
24631
|
+
);
|
24632
|
+
sqlStatements.push(
|
24633
|
+
`INSERT INTO \`${tableName}\`(${columnNames}) SELECT ${columnNames} FROM \`__old__generate_${tableName}\`;`
|
24634
|
+
);
|
24635
|
+
sqlStatements.push(
|
24636
|
+
new SQLiteDropTableConvertor().convert({
|
24637
|
+
type: "drop_table",
|
24638
|
+
tableName: `__old__generate_${tableName}`,
|
24639
|
+
schema: ""
|
24640
|
+
})
|
24641
|
+
);
|
24642
|
+
return sqlStatements;
|
24643
|
+
}
|
24644
|
+
};
|
24645
|
+
LibSQLRecreateTableConvertor = class extends Convertor {
|
24646
|
+
can(statement, dialect7, driver2) {
|
24647
|
+
return statement.type === "recreate_table" && dialect7 === "sqlite" && driver2 === "turso";
|
24648
|
+
}
|
24649
|
+
convert(statement) {
|
24650
|
+
const { tableName, columns, compositePKs, referenceData } = statement;
|
24651
|
+
const columnNames = columns.map((it) => `"${it.name}"`).join(", ");
|
24652
|
+
const sqlStatements = [];
|
24653
|
+
sqlStatements.push(
|
24654
|
+
new SqliteRenameTableConvertor().convert({
|
24655
|
+
fromSchema: "",
|
24656
|
+
tableNameFrom: tableName,
|
24657
|
+
tableNameTo: `__old__generate_${tableName}`,
|
24658
|
+
toSchema: "",
|
24659
|
+
type: "rename_table"
|
24660
|
+
})
|
24661
|
+
);
|
24662
|
+
sqlStatements.push(
|
24663
|
+
new SQLiteCreateTableConvertor().convert({
|
24664
|
+
type: "sqlite_create_table",
|
24665
|
+
tableName,
|
24666
|
+
columns,
|
24667
|
+
referenceData,
|
24668
|
+
compositePKs
|
24669
|
+
})
|
24670
|
+
);
|
24671
|
+
sqlStatements.push(
|
24672
|
+
`INSERT INTO \`${tableName}\`(${columnNames}) SELECT ${columnNames} FROM \`__old__generate_${tableName}\`;`
|
24673
|
+
);
|
24674
|
+
sqlStatements.push(
|
24675
|
+
new SQLiteDropTableConvertor().convert({
|
24676
|
+
type: "drop_table",
|
24677
|
+
tableName: `__old__generate_${tableName}`,
|
24678
|
+
schema: ""
|
24679
|
+
})
|
24680
|
+
);
|
24681
|
+
return sqlStatements;
|
24682
|
+
}
|
24683
|
+
};
|
24461
24684
|
convertors = [];
|
24462
24685
|
convertors.push(new PgCreateTableConvertor());
|
24463
24686
|
convertors.push(new MySqlCreateTableConvertor());
|
24464
24687
|
convertors.push(new SQLiteCreateTableConvertor());
|
24688
|
+
convertors.push(new SQLiteRecreateTableConvertor());
|
24689
|
+
convertors.push(new LibSQLRecreateTableConvertor());
|
24465
24690
|
convertors.push(new CreateTypeEnumConvertor());
|
24466
24691
|
convertors.push(new CreatePgSequenceConvertor());
|
24467
24692
|
convertors.push(new DropPgSequenceConvertor());
|
@@ -24509,6 +24734,7 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24509
24734
|
convertors.push(new SqliteAlterTableAlterColumnAlterGeneratedConvertor());
|
24510
24735
|
convertors.push(new SqliteAlterTableAlterColumnSetExpressionConvertor());
|
24511
24736
|
convertors.push(new MySqlModifyColumn());
|
24737
|
+
convertors.push(new LibSQLModifyColumn());
|
24512
24738
|
convertors.push(new PgCreateForeignKeyConvertor());
|
24513
24739
|
convertors.push(new MySqlCreateForeignKeyConvertor());
|
24514
24740
|
convertors.push(new PgAlterForeignKeyConvertor());
|
@@ -24523,7 +24749,9 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24523
24749
|
convertors.push(new SQLiteAlterTableAlterColumnSetTypeConvertor());
|
24524
24750
|
convertors.push(new SqliteAlterForeignKeyConvertor());
|
24525
24751
|
convertors.push(new SqliteDeleteForeignKeyConvertor());
|
24752
|
+
convertors.push(new LibSQLDeleteForeignKeyConvertor());
|
24526
24753
|
convertors.push(new SqliteCreateForeignKeyConvertor());
|
24754
|
+
convertors.push(new LibSQLCreateForeignKeyConvertor());
|
24527
24755
|
convertors.push(new SQLiteAlterTableAddUniqueConstraintConvertor());
|
24528
24756
|
convertors.push(new SQLiteAlterTableDropUniqueConstraintConvertor());
|
24529
24757
|
convertors.push(new PgAlterTableAlterColumnDropGenerated());
|
@@ -24546,19 +24774,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
24546
24774
|
convertors.push(new MySqlAlterTableCreateCompositePrimaryKeyConvertor());
|
24547
24775
|
convertors.push(new MySqlAlterTableAddPk());
|
24548
24776
|
convertors.push(new MySqlAlterTableAlterCompositePrimaryKeyConvertor());
|
24549
|
-
fromJson = (statements, dialect7) => {
|
24550
|
-
const result = statements.flatMap((statement) => {
|
24551
|
-
const filtered = convertors.filter((it) => {
|
24552
|
-
return it.can(statement, dialect7);
|
24553
|
-
});
|
24554
|
-
const convertor = filtered.length === 1 ? filtered[0] : void 0;
|
24555
|
-
if (!convertor) {
|
24556
|
-
return "";
|
24557
|
-
}
|
24558
|
-
return convertor.convert(statement);
|
24559
|
-
}).filter((it) => it !== "");
|
24560
|
-
return result;
|
24561
|
-
};
|
24562
24777
|
https:
|
24563
24778
|
`
|
24564
24779
|
create table users (
|
@@ -24586,12 +24801,237 @@ drop type __venum;
|
|
24586
24801
|
}
|
24587
24802
|
});
|
24588
24803
|
|
24804
|
+
// src/cli/commands/sqlitePushUtils.ts
|
24805
|
+
var _moveDataStatements, getOldTableName, getNewTableName, logSuggestionsAndReturn;
|
24806
|
+
var init_sqlitePushUtils = __esm({
|
24807
|
+
"src/cli/commands/sqlitePushUtils.ts"() {
|
24808
|
+
"use strict";
|
24809
|
+
init_source();
|
24810
|
+
init_sqliteSchema();
|
24811
|
+
init_sqlgenerator();
|
24812
|
+
init_utils();
|
24813
|
+
_moveDataStatements = (tableName, json, dataLoss = false) => {
|
24814
|
+
const statements = [];
|
24815
|
+
statements.push(
|
24816
|
+
new SqliteRenameTableConvertor().convert({
|
24817
|
+
type: "rename_table",
|
24818
|
+
tableNameFrom: tableName,
|
24819
|
+
tableNameTo: `__old_push_${tableName}`,
|
24820
|
+
fromSchema: "",
|
24821
|
+
toSchema: ""
|
24822
|
+
})
|
24823
|
+
);
|
24824
|
+
const tableColumns = Object.values(json.tables[tableName].columns);
|
24825
|
+
const referenceData = Object.values(json.tables[tableName].foreignKeys);
|
24826
|
+
const compositePKs = Object.values(
|
24827
|
+
json.tables[tableName].compositePrimaryKeys
|
24828
|
+
).map((it) => SQLiteSquasher.unsquashPK(it));
|
24829
|
+
const fks = referenceData.map((it) => SQLiteSquasher.unsquashPushFK(it));
|
24830
|
+
statements.push(
|
24831
|
+
new SQLiteCreateTableConvertor().convert({
|
24832
|
+
type: "sqlite_create_table",
|
24833
|
+
tableName,
|
24834
|
+
columns: tableColumns,
|
24835
|
+
referenceData: fks,
|
24836
|
+
compositePKs
|
24837
|
+
})
|
24838
|
+
);
|
24839
|
+
if (!dataLoss) {
|
24840
|
+
const columns = Object.keys(json.tables[tableName].columns).map(
|
24841
|
+
(c) => `"${c}"`
|
24842
|
+
);
|
24843
|
+
statements.push(
|
24844
|
+
`INSERT INTO \`${tableName}\`(${columns.join(
|
24845
|
+
", "
|
24846
|
+
)}) SELECT (${columns.join(", ")}) FROM \`__old_push_${tableName}\`;`
|
24847
|
+
);
|
24848
|
+
}
|
24849
|
+
statements.push(
|
24850
|
+
new SQLiteDropTableConvertor().convert({
|
24851
|
+
type: "drop_table",
|
24852
|
+
tableName: `__old_push_${tableName}`,
|
24853
|
+
schema: ""
|
24854
|
+
})
|
24855
|
+
);
|
24856
|
+
for (const idx of Object.values(json.tables[tableName].indexes)) {
|
24857
|
+
statements.push(
|
24858
|
+
new CreateSqliteIndexConvertor().convert({
|
24859
|
+
type: "create_index",
|
24860
|
+
tableName,
|
24861
|
+
schema: "",
|
24862
|
+
data: idx
|
24863
|
+
})
|
24864
|
+
);
|
24865
|
+
}
|
24866
|
+
return statements;
|
24867
|
+
};
|
24868
|
+
getOldTableName = (tableName, meta) => {
|
24869
|
+
for (const key of Object.keys(meta.tables)) {
|
24870
|
+
const value = meta.tables[key];
|
24871
|
+
if (`"${tableName}"` === value) {
|
24872
|
+
return key.substring(1, key.length - 1);
|
24873
|
+
}
|
24874
|
+
}
|
24875
|
+
return tableName;
|
24876
|
+
};
|
24877
|
+
getNewTableName = (tableName, meta) => {
|
24878
|
+
if (typeof meta.tables[`"${tableName}"`] !== "undefined") {
|
24879
|
+
return meta.tables[`"${tableName}"`].substring(
|
24880
|
+
1,
|
24881
|
+
meta.tables[`"${tableName}"`].length - 1
|
24882
|
+
);
|
24883
|
+
}
|
24884
|
+
return tableName;
|
24885
|
+
};
|
24886
|
+
logSuggestionsAndReturn = async (connection, statements, json1, json2, meta) => {
|
24887
|
+
let shouldAskForApprove = false;
|
24888
|
+
const statementsToExecute = [];
|
24889
|
+
const infoToPrint = [];
|
24890
|
+
const tablesToRemove = [];
|
24891
|
+
const columnsToRemove = [];
|
24892
|
+
const schemasToRemove = [];
|
24893
|
+
const tablesToTruncate = [];
|
24894
|
+
for (const statement of statements) {
|
24895
|
+
if (statement.type === "drop_table") {
|
24896
|
+
const res = await connection.query(
|
24897
|
+
`select count(*) as count from \`${statement.tableName}\``
|
24898
|
+
);
|
24899
|
+
const count = Number(res[0].count);
|
24900
|
+
if (count > 0) {
|
24901
|
+
infoToPrint.push(
|
24902
|
+
`\xB7 You're about to delete ${source_default.underline(
|
24903
|
+
statement.tableName
|
24904
|
+
)} table with ${count} items`
|
24905
|
+
);
|
24906
|
+
tablesToRemove.push(statement.tableName);
|
24907
|
+
shouldAskForApprove = true;
|
24908
|
+
}
|
24909
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push");
|
24910
|
+
statementsToExecute.push(
|
24911
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
24912
|
+
);
|
24913
|
+
} else if (statement.type === "alter_table_drop_column") {
|
24914
|
+
const tableName = statement.tableName;
|
24915
|
+
const columnName = statement.columnName;
|
24916
|
+
const res = await connection.query(
|
24917
|
+
`select count(\`${tableName}\`.\`${columnName}\`) as count from \`${tableName}\``
|
24918
|
+
);
|
24919
|
+
const count = Number(res[0].count);
|
24920
|
+
if (count > 0) {
|
24921
|
+
infoToPrint.push(
|
24922
|
+
`\xB7 You're about to delete ${source_default.underline(
|
24923
|
+
columnName
|
24924
|
+
)} column in ${tableName} table with ${count} items`
|
24925
|
+
);
|
24926
|
+
columnsToRemove.push(`${tableName}_${statement.columnName}`);
|
24927
|
+
shouldAskForApprove = true;
|
24928
|
+
}
|
24929
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push");
|
24930
|
+
statementsToExecute.push(
|
24931
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
24932
|
+
);
|
24933
|
+
} else if (statement.type === "sqlite_alter_table_add_column" && (statement.column.notNull && !statement.column.default)) {
|
24934
|
+
const tableName = statement.tableName;
|
24935
|
+
const columnName = statement.column.name;
|
24936
|
+
const res = await connection.query(
|
24937
|
+
`select count(*) as count from \`${tableName}\``
|
24938
|
+
);
|
24939
|
+
const count = Number(res[0].count);
|
24940
|
+
if (count > 0) {
|
24941
|
+
infoToPrint.push(
|
24942
|
+
`\xB7 You're about to add not-null ${source_default.underline(
|
24943
|
+
columnName
|
24944
|
+
)} column without default value, which contains ${count} items`
|
24945
|
+
);
|
24946
|
+
tablesToTruncate.push(tableName);
|
24947
|
+
statementsToExecute.push(`delete from ${tableName};`);
|
24948
|
+
shouldAskForApprove = true;
|
24949
|
+
}
|
24950
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push");
|
24951
|
+
statementsToExecute.push(
|
24952
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
24953
|
+
);
|
24954
|
+
} else if (statement.type === "recreate_table") {
|
24955
|
+
const tableName = statement.tableName;
|
24956
|
+
const oldTableName = getOldTableName(tableName, meta);
|
24957
|
+
const prevColumnNames = Object.keys(json1.tables[oldTableName].columns);
|
24958
|
+
const currentColumnNames = Object.keys(json2.tables[tableName].columns);
|
24959
|
+
const { removedColumns, addedColumns } = findAddedAndRemoved(
|
24960
|
+
prevColumnNames,
|
24961
|
+
currentColumnNames
|
24962
|
+
);
|
24963
|
+
if (removedColumns.length) {
|
24964
|
+
for (const removedColumn of removedColumns) {
|
24965
|
+
const res = await connection.query(
|
24966
|
+
`select count(\`${tableName}\`.\`${removedColumn}\`) as count from \`${tableName}\``
|
24967
|
+
);
|
24968
|
+
const count = Number(res[0].count);
|
24969
|
+
if (count > 0) {
|
24970
|
+
infoToPrint.push(
|
24971
|
+
`\xB7 You're about to delete ${source_default.underline(
|
24972
|
+
removedColumn
|
24973
|
+
)} column in ${tableName} table with ${count} items`
|
24974
|
+
);
|
24975
|
+
columnsToRemove.push(removedColumn);
|
24976
|
+
shouldAskForApprove = true;
|
24977
|
+
}
|
24978
|
+
}
|
24979
|
+
}
|
24980
|
+
if (addedColumns.length) {
|
24981
|
+
for (const addedColumn of addedColumns) {
|
24982
|
+
const [res] = await connection.query(
|
24983
|
+
`select count(*) as count from \`${tableName}\``
|
24984
|
+
);
|
24985
|
+
const columnConf = json2.tables[tableName].columns[addedColumn];
|
24986
|
+
const count = Number(res.count);
|
24987
|
+
if (count > 0 && columnConf.notNull && !columnConf.default) {
|
24988
|
+
infoToPrint.push(
|
24989
|
+
`\xB7 You're about to add not-null ${source_default.underline(
|
24990
|
+
addedColumn
|
24991
|
+
)} column without default value to table, which contains ${count} items`
|
24992
|
+
);
|
24993
|
+
shouldAskForApprove = true;
|
24994
|
+
tablesToTruncate.push(tableName);
|
24995
|
+
}
|
24996
|
+
}
|
24997
|
+
}
|
24998
|
+
statementsToExecute.push(..._moveDataStatements(tableName, json2));
|
24999
|
+
const tablesReferencingCurrent = [];
|
25000
|
+
for (const table4 of Object.values(json2.tables)) {
|
25001
|
+
const tablesRefs = Object.values(json2.tables[table4.name].foreignKeys).filter((t2) => SQLiteSquasher.unsquashPushFK(t2).tableTo === tableName).map((it) => SQLiteSquasher.unsquashPushFK(it).tableFrom);
|
25002
|
+
tablesReferencingCurrent.push(...tablesRefs);
|
25003
|
+
}
|
25004
|
+
const uniqueTableRefs = [...new Set(tablesReferencingCurrent)];
|
25005
|
+
for (const table4 of uniqueTableRefs) {
|
25006
|
+
statementsToExecute.push(..._moveDataStatements(table4, json2));
|
25007
|
+
}
|
25008
|
+
} else {
|
25009
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push");
|
25010
|
+
statementsToExecute.push(
|
25011
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
25012
|
+
);
|
25013
|
+
}
|
25014
|
+
}
|
25015
|
+
return {
|
25016
|
+
statementsToExecute,
|
25017
|
+
shouldAskForApprove,
|
25018
|
+
infoToPrint,
|
25019
|
+
columnsToRemove: [...new Set(columnsToRemove)],
|
25020
|
+
schemasToRemove: [...new Set(schemasToRemove)],
|
25021
|
+
tablesToTruncate: [...new Set(tablesToTruncate)],
|
25022
|
+
tablesToRemove: [...new Set(tablesToRemove)]
|
25023
|
+
};
|
25024
|
+
};
|
25025
|
+
}
|
25026
|
+
});
|
25027
|
+
|
24589
25028
|
// src/jsonStatements.ts
|
24590
|
-
var preparePgCreateTableJson, prepareMySqlCreateTableJson, prepareSQLiteCreateTable, prepareDropTableJson, prepareRenameTableJson, prepareCreateEnumJson, prepareAddValuesToEnumJson, prepareDropEnumJson, prepareMoveEnumJson, prepareRenameEnumJson, prepareCreateSequenceJson, prepareAlterSequenceJson, prepareDropSequenceJson, prepareMoveSequenceJson, prepareRenameSequenceJson, prepareCreateSchemasJson, prepareRenameSchemasJson, prepareDeleteSchemasJson, prepareRenameColumns, _prepareDropColumns, _prepareAddColumns, _prepareSqliteAddColumns, prepareAlterColumnsMysql, preparePgAlterColumns, prepareSqliteAlterColumns, preparePgCreateIndexesJson, prepareCreateIndexesJson, prepareCreateReferencesJson, prepareDropReferencesJson, prepareAlterReferencesJson, prepareDropIndexesJson, prepareAddCompositePrimaryKeySqlite, prepareDeleteCompositePrimaryKeySqlite, prepareAlterCompositePrimaryKeySqlite, prepareAddCompositePrimaryKeyPg, prepareDeleteCompositePrimaryKeyPg, prepareAlterCompositePrimaryKeyPg, prepareAddUniqueConstraintPg, prepareDeleteUniqueConstraintPg, prepareAddCompositePrimaryKeyMySql, prepareDeleteCompositePrimaryKeyMySql, prepareAlterCompositePrimaryKeyMySql;
|
25029
|
+
var preparePgCreateTableJson, prepareMySqlCreateTableJson, prepareSQLiteCreateTable, prepareDropTableJson, prepareRenameTableJson, prepareCreateEnumJson, prepareAddValuesToEnumJson, prepareDropEnumJson, prepareMoveEnumJson, prepareRenameEnumJson, prepareCreateSequenceJson, prepareAlterSequenceJson, prepareDropSequenceJson, prepareMoveSequenceJson, prepareRenameSequenceJson, prepareCreateSchemasJson, prepareRenameSchemasJson, prepareDeleteSchemasJson, prepareRenameColumns, _prepareDropColumns, _prepareAddColumns, _prepareSqliteAddColumns, prepareAlterColumnsMysql, preparePgAlterColumns, prepareSqliteAlterColumns, preparePgCreateIndexesJson, prepareCreateIndexesJson, prepareCreateReferencesJson, prepareLibSQLCreateReferencesJson, prepareDropReferencesJson, prepareLibSQLDropReferencesJson, prepareAlterReferencesJson, prepareDropIndexesJson, prepareAddCompositePrimaryKeySqlite, prepareDeleteCompositePrimaryKeySqlite, prepareAlterCompositePrimaryKeySqlite, prepareAddCompositePrimaryKeyPg, prepareDeleteCompositePrimaryKeyPg, prepareAlterCompositePrimaryKeyPg, prepareAddUniqueConstraintPg, prepareDeleteUniqueConstraintPg, prepareAddCompositePrimaryKeyMySql, prepareDeleteCompositePrimaryKeyMySql, prepareAlterCompositePrimaryKeyMySql;
|
24591
25030
|
var init_jsonStatements = __esm({
|
24592
25031
|
"src/jsonStatements.ts"() {
|
24593
25032
|
"use strict";
|
24594
25033
|
init_source();
|
25034
|
+
init_sqlitePushUtils();
|
24595
25035
|
init_views();
|
24596
25036
|
init_mysqlSchema();
|
24597
25037
|
init_pgSchema();
|
@@ -25365,7 +25805,7 @@ var init_jsonStatements = __esm({
|
|
25365
25805
|
return [...dropPkStatements, ...setPkStatements, ...statements];
|
25366
25806
|
};
|
25367
25807
|
prepareSqliteAlterColumns = (tableName, schema5, columns, json2) => {
|
25368
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
|
25808
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
|
25369
25809
|
let statements = [];
|
25370
25810
|
let dropPkStatements = [];
|
25371
25811
|
let setPkStatements = [];
|
@@ -25379,6 +25819,49 @@ var init_jsonStatements = __esm({
|
|
25379
25819
|
const columnPk = json2.tables[tableName].columns[columnName].primaryKey;
|
25380
25820
|
const columnGenerated = json2.tables[tableName].columns[columnName].generated;
|
25381
25821
|
const compositePk = json2.tables[tableName].compositePrimaryKeys[`${tableName}_${columnName}`];
|
25822
|
+
if (((_a = column7.autoincrement) == null ? void 0 : _a.type) === "added") {
|
25823
|
+
statements.push({
|
25824
|
+
type: "alter_table_alter_column_set_autoincrement",
|
25825
|
+
tableName,
|
25826
|
+
columnName,
|
25827
|
+
schema: schema5,
|
25828
|
+
newDataType: columnType,
|
25829
|
+
columnDefault,
|
25830
|
+
columnOnUpdate,
|
25831
|
+
columnNotNull,
|
25832
|
+
columnAutoIncrement,
|
25833
|
+
columnPk
|
25834
|
+
});
|
25835
|
+
}
|
25836
|
+
if (((_b = column7.autoincrement) == null ? void 0 : _b.type) === "changed") {
|
25837
|
+
const type = column7.autoincrement.new ? "alter_table_alter_column_set_autoincrement" : "alter_table_alter_column_drop_autoincrement";
|
25838
|
+
statements.push({
|
25839
|
+
type,
|
25840
|
+
tableName,
|
25841
|
+
columnName,
|
25842
|
+
schema: schema5,
|
25843
|
+
newDataType: columnType,
|
25844
|
+
columnDefault,
|
25845
|
+
columnOnUpdate,
|
25846
|
+
columnNotNull,
|
25847
|
+
columnAutoIncrement,
|
25848
|
+
columnPk
|
25849
|
+
});
|
25850
|
+
}
|
25851
|
+
if (((_c = column7.autoincrement) == null ? void 0 : _c.type) === "deleted") {
|
25852
|
+
statements.push({
|
25853
|
+
type: "alter_table_alter_column_drop_autoincrement",
|
25854
|
+
tableName,
|
25855
|
+
columnName,
|
25856
|
+
schema: schema5,
|
25857
|
+
newDataType: columnType,
|
25858
|
+
columnDefault,
|
25859
|
+
columnOnUpdate,
|
25860
|
+
columnNotNull,
|
25861
|
+
columnAutoIncrement,
|
25862
|
+
columnPk
|
25863
|
+
});
|
25864
|
+
}
|
25382
25865
|
if (typeof column7.name !== "string") {
|
25383
25866
|
statements.push({
|
25384
25867
|
type: "alter_table_rename_column",
|
@@ -25388,7 +25871,7 @@ var init_jsonStatements = __esm({
|
|
25388
25871
|
schema: schema5
|
25389
25872
|
});
|
25390
25873
|
}
|
25391
|
-
if (((
|
25874
|
+
if (((_d = column7.type) == null ? void 0 : _d.type) === "changed") {
|
25392
25875
|
statements.push({
|
25393
25876
|
type: "alter_table_alter_column_set_type",
|
25394
25877
|
tableName,
|
@@ -25403,7 +25886,7 @@ var init_jsonStatements = __esm({
|
|
25403
25886
|
columnPk
|
25404
25887
|
});
|
25405
25888
|
}
|
25406
|
-
if (((
|
25889
|
+
if (((_e = column7.primaryKey) == null ? void 0 : _e.type) === "deleted" || ((_f = column7.primaryKey) == null ? void 0 : _f.type) === "changed" && !column7.primaryKey.new && typeof compositePk === "undefined") {
|
25407
25890
|
dropPkStatements.push({
|
25408
25891
|
////
|
25409
25892
|
type: "alter_table_alter_column_drop_pk",
|
@@ -25412,7 +25895,7 @@ var init_jsonStatements = __esm({
|
|
25412
25895
|
schema: schema5
|
25413
25896
|
});
|
25414
25897
|
}
|
25415
|
-
if (((
|
25898
|
+
if (((_g = column7.default) == null ? void 0 : _g.type) === "added") {
|
25416
25899
|
statements.push({
|
25417
25900
|
type: "alter_table_alter_column_set_default",
|
25418
25901
|
tableName,
|
@@ -25426,7 +25909,7 @@ var init_jsonStatements = __esm({
|
|
25426
25909
|
columnPk
|
25427
25910
|
});
|
25428
25911
|
}
|
25429
|
-
if (((
|
25912
|
+
if (((_h = column7.default) == null ? void 0 : _h.type) === "changed") {
|
25430
25913
|
statements.push({
|
25431
25914
|
type: "alter_table_alter_column_set_default",
|
25432
25915
|
tableName,
|
@@ -25441,7 +25924,7 @@ var init_jsonStatements = __esm({
|
|
25441
25924
|
columnPk
|
25442
25925
|
});
|
25443
25926
|
}
|
25444
|
-
if (((
|
25927
|
+
if (((_i = column7.default) == null ? void 0 : _i.type) === "deleted") {
|
25445
25928
|
statements.push({
|
25446
25929
|
type: "alter_table_alter_column_drop_default",
|
25447
25930
|
tableName,
|
@@ -25455,7 +25938,7 @@ var init_jsonStatements = __esm({
|
|
25455
25938
|
columnPk
|
25456
25939
|
});
|
25457
25940
|
}
|
25458
|
-
if (((
|
25941
|
+
if (((_j = column7.notNull) == null ? void 0 : _j.type) === "added") {
|
25459
25942
|
statements.push({
|
25460
25943
|
type: "alter_table_alter_column_set_notnull",
|
25461
25944
|
tableName,
|
@@ -25469,7 +25952,7 @@ var init_jsonStatements = __esm({
|
|
25469
25952
|
columnPk
|
25470
25953
|
});
|
25471
25954
|
}
|
25472
|
-
if (((
|
25955
|
+
if (((_k = column7.notNull) == null ? void 0 : _k.type) === "changed") {
|
25473
25956
|
const type = column7.notNull.new ? "alter_table_alter_column_set_notnull" : "alter_table_alter_column_drop_notnull";
|
25474
25957
|
statements.push({
|
25475
25958
|
type,
|
@@ -25484,7 +25967,7 @@ var init_jsonStatements = __esm({
|
|
25484
25967
|
columnPk
|
25485
25968
|
});
|
25486
25969
|
}
|
25487
|
-
if (((
|
25970
|
+
if (((_l = column7.notNull) == null ? void 0 : _l.type) === "deleted") {
|
25488
25971
|
statements.push({
|
25489
25972
|
type: "alter_table_alter_column_drop_notnull",
|
25490
25973
|
tableName,
|
@@ -25498,7 +25981,7 @@ var init_jsonStatements = __esm({
|
|
25498
25981
|
columnPk
|
25499
25982
|
});
|
25500
25983
|
}
|
25501
|
-
if (((
|
25984
|
+
if (((_m = column7.generated) == null ? void 0 : _m.type) === "added") {
|
25502
25985
|
if ((columnGenerated == null ? void 0 : columnGenerated.type) === "virtual") {
|
25503
25986
|
statements.push({
|
25504
25987
|
type: "alter_table_alter_column_set_generated",
|
@@ -25519,7 +26002,7 @@ var init_jsonStatements = __esm({
|
|
25519
26002
|
);
|
25520
26003
|
}
|
25521
26004
|
}
|
25522
|
-
if (((
|
26005
|
+
if (((_n = column7.generated) == null ? void 0 : _n.type) === "changed") {
|
25523
26006
|
if ((columnGenerated == null ? void 0 : columnGenerated.type) === "virtual") {
|
25524
26007
|
statements.push({
|
25525
26008
|
type: "alter_table_alter_column_alter_generated",
|
@@ -25540,7 +26023,7 @@ var init_jsonStatements = __esm({
|
|
25540
26023
|
);
|
25541
26024
|
}
|
25542
26025
|
}
|
25543
|
-
if (((
|
26026
|
+
if (((_o = column7.generated) == null ? void 0 : _o.type) === "deleted") {
|
25544
26027
|
statements.push({
|
25545
26028
|
type: "alter_table_alter_column_drop_generated",
|
25546
26029
|
tableName,
|
@@ -25555,7 +26038,7 @@ var init_jsonStatements = __esm({
|
|
25555
26038
|
columnGenerated
|
25556
26039
|
});
|
25557
26040
|
}
|
25558
|
-
if (((
|
26041
|
+
if (((_p = column7.primaryKey) == null ? void 0 : _p.type) === "added" || ((_q = column7.primaryKey) == null ? void 0 : _q.type) === "changed" && column7.primaryKey.new) {
|
25559
26042
|
const wasAutoincrement = statements.filter(
|
25560
26043
|
(it) => it.type === "alter_table_alter_column_set_autoincrement"
|
25561
26044
|
);
|
@@ -25568,7 +26051,7 @@ var init_jsonStatements = __esm({
|
|
25568
26051
|
});
|
25569
26052
|
}
|
25570
26053
|
}
|
25571
|
-
if (((
|
26054
|
+
if (((_r = column7.onUpdate) == null ? void 0 : _r.type) === "added") {
|
25572
26055
|
statements.push({
|
25573
26056
|
type: "alter_table_alter_column_set_on_update",
|
25574
26057
|
tableName,
|
@@ -25582,7 +26065,7 @@ var init_jsonStatements = __esm({
|
|
25582
26065
|
columnPk
|
25583
26066
|
});
|
25584
26067
|
}
|
25585
|
-
if (((
|
26068
|
+
if (((_s = column7.onUpdate) == null ? void 0 : _s.type) === "deleted") {
|
25586
26069
|
statements.push({
|
25587
26070
|
type: "alter_table_alter_column_drop_on_update",
|
25588
26071
|
tableName,
|
@@ -25642,6 +26125,37 @@ var init_jsonStatements = __esm({
|
|
25642
26125
|
};
|
25643
26126
|
});
|
25644
26127
|
};
|
26128
|
+
prepareLibSQLCreateReferencesJson = (tableName, schema5, foreignKeys, json2, action) => {
|
26129
|
+
return Object.values(foreignKeys).map((fkData) => {
|
26130
|
+
const { columnsFrom, tableFrom, columnsTo } = action === "push" ? SQLiteSquasher.unsquashPushFK(fkData) : SQLiteSquasher.unsquashFK(fkData);
|
26131
|
+
let isMulticolumn = false;
|
26132
|
+
if (columnsFrom.length > 1 || columnsTo.length > 1) {
|
26133
|
+
isMulticolumn = true;
|
26134
|
+
return {
|
26135
|
+
type: "create_reference",
|
26136
|
+
tableName,
|
26137
|
+
data: fkData,
|
26138
|
+
schema: schema5,
|
26139
|
+
isMulticolumn
|
26140
|
+
};
|
26141
|
+
}
|
26142
|
+
const columnFrom = columnsFrom[0];
|
26143
|
+
const {
|
26144
|
+
notNull: columnNotNull,
|
26145
|
+
default: columnDefault,
|
26146
|
+
type: columnType
|
26147
|
+
} = json2.tables[tableFrom].columns[columnFrom];
|
26148
|
+
return {
|
26149
|
+
type: "create_reference",
|
26150
|
+
tableName,
|
26151
|
+
data: fkData,
|
26152
|
+
schema: schema5,
|
26153
|
+
columnNotNull,
|
26154
|
+
columnDefault,
|
26155
|
+
columnType
|
26156
|
+
};
|
26157
|
+
});
|
26158
|
+
};
|
25645
26159
|
prepareDropReferencesJson = (tableName, schema5, foreignKeys) => {
|
25646
26160
|
return Object.values(foreignKeys).map((fkData) => {
|
25647
26161
|
return {
|
@@ -25652,6 +26166,54 @@ var init_jsonStatements = __esm({
|
|
25652
26166
|
};
|
25653
26167
|
});
|
25654
26168
|
};
|
26169
|
+
prepareLibSQLDropReferencesJson = (tableName, schema5, foreignKeys, json2, meta, action) => {
|
26170
|
+
const statements = Object.values(foreignKeys).map((fkData) => {
|
26171
|
+
const { columnsFrom, tableFrom, columnsTo, name, tableTo, onDelete, onUpdate } = action === "push" ? SQLiteSquasher.unsquashPushFK(fkData) : SQLiteSquasher.unsquashFK(fkData);
|
26172
|
+
const keys = Object.keys(json2.tables[tableName].columns);
|
26173
|
+
const filtered = columnsFrom.filter((it) => keys.includes(it));
|
26174
|
+
const fullDrop = filtered.length === 0;
|
26175
|
+
if (fullDrop)
|
26176
|
+
return;
|
26177
|
+
let isMulticolumn = false;
|
26178
|
+
if (columnsFrom.length > 1 || columnsTo.length > 1) {
|
26179
|
+
isMulticolumn = true;
|
26180
|
+
return {
|
26181
|
+
type: "delete_reference",
|
26182
|
+
tableName,
|
26183
|
+
data: fkData,
|
26184
|
+
schema: schema5,
|
26185
|
+
isMulticolumn
|
26186
|
+
};
|
26187
|
+
}
|
26188
|
+
const columnFrom = columnsFrom[0];
|
26189
|
+
const newTableName = getNewTableName(tableFrom, meta);
|
26190
|
+
const {
|
26191
|
+
notNull: columnNotNull,
|
26192
|
+
default: columnDefault,
|
26193
|
+
type: columnType
|
26194
|
+
} = json2.tables[newTableName].columns[columnFrom];
|
26195
|
+
const fkToSquash = {
|
26196
|
+
columnsFrom,
|
26197
|
+
columnsTo,
|
26198
|
+
name,
|
26199
|
+
tableFrom: newTableName,
|
26200
|
+
tableTo,
|
26201
|
+
onDelete,
|
26202
|
+
onUpdate
|
26203
|
+
};
|
26204
|
+
const foreignKey = action === "push" ? SQLiteSquasher.squashPushFK(fkToSquash) : SQLiteSquasher.squashFK(fkToSquash);
|
26205
|
+
return {
|
26206
|
+
type: "delete_reference",
|
26207
|
+
tableName,
|
26208
|
+
data: foreignKey,
|
26209
|
+
schema: schema5,
|
26210
|
+
columnNotNull,
|
26211
|
+
columnDefault,
|
26212
|
+
columnType
|
26213
|
+
};
|
26214
|
+
});
|
26215
|
+
return statements.filter((it) => it);
|
26216
|
+
};
|
25655
26217
|
prepareAlterReferencesJson = (tableName, schema5, foreignKeys) => {
|
25656
26218
|
const stmts = [];
|
25657
26219
|
Object.values(foreignKeys).map((val2) => {
|
@@ -25806,8 +26368,295 @@ var init_jsonStatements = __esm({
|
|
25806
26368
|
}
|
25807
26369
|
});
|
25808
26370
|
|
26371
|
+
// src/statementCombiner.ts
|
26372
|
+
var prepareLibSQLRecreateTable, prepareSQLiteRecreateTable, libSQLCombineStatements, sqliteCombineStatements;
|
26373
|
+
var init_statementCombiner = __esm({
|
26374
|
+
"src/statementCombiner.ts"() {
|
26375
|
+
"use strict";
|
26376
|
+
init_jsonStatements();
|
26377
|
+
init_sqliteSchema();
|
26378
|
+
prepareLibSQLRecreateTable = (table4, action) => {
|
26379
|
+
const { name, columns, uniqueConstraints, indexes } = table4;
|
26380
|
+
const composites = Object.values(table4.compositePrimaryKeys).map(
|
26381
|
+
(it) => SQLiteSquasher.unsquashPK(it)
|
26382
|
+
);
|
26383
|
+
const references2 = Object.values(table4.foreignKeys);
|
26384
|
+
const fks = references2.map(
|
26385
|
+
(it) => action === "push" ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it)
|
26386
|
+
);
|
26387
|
+
const statements = [
|
26388
|
+
{
|
26389
|
+
type: "recreate_table",
|
26390
|
+
tableName: name,
|
26391
|
+
columns: Object.values(columns),
|
26392
|
+
compositePKs: composites,
|
26393
|
+
referenceData: fks,
|
26394
|
+
uniqueConstraints: Object.values(uniqueConstraints)
|
26395
|
+
}
|
26396
|
+
];
|
26397
|
+
if (Object.keys(indexes).length) {
|
26398
|
+
statements.push(...prepareCreateIndexesJson(name, "", indexes));
|
26399
|
+
}
|
26400
|
+
return statements;
|
26401
|
+
};
|
26402
|
+
prepareSQLiteRecreateTable = (table4, action) => {
|
26403
|
+
const { name, columns, uniqueConstraints, indexes } = table4;
|
26404
|
+
const composites = Object.values(table4.compositePrimaryKeys).map(
|
26405
|
+
(it) => SQLiteSquasher.unsquashPK(it)
|
26406
|
+
);
|
26407
|
+
const references2 = Object.values(table4.foreignKeys);
|
26408
|
+
const fks = references2.map(
|
26409
|
+
(it) => action === "push" ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it)
|
26410
|
+
);
|
26411
|
+
const statements = [
|
26412
|
+
{
|
26413
|
+
type: "recreate_table",
|
26414
|
+
tableName: name,
|
26415
|
+
columns: Object.values(columns),
|
26416
|
+
compositePKs: composites,
|
26417
|
+
referenceData: fks,
|
26418
|
+
uniqueConstraints: Object.values(uniqueConstraints)
|
26419
|
+
}
|
26420
|
+
];
|
26421
|
+
if (Object.keys(indexes).length) {
|
26422
|
+
statements.push(...prepareCreateIndexesJson(name, "", indexes));
|
26423
|
+
}
|
26424
|
+
return statements;
|
26425
|
+
};
|
26426
|
+
libSQLCombineStatements = (statements, json2, action) => {
|
26427
|
+
const newStatements = {};
|
26428
|
+
for (const statement of statements) {
|
26429
|
+
if (statement.type === "alter_table_alter_column_drop_autoincrement" || statement.type === "alter_table_alter_column_set_autoincrement" || statement.type === "alter_table_alter_column_drop_pk" || statement.type === "alter_table_alter_column_set_pk" || statement.type === "create_composite_pk" || statement.type === "alter_composite_pk" || statement.type === "delete_composite_pk") {
|
26430
|
+
const tableName2 = statement.tableName;
|
26431
|
+
const statementsForTable2 = newStatements[tableName2];
|
26432
|
+
if (!statementsForTable2) {
|
26433
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26434
|
+
continue;
|
26435
|
+
}
|
26436
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
26437
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
26438
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26439
|
+
if (wasRename) {
|
26440
|
+
newStatements[tableName2].push(...preparedStatements);
|
26441
|
+
} else {
|
26442
|
+
newStatements[tableName2] = preparedStatements;
|
26443
|
+
}
|
26444
|
+
continue;
|
26445
|
+
}
|
26446
|
+
continue;
|
26447
|
+
}
|
26448
|
+
if (statement.type === "alter_table_alter_column_set_type" || statement.type === "alter_table_alter_column_drop_notnull" || statement.type === "alter_table_alter_column_set_notnull" || statement.type === "alter_table_alter_column_set_default" || statement.type === "alter_table_alter_column_drop_default") {
|
26449
|
+
const { tableName: tableName2, columnName, columnPk } = statement;
|
26450
|
+
const columnIsPartOfUniqueIndex = Object.values(
|
26451
|
+
json2.tables[tableName2].indexes
|
26452
|
+
).some((it) => {
|
26453
|
+
const unsquashIndex = SQLiteSquasher.unsquashIdx(it);
|
26454
|
+
return unsquashIndex.columns.includes(columnName) && unsquashIndex.isUnique;
|
26455
|
+
});
|
26456
|
+
const columnIsPartOfForeignKey = Object.values(
|
26457
|
+
json2.tables[tableName2].foreignKeys
|
26458
|
+
).some((it) => {
|
26459
|
+
const unsquashFk = action === "push" ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it);
|
26460
|
+
return unsquashFk.columnsFrom.includes(columnName);
|
26461
|
+
});
|
26462
|
+
const statementsForTable2 = newStatements[tableName2];
|
26463
|
+
if (!statementsForTable2 && (columnIsPartOfUniqueIndex || columnIsPartOfForeignKey || columnPk)) {
|
26464
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26465
|
+
continue;
|
26466
|
+
}
|
26467
|
+
if (statementsForTable2 && (columnIsPartOfUniqueIndex || columnIsPartOfForeignKey || columnPk)) {
|
26468
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
26469
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
26470
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26471
|
+
if (wasRename) {
|
26472
|
+
newStatements[tableName2].push(...preparedStatements);
|
26473
|
+
} else {
|
26474
|
+
newStatements[tableName2] = preparedStatements;
|
26475
|
+
}
|
26476
|
+
}
|
26477
|
+
continue;
|
26478
|
+
}
|
26479
|
+
if (statementsForTable2 && !(columnIsPartOfUniqueIndex || columnIsPartOfForeignKey || columnPk)) {
|
26480
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
26481
|
+
newStatements[tableName2].push(statement);
|
26482
|
+
}
|
26483
|
+
continue;
|
26484
|
+
}
|
26485
|
+
newStatements[tableName2] = [statement];
|
26486
|
+
continue;
|
26487
|
+
}
|
26488
|
+
if (statement.type === "create_reference") {
|
26489
|
+
const tableName2 = statement.tableName;
|
26490
|
+
const data = action === "push" ? SQLiteSquasher.unsquashPushFK(statement.data) : SQLiteSquasher.unsquashFK(statement.data);
|
26491
|
+
const statementsForTable2 = newStatements[tableName2];
|
26492
|
+
if (!statementsForTable2) {
|
26493
|
+
newStatements[tableName2] = statement.isMulticolumn ? prepareLibSQLRecreateTable(json2.tables[tableName2], action) : newStatements[tableName2] = [statement];
|
26494
|
+
continue;
|
26495
|
+
}
|
26496
|
+
if (!statement.isMulticolumn && statementsForTable2.some(
|
26497
|
+
(st) => st.type === "sqlite_alter_table_add_column" && st.column.name === data.columnsFrom[0]
|
26498
|
+
)) {
|
26499
|
+
continue;
|
26500
|
+
}
|
26501
|
+
if (statement.isMulticolumn) {
|
26502
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
26503
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
26504
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26505
|
+
if (wasRename) {
|
26506
|
+
newStatements[tableName2].push(...preparedStatements);
|
26507
|
+
} else {
|
26508
|
+
newStatements[tableName2] = preparedStatements;
|
26509
|
+
}
|
26510
|
+
continue;
|
26511
|
+
}
|
26512
|
+
continue;
|
26513
|
+
}
|
26514
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
26515
|
+
newStatements[tableName2].push(statement);
|
26516
|
+
}
|
26517
|
+
continue;
|
26518
|
+
}
|
26519
|
+
if (statement.type === "delete_reference") {
|
26520
|
+
const tableName2 = statement.tableName;
|
26521
|
+
const statementsForTable2 = newStatements[tableName2];
|
26522
|
+
if (!statementsForTable2) {
|
26523
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26524
|
+
continue;
|
26525
|
+
}
|
26526
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
26527
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
26528
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26529
|
+
if (wasRename) {
|
26530
|
+
newStatements[tableName2].push(...preparedStatements);
|
26531
|
+
} else {
|
26532
|
+
newStatements[tableName2] = preparedStatements;
|
26533
|
+
}
|
26534
|
+
continue;
|
26535
|
+
}
|
26536
|
+
continue;
|
26537
|
+
}
|
26538
|
+
if (statement.type === "sqlite_alter_table_add_column" && statement.column.primaryKey) {
|
26539
|
+
const tableName2 = statement.tableName;
|
26540
|
+
const statementsForTable2 = newStatements[tableName2];
|
26541
|
+
if (!statementsForTable2) {
|
26542
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26543
|
+
continue;
|
26544
|
+
}
|
26545
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
26546
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
26547
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26548
|
+
if (wasRename) {
|
26549
|
+
newStatements[tableName2].push(...preparedStatements);
|
26550
|
+
} else {
|
26551
|
+
newStatements[tableName2] = preparedStatements;
|
26552
|
+
}
|
26553
|
+
continue;
|
26554
|
+
}
|
26555
|
+
continue;
|
26556
|
+
}
|
26557
|
+
const tableName = statement.type === "rename_table" ? statement.tableNameTo : statement.tableName;
|
26558
|
+
const statementsForTable = newStatements[tableName];
|
26559
|
+
if (!statementsForTable) {
|
26560
|
+
newStatements[tableName] = [statement];
|
26561
|
+
continue;
|
26562
|
+
}
|
26563
|
+
if (!statementsForTable.some(({ type }) => type === "recreate_table")) {
|
26564
|
+
newStatements[tableName].push(statement);
|
26565
|
+
}
|
26566
|
+
}
|
26567
|
+
const combinedStatements = Object.values(newStatements).flat();
|
26568
|
+
const renamedTables = combinedStatements.filter((it) => it.type === "rename_table");
|
26569
|
+
const renamedColumns = combinedStatements.filter((it) => it.type === "alter_table_rename_column");
|
26570
|
+
const rest = combinedStatements.filter((it) => it.type !== "rename_table" && it.type !== "alter_table_rename_column");
|
26571
|
+
return [...renamedTables, ...renamedColumns, ...rest];
|
26572
|
+
};
|
26573
|
+
sqliteCombineStatements = (statements, json2, action) => {
|
26574
|
+
const newStatements = {};
|
26575
|
+
for (const statement of statements) {
|
26576
|
+
if (statement.type === "alter_table_alter_column_set_type" || statement.type === "alter_table_alter_column_set_default" || statement.type === "alter_table_alter_column_drop_default" || statement.type === "alter_table_alter_column_set_notnull" || statement.type === "alter_table_alter_column_drop_notnull" || statement.type === "alter_table_alter_column_drop_autoincrement" || statement.type === "alter_table_alter_column_set_autoincrement" || statement.type === "alter_table_alter_column_drop_pk" || statement.type === "alter_table_alter_column_set_pk" || statement.type === "delete_reference" || statement.type === "alter_reference" || statement.type === "create_composite_pk" || statement.type === "alter_composite_pk" || statement.type === "delete_composite_pk" || statement.type === "create_unique_constraint" || statement.type === "delete_unique_constraint") {
|
26577
|
+
const tableName2 = statement.tableName;
|
26578
|
+
const statementsForTable2 = newStatements[tableName2];
|
26579
|
+
if (!statementsForTable2) {
|
26580
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26581
|
+
continue;
|
26582
|
+
}
|
26583
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
26584
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
26585
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26586
|
+
if (wasRename) {
|
26587
|
+
newStatements[tableName2].push(...preparedStatements);
|
26588
|
+
} else {
|
26589
|
+
newStatements[tableName2] = preparedStatements;
|
26590
|
+
}
|
26591
|
+
continue;
|
26592
|
+
}
|
26593
|
+
continue;
|
26594
|
+
}
|
26595
|
+
if (statement.type === "sqlite_alter_table_add_column" && statement.column.primaryKey) {
|
26596
|
+
const tableName2 = statement.tableName;
|
26597
|
+
const statementsForTable2 = newStatements[tableName2];
|
26598
|
+
if (!statementsForTable2) {
|
26599
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26600
|
+
continue;
|
26601
|
+
}
|
26602
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
26603
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
26604
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26605
|
+
if (wasRename) {
|
26606
|
+
newStatements[tableName2].push(...preparedStatements);
|
26607
|
+
} else {
|
26608
|
+
newStatements[tableName2] = preparedStatements;
|
26609
|
+
}
|
26610
|
+
continue;
|
26611
|
+
}
|
26612
|
+
continue;
|
26613
|
+
}
|
26614
|
+
if (statement.type === "create_reference") {
|
26615
|
+
const tableName2 = statement.tableName;
|
26616
|
+
const data = action === "push" ? SQLiteSquasher.unsquashPushFK(statement.data) : SQLiteSquasher.unsquashFK(statement.data);
|
26617
|
+
const statementsForTable2 = newStatements[tableName2];
|
26618
|
+
if (!statementsForTable2) {
|
26619
|
+
newStatements[tableName2] = prepareSQLiteRecreateTable(json2.tables[tableName2], action);
|
26620
|
+
continue;
|
26621
|
+
}
|
26622
|
+
if (data.columnsFrom.length === 1 && statementsForTable2.some(
|
26623
|
+
(st) => st.type === "sqlite_alter_table_add_column" && st.column.name === data.columnsFrom[0]
|
26624
|
+
)) {
|
26625
|
+
continue;
|
26626
|
+
}
|
26627
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
26628
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
26629
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
26630
|
+
if (wasRename) {
|
26631
|
+
newStatements[tableName2].push(...preparedStatements);
|
26632
|
+
} else {
|
26633
|
+
newStatements[tableName2] = preparedStatements;
|
26634
|
+
}
|
26635
|
+
continue;
|
26636
|
+
}
|
26637
|
+
continue;
|
26638
|
+
}
|
26639
|
+
const tableName = statement.type === "rename_table" ? statement.tableNameTo : statement.tableName;
|
26640
|
+
const statementsForTable = newStatements[tableName];
|
26641
|
+
if (!statementsForTable) {
|
26642
|
+
newStatements[tableName] = [statement];
|
26643
|
+
continue;
|
26644
|
+
}
|
26645
|
+
if (!statementsForTable.some(({ type }) => type === "recreate_table")) {
|
26646
|
+
newStatements[tableName].push(statement);
|
26647
|
+
}
|
26648
|
+
}
|
26649
|
+
const combinedStatements = Object.values(newStatements).flat();
|
26650
|
+
const renamedTables = combinedStatements.filter((it) => it.type === "rename_table");
|
26651
|
+
const renamedColumns = combinedStatements.filter((it) => it.type === "alter_table_rename_column");
|
26652
|
+
const rest = combinedStatements.filter((it) => it.type !== "rename_table" && it.type !== "alter_table_rename_column");
|
26653
|
+
return [...renamedTables, ...renamedColumns, ...rest];
|
26654
|
+
};
|
26655
|
+
}
|
26656
|
+
});
|
26657
|
+
|
25809
26658
|
// src/snapshotsDiffer.ts
|
25810
|
-
var makeChanged, makeSelfOrChanged, makePatched, columnSchema, alteredColumnSchema, enumSchema2, changedEnumSchema, tableScheme, alteredTableScheme, diffResultScheme, diffResultSchemeMysql, diffResultSchemeSQLite, schemaChangeFor, nameChangeFor, nameSchemaChangeFor, columnChangeFor, applyPgSnapshotsDiff, applyMysqlSnapshotsDiff, applySqliteSnapshotsDiff;
|
26659
|
+
var makeChanged, makeSelfOrChanged, makePatched, columnSchema, alteredColumnSchema, enumSchema2, changedEnumSchema, tableScheme, alteredTableScheme, diffResultScheme, diffResultSchemeMysql, diffResultSchemeSQLite, schemaChangeFor, nameChangeFor, nameSchemaChangeFor, columnChangeFor, applyPgSnapshotsDiff, applyMysqlSnapshotsDiff, applySqliteSnapshotsDiff, applyLibSQLSnapshotsDiff;
|
25811
26660
|
var init_snapshotsDiffer = __esm({
|
25812
26661
|
"src/snapshotsDiffer.ts"() {
|
25813
26662
|
"use strict";
|
@@ -25819,6 +26668,7 @@ var init_snapshotsDiffer = __esm({
|
|
25819
26668
|
init_mysqlSchema();
|
25820
26669
|
init_pgSchema();
|
25821
26670
|
init_sqliteSchema();
|
26671
|
+
init_statementCombiner();
|
25822
26672
|
init_utils();
|
25823
26673
|
makeChanged = (schema5) => {
|
25824
26674
|
return objectType({
|
@@ -26835,35 +27685,319 @@ var init_snapshotsDiffer = __esm({
|
|
26835
27685
|
const jsonDroppedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
|
26836
27686
|
(t2) => t2.type === "delete_reference"
|
26837
27687
|
);
|
26838
|
-
const jsonMySqlCreateTables = createdTables.map((it) => {
|
26839
|
-
return prepareMySqlCreateTableJson(
|
26840
|
-
it,
|
26841
|
-
curFull,
|
26842
|
-
curFull.internal
|
26843
|
-
);
|
26844
|
-
});
|
26845
|
-
jsonStatements.push(...jsonMySqlCreateTables);
|
27688
|
+
const jsonMySqlCreateTables = createdTables.map((it) => {
|
27689
|
+
return prepareMySqlCreateTableJson(
|
27690
|
+
it,
|
27691
|
+
curFull,
|
27692
|
+
curFull.internal
|
27693
|
+
);
|
27694
|
+
});
|
27695
|
+
jsonStatements.push(...jsonMySqlCreateTables);
|
27696
|
+
jsonStatements.push(...jsonDropTables);
|
27697
|
+
jsonStatements.push(...jsonRenameTables);
|
27698
|
+
jsonStatements.push(...jsonRenameColumnsStatements);
|
27699
|
+
jsonStatements.push(...jsonDeletedUniqueConstraints);
|
27700
|
+
jsonStatements.push(...jsonDroppedReferencesForAlteredTables);
|
27701
|
+
jsonStatements.push(...jsonDropIndexesForAllAlteredTables);
|
27702
|
+
jsonStatements.push(...jsonDeletedCompositePKs);
|
27703
|
+
jsonStatements.push(...jsonTableAlternations);
|
27704
|
+
jsonStatements.push(...jsonAddedCompositePKs);
|
27705
|
+
jsonStatements.push(...jsonAddedUniqueConstraints);
|
27706
|
+
jsonStatements.push(...jsonDeletedUniqueConstraints);
|
27707
|
+
jsonStatements.push(...jsonAddColumnsStatemets);
|
27708
|
+
jsonStatements.push(...jsonCreateReferencesForCreatedTables);
|
27709
|
+
jsonStatements.push(...jsonCreateIndexesForCreatedTables);
|
27710
|
+
jsonStatements.push(...jsonCreatedReferencesForAlteredTables);
|
27711
|
+
jsonStatements.push(...jsonCreateIndexesForAllAlteredTables);
|
27712
|
+
jsonStatements.push(...jsonDropColumnsStatemets);
|
27713
|
+
jsonStatements.push(...jsonAlteredCompositePKs);
|
27714
|
+
jsonStatements.push(...jsonAddedUniqueConstraints);
|
27715
|
+
jsonStatements.push(...jsonAlteredUniqueConstraints);
|
27716
|
+
const sqlStatements = fromJson(jsonStatements, "mysql");
|
27717
|
+
const uniqueSqlStatements = [];
|
27718
|
+
sqlStatements.forEach((ss) => {
|
27719
|
+
if (!uniqueSqlStatements.includes(ss)) {
|
27720
|
+
uniqueSqlStatements.push(ss);
|
27721
|
+
}
|
27722
|
+
});
|
27723
|
+
const rTables = renamedTables.map((it) => {
|
27724
|
+
return { from: it.from, to: it.to };
|
27725
|
+
});
|
27726
|
+
const _meta = prepareMigrationMeta([], rTables, rColumns);
|
27727
|
+
return {
|
27728
|
+
statements: jsonStatements,
|
27729
|
+
sqlStatements: uniqueSqlStatements,
|
27730
|
+
_meta
|
27731
|
+
};
|
27732
|
+
};
|
27733
|
+
applySqliteSnapshotsDiff = async (json1, json2, tablesResolver2, columnsResolver2, prevFull, curFull, action) => {
|
27734
|
+
const tablesDiff = diffSchemasOrTables(json1.tables, json2.tables);
|
27735
|
+
const {
|
27736
|
+
created: createdTables,
|
27737
|
+
deleted: deletedTables,
|
27738
|
+
renamed: renamedTables
|
27739
|
+
} = await tablesResolver2({
|
27740
|
+
created: tablesDiff.added,
|
27741
|
+
deleted: tablesDiff.deleted
|
27742
|
+
});
|
27743
|
+
const tablesPatchedSnap1 = copy(json1);
|
27744
|
+
tablesPatchedSnap1.tables = mapEntries(tablesPatchedSnap1.tables, (_2, it) => {
|
27745
|
+
const { name } = nameChangeFor(it, renamedTables);
|
27746
|
+
it.name = name;
|
27747
|
+
return [name, it];
|
27748
|
+
});
|
27749
|
+
const res = diffColumns(tablesPatchedSnap1.tables, json2.tables);
|
27750
|
+
const columnRenames = [];
|
27751
|
+
const columnCreates = [];
|
27752
|
+
const columnDeletes = [];
|
27753
|
+
for (let entry of Object.values(res)) {
|
27754
|
+
const { renamed, created, deleted } = await columnsResolver2({
|
27755
|
+
tableName: entry.name,
|
27756
|
+
schema: entry.schema,
|
27757
|
+
deleted: entry.columns.deleted,
|
27758
|
+
created: entry.columns.added
|
27759
|
+
});
|
27760
|
+
if (created.length > 0) {
|
27761
|
+
columnCreates.push({
|
27762
|
+
table: entry.name,
|
27763
|
+
columns: created
|
27764
|
+
});
|
27765
|
+
}
|
27766
|
+
if (deleted.length > 0) {
|
27767
|
+
columnDeletes.push({
|
27768
|
+
table: entry.name,
|
27769
|
+
columns: deleted
|
27770
|
+
});
|
27771
|
+
}
|
27772
|
+
if (renamed.length > 0) {
|
27773
|
+
columnRenames.push({
|
27774
|
+
table: entry.name,
|
27775
|
+
renames: renamed
|
27776
|
+
});
|
27777
|
+
}
|
27778
|
+
}
|
27779
|
+
const columnRenamesDict = columnRenames.reduce(
|
27780
|
+
(acc, it) => {
|
27781
|
+
acc[it.table] = it.renames;
|
27782
|
+
return acc;
|
27783
|
+
},
|
27784
|
+
{}
|
27785
|
+
);
|
27786
|
+
const columnsPatchedSnap1 = copy(tablesPatchedSnap1);
|
27787
|
+
columnsPatchedSnap1.tables = mapEntries(
|
27788
|
+
columnsPatchedSnap1.tables,
|
27789
|
+
(tableKey2, tableValue) => {
|
27790
|
+
const patchedColumns = mapKeys(
|
27791
|
+
tableValue.columns,
|
27792
|
+
(columnKey, column7) => {
|
27793
|
+
const rens = columnRenamesDict[tableValue.name] || [];
|
27794
|
+
const newName = columnChangeFor(columnKey, rens);
|
27795
|
+
column7.name = newName;
|
27796
|
+
return newName;
|
27797
|
+
}
|
27798
|
+
);
|
27799
|
+
tableValue.columns = patchedColumns;
|
27800
|
+
return [tableKey2, tableValue];
|
27801
|
+
}
|
27802
|
+
);
|
27803
|
+
const diffResult = applyJsonDiff(columnsPatchedSnap1, json2);
|
27804
|
+
const typedResult = diffResultSchemeSQLite.parse(diffResult);
|
27805
|
+
const tablesMap = {};
|
27806
|
+
typedResult.alteredTablesWithColumns.forEach((obj) => {
|
27807
|
+
tablesMap[obj.name] = obj;
|
27808
|
+
});
|
27809
|
+
const jsonCreateTables = createdTables.map((it) => {
|
27810
|
+
return prepareSQLiteCreateTable(it, action);
|
27811
|
+
});
|
27812
|
+
const jsonCreateIndexesForCreatedTables = createdTables.map((it) => {
|
27813
|
+
return prepareCreateIndexesJson(
|
27814
|
+
it.name,
|
27815
|
+
it.schema,
|
27816
|
+
it.indexes,
|
27817
|
+
curFull.internal
|
27818
|
+
);
|
27819
|
+
}).flat();
|
27820
|
+
const jsonDropTables = deletedTables.map((it) => {
|
27821
|
+
return prepareDropTableJson(it);
|
27822
|
+
});
|
27823
|
+
const jsonRenameTables = renamedTables.map((it) => {
|
27824
|
+
return prepareRenameTableJson(it.from, it.to);
|
27825
|
+
});
|
27826
|
+
const jsonRenameColumnsStatements = columnRenames.map((it) => prepareRenameColumns(it.table, "", it.renames)).flat();
|
27827
|
+
const jsonDropColumnsStatemets = columnDeletes.map((it) => _prepareDropColumns(it.table, "", it.columns)).flat();
|
27828
|
+
const jsonAddColumnsStatemets = columnCreates.map((it) => {
|
27829
|
+
return _prepareSqliteAddColumns(
|
27830
|
+
it.table,
|
27831
|
+
it.columns,
|
27832
|
+
tablesMap[it.table] && tablesMap[it.table].addedForeignKeys ? Object.values(tablesMap[it.table].addedForeignKeys) : []
|
27833
|
+
);
|
27834
|
+
}).flat();
|
27835
|
+
const allAltered = typedResult.alteredTablesWithColumns;
|
27836
|
+
const jsonAddedCompositePKs = [];
|
27837
|
+
const jsonDeletedCompositePKs = [];
|
27838
|
+
const jsonAlteredCompositePKs = [];
|
27839
|
+
const jsonAddedUniqueConstraints = [];
|
27840
|
+
const jsonDeletedUniqueConstraints = [];
|
27841
|
+
const jsonAlteredUniqueConstraints = [];
|
27842
|
+
allAltered.forEach((it) => {
|
27843
|
+
let addedColumns = [];
|
27844
|
+
for (const addedPkName of Object.keys(it.addedCompositePKs)) {
|
27845
|
+
const addedPkColumns = it.addedCompositePKs[addedPkName];
|
27846
|
+
addedColumns = SQLiteSquasher.unsquashPK(addedPkColumns);
|
27847
|
+
}
|
27848
|
+
let deletedColumns = [];
|
27849
|
+
for (const deletedPkName of Object.keys(it.deletedCompositePKs)) {
|
27850
|
+
const deletedPkColumns = it.deletedCompositePKs[deletedPkName];
|
27851
|
+
deletedColumns = SQLiteSquasher.unsquashPK(deletedPkColumns);
|
27852
|
+
}
|
27853
|
+
const doPerformDeleteAndCreate = JSON.stringify(addedColumns) !== JSON.stringify(deletedColumns);
|
27854
|
+
let addedCompositePKs = [];
|
27855
|
+
let deletedCompositePKs = [];
|
27856
|
+
let alteredCompositePKs = [];
|
27857
|
+
if (doPerformDeleteAndCreate) {
|
27858
|
+
addedCompositePKs = prepareAddCompositePrimaryKeySqlite(
|
27859
|
+
it.name,
|
27860
|
+
it.addedCompositePKs
|
27861
|
+
);
|
27862
|
+
deletedCompositePKs = prepareDeleteCompositePrimaryKeySqlite(
|
27863
|
+
it.name,
|
27864
|
+
it.deletedCompositePKs
|
27865
|
+
);
|
27866
|
+
}
|
27867
|
+
alteredCompositePKs = prepareAlterCompositePrimaryKeySqlite(
|
27868
|
+
it.name,
|
27869
|
+
it.alteredCompositePKs
|
27870
|
+
);
|
27871
|
+
let addedUniqueConstraints = [];
|
27872
|
+
let deletedUniqueConstraints = [];
|
27873
|
+
let alteredUniqueConstraints = [];
|
27874
|
+
addedUniqueConstraints = prepareAddUniqueConstraintPg(
|
27875
|
+
it.name,
|
27876
|
+
it.schema,
|
27877
|
+
it.addedUniqueConstraints
|
27878
|
+
);
|
27879
|
+
deletedUniqueConstraints = prepareDeleteUniqueConstraintPg(
|
27880
|
+
it.name,
|
27881
|
+
it.schema,
|
27882
|
+
it.deletedUniqueConstraints
|
27883
|
+
);
|
27884
|
+
if (it.alteredUniqueConstraints) {
|
27885
|
+
const added = {};
|
27886
|
+
const deleted = {};
|
27887
|
+
for (const k of Object.keys(it.alteredUniqueConstraints)) {
|
27888
|
+
added[k] = it.alteredUniqueConstraints[k].__new;
|
27889
|
+
deleted[k] = it.alteredUniqueConstraints[k].__old;
|
27890
|
+
}
|
27891
|
+
addedUniqueConstraints.push(
|
27892
|
+
...prepareAddUniqueConstraintPg(it.name, it.schema, added)
|
27893
|
+
);
|
27894
|
+
deletedUniqueConstraints.push(
|
27895
|
+
...prepareDeleteUniqueConstraintPg(it.name, it.schema, deleted)
|
27896
|
+
);
|
27897
|
+
}
|
27898
|
+
jsonAddedCompositePKs.push(...addedCompositePKs);
|
27899
|
+
jsonDeletedCompositePKs.push(...deletedCompositePKs);
|
27900
|
+
jsonAlteredCompositePKs.push(...alteredCompositePKs);
|
27901
|
+
jsonAddedUniqueConstraints.push(...addedUniqueConstraints);
|
27902
|
+
jsonDeletedUniqueConstraints.push(...deletedUniqueConstraints);
|
27903
|
+
jsonAlteredUniqueConstraints.push(...alteredUniqueConstraints);
|
27904
|
+
});
|
27905
|
+
const rColumns = jsonRenameColumnsStatements.map((it) => {
|
27906
|
+
const tableName = it.tableName;
|
27907
|
+
const schema5 = it.schema;
|
27908
|
+
return {
|
27909
|
+
from: { schema: schema5, table: tableName, column: it.oldColumnName },
|
27910
|
+
to: { schema: schema5, table: tableName, column: it.newColumnName }
|
27911
|
+
};
|
27912
|
+
});
|
27913
|
+
const jsonTableAlternations = allAltered.map((it) => {
|
27914
|
+
return prepareSqliteAlterColumns(it.name, it.schema, it.altered, json2);
|
27915
|
+
}).flat();
|
27916
|
+
const jsonCreateIndexesForAllAlteredTables = allAltered.map((it) => {
|
27917
|
+
return prepareCreateIndexesJson(
|
27918
|
+
it.name,
|
27919
|
+
it.schema,
|
27920
|
+
it.addedIndexes || {},
|
27921
|
+
curFull.internal
|
27922
|
+
);
|
27923
|
+
}).flat();
|
27924
|
+
const jsonDropIndexesForAllAlteredTables = allAltered.map((it) => {
|
27925
|
+
return prepareDropIndexesJson(
|
27926
|
+
it.name,
|
27927
|
+
it.schema,
|
27928
|
+
it.deletedIndexes || {}
|
27929
|
+
);
|
27930
|
+
}).flat();
|
27931
|
+
allAltered.forEach((it) => {
|
27932
|
+
const droppedIndexes = Object.keys(it.alteredIndexes).reduce(
|
27933
|
+
(current, item) => {
|
27934
|
+
current[item] = it.alteredIndexes[item].__old;
|
27935
|
+
return current;
|
27936
|
+
},
|
27937
|
+
{}
|
27938
|
+
);
|
27939
|
+
const createdIndexes = Object.keys(it.alteredIndexes).reduce(
|
27940
|
+
(current, item) => {
|
27941
|
+
current[item] = it.alteredIndexes[item].__new;
|
27942
|
+
return current;
|
27943
|
+
},
|
27944
|
+
{}
|
27945
|
+
);
|
27946
|
+
jsonCreateIndexesForAllAlteredTables.push(
|
27947
|
+
...prepareCreateIndexesJson(
|
27948
|
+
it.name,
|
27949
|
+
it.schema,
|
27950
|
+
createdIndexes || {},
|
27951
|
+
curFull.internal
|
27952
|
+
)
|
27953
|
+
);
|
27954
|
+
jsonDropIndexesForAllAlteredTables.push(
|
27955
|
+
...prepareDropIndexesJson(it.name, it.schema, droppedIndexes || {})
|
27956
|
+
);
|
27957
|
+
});
|
27958
|
+
const jsonReferencesForAllAlteredTables = allAltered.map((it) => {
|
27959
|
+
const forAdded = prepareCreateReferencesJson(
|
27960
|
+
it.name,
|
27961
|
+
it.schema,
|
27962
|
+
it.addedForeignKeys
|
27963
|
+
);
|
27964
|
+
const forAltered = prepareDropReferencesJson(
|
27965
|
+
it.name,
|
27966
|
+
it.schema,
|
27967
|
+
it.deletedForeignKeys
|
27968
|
+
);
|
27969
|
+
const alteredFKs = prepareAlterReferencesJson(
|
27970
|
+
it.name,
|
27971
|
+
it.schema,
|
27972
|
+
it.alteredForeignKeys
|
27973
|
+
);
|
27974
|
+
return [...forAdded, ...forAltered, ...alteredFKs];
|
27975
|
+
}).flat();
|
27976
|
+
const jsonCreatedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
|
27977
|
+
(t2) => t2.type === "create_reference"
|
27978
|
+
);
|
27979
|
+
const jsonDroppedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
|
27980
|
+
(t2) => t2.type === "delete_reference"
|
27981
|
+
);
|
27982
|
+
const jsonStatements = [];
|
27983
|
+
jsonStatements.push(...jsonCreateTables);
|
26846
27984
|
jsonStatements.push(...jsonDropTables);
|
26847
27985
|
jsonStatements.push(...jsonRenameTables);
|
26848
27986
|
jsonStatements.push(...jsonRenameColumnsStatements);
|
26849
|
-
jsonStatements.push(...jsonDeletedUniqueConstraints);
|
26850
27987
|
jsonStatements.push(...jsonDroppedReferencesForAlteredTables);
|
26851
27988
|
jsonStatements.push(...jsonDropIndexesForAllAlteredTables);
|
26852
27989
|
jsonStatements.push(...jsonDeletedCompositePKs);
|
26853
27990
|
jsonStatements.push(...jsonTableAlternations);
|
26854
27991
|
jsonStatements.push(...jsonAddedCompositePKs);
|
26855
|
-
jsonStatements.push(...jsonAddedUniqueConstraints);
|
26856
|
-
jsonStatements.push(...jsonDeletedUniqueConstraints);
|
26857
27992
|
jsonStatements.push(...jsonAddColumnsStatemets);
|
26858
|
-
jsonStatements.push(...jsonCreateReferencesForCreatedTables);
|
26859
27993
|
jsonStatements.push(...jsonCreateIndexesForCreatedTables);
|
26860
|
-
jsonStatements.push(...jsonCreatedReferencesForAlteredTables);
|
26861
27994
|
jsonStatements.push(...jsonCreateIndexesForAllAlteredTables);
|
27995
|
+
jsonStatements.push(...jsonCreatedReferencesForAlteredTables);
|
26862
27996
|
jsonStatements.push(...jsonDropColumnsStatemets);
|
26863
27997
|
jsonStatements.push(...jsonAlteredCompositePKs);
|
26864
|
-
jsonStatements.push(...jsonAddedUniqueConstraints);
|
26865
27998
|
jsonStatements.push(...jsonAlteredUniqueConstraints);
|
26866
|
-
const
|
27999
|
+
const combinedJsonStatements = sqliteCombineStatements(jsonStatements, json2, action);
|
28000
|
+
const sqlStatements = fromJson(combinedJsonStatements, "sqlite");
|
26867
28001
|
const uniqueSqlStatements = [];
|
26868
28002
|
sqlStatements.forEach((ss) => {
|
26869
28003
|
if (!uniqueSqlStatements.includes(ss)) {
|
@@ -26875,12 +28009,12 @@ var init_snapshotsDiffer = __esm({
|
|
26875
28009
|
});
|
26876
28010
|
const _meta = prepareMigrationMeta([], rTables, rColumns);
|
26877
28011
|
return {
|
26878
|
-
statements:
|
28012
|
+
statements: combinedJsonStatements,
|
26879
28013
|
sqlStatements: uniqueSqlStatements,
|
26880
28014
|
_meta
|
26881
28015
|
};
|
26882
28016
|
};
|
26883
|
-
|
28017
|
+
applyLibSQLSnapshotsDiff = async (json1, json2, tablesResolver2, columnsResolver2, prevFull, curFull, action) => {
|
26884
28018
|
const tablesDiff = diffSchemasOrTables(json1.tables, json2.tables);
|
26885
28019
|
const {
|
26886
28020
|
created: createdTables,
|
@@ -26982,6 +28116,18 @@ var init_snapshotsDiffer = __esm({
|
|
26982
28116
|
tablesMap[it.table] && tablesMap[it.table].addedForeignKeys ? Object.values(tablesMap[it.table].addedForeignKeys) : []
|
26983
28117
|
);
|
26984
28118
|
}).flat();
|
28119
|
+
const rColumns = jsonRenameColumnsStatements.map((it) => {
|
28120
|
+
const tableName = it.tableName;
|
28121
|
+
const schema5 = it.schema;
|
28122
|
+
return {
|
28123
|
+
from: { schema: schema5, table: tableName, column: it.oldColumnName },
|
28124
|
+
to: { schema: schema5, table: tableName, column: it.newColumnName }
|
28125
|
+
};
|
28126
|
+
});
|
28127
|
+
const rTables = renamedTables.map((it) => {
|
28128
|
+
return { from: it.from, to: it.to };
|
28129
|
+
});
|
28130
|
+
const _meta = prepareMigrationMeta([], rTables, rColumns);
|
26985
28131
|
const allAltered = typedResult.alteredTablesWithColumns;
|
26986
28132
|
const jsonAddedCompositePKs = [];
|
26987
28133
|
const jsonDeletedCompositePKs = [];
|
@@ -27052,14 +28198,6 @@ var init_snapshotsDiffer = __esm({
|
|
27052
28198
|
jsonDeletedUniqueConstraints.push(...deletedUniqueConstraints);
|
27053
28199
|
jsonAlteredUniqueConstraints.push(...alteredUniqueConstraints);
|
27054
28200
|
});
|
27055
|
-
const rColumns = jsonRenameColumnsStatements.map((it) => {
|
27056
|
-
const tableName = it.tableName;
|
27057
|
-
const schema5 = it.schema;
|
27058
|
-
return {
|
27059
|
-
from: { schema: schema5, table: tableName, column: it.oldColumnName },
|
27060
|
-
to: { schema: schema5, table: tableName, column: it.newColumnName }
|
27061
|
-
};
|
27062
|
-
});
|
27063
28201
|
const jsonTableAlternations = allAltered.map((it) => {
|
27064
28202
|
return prepareSqliteAlterColumns(it.name, it.schema, it.altered, json2);
|
27065
28203
|
}).flat();
|
@@ -27106,21 +28244,22 @@ var init_snapshotsDiffer = __esm({
|
|
27106
28244
|
);
|
27107
28245
|
});
|
27108
28246
|
const jsonReferencesForAllAlteredTables = allAltered.map((it) => {
|
27109
|
-
const forAdded =
|
28247
|
+
const forAdded = prepareLibSQLCreateReferencesJson(
|
27110
28248
|
it.name,
|
27111
28249
|
it.schema,
|
27112
|
-
it.addedForeignKeys
|
27113
|
-
|
27114
|
-
|
27115
|
-
it.name,
|
27116
|
-
it.schema,
|
27117
|
-
it.deletedForeignKeys
|
28250
|
+
it.addedForeignKeys,
|
28251
|
+
json2,
|
28252
|
+
action
|
27118
28253
|
);
|
27119
|
-
const
|
28254
|
+
const forAltered = prepareLibSQLDropReferencesJson(
|
27120
28255
|
it.name,
|
27121
28256
|
it.schema,
|
27122
|
-
it.
|
28257
|
+
it.deletedForeignKeys,
|
28258
|
+
json2,
|
28259
|
+
_meta,
|
28260
|
+
action
|
27123
28261
|
);
|
28262
|
+
const alteredFKs = prepareAlterReferencesJson(it.name, it.schema, it.alteredForeignKeys);
|
27124
28263
|
return [...forAdded, ...forAltered, ...alteredFKs];
|
27125
28264
|
}).flat();
|
27126
28265
|
const jsonCreatedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
|
@@ -27146,19 +28285,22 @@ var init_snapshotsDiffer = __esm({
|
|
27146
28285
|
jsonStatements.push(...jsonDropColumnsStatemets);
|
27147
28286
|
jsonStatements.push(...jsonAlteredCompositePKs);
|
27148
28287
|
jsonStatements.push(...jsonAlteredUniqueConstraints);
|
27149
|
-
const
|
28288
|
+
const combinedJsonStatements = libSQLCombineStatements(jsonStatements, json2, action);
|
28289
|
+
const sqlStatements = fromJson(
|
28290
|
+
combinedJsonStatements,
|
28291
|
+
"sqlite",
|
28292
|
+
action,
|
28293
|
+
"turso",
|
28294
|
+
json2
|
28295
|
+
);
|
27150
28296
|
const uniqueSqlStatements = [];
|
27151
28297
|
sqlStatements.forEach((ss) => {
|
27152
28298
|
if (!uniqueSqlStatements.includes(ss)) {
|
27153
28299
|
uniqueSqlStatements.push(ss);
|
27154
28300
|
}
|
27155
28301
|
});
|
27156
|
-
const rTables = renamedTables.map((it) => {
|
27157
|
-
return { from: it.from, to: it.to };
|
27158
|
-
});
|
27159
|
-
const _meta = prepareMigrationMeta([], rTables, rColumns);
|
27160
28302
|
return {
|
27161
|
-
statements:
|
28303
|
+
statements: combinedJsonStatements,
|
27162
28304
|
sqlStatements: uniqueSqlStatements,
|
27163
28305
|
_meta
|
27164
28306
|
};
|
@@ -28497,6 +29639,7 @@ __export(migrate_exports, {
|
|
28497
29639
|
prepareAndMigrateMysql: () => prepareAndMigrateMysql,
|
28498
29640
|
prepareAndMigratePg: () => prepareAndMigratePg,
|
28499
29641
|
prepareAndMigrateSqlite: () => prepareAndMigrateSqlite,
|
29642
|
+
prepareLibSQLPush: () => prepareLibSQLPush,
|
28500
29643
|
prepareMySQLPush: () => prepareMySQLPush,
|
28501
29644
|
preparePgPush: () => preparePgPush,
|
28502
29645
|
prepareSQLitePush: () => prepareSQLitePush,
|
@@ -28509,7 +29652,7 @@ __export(migrate_exports, {
|
|
28509
29652
|
tablesResolver: () => tablesResolver,
|
28510
29653
|
writeResult: () => writeResult
|
28511
29654
|
});
|
28512
|
-
var import_fs5, import_hanji3, import_path4, schemasResolver, tablesResolver, sequencesResolver, enumsResolver, columnsResolver, prepareAndMigratePg, preparePgPush, prepareMySQLPush, prepareAndMigrateMysql, prepareAndMigrateSqlite, prepareSQLitePush, promptColumnsConflicts, promptNamedWithSchemasConflict, promptSchemasConflict, BREAKPOINT, writeResult, embeddedMigrations, prepareSnapshotFolderName, two;
|
29655
|
+
var import_fs5, import_hanji3, import_path4, schemasResolver, tablesResolver, sequencesResolver, enumsResolver, columnsResolver, prepareAndMigratePg, preparePgPush, prepareMySQLPush, prepareAndMigrateMysql, prepareAndMigrateSqlite, prepareSQLitePush, prepareLibSQLPush, promptColumnsConflicts, promptNamedWithSchemasConflict, promptSchemasConflict, BREAKPOINT, writeResult, embeddedMigrations, prepareSnapshotFolderName, two;
|
28513
29656
|
var init_migrate = __esm({
|
28514
29657
|
"src/cli/commands/migrate.ts"() {
|
28515
29658
|
"use strict";
|
@@ -28761,6 +29904,7 @@ var init_migrate = __esm({
|
|
28761
29904
|
prepareAndMigrateSqlite = async (config) => {
|
28762
29905
|
const outFolder = config.out;
|
28763
29906
|
const schemaPath = config.schema;
|
29907
|
+
const driver2 = config.driver;
|
28764
29908
|
try {
|
28765
29909
|
assertV1OutFolder(outFolder);
|
28766
29910
|
const { snapshots, journal } = prepareMigrationFolder(outFolder, "sqlite");
|
@@ -28786,14 +29930,27 @@ var init_migrate = __esm({
|
|
28786
29930
|
}
|
28787
29931
|
const squashedPrev = squashSqliteScheme(validatedPrev);
|
28788
29932
|
const squashedCur = squashSqliteScheme(validatedCur);
|
28789
|
-
|
28790
|
-
|
28791
|
-
|
28792
|
-
|
28793
|
-
|
28794
|
-
|
28795
|
-
|
28796
|
-
|
29933
|
+
let sqlStatements;
|
29934
|
+
let _meta;
|
29935
|
+
if (driver2 === "turso") {
|
29936
|
+
({ sqlStatements, _meta } = await applyLibSQLSnapshotsDiff(
|
29937
|
+
squashedPrev,
|
29938
|
+
squashedCur,
|
29939
|
+
tablesResolver,
|
29940
|
+
columnsResolver,
|
29941
|
+
validatedPrev,
|
29942
|
+
validatedCur
|
29943
|
+
));
|
29944
|
+
} else {
|
29945
|
+
({ sqlStatements, _meta } = await applySqliteSnapshotsDiff(
|
29946
|
+
squashedPrev,
|
29947
|
+
squashedCur,
|
29948
|
+
tablesResolver,
|
29949
|
+
columnsResolver,
|
29950
|
+
validatedPrev,
|
29951
|
+
validatedCur
|
29952
|
+
));
|
29953
|
+
}
|
28797
29954
|
writeResult({
|
28798
29955
|
cur,
|
28799
29956
|
sqlStatements,
|
@@ -28809,13 +29966,51 @@ var init_migrate = __esm({
|
|
28809
29966
|
console.error(e2);
|
28810
29967
|
}
|
28811
29968
|
};
|
28812
|
-
prepareSQLitePush = async (schemaPath, snapshot) => {
|
29969
|
+
prepareSQLitePush = async (schemaPath, snapshot, driver2) => {
|
29970
|
+
const { prev, cur } = await prepareSQLiteDbPushSnapshot(snapshot, schemaPath);
|
29971
|
+
const validatedPrev = sqliteSchema.parse(prev);
|
29972
|
+
const validatedCur = sqliteSchema.parse(cur);
|
29973
|
+
const squashedPrev = squashSqliteScheme(validatedPrev, "push");
|
29974
|
+
const squashedCur = squashSqliteScheme(validatedCur, "push");
|
29975
|
+
let sqlStatements;
|
29976
|
+
let statements;
|
29977
|
+
let _meta;
|
29978
|
+
if (driver2 === "turso") {
|
29979
|
+
({ sqlStatements, statements, _meta } = await applyLibSQLSnapshotsDiff(
|
29980
|
+
squashedPrev,
|
29981
|
+
squashedCur,
|
29982
|
+
tablesResolver,
|
29983
|
+
columnsResolver,
|
29984
|
+
validatedPrev,
|
29985
|
+
validatedCur,
|
29986
|
+
"push"
|
29987
|
+
));
|
29988
|
+
} else {
|
29989
|
+
({ sqlStatements, statements, _meta } = await applySqliteSnapshotsDiff(
|
29990
|
+
squashedPrev,
|
29991
|
+
squashedCur,
|
29992
|
+
tablesResolver,
|
29993
|
+
columnsResolver,
|
29994
|
+
validatedPrev,
|
29995
|
+
validatedCur,
|
29996
|
+
"push"
|
29997
|
+
));
|
29998
|
+
}
|
29999
|
+
return {
|
30000
|
+
sqlStatements,
|
30001
|
+
statements,
|
30002
|
+
squashedPrev,
|
30003
|
+
squashedCur,
|
30004
|
+
meta: _meta
|
30005
|
+
};
|
30006
|
+
};
|
30007
|
+
prepareLibSQLPush = async (schemaPath, snapshot) => {
|
28813
30008
|
const { prev, cur } = await prepareSQLiteDbPushSnapshot(snapshot, schemaPath);
|
28814
30009
|
const validatedPrev = sqliteSchema.parse(prev);
|
28815
30010
|
const validatedCur = sqliteSchema.parse(cur);
|
28816
30011
|
const squashedPrev = squashSqliteScheme(validatedPrev, "push");
|
28817
30012
|
const squashedCur = squashSqliteScheme(validatedCur, "push");
|
28818
|
-
const { sqlStatements, statements, _meta } = await
|
30013
|
+
const { sqlStatements, statements, _meta } = await applyLibSQLSnapshotsDiff(
|
28819
30014
|
squashedPrev,
|
28820
30015
|
squashedCur,
|
28821
30016
|
tablesResolver,
|
@@ -72173,8 +73368,259 @@ var init_selector_ui = __esm({
|
|
72173
73368
|
}
|
72174
73369
|
});
|
72175
73370
|
|
73371
|
+
// src/cli/commands/libSqlPushUtils.ts
|
73372
|
+
var getOldTableName3, _moveDataStatements2, libSqlLogSuggestionsAndReturn;
|
73373
|
+
var init_libSqlPushUtils = __esm({
|
73374
|
+
"src/cli/commands/libSqlPushUtils.ts"() {
|
73375
|
+
"use strict";
|
73376
|
+
init_source();
|
73377
|
+
init_utils();
|
73378
|
+
init_sqliteSchema();
|
73379
|
+
init_sqlgenerator();
|
73380
|
+
getOldTableName3 = (tableName, meta) => {
|
73381
|
+
for (const key of Object.keys(meta.tables)) {
|
73382
|
+
const value = meta.tables[key];
|
73383
|
+
if (`"${tableName}"` === value) {
|
73384
|
+
return key.substring(1, key.length - 1);
|
73385
|
+
}
|
73386
|
+
}
|
73387
|
+
return tableName;
|
73388
|
+
};
|
73389
|
+
_moveDataStatements2 = (tableName, json, dataLoss = false) => {
|
73390
|
+
const statements = [];
|
73391
|
+
statements.push(
|
73392
|
+
new SqliteRenameTableConvertor().convert({
|
73393
|
+
type: "rename_table",
|
73394
|
+
tableNameFrom: tableName,
|
73395
|
+
tableNameTo: `__old_push_${tableName}`,
|
73396
|
+
fromSchema: "",
|
73397
|
+
toSchema: ""
|
73398
|
+
})
|
73399
|
+
);
|
73400
|
+
const tableColumns = Object.values(json.tables[tableName].columns);
|
73401
|
+
const referenceData = Object.values(json.tables[tableName].foreignKeys);
|
73402
|
+
const compositePKs = Object.values(
|
73403
|
+
json.tables[tableName].compositePrimaryKeys
|
73404
|
+
).map((it) => SQLiteSquasher.unsquashPK(it));
|
73405
|
+
statements.push(
|
73406
|
+
new SQLiteCreateTableConvertor().convert({
|
73407
|
+
type: "sqlite_create_table",
|
73408
|
+
tableName,
|
73409
|
+
columns: tableColumns,
|
73410
|
+
referenceData: referenceData.map((it) => SQLiteSquasher.unsquashPushFK(it)),
|
73411
|
+
compositePKs
|
73412
|
+
})
|
73413
|
+
);
|
73414
|
+
if (!dataLoss) {
|
73415
|
+
const columns = Object.keys(json.tables[tableName].columns).map(
|
73416
|
+
(c) => `"${c}"`
|
73417
|
+
);
|
73418
|
+
statements.push(
|
73419
|
+
`INSERT INTO \`${tableName}\`(${columns.join(
|
73420
|
+
", "
|
73421
|
+
)}) SELECT (${columns.join(", ")}) FROM \`__old_push_${tableName}\`;`
|
73422
|
+
);
|
73423
|
+
}
|
73424
|
+
statements.push(
|
73425
|
+
new SQLiteDropTableConvertor().convert({
|
73426
|
+
type: "drop_table",
|
73427
|
+
tableName: `__old_push_${tableName}`,
|
73428
|
+
schema: ""
|
73429
|
+
})
|
73430
|
+
);
|
73431
|
+
for (const idx of Object.values(json.tables[tableName].indexes)) {
|
73432
|
+
statements.push(
|
73433
|
+
new CreateSqliteIndexConvertor().convert({
|
73434
|
+
type: "create_index",
|
73435
|
+
tableName,
|
73436
|
+
schema: "",
|
73437
|
+
data: idx
|
73438
|
+
})
|
73439
|
+
);
|
73440
|
+
}
|
73441
|
+
return statements;
|
73442
|
+
};
|
73443
|
+
libSqlLogSuggestionsAndReturn = async (connection, statements, json1, json2, meta) => {
|
73444
|
+
let shouldAskForApprove = false;
|
73445
|
+
const statementsToExecute = [];
|
73446
|
+
const infoToPrint = [];
|
73447
|
+
const tablesToRemove = [];
|
73448
|
+
const columnsToRemove = [];
|
73449
|
+
const tablesToTruncate = [];
|
73450
|
+
for (const statement of statements) {
|
73451
|
+
if (statement.type === "drop_table") {
|
73452
|
+
const res = await connection.query(
|
73453
|
+
`select count(*) as count from \`${statement.tableName}\``
|
73454
|
+
);
|
73455
|
+
const count = Number(res[0].count);
|
73456
|
+
if (count > 0) {
|
73457
|
+
infoToPrint.push(
|
73458
|
+
`\xB7 You're about to delete ${source_default.underline(
|
73459
|
+
statement.tableName
|
73460
|
+
)} table with ${count} items`
|
73461
|
+
);
|
73462
|
+
tablesToRemove.push(statement.tableName);
|
73463
|
+
shouldAskForApprove = true;
|
73464
|
+
}
|
73465
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push", "turso", json2);
|
73466
|
+
statementsToExecute.push(
|
73467
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
73468
|
+
);
|
73469
|
+
} else if (statement.type === "alter_table_drop_column") {
|
73470
|
+
const tableName = statement.tableName;
|
73471
|
+
const res = await connection.query(
|
73472
|
+
`select count(*) as count from \`${tableName}\``
|
73473
|
+
);
|
73474
|
+
const count = Number(res[0].count);
|
73475
|
+
if (count > 0) {
|
73476
|
+
infoToPrint.push(
|
73477
|
+
`\xB7 You're about to delete ${source_default.underline(
|
73478
|
+
statement.columnName
|
73479
|
+
)} column in ${tableName} table with ${count} items`
|
73480
|
+
);
|
73481
|
+
columnsToRemove.push(`${tableName}_${statement.columnName}`);
|
73482
|
+
shouldAskForApprove = true;
|
73483
|
+
}
|
73484
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push", "turso", json2);
|
73485
|
+
statementsToExecute.push(
|
73486
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
73487
|
+
);
|
73488
|
+
} else if (statement.type === "sqlite_alter_table_add_column" && statement.column.notNull && !statement.column.default) {
|
73489
|
+
const newTableName = statement.tableName;
|
73490
|
+
const res = await connection.query(
|
73491
|
+
`select count(*) as count from \`${newTableName}\``
|
73492
|
+
);
|
73493
|
+
const count = Number(res[0].count);
|
73494
|
+
if (count > 0) {
|
73495
|
+
infoToPrint.push(
|
73496
|
+
`\xB7 You're about to add not-null ${source_default.underline(
|
73497
|
+
statement.column.name
|
73498
|
+
)} column without default value, which contains ${count} items`
|
73499
|
+
);
|
73500
|
+
tablesToTruncate.push(newTableName);
|
73501
|
+
statementsToExecute.push(`delete from ${newTableName};`);
|
73502
|
+
shouldAskForApprove = true;
|
73503
|
+
}
|
73504
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push", "turso", json2);
|
73505
|
+
statementsToExecute.push(
|
73506
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
73507
|
+
);
|
73508
|
+
} else if (statement.type === "alter_table_alter_column_set_notnull") {
|
73509
|
+
const tableName = statement.tableName;
|
73510
|
+
if (statement.type === "alter_table_alter_column_set_notnull" && typeof statement.columnDefault === "undefined") {
|
73511
|
+
const res = await connection.query(
|
73512
|
+
`select count(*) as count from \`${tableName}\``
|
73513
|
+
);
|
73514
|
+
const count = Number(res[0].count);
|
73515
|
+
if (count > 0) {
|
73516
|
+
infoToPrint.push(
|
73517
|
+
`\xB7 You're about to add not-null constraint to ${source_default.underline(
|
73518
|
+
statement.columnName
|
73519
|
+
)} column without default value, which contains ${count} items`
|
73520
|
+
);
|
73521
|
+
tablesToTruncate.push(tableName);
|
73522
|
+
statementsToExecute.push(`delete from \`${tableName}\``);
|
73523
|
+
shouldAskForApprove = true;
|
73524
|
+
}
|
73525
|
+
}
|
73526
|
+
const modifyStatements = new LibSQLModifyColumn().convert(statement, json2);
|
73527
|
+
statementsToExecute.push(
|
73528
|
+
...Array.isArray(modifyStatements) ? modifyStatements : [modifyStatements]
|
73529
|
+
);
|
73530
|
+
} else if (statement.type === "recreate_table") {
|
73531
|
+
const tableName = statement.tableName;
|
73532
|
+
const oldTableName = getOldTableName3(tableName, meta);
|
73533
|
+
const prevColumnNames = Object.keys(json1.tables[oldTableName].columns);
|
73534
|
+
const currentColumnNames = Object.keys(json2.tables[tableName].columns);
|
73535
|
+
const { removedColumns, addedColumns } = findAddedAndRemoved(
|
73536
|
+
prevColumnNames,
|
73537
|
+
currentColumnNames
|
73538
|
+
);
|
73539
|
+
if (removedColumns.length) {
|
73540
|
+
for (const removedColumn of removedColumns) {
|
73541
|
+
const res = await connection.query(
|
73542
|
+
`select count(\`${tableName}\`.\`${removedColumn}\`) as count from \`${tableName}\``
|
73543
|
+
);
|
73544
|
+
const count = Number(res[0].count);
|
73545
|
+
if (count > 0) {
|
73546
|
+
infoToPrint.push(
|
73547
|
+
`\xB7 You're about to delete ${source_default.underline(
|
73548
|
+
removedColumn
|
73549
|
+
)} column in ${tableName} table with ${count} items`
|
73550
|
+
);
|
73551
|
+
columnsToRemove.push(removedColumn);
|
73552
|
+
shouldAskForApprove = true;
|
73553
|
+
}
|
73554
|
+
}
|
73555
|
+
}
|
73556
|
+
if (addedColumns.length) {
|
73557
|
+
for (const addedColumn of addedColumns) {
|
73558
|
+
const [res] = await connection.query(
|
73559
|
+
`select count(\`${tableName}\`.\`${addedColumn}\`) as count from \`${tableName}\``
|
73560
|
+
);
|
73561
|
+
const columnConf = json2.tables[tableName].columns[addedColumn];
|
73562
|
+
const count = Number(res.count);
|
73563
|
+
if (count > 0 && columnConf.notNull && !columnConf.default) {
|
73564
|
+
infoToPrint.push(
|
73565
|
+
`\xB7 You're about to add not-null ${source_default.underline(
|
73566
|
+
addedColumn
|
73567
|
+
)} column without default value, which contains ${count} items`
|
73568
|
+
);
|
73569
|
+
shouldAskForApprove = true;
|
73570
|
+
tablesToTruncate.push(tableName);
|
73571
|
+
}
|
73572
|
+
}
|
73573
|
+
}
|
73574
|
+
statementsToExecute.push(..._moveDataStatements2(tableName, json2));
|
73575
|
+
const tablesReferencingCurrent = [];
|
73576
|
+
for (const table4 of Object.values(json2.tables)) {
|
73577
|
+
const tablesRefs = Object.values(json2.tables[table4.name].foreignKeys).filter((t2) => SQLiteSquasher.unsquashPushFK(t2).tableTo === tableName).map((it) => SQLiteSquasher.unsquashPushFK(it).tableFrom);
|
73578
|
+
tablesReferencingCurrent.push(...tablesRefs);
|
73579
|
+
}
|
73580
|
+
const uniqueTableRefs = [...new Set(tablesReferencingCurrent)];
|
73581
|
+
for (const table4 of uniqueTableRefs) {
|
73582
|
+
statementsToExecute.push(..._moveDataStatements2(table4, json2));
|
73583
|
+
}
|
73584
|
+
} else if (statement.type === "alter_table_alter_column_set_generated") {
|
73585
|
+
const tableName = statement.tableName;
|
73586
|
+
const res = await connection.query(
|
73587
|
+
`select count("${statement.columnName}") as count from \`${tableName}\``
|
73588
|
+
);
|
73589
|
+
const count = Number(res[0].count);
|
73590
|
+
if (count > 0) {
|
73591
|
+
infoToPrint.push(
|
73592
|
+
`\xB7 You're about to delete ${source_default.underline(
|
73593
|
+
statement.columnName
|
73594
|
+
)} column in ${tableName} table with ${count} items`
|
73595
|
+
);
|
73596
|
+
columnsToRemove.push(`${tableName}_${statement.columnName}`);
|
73597
|
+
shouldAskForApprove = true;
|
73598
|
+
}
|
73599
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push", "turso", json2);
|
73600
|
+
statementsToExecute.push(
|
73601
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
73602
|
+
);
|
73603
|
+
} else {
|
73604
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push", "turso", json2);
|
73605
|
+
statementsToExecute.push(
|
73606
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
73607
|
+
);
|
73608
|
+
}
|
73609
|
+
}
|
73610
|
+
return {
|
73611
|
+
statementsToExecute: [...new Set(statementsToExecute)],
|
73612
|
+
shouldAskForApprove,
|
73613
|
+
infoToPrint,
|
73614
|
+
columnsToRemove: [...new Set(columnsToRemove)],
|
73615
|
+
tablesToTruncate: [...new Set(tablesToTruncate)],
|
73616
|
+
tablesToRemove: [...new Set(tablesToRemove)]
|
73617
|
+
};
|
73618
|
+
};
|
73619
|
+
}
|
73620
|
+
});
|
73621
|
+
|
72176
73622
|
// src/cli/commands/mysqlPushUtils.ts
|
72177
|
-
var import_hanji6, filterStatements,
|
73623
|
+
var import_hanji6, filterStatements, logSuggestionsAndReturn2;
|
72178
73624
|
var init_mysqlPushUtils = __esm({
|
72179
73625
|
"src/cli/commands/mysqlPushUtils.ts"() {
|
72180
73626
|
"use strict";
|
@@ -72224,7 +73670,7 @@ var init_mysqlPushUtils = __esm({
|
|
72224
73670
|
return true;
|
72225
73671
|
});
|
72226
73672
|
};
|
72227
|
-
|
73673
|
+
logSuggestionsAndReturn2 = async (db, statements, json2) => {
|
72228
73674
|
let shouldAskForApprove = false;
|
72229
73675
|
const statementsToExecute = [];
|
72230
73676
|
const infoToPrint = [];
|
@@ -72665,289 +74111,6 @@ var init_pgPushUtils = __esm({
|
|
72665
74111
|
}
|
72666
74112
|
});
|
72667
74113
|
|
72668
|
-
// src/cli/commands/sqlitePushUtils.ts
|
72669
|
-
var _moveDataStatements, getOldTableName, getNewTableName, logSuggestionsAndReturn2;
|
72670
|
-
var init_sqlitePushUtils = __esm({
|
72671
|
-
"src/cli/commands/sqlitePushUtils.ts"() {
|
72672
|
-
"use strict";
|
72673
|
-
init_source();
|
72674
|
-
init_sqliteSchema();
|
72675
|
-
init_sqlgenerator();
|
72676
|
-
_moveDataStatements = (tableName, json, dataLoss = false) => {
|
72677
|
-
const statements = [];
|
72678
|
-
statements.push(
|
72679
|
-
new SqliteRenameTableConvertor().convert({
|
72680
|
-
type: "rename_table",
|
72681
|
-
tableNameFrom: tableName,
|
72682
|
-
tableNameTo: `__old_push_${tableName}`,
|
72683
|
-
fromSchema: "",
|
72684
|
-
toSchema: ""
|
72685
|
-
})
|
72686
|
-
);
|
72687
|
-
const tableColumns = Object.values(json.tables[tableName].columns);
|
72688
|
-
const referenceData = Object.values(json.tables[tableName].foreignKeys);
|
72689
|
-
const compositePKs = Object.values(
|
72690
|
-
json.tables[tableName].compositePrimaryKeys
|
72691
|
-
).map((it) => SQLiteSquasher.unsquashPK(it));
|
72692
|
-
const fks = referenceData.map((it) => SQLiteSquasher.unsquashPushFK(it));
|
72693
|
-
statements.push(
|
72694
|
-
new SQLiteCreateTableConvertor().convert({
|
72695
|
-
type: "sqlite_create_table",
|
72696
|
-
tableName,
|
72697
|
-
columns: tableColumns,
|
72698
|
-
referenceData: fks,
|
72699
|
-
compositePKs
|
72700
|
-
})
|
72701
|
-
);
|
72702
|
-
if (!dataLoss) {
|
72703
|
-
statements.push(
|
72704
|
-
`INSERT INTO "${tableName}" SELECT * FROM "__old_push_${tableName}";`
|
72705
|
-
);
|
72706
|
-
}
|
72707
|
-
statements.push(
|
72708
|
-
new SQLiteDropTableConvertor().convert({
|
72709
|
-
type: "drop_table",
|
72710
|
-
tableName: `__old_push_${tableName}`,
|
72711
|
-
schema: ""
|
72712
|
-
})
|
72713
|
-
);
|
72714
|
-
for (const idx of Object.values(json.tables[tableName].indexes)) {
|
72715
|
-
statements.push(
|
72716
|
-
new CreateSqliteIndexConvertor().convert({
|
72717
|
-
type: "create_index",
|
72718
|
-
tableName,
|
72719
|
-
schema: "",
|
72720
|
-
data: idx
|
72721
|
-
})
|
72722
|
-
);
|
72723
|
-
}
|
72724
|
-
return statements;
|
72725
|
-
};
|
72726
|
-
getOldTableName = (tableName, meta) => {
|
72727
|
-
for (const key of Object.keys(meta.tables)) {
|
72728
|
-
const value = meta.tables[key];
|
72729
|
-
if (`"${tableName}"` === value) {
|
72730
|
-
return key.substring(1, key.length - 1);
|
72731
|
-
}
|
72732
|
-
}
|
72733
|
-
return tableName;
|
72734
|
-
};
|
72735
|
-
getNewTableName = (tableName, meta) => {
|
72736
|
-
if (typeof meta.tables[`"${tableName}"`] !== "undefined") {
|
72737
|
-
return meta.tables[`"${tableName}"`].substring(
|
72738
|
-
1,
|
72739
|
-
meta.tables[`"${tableName}"`].length - 1
|
72740
|
-
);
|
72741
|
-
}
|
72742
|
-
return tableName;
|
72743
|
-
};
|
72744
|
-
logSuggestionsAndReturn2 = async (connection, statements, json1, json2, meta) => {
|
72745
|
-
let shouldAskForApprove = false;
|
72746
|
-
const statementsToExecute = [];
|
72747
|
-
const infoToPrint = [];
|
72748
|
-
const tablesToRemove = [];
|
72749
|
-
const columnsToRemove = [];
|
72750
|
-
const schemasToRemove = [];
|
72751
|
-
const tablesToTruncate = [];
|
72752
|
-
const tablesContext = {};
|
72753
|
-
for (const statement of statements) {
|
72754
|
-
if (statement.type === "drop_table") {
|
72755
|
-
const res = await connection.query(
|
72756
|
-
`select count(*) as count from \`${statement.tableName}\``
|
72757
|
-
);
|
72758
|
-
const count = Number(res[0].count);
|
72759
|
-
if (count > 0) {
|
72760
|
-
infoToPrint.push(
|
72761
|
-
`\xB7 You're about to delete ${source_default.underline(
|
72762
|
-
statement.tableName
|
72763
|
-
)} table with ${count} items`
|
72764
|
-
);
|
72765
|
-
tablesToRemove.push(statement.tableName);
|
72766
|
-
shouldAskForApprove = true;
|
72767
|
-
}
|
72768
|
-
const stmnt = fromJson([statement], "sqlite")[0];
|
72769
|
-
statementsToExecute.push(stmnt);
|
72770
|
-
} else if (statement.type === "alter_table_drop_column") {
|
72771
|
-
const newTableName = getOldTableName(statement.tableName, meta);
|
72772
|
-
const columnIsPartOfPk = Object.values(
|
72773
|
-
json1.tables[newTableName].compositePrimaryKeys
|
72774
|
-
).find((c) => SQLiteSquasher.unsquashPK(c).includes(statement.columnName));
|
72775
|
-
const columnIsPartOfIndex = Object.values(
|
72776
|
-
json1.tables[newTableName].indexes
|
72777
|
-
).find((c) => SQLiteSquasher.unsquashIdx(c).columns.includes(statement.columnName));
|
72778
|
-
const columnIsPk = json1.tables[newTableName].columns[statement.columnName].primaryKey;
|
72779
|
-
const columnIsPartOfFk = Object.values(
|
72780
|
-
json1.tables[newTableName].foreignKeys
|
72781
|
-
).find(
|
72782
|
-
(t2) => SQLiteSquasher.unsquashPushFK(t2).columnsFrom.includes(
|
72783
|
-
statement.columnName
|
72784
|
-
)
|
72785
|
-
);
|
72786
|
-
const res = await connection.query(
|
72787
|
-
`select count(*) as count from \`${newTableName}\``
|
72788
|
-
);
|
72789
|
-
const count = Number(res[0].count);
|
72790
|
-
if (count > 0) {
|
72791
|
-
infoToPrint.push(
|
72792
|
-
`\xB7 You're about to delete ${source_default.underline(
|
72793
|
-
statement.columnName
|
72794
|
-
)} column in ${newTableName} table with ${count} items`
|
72795
|
-
);
|
72796
|
-
columnsToRemove.push(`${newTableName}_${statement.columnName}`);
|
72797
|
-
shouldAskForApprove = true;
|
72798
|
-
}
|
72799
|
-
if (columnIsPk || columnIsPartOfPk || columnIsPartOfIndex || columnIsPartOfFk) {
|
72800
|
-
tablesContext[newTableName] = [
|
72801
|
-
..._moveDataStatements(statement.tableName, json2, true)
|
72802
|
-
];
|
72803
|
-
const tablesReferncingCurrent = [];
|
72804
|
-
for (const table4 of Object.values(json1.tables)) {
|
72805
|
-
const tablesRefs = Object.values(json1.tables[table4.name].foreignKeys).filter(
|
72806
|
-
(t2) => SQLiteSquasher.unsquashPushFK(t2).tableTo === newTableName
|
72807
|
-
).map((t2) => SQLiteSquasher.unsquashPushFK(t2).tableFrom);
|
72808
|
-
tablesReferncingCurrent.push(...tablesRefs);
|
72809
|
-
}
|
72810
|
-
const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
|
72811
|
-
for (const table4 of uniqueTableRefs) {
|
72812
|
-
if (typeof tablesContext[table4] === "undefined") {
|
72813
|
-
tablesContext[table4] = [..._moveDataStatements(table4, json2)];
|
72814
|
-
}
|
72815
|
-
}
|
72816
|
-
} else {
|
72817
|
-
if (typeof tablesContext[newTableName] === "undefined") {
|
72818
|
-
const stmnt = fromJson([statement], "sqlite")[0];
|
72819
|
-
statementsToExecute.push(stmnt);
|
72820
|
-
}
|
72821
|
-
}
|
72822
|
-
} else if (statement.type === "sqlite_alter_table_add_column") {
|
72823
|
-
const newTableName = getOldTableName(statement.tableName, meta);
|
72824
|
-
if (statement.column.notNull && !statement.column.default) {
|
72825
|
-
const res = await connection.query(
|
72826
|
-
`select count(*) as count from \`${newTableName}\``
|
72827
|
-
);
|
72828
|
-
const count = Number(res[0].count);
|
72829
|
-
if (count > 0) {
|
72830
|
-
infoToPrint.push(
|
72831
|
-
`\xB7 You're about to add not-null ${source_default.underline(
|
72832
|
-
statement.column.name
|
72833
|
-
)} column without default value, which contains ${count} items`
|
72834
|
-
);
|
72835
|
-
tablesToTruncate.push(newTableName);
|
72836
|
-
statementsToExecute.push(`delete from ${newTableName};`);
|
72837
|
-
shouldAskForApprove = true;
|
72838
|
-
}
|
72839
|
-
}
|
72840
|
-
if (statement.column.primaryKey) {
|
72841
|
-
tablesContext[newTableName] = [
|
72842
|
-
..._moveDataStatements(statement.tableName, json2, true)
|
72843
|
-
];
|
72844
|
-
const tablesReferncingCurrent = [];
|
72845
|
-
for (const table4 of Object.values(json1.tables)) {
|
72846
|
-
const tablesRefs = Object.values(json1.tables[table4.name].foreignKeys).filter(
|
72847
|
-
(t2) => SQLiteSquasher.unsquashPushFK(t2).tableTo === newTableName
|
72848
|
-
).map((t2) => SQLiteSquasher.unsquashPushFK(t2).tableFrom);
|
72849
|
-
tablesReferncingCurrent.push(...tablesRefs);
|
72850
|
-
}
|
72851
|
-
const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
|
72852
|
-
for (const table4 of uniqueTableRefs) {
|
72853
|
-
if (typeof tablesContext[table4] === "undefined") {
|
72854
|
-
tablesContext[table4] = [..._moveDataStatements(table4, json2)];
|
72855
|
-
}
|
72856
|
-
}
|
72857
|
-
} else {
|
72858
|
-
if (typeof tablesContext[newTableName] === "undefined") {
|
72859
|
-
const stmnt = fromJson([statement], "sqlite")[0];
|
72860
|
-
statementsToExecute.push(stmnt);
|
72861
|
-
}
|
72862
|
-
}
|
72863
|
-
} else if (statement.type === "alter_table_alter_column_set_type" || statement.type === "alter_table_alter_column_set_default" || statement.type === "alter_table_alter_column_drop_default" || statement.type === "alter_table_alter_column_set_notnull" || statement.type === "alter_table_alter_column_drop_notnull" || statement.type === "alter_table_alter_column_drop_autoincrement" || statement.type === "alter_table_alter_column_set_autoincrement" || statement.type === "alter_table_alter_column_drop_pk" || statement.type === "alter_table_alter_column_set_pk") {
|
72864
|
-
if (!(statement.type === "alter_table_alter_column_set_notnull" && statement.columnPk)) {
|
72865
|
-
const newTableName = getOldTableName(statement.tableName, meta);
|
72866
|
-
if (statement.type === "alter_table_alter_column_set_notnull" && typeof statement.columnDefault === "undefined") {
|
72867
|
-
const res = await connection.query(
|
72868
|
-
`select count(*) as count from \`${newTableName}\``
|
72869
|
-
);
|
72870
|
-
const count = Number(res[0].count);
|
72871
|
-
if (count > 0) {
|
72872
|
-
infoToPrint.push(
|
72873
|
-
`\xB7 You're about to add not-null constraint to ${source_default.underline(
|
72874
|
-
statement.columnName
|
72875
|
-
)} column without default value, which contains ${count} items`
|
72876
|
-
);
|
72877
|
-
tablesToTruncate.push(newTableName);
|
72878
|
-
shouldAskForApprove = true;
|
72879
|
-
}
|
72880
|
-
tablesContext[newTableName] = _moveDataStatements(
|
72881
|
-
statement.tableName,
|
72882
|
-
json1,
|
72883
|
-
true
|
72884
|
-
);
|
72885
|
-
} else {
|
72886
|
-
if (typeof tablesContext[newTableName] === "undefined") {
|
72887
|
-
tablesContext[newTableName] = _moveDataStatements(
|
72888
|
-
statement.tableName,
|
72889
|
-
json1
|
72890
|
-
);
|
72891
|
-
}
|
72892
|
-
}
|
72893
|
-
const tablesReferncingCurrent = [];
|
72894
|
-
for (const table4 of Object.values(json1.tables)) {
|
72895
|
-
const tablesRefs = Object.values(json1.tables[table4.name].foreignKeys).filter(
|
72896
|
-
(t2) => SQLiteSquasher.unsquashPushFK(t2).tableTo === newTableName
|
72897
|
-
).map((t2) => {
|
72898
|
-
return getNewTableName(
|
72899
|
-
SQLiteSquasher.unsquashPushFK(t2).tableFrom,
|
72900
|
-
meta
|
72901
|
-
);
|
72902
|
-
});
|
72903
|
-
tablesReferncingCurrent.push(...tablesRefs);
|
72904
|
-
}
|
72905
|
-
const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
|
72906
|
-
for (const table4 of uniqueTableRefs) {
|
72907
|
-
if (typeof tablesContext[table4] === "undefined") {
|
72908
|
-
tablesContext[table4] = [..._moveDataStatements(table4, json1)];
|
72909
|
-
}
|
72910
|
-
}
|
72911
|
-
}
|
72912
|
-
} else if (statement.type === "create_reference" || statement.type === "delete_reference" || statement.type === "alter_reference") {
|
72913
|
-
const fk4 = SQLiteSquasher.unsquashPushFK(statement.data);
|
72914
|
-
if (typeof tablesContext[statement.tableName] === "undefined") {
|
72915
|
-
tablesContext[statement.tableName] = _moveDataStatements(
|
72916
|
-
statement.tableName,
|
72917
|
-
json2
|
72918
|
-
);
|
72919
|
-
}
|
72920
|
-
} else if (statement.type === "create_composite_pk" || statement.type === "alter_composite_pk" || statement.type === "delete_composite_pk" || statement.type === "create_unique_constraint" || statement.type === "delete_unique_constraint") {
|
72921
|
-
const newTableName = getOldTableName(statement.tableName, meta);
|
72922
|
-
if (typeof tablesContext[newTableName] === "undefined") {
|
72923
|
-
tablesContext[newTableName] = _moveDataStatements(
|
72924
|
-
statement.tableName,
|
72925
|
-
json2
|
72926
|
-
);
|
72927
|
-
}
|
72928
|
-
} else {
|
72929
|
-
const stmnt = fromJson([statement], "sqlite");
|
72930
|
-
if (typeof stmnt !== "undefined") {
|
72931
|
-
statementsToExecute.push(...stmnt);
|
72932
|
-
}
|
72933
|
-
}
|
72934
|
-
}
|
72935
|
-
for (const context of Object.values(tablesContext)) {
|
72936
|
-
statementsToExecute.push(...context);
|
72937
|
-
}
|
72938
|
-
return {
|
72939
|
-
statementsToExecute,
|
72940
|
-
shouldAskForApprove,
|
72941
|
-
infoToPrint,
|
72942
|
-
columnsToRemove: [...new Set(columnsToRemove)],
|
72943
|
-
schemasToRemove: [...new Set(schemasToRemove)],
|
72944
|
-
tablesToTruncate: [...new Set(tablesToTruncate)],
|
72945
|
-
tablesToRemove: [...new Set(tablesToRemove)]
|
72946
|
-
};
|
72947
|
-
};
|
72948
|
-
}
|
72949
|
-
});
|
72950
|
-
|
72951
74114
|
// ../node_modules/.pnpm/minimatch@7.4.6/node_modules/minimatch/dist/mjs/brace-expressions.js
|
72952
74115
|
var posixClasses, braceEscape, regexpEscape, rangesToString, parseClass;
|
72953
74116
|
var init_brace_expressions = __esm({
|
@@ -74510,11 +75673,12 @@ var init_sqliteIntrospect = __esm({
|
|
74510
75673
|
// src/cli/commands/push.ts
|
74511
75674
|
var push_exports = {};
|
74512
75675
|
__export(push_exports, {
|
75676
|
+
libSQLPush: () => libSQLPush,
|
74513
75677
|
mysqlPush: () => mysqlPush,
|
74514
75678
|
pgPush: () => pgPush,
|
74515
75679
|
sqlitePush: () => sqlitePush
|
74516
75680
|
});
|
74517
|
-
var import_hanji11, mysqlPush, pgPush, sqlitePush;
|
75681
|
+
var import_hanji11, mysqlPush, pgPush, sqlitePush, libSQLPush;
|
74518
75682
|
var init_push = __esm({
|
74519
75683
|
"src/cli/commands/push.ts"() {
|
74520
75684
|
"use strict";
|
@@ -74523,6 +75687,7 @@ var init_push = __esm({
|
|
74523
75687
|
init_sqlgenerator();
|
74524
75688
|
init_selector_ui();
|
74525
75689
|
init_outputs();
|
75690
|
+
init_libSqlPushUtils();
|
74526
75691
|
init_mysqlPushUtils();
|
74527
75692
|
init_pgPushUtils();
|
74528
75693
|
init_sqlitePushUtils();
|
@@ -74550,7 +75715,7 @@ var init_push = __esm({
|
|
74550
75715
|
tablesToTruncate,
|
74551
75716
|
infoToPrint,
|
74552
75717
|
schemasToRemove
|
74553
|
-
} = await
|
75718
|
+
} = await logSuggestionsAndReturn2(
|
74554
75719
|
db,
|
74555
75720
|
filteredStatements,
|
74556
75721
|
statements.validatedCur
|
@@ -74569,7 +75734,6 @@ var init_push = __esm({
|
|
74569
75734
|
}
|
74570
75735
|
});
|
74571
75736
|
if (verbose) {
|
74572
|
-
console.log();
|
74573
75737
|
console.log(
|
74574
75738
|
withStyle.warning("You are about to execute current statements:")
|
74575
75739
|
);
|
@@ -74720,11 +75884,100 @@ var init_push = __esm({
|
|
74720
75884
|
tablesToTruncate,
|
74721
75885
|
infoToPrint,
|
74722
75886
|
schemasToRemove
|
74723
|
-
} = await
|
75887
|
+
} = await logSuggestionsAndReturn(
|
74724
75888
|
db,
|
74725
75889
|
statements.statements,
|
75890
|
+
statements.squashedPrev,
|
74726
75891
|
statements.squashedCur,
|
75892
|
+
statements.meta
|
75893
|
+
);
|
75894
|
+
if (verbose && statementsToExecute.length > 0) {
|
75895
|
+
console.log();
|
75896
|
+
console.log(
|
75897
|
+
withStyle.warning("You are about to execute current statements:")
|
75898
|
+
);
|
75899
|
+
console.log();
|
75900
|
+
console.log(statementsToExecute.map((s2) => source_default.blue(s2)).join("\n"));
|
75901
|
+
console.log();
|
75902
|
+
}
|
75903
|
+
if (!force && strict) {
|
75904
|
+
if (!shouldAskForApprove) {
|
75905
|
+
const { status, data } = await (0, import_hanji11.render)(
|
75906
|
+
new Select(["No, abort", `Yes, I want to execute all statements`])
|
75907
|
+
);
|
75908
|
+
if ((data == null ? void 0 : data.index) === 0) {
|
75909
|
+
(0, import_hanji11.render)(`[${source_default.red("x")}] All changes were aborted`);
|
75910
|
+
process.exit(0);
|
75911
|
+
}
|
75912
|
+
}
|
75913
|
+
}
|
75914
|
+
if (!force && shouldAskForApprove) {
|
75915
|
+
console.log(withStyle.warning("Found data-loss statements:"));
|
75916
|
+
console.log(infoToPrint.join("\n"));
|
75917
|
+
console.log();
|
75918
|
+
console.log(
|
75919
|
+
source_default.red.bold(
|
75920
|
+
"THIS ACTION WILL CAUSE DATA LOSS AND CANNOT BE REVERTED\n"
|
75921
|
+
)
|
75922
|
+
);
|
75923
|
+
console.log(source_default.white("Do you still want to push changes?"));
|
75924
|
+
const { status, data } = await (0, import_hanji11.render)(
|
75925
|
+
new Select([
|
75926
|
+
"No, abort",
|
75927
|
+
`Yes, I want to${tablesToRemove.length > 0 ? ` remove ${tablesToRemove.length} ${tablesToRemove.length > 1 ? "tables" : "table"},` : " "}${columnsToRemove.length > 0 ? ` remove ${columnsToRemove.length} ${columnsToRemove.length > 1 ? "columns" : "column"},` : " "}${tablesToTruncate.length > 0 ? ` truncate ${tablesToTruncate.length} ${tablesToTruncate.length > 1 ? "tables" : "table"}` : ""}`.trimEnd().replace(/(^,)|(,$)/g, "").replace(/ +(?= )/g, "")
|
75928
|
+
])
|
75929
|
+
);
|
75930
|
+
if ((data == null ? void 0 : data.index) === 0) {
|
75931
|
+
(0, import_hanji11.render)(`[${source_default.red("x")}] All changes were aborted`);
|
75932
|
+
process.exit(0);
|
75933
|
+
}
|
75934
|
+
}
|
75935
|
+
if (statementsToExecute.length === 0) {
|
75936
|
+
(0, import_hanji11.render)(`
|
75937
|
+
[${source_default.blue("i")}] No changes detected`);
|
75938
|
+
} else {
|
75939
|
+
if (!("driver" in credentials2)) {
|
75940
|
+
await db.query("begin");
|
75941
|
+
try {
|
75942
|
+
for (const dStmnt of statementsToExecute) {
|
75943
|
+
await db.query(dStmnt);
|
75944
|
+
}
|
75945
|
+
await db.query("commit");
|
75946
|
+
} catch (e2) {
|
75947
|
+
console.error(e2);
|
75948
|
+
await db.query("rollback");
|
75949
|
+
process.exit(1);
|
75950
|
+
}
|
75951
|
+
} else if (credentials2.driver === "turso") {
|
75952
|
+
await db.batch(statementsToExecute.map((it) => ({ query: it })));
|
75953
|
+
}
|
75954
|
+
(0, import_hanji11.render)(`[${source_default.green("\u2713")}] Changes applied`);
|
75955
|
+
}
|
75956
|
+
}
|
75957
|
+
};
|
75958
|
+
libSQLPush = async (schemaPath, verbose, strict, credentials2, tablesFilter, force) => {
|
75959
|
+
const { connectToSQLite: connectToSQLite2 } = await Promise.resolve().then(() => (init_connections(), connections_exports));
|
75960
|
+
const { sqlitePushIntrospect: sqlitePushIntrospect2 } = await Promise.resolve().then(() => (init_sqliteIntrospect(), sqliteIntrospect_exports));
|
75961
|
+
const db = await connectToSQLite2(credentials2);
|
75962
|
+
const { schema: schema5 } = await sqlitePushIntrospect2(db, tablesFilter);
|
75963
|
+
const { prepareLibSQLPush: prepareLibSQLPush2 } = await Promise.resolve().then(() => (init_migrate(), migrate_exports));
|
75964
|
+
const statements = await prepareLibSQLPush2(schemaPath, schema5);
|
75965
|
+
if (statements.sqlStatements.length === 0) {
|
75966
|
+
(0, import_hanji11.render)(`
|
75967
|
+
[${source_default.blue("i")}] No changes detected`);
|
75968
|
+
} else {
|
75969
|
+
const {
|
75970
|
+
shouldAskForApprove,
|
75971
|
+
statementsToExecute,
|
75972
|
+
columnsToRemove,
|
75973
|
+
tablesToRemove,
|
75974
|
+
tablesToTruncate,
|
75975
|
+
infoToPrint
|
75976
|
+
} = await libSqlLogSuggestionsAndReturn(
|
75977
|
+
db,
|
75978
|
+
statements.statements,
|
74727
75979
|
statements.squashedPrev,
|
75980
|
+
statements.squashedCur,
|
74728
75981
|
statements.meta
|
74729
75982
|
);
|
74730
75983
|
if (verbose && statementsToExecute.length > 0) {
|
@@ -75265,6 +76518,7 @@ var init_introspect_mysql = __esm({
|
|
75265
76518
|
patched = patched.startsWith("datetime(") ? "datetime" : patched;
|
75266
76519
|
patched = patched.startsWith("varbinary(") ? "varbinary" : patched;
|
75267
76520
|
patched = patched.startsWith("int(") ? "int" : patched;
|
76521
|
+
patched = patched.startsWith("double(") ? "double" : patched;
|
75268
76522
|
return patched;
|
75269
76523
|
}).filter((type) => {
|
75270
76524
|
return mysqlImportsList.has(type);
|
@@ -83076,7 +84330,7 @@ var push = command({
|
|
83076
84330
|
schemasFilter,
|
83077
84331
|
force
|
83078
84332
|
);
|
83079
|
-
} else if (dialect7 === "sqlite") {
|
84333
|
+
} else if (dialect7 === "sqlite" && !("driver" in credentials2)) {
|
83080
84334
|
const { sqlitePush: sqlitePush2 } = await Promise.resolve().then(() => (init_push(), push_exports));
|
83081
84335
|
await sqlitePush2(
|
83082
84336
|
schemaPath,
|
@@ -83086,6 +84340,16 @@ var push = command({
|
|
83086
84340
|
tablesFilter,
|
83087
84341
|
force
|
83088
84342
|
);
|
84343
|
+
} else if (dialect7 === "sqlite" && ("driver" in credentials2 && credentials2.driver === "turso")) {
|
84344
|
+
const { libSQLPush: libSQLPush2 } = await Promise.resolve().then(() => (init_push(), push_exports));
|
84345
|
+
await libSQLPush2(
|
84346
|
+
schemaPath,
|
84347
|
+
verbose,
|
84348
|
+
strict,
|
84349
|
+
credentials2,
|
84350
|
+
tablesFilter,
|
84351
|
+
force
|
84352
|
+
);
|
83089
84353
|
} else {
|
83090
84354
|
assertUnreachable(dialect7);
|
83091
84355
|
}
|
@@ -83369,7 +84633,7 @@ init_utils2();
|
|
83369
84633
|
var version2 = async () => {
|
83370
84634
|
const { npmVersion } = await ormCoreVersions();
|
83371
84635
|
const ormVersion = npmVersion ? `drizzle-orm: v${npmVersion}` : "";
|
83372
|
-
const envVersion = "0.
|
84636
|
+
const envVersion = "0.24.0-38d6dab";
|
83373
84637
|
const kitVersion = envVersion ? `v${envVersion}` : "--";
|
83374
84638
|
const versions = `drizzle-kit: ${kitVersion}
|
83375
84639
|
${ormVersion}`;
|