drizzle-kit 0.24.1 → 0.24.2-1321cf9
Sign up to get free protection for your applications and to get access to all the features.
- package/api.js +1250 -665
- package/api.mjs +1250 -665
- package/bin.cjs +50406 -47005
- package/index.d.mts +12 -7
- package/index.d.ts +12 -7
- package/package.json +2 -2
- package/utils.js +19 -0
- package/utils.mjs +17 -0
package/api.js
CHANGED
@@ -8361,6 +8361,13 @@ var init_sqliteSchema = __esm({
|
|
8361
8361
|
function isPgArrayType(sqlType) {
|
8362
8362
|
return sqlType.match(/.*\[\d*\].*|.*\[\].*/g) !== null;
|
8363
8363
|
}
|
8364
|
+
function findAddedAndRemoved(columnNames1, columnNames2) {
|
8365
|
+
const set1 = new Set(columnNames1);
|
8366
|
+
const set2 = new Set(columnNames2);
|
8367
|
+
const addedColumns = columnNames2.filter((it) => !set1.has(it));
|
8368
|
+
const removedColumns = columnNames1.filter((it) => !set2.has(it));
|
8369
|
+
return { addedColumns, removedColumns };
|
8370
|
+
}
|
8364
8371
|
var copy, prepareMigrationMeta, schemaRenameKey, tableRenameKey, columnRenameKey;
|
8365
8372
|
var init_utils = __esm({
|
8366
8373
|
"src/utils.ts"() {
|
@@ -11470,7 +11477,20 @@ var init_jsonDiffer = __esm({
|
|
11470
11477
|
});
|
11471
11478
|
|
11472
11479
|
// src/sqlgenerator.ts
|
11473
|
-
|
11480
|
+
function fromJson(statements, dialect7, action, json2) {
|
11481
|
+
const result = statements.flatMap((statement) => {
|
11482
|
+
const filtered = convertors.filter((it) => {
|
11483
|
+
return it.can(statement, dialect7);
|
11484
|
+
});
|
11485
|
+
const convertor = filtered.length === 1 ? filtered[0] : void 0;
|
11486
|
+
if (!convertor) {
|
11487
|
+
return "";
|
11488
|
+
}
|
11489
|
+
return convertor.convert(statement, json2, action);
|
11490
|
+
}).filter((it) => it !== "");
|
11491
|
+
return result;
|
11492
|
+
}
|
11493
|
+
var pgNativeTypes, isPgNativeType, Convertor, PgCreateTableConvertor, MySqlCreateTableConvertor, SQLiteCreateTableConvertor, PgAlterTableAlterColumnSetGenerated, PgAlterTableAlterColumnDropGenerated, PgAlterTableAlterColumnAlterGenerated, PgAlterTableAddUniqueConstraintConvertor, PgAlterTableDropUniqueConstraintConvertor, MySQLAlterTableAddUniqueConstraintConvertor, MySQLAlterTableDropUniqueConstraintConvertor, CreatePgSequenceConvertor, DropPgSequenceConvertor, RenamePgSequenceConvertor, MovePgSequenceConvertor, AlterPgSequenceConvertor, CreateTypeEnumConvertor, AlterTypeAddValueConvertor, PgDropTableConvertor, MySQLDropTableConvertor, SQLiteDropTableConvertor, PgRenameTableConvertor, SqliteRenameTableConvertor, MySqlRenameTableConvertor, PgAlterTableRenameColumnConvertor, MySqlAlterTableRenameColumnConvertor, SQLiteAlterTableRenameColumnConvertor, PgAlterTableDropColumnConvertor, MySqlAlterTableDropColumnConvertor, SQLiteAlterTableDropColumnConvertor, PgAlterTableAddColumnConvertor, MySqlAlterTableAddColumnConvertor, SQLiteAlterTableAddColumnConvertor, PgAlterTableAlterColumnSetTypeConvertor, PgAlterTableAlterColumnSetDefaultConvertor, PgAlterTableAlterColumnDropDefaultConvertor, PgAlterTableAlterColumnDropGeneratedConvertor, PgAlterTableAlterColumnSetExpressionConvertor, PgAlterTableAlterColumnAlterrGeneratedConvertor, SqliteAlterTableAlterColumnDropGeneratedConvertor, SqliteAlterTableAlterColumnSetExpressionConvertor, SqliteAlterTableAlterColumnAlterGeneratedConvertor, MySqlAlterTableAlterColumnAlterrGeneratedConvertor, MySqlAlterTableAddPk, MySqlAlterTableDropPk, LibSQLModifyColumn, MySqlModifyColumn, PgAlterTableCreateCompositePrimaryKeyConvertor, PgAlterTableDeleteCompositePrimaryKeyConvertor, PgAlterTableAlterCompositePrimaryKeyConvertor, MySqlAlterTableCreateCompositePrimaryKeyConvertor, MySqlAlterTableDeleteCompositePrimaryKeyConvertor, MySqlAlterTableAlterCompositePrimaryKeyConvertor, PgAlterTableAlterColumnSetPrimaryKeyConvertor, PgAlterTableAlterColumnDropPrimaryKeyConvertor, PgAlterTableAlterColumnSetNotNullConvertor, PgAlterTableAlterColumnDropNotNullConvertor, PgCreateForeignKeyConvertor, LibSQLCreateForeignKeyConvertor, MySqlCreateForeignKeyConvertor, PgAlterForeignKeyConvertor, PgDeleteForeignKeyConvertor, MySqlDeleteForeignKeyConvertor, CreatePgIndexConvertor, CreateMySqlIndexConvertor, CreateSqliteIndexConvertor, PgDropIndexConvertor, PgCreateSchemaConvertor, PgRenameSchemaConvertor, PgDropSchemaConvertor, PgAlterTableSetSchemaConvertor, PgAlterTableSetNewSchemaConvertor, PgAlterTableRemoveFromSchemaConvertor, SqliteDropIndexConvertor, MySqlDropIndexConvertor, SQLiteRecreateTableConvertor, LibSQLRecreateTableConvertor, convertors;
|
11474
11494
|
var init_sqlgenerator = __esm({
|
11475
11495
|
"src/sqlgenerator.ts"() {
|
11476
11496
|
"use strict";
|
@@ -11545,11 +11565,11 @@ var init_sqlgenerator = __esm({
|
|
11545
11565
|
const schemaPrefix = column4.typeSchema && column4.typeSchema !== "public" ? `"${column4.typeSchema}".` : "";
|
11546
11566
|
const type = isPgNativeType(column4.type) ? column4.type : `${schemaPrefix}"${column4.type}"`;
|
11547
11567
|
const generated = column4.generated;
|
11548
|
-
const generatedStatement = ` GENERATED ALWAYS AS (${generated?.as}) STORED
|
11568
|
+
const generatedStatement = generated ? ` GENERATED ALWAYS AS (${generated?.as}) STORED` : "";
|
11549
11569
|
const unsquashedIdentity = column4.identity ? PgSquasher.unsquashIdentity(column4.identity) : void 0;
|
11550
11570
|
const identityWithSchema = schema4 ? `"${schema4}"."${unsquashedIdentity?.name}"` : `"${unsquashedIdentity?.name}"`;
|
11551
11571
|
const identity = unsquashedIdentity ? ` GENERATED ${unsquashedIdentity.type === "always" ? "ALWAYS" : "BY DEFAULT"} AS IDENTITY (sequence name ${identityWithSchema}${unsquashedIdentity.increment ? ` INCREMENT BY ${unsquashedIdentity.increment}` : ""}${unsquashedIdentity.minValue ? ` MINVALUE ${unsquashedIdentity.minValue}` : ""}${unsquashedIdentity.maxValue ? ` MAXVALUE ${unsquashedIdentity.maxValue}` : ""}${unsquashedIdentity.startWith ? ` START WITH ${unsquashedIdentity.startWith}` : ""}${unsquashedIdentity.cache ? ` CACHE ${unsquashedIdentity.cache}` : ""}${unsquashedIdentity.cycle ? ` CYCLE` : ""})` : "";
|
11552
|
-
statement += ` "${column4.name}" ${type}${primaryKeyStatement}${defaultStatement}${
|
11572
|
+
statement += ` "${column4.name}" ${type}${primaryKeyStatement}${defaultStatement}${generatedStatement}${notNullStatement}${uniqueConstraint4}${identity}`;
|
11553
11573
|
statement += i === columns.length - 1 ? "" : ",\n";
|
11554
11574
|
}
|
11555
11575
|
if (typeof compositePKs !== "undefined" && compositePKs.length > 0) {
|
@@ -11595,7 +11615,7 @@ var init_sqlgenerator = __esm({
|
|
11595
11615
|
const onUpdateStatement = column4.onUpdate ? ` ON UPDATE CURRENT_TIMESTAMP` : "";
|
11596
11616
|
const autoincrementStatement = column4.autoincrement ? " AUTO_INCREMENT" : "";
|
11597
11617
|
const generatedStatement = column4.generated ? ` GENERATED ALWAYS AS (${column4.generated?.as}) ${column4.generated?.type.toUpperCase()}` : "";
|
11598
|
-
statement += ` \`${column4.name}\` ${column4.type}${autoincrementStatement}${primaryKeyStatement}${notNullStatement}${defaultStatement}${onUpdateStatement}
|
11618
|
+
statement += ` \`${column4.name}\` ${column4.type}${autoincrementStatement}${primaryKeyStatement}${generatedStatement}${notNullStatement}${defaultStatement}${onUpdateStatement}`;
|
11599
11619
|
statement += i === columns.length - 1 ? "" : ",\n";
|
11600
11620
|
}
|
11601
11621
|
if (typeof compositePKs !== "undefined" && compositePKs.length > 0) {
|
@@ -11622,7 +11642,7 @@ var init_sqlgenerator = __esm({
|
|
11622
11642
|
};
|
11623
11643
|
SQLiteCreateTableConvertor = class extends Convertor {
|
11624
11644
|
can(statement, dialect7) {
|
11625
|
-
return statement.type === "sqlite_create_table" && dialect7 === "sqlite";
|
11645
|
+
return statement.type === "sqlite_create_table" && (dialect7 === "sqlite" || dialect7 === "turso");
|
11626
11646
|
}
|
11627
11647
|
convert(st) {
|
11628
11648
|
const {
|
@@ -11643,7 +11663,7 @@ var init_sqlgenerator = __esm({
|
|
11643
11663
|
const autoincrementStatement = column4.autoincrement ? " AUTOINCREMENT" : "";
|
11644
11664
|
const generatedStatement = column4.generated ? ` GENERATED ALWAYS AS ${column4.generated.as} ${column4.generated.type.toUpperCase()}` : "";
|
11645
11665
|
statement += " ";
|
11646
|
-
statement += `\`${column4.name}\` ${column4.type}${primaryKeyStatement}${autoincrementStatement}${defaultStatement}${
|
11666
|
+
statement += `\`${column4.name}\` ${column4.type}${primaryKeyStatement}${autoincrementStatement}${defaultStatement}${generatedStatement}${notNullStatement}`;
|
11647
11667
|
statement += i === columns.length - 1 ? "" : ",\n";
|
11648
11668
|
}
|
11649
11669
|
compositePKs.forEach((it) => {
|
@@ -11792,32 +11812,6 @@ var init_sqlgenerator = __esm({
|
|
11792
11812
|
return `ALTER TABLE \`${statement.tableName}\` DROP INDEX \`${unsquashed.name}\`;`;
|
11793
11813
|
}
|
11794
11814
|
};
|
11795
|
-
SQLiteAlterTableAddUniqueConstraintConvertor = class extends Convertor {
|
11796
|
-
can(statement, dialect7) {
|
11797
|
-
return statement.type === "create_unique_constraint" && dialect7 === "sqlite";
|
11798
|
-
}
|
11799
|
-
convert(statement) {
|
11800
|
-
return `/*
|
11801
|
-
SQLite does not support "Adding unique constraint to an existing table" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
11802
|
-
Please refer to: https://www.techonthenet.com/sqlite/unique.php
|
11803
|
-
|
11804
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
11805
|
-
*/`;
|
11806
|
-
}
|
11807
|
-
};
|
11808
|
-
SQLiteAlterTableDropUniqueConstraintConvertor = class extends Convertor {
|
11809
|
-
can(statement, dialect7) {
|
11810
|
-
return statement.type === "delete_unique_constraint" && dialect7 === "sqlite";
|
11811
|
-
}
|
11812
|
-
convert(statement) {
|
11813
|
-
return `/*
|
11814
|
-
SQLite does not support "Dropping unique constraint from an existing table" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
11815
|
-
Please refer to: https://www.techonthenet.com/sqlite/unique.php
|
11816
|
-
|
11817
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
11818
|
-
*/`;
|
11819
|
-
}
|
11820
|
-
};
|
11821
11815
|
CreatePgSequenceConvertor = class extends Convertor {
|
11822
11816
|
can(statement, dialect7) {
|
11823
11817
|
return statement.type === "create_sequence" && dialect7 === "postgresql";
|
@@ -11925,7 +11919,7 @@ var init_sqlgenerator = __esm({
|
|
11925
11919
|
};
|
11926
11920
|
SQLiteDropTableConvertor = class extends Convertor {
|
11927
11921
|
can(statement, dialect7) {
|
11928
|
-
return statement.type === "drop_table" && dialect7 === "sqlite";
|
11922
|
+
return statement.type === "drop_table" && (dialect7 === "sqlite" || dialect7 === "turso");
|
11929
11923
|
}
|
11930
11924
|
convert(statement) {
|
11931
11925
|
const { tableName } = statement;
|
@@ -11945,7 +11939,7 @@ var init_sqlgenerator = __esm({
|
|
11945
11939
|
};
|
11946
11940
|
SqliteRenameTableConvertor = class extends Convertor {
|
11947
11941
|
can(statement, dialect7) {
|
11948
|
-
return statement.type === "rename_table" && dialect7 === "sqlite";
|
11942
|
+
return statement.type === "rename_table" && (dialect7 === "sqlite" || dialect7 === "turso");
|
11949
11943
|
}
|
11950
11944
|
convert(statement) {
|
11951
11945
|
const { tableNameFrom, tableNameTo } = statement;
|
@@ -11982,11 +11976,11 @@ var init_sqlgenerator = __esm({
|
|
11982
11976
|
};
|
11983
11977
|
SQLiteAlterTableRenameColumnConvertor = class extends Convertor {
|
11984
11978
|
can(statement, dialect7) {
|
11985
|
-
return statement.type === "alter_table_rename_column" && dialect7 === "sqlite";
|
11979
|
+
return statement.type === "alter_table_rename_column" && (dialect7 === "sqlite" || dialect7 === "turso");
|
11986
11980
|
}
|
11987
11981
|
convert(statement) {
|
11988
11982
|
const { tableName, oldColumnName, newColumnName } = statement;
|
11989
|
-
return `ALTER TABLE \`${tableName}\` RENAME COLUMN
|
11983
|
+
return `ALTER TABLE \`${tableName}\` RENAME COLUMN "${oldColumnName}" TO "${newColumnName}";`;
|
11990
11984
|
}
|
11991
11985
|
};
|
11992
11986
|
PgAlterTableDropColumnConvertor = class extends Convertor {
|
@@ -12010,7 +12004,7 @@ var init_sqlgenerator = __esm({
|
|
12010
12004
|
};
|
12011
12005
|
SQLiteAlterTableDropColumnConvertor = class extends Convertor {
|
12012
12006
|
can(statement, dialect7) {
|
12013
|
-
return statement.type === "alter_table_drop_column" && dialect7 === "sqlite";
|
12007
|
+
return statement.type === "alter_table_drop_column" && (dialect7 === "sqlite" || dialect7 === "turso");
|
12014
12008
|
}
|
12015
12009
|
convert(statement) {
|
12016
12010
|
const { tableName, columnName } = statement;
|
@@ -12033,8 +12027,8 @@ var init_sqlgenerator = __esm({
|
|
12033
12027
|
const unsquashedIdentity = identity ? PgSquasher.unsquashIdentity(identity) : void 0;
|
12034
12028
|
const identityWithSchema = schema4 ? `"${schema4}"."${unsquashedIdentity?.name}"` : `"${unsquashedIdentity?.name}"`;
|
12035
12029
|
const identityStatement = unsquashedIdentity ? ` GENERATED ${unsquashedIdentity.type === "always" ? "ALWAYS" : "BY DEFAULT"} AS IDENTITY (sequence name ${identityWithSchema}${unsquashedIdentity.increment ? ` INCREMENT BY ${unsquashedIdentity.increment}` : ""}${unsquashedIdentity.minValue ? ` MINVALUE ${unsquashedIdentity.minValue}` : ""}${unsquashedIdentity.maxValue ? ` MAXVALUE ${unsquashedIdentity.maxValue}` : ""}${unsquashedIdentity.startWith ? ` START WITH ${unsquashedIdentity.startWith}` : ""}${unsquashedIdentity.cache ? ` CACHE ${unsquashedIdentity.cache}` : ""}${unsquashedIdentity.cycle ? ` CYCLE` : ""})` : "";
|
12036
|
-
const generatedStatement = ` GENERATED ALWAYS AS (${generated?.as}) STORED
|
12037
|
-
return `ALTER TABLE ${tableNameWithSchema} ADD COLUMN "${name2}" ${fixedType}${primaryKeyStatement}${defaultStatement}${
|
12030
|
+
const generatedStatement = generated ? ` GENERATED ALWAYS AS (${generated?.as}) STORED` : "";
|
12031
|
+
return `ALTER TABLE ${tableNameWithSchema} ADD COLUMN "${name2}" ${fixedType}${primaryKeyStatement}${defaultStatement}${generatedStatement}${notNullStatement}${identityStatement};`;
|
12038
12032
|
}
|
12039
12033
|
};
|
12040
12034
|
MySqlAlterTableAddColumnConvertor = class extends Convertor {
|
@@ -12058,12 +12052,12 @@ var init_sqlgenerator = __esm({
|
|
12058
12052
|
const autoincrementStatement = `${autoincrement ? " AUTO_INCREMENT" : ""}`;
|
12059
12053
|
const onUpdateStatement = `${onUpdate ? " ON UPDATE CURRENT_TIMESTAMP" : ""}`;
|
12060
12054
|
const generatedStatement = generated ? ` GENERATED ALWAYS AS (${generated?.as}) ${generated?.type.toUpperCase()}` : "";
|
12061
|
-
return `ALTER TABLE \`${tableName}\` ADD \`${name2}\` ${type}${primaryKeyStatement}${autoincrementStatement}${defaultStatement}${
|
12055
|
+
return `ALTER TABLE \`${tableName}\` ADD \`${name2}\` ${type}${primaryKeyStatement}${autoincrementStatement}${defaultStatement}${generatedStatement}${notNullStatement}${onUpdateStatement};`;
|
12062
12056
|
}
|
12063
12057
|
};
|
12064
12058
|
SQLiteAlterTableAddColumnConvertor = class extends Convertor {
|
12065
12059
|
can(statement, dialect7) {
|
12066
|
-
return statement.type === "sqlite_alter_table_add_column" && dialect7 === "sqlite";
|
12060
|
+
return statement.type === "sqlite_alter_table_add_column" && (dialect7 === "sqlite" || dialect7 === "turso");
|
12067
12061
|
}
|
12068
12062
|
convert(statement) {
|
12069
12063
|
const { tableName, column: column4, referenceData } = statement;
|
@@ -12074,7 +12068,7 @@ var init_sqlgenerator = __esm({
|
|
12074
12068
|
const referenceAsObject = referenceData ? SQLiteSquasher.unsquashFK(referenceData) : void 0;
|
12075
12069
|
const referenceStatement = `${referenceAsObject ? ` REFERENCES ${referenceAsObject.tableTo}(${referenceAsObject.columnsTo})` : ""}`;
|
12076
12070
|
const generatedStatement = generated ? ` GENERATED ALWAYS AS ${generated.as} ${generated.type.toUpperCase()}` : "";
|
12077
|
-
return `ALTER TABLE \`${tableName}\` ADD \`${name2}\` ${type}${primaryKeyStatement}${defaultStatement}${
|
12071
|
+
return `ALTER TABLE \`${tableName}\` ADD \`${name2}\` ${type}${primaryKeyStatement}${defaultStatement}${generatedStatement}${notNullStatement}${referenceStatement};`;
|
12078
12072
|
}
|
12079
12073
|
};
|
12080
12074
|
PgAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
|
@@ -12087,21 +12081,6 @@ var init_sqlgenerator = __esm({
|
|
12087
12081
|
return `ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DATA TYPE ${newDataType};`;
|
12088
12082
|
}
|
12089
12083
|
};
|
12090
|
-
SQLiteAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
|
12091
|
-
can(statement, dialect7) {
|
12092
|
-
return statement.type === "alter_table_alter_column_set_type" && dialect7 === "sqlite";
|
12093
|
-
}
|
12094
|
-
convert(statement) {
|
12095
|
-
return `/*
|
12096
|
-
SQLite does not support "Changing existing column type" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
12097
|
-
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
12098
|
-
https://www.sqlite.org/lang_altertable.html
|
12099
|
-
https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
|
12100
|
-
|
12101
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
12102
|
-
*/`;
|
12103
|
-
}
|
12104
|
-
};
|
12105
12084
|
PgAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
|
12106
12085
|
can(statement, dialect7) {
|
12107
12086
|
return statement.type === "alter_table_alter_column_set_default" && dialect7 === "postgresql";
|
@@ -12112,21 +12091,6 @@ var init_sqlgenerator = __esm({
|
|
12112
12091
|
return `ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DEFAULT ${statement.newDefaultValue};`;
|
12113
12092
|
}
|
12114
12093
|
};
|
12115
|
-
SqliteAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
|
12116
|
-
can(statement, dialect7) {
|
12117
|
-
return statement.type === "alter_table_alter_column_set_default" && dialect7 === "sqlite";
|
12118
|
-
}
|
12119
|
-
convert(statement) {
|
12120
|
-
return `/*
|
12121
|
-
SQLite does not support "Set default to column" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
12122
|
-
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
12123
|
-
https://www.sqlite.org/lang_altertable.html
|
12124
|
-
https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
|
12125
|
-
|
12126
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
12127
|
-
*/`;
|
12128
|
-
}
|
12129
|
-
};
|
12130
12094
|
PgAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
|
12131
12095
|
can(statement, dialect7) {
|
12132
12096
|
return statement.type === "alter_table_alter_column_drop_default" && dialect7 === "postgresql";
|
@@ -12225,7 +12189,7 @@ var init_sqlgenerator = __esm({
|
|
12225
12189
|
};
|
12226
12190
|
SqliteAlterTableAlterColumnDropGeneratedConvertor = class extends Convertor {
|
12227
12191
|
can(statement, dialect7) {
|
12228
|
-
return statement.type === "alter_table_alter_column_drop_generated" && dialect7 === "sqlite";
|
12192
|
+
return statement.type === "alter_table_alter_column_drop_generated" && (dialect7 === "sqlite" || dialect7 === "turso");
|
12229
12193
|
}
|
12230
12194
|
convert(statement) {
|
12231
12195
|
const {
|
@@ -12266,7 +12230,7 @@ var init_sqlgenerator = __esm({
|
|
12266
12230
|
};
|
12267
12231
|
SqliteAlterTableAlterColumnSetExpressionConvertor = class extends Convertor {
|
12268
12232
|
can(statement, dialect7) {
|
12269
|
-
return statement.type === "alter_table_alter_column_set_generated" && dialect7 === "sqlite";
|
12233
|
+
return statement.type === "alter_table_alter_column_set_generated" && (dialect7 === "sqlite" || dialect7 === "turso");
|
12270
12234
|
}
|
12271
12235
|
convert(statement) {
|
12272
12236
|
const {
|
@@ -12307,7 +12271,7 @@ var init_sqlgenerator = __esm({
|
|
12307
12271
|
};
|
12308
12272
|
SqliteAlterTableAlterColumnAlterGeneratedConvertor = class extends Convertor {
|
12309
12273
|
can(statement, dialect7) {
|
12310
|
-
return statement.type === "alter_table_alter_column_alter_generated" && dialect7 === "sqlite";
|
12274
|
+
return statement.type === "alter_table_alter_column_alter_generated" && (dialect7 === "sqlite" || dialect7 === "turso");
|
12311
12275
|
}
|
12312
12276
|
convert(statement) {
|
12313
12277
|
const {
|
@@ -12400,6 +12364,67 @@ var init_sqlgenerator = __esm({
|
|
12400
12364
|
return `ALTER TABLE \`${statement.tableName}\` DROP PRIMARY KEY`;
|
12401
12365
|
}
|
12402
12366
|
};
|
12367
|
+
LibSQLModifyColumn = class extends Convertor {
|
12368
|
+
can(statement, dialect7) {
|
12369
|
+
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 === "turso";
|
12370
|
+
}
|
12371
|
+
convert(statement, json2) {
|
12372
|
+
const { tableName, columnName } = statement;
|
12373
|
+
let columnType = ``;
|
12374
|
+
let columnDefault = "";
|
12375
|
+
let columnNotNull = "";
|
12376
|
+
const sqlStatements = [];
|
12377
|
+
const indexes = [];
|
12378
|
+
for (const table4 of Object.values(json2.tables)) {
|
12379
|
+
for (const index4 of Object.values(table4.indexes)) {
|
12380
|
+
const unsquashed = SQLiteSquasher.unsquashIdx(index4);
|
12381
|
+
sqlStatements.push(`DROP INDEX IF EXISTS "${unsquashed.name}";`);
|
12382
|
+
indexes.push({ ...unsquashed, tableName: table4.name });
|
12383
|
+
}
|
12384
|
+
}
|
12385
|
+
switch (statement.type) {
|
12386
|
+
case "alter_table_alter_column_set_type":
|
12387
|
+
columnType = ` ${statement.newDataType}`;
|
12388
|
+
columnDefault = statement.columnDefault ? ` DEFAULT ${statement.columnDefault}` : "";
|
12389
|
+
columnNotNull = statement.columnNotNull ? ` NOT NULL` : "";
|
12390
|
+
break;
|
12391
|
+
case "alter_table_alter_column_drop_notnull":
|
12392
|
+
columnType = ` ${statement.newDataType}`;
|
12393
|
+
columnDefault = statement.columnDefault ? ` DEFAULT ${statement.columnDefault}` : "";
|
12394
|
+
columnNotNull = "";
|
12395
|
+
break;
|
12396
|
+
case "alter_table_alter_column_set_notnull":
|
12397
|
+
columnType = ` ${statement.newDataType}`;
|
12398
|
+
columnDefault = statement.columnDefault ? ` DEFAULT ${statement.columnDefault}` : "";
|
12399
|
+
columnNotNull = ` NOT NULL`;
|
12400
|
+
break;
|
12401
|
+
case "alter_table_alter_column_set_default":
|
12402
|
+
columnType = ` ${statement.newDataType}`;
|
12403
|
+
columnDefault = ` DEFAULT ${statement.newDefaultValue}`;
|
12404
|
+
columnNotNull = statement.columnNotNull ? ` NOT NULL` : "";
|
12405
|
+
break;
|
12406
|
+
case "alter_table_alter_column_drop_default":
|
12407
|
+
columnType = ` ${statement.newDataType}`;
|
12408
|
+
columnDefault = "";
|
12409
|
+
columnNotNull = statement.columnNotNull ? ` NOT NULL` : "";
|
12410
|
+
break;
|
12411
|
+
}
|
12412
|
+
columnDefault = columnDefault instanceof Date ? columnDefault.toISOString() : columnDefault;
|
12413
|
+
sqlStatements.push(
|
12414
|
+
`ALTER TABLE \`${tableName}\` ALTER COLUMN "${columnName}" TO "${columnName}"${columnType}${columnNotNull}${columnDefault};`
|
12415
|
+
);
|
12416
|
+
for (const index4 of indexes) {
|
12417
|
+
const indexPart = index4.isUnique ? "UNIQUE INDEX" : "INDEX";
|
12418
|
+
const whereStatement = index4.where ? ` WHERE ${index4.where}` : "";
|
12419
|
+
const uniqueString = index4.columns.map((it) => `\`${it}\``).join(",");
|
12420
|
+
const tableName2 = index4.tableName;
|
12421
|
+
sqlStatements.push(
|
12422
|
+
`CREATE ${indexPart} \`${index4.name}\` ON \`${tableName2}\` (${uniqueString})${whereStatement};`
|
12423
|
+
);
|
12424
|
+
}
|
12425
|
+
return sqlStatements;
|
12426
|
+
}
|
12427
|
+
};
|
12403
12428
|
MySqlModifyColumn = class extends Convertor {
|
12404
12429
|
can(statement, dialect7) {
|
12405
12430
|
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";
|
@@ -12534,22 +12559,7 @@ var init_sqlgenerator = __esm({
|
|
12534
12559
|
columnGenerated = statement.columnGenerated ? ` GENERATED ALWAYS AS (${statement.columnGenerated?.as}) ${statement.columnGenerated?.type.toUpperCase()}` : "";
|
12535
12560
|
}
|
12536
12561
|
columnDefault = columnDefault instanceof Date ? columnDefault.toISOString() : columnDefault;
|
12537
|
-
return `ALTER TABLE \`${tableName}\` MODIFY COLUMN \`${columnName}\`${columnType}${columnAutoincrement}${columnNotNull}${columnDefault}${columnOnUpdate}
|
12538
|
-
}
|
12539
|
-
};
|
12540
|
-
SqliteAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
|
12541
|
-
can(statement, dialect7) {
|
12542
|
-
return statement.type === "alter_table_alter_column_drop_default" && dialect7 === "sqlite";
|
12543
|
-
}
|
12544
|
-
convert(statement) {
|
12545
|
-
return `/*
|
12546
|
-
SQLite does not support "Drop default from column" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
12547
|
-
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
12548
|
-
https://www.sqlite.org/lang_altertable.html
|
12549
|
-
https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
|
12550
|
-
|
12551
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
12552
|
-
*/`;
|
12562
|
+
return `ALTER TABLE \`${tableName}\` MODIFY COLUMN \`${columnName}\`${columnType}${columnAutoincrement}${columnGenerated}${columnNotNull}${columnDefault}${columnOnUpdate};`;
|
12553
12563
|
}
|
12554
12564
|
};
|
12555
12565
|
PgAlterTableCreateCompositePrimaryKeyConvertor = class extends Convertor {
|
@@ -12616,85 +12626,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
12616
12626
|
return `ALTER TABLE \`${statement.tableName}\` DROP PRIMARY KEY, ADD PRIMARY KEY(\`${newColumns.join("`,`")}\`);`;
|
12617
12627
|
}
|
12618
12628
|
};
|
12619
|
-
SqliteAlterTableCreateCompositePrimaryKeyConvertor = class extends Convertor {
|
12620
|
-
can(statement, dialect7) {
|
12621
|
-
return statement.type === "create_composite_pk" && dialect7 === "sqlite";
|
12622
|
-
}
|
12623
|
-
convert(statement) {
|
12624
|
-
let msg = "/*\n";
|
12625
|
-
msg += `You're trying to add PRIMARY KEY(${statement.data}) to '${statement.tableName}' table
|
12626
|
-
`;
|
12627
|
-
msg += "SQLite does not support adding primary key to an already created table\n";
|
12628
|
-
msg += "You can do it in 3 steps with drizzle orm:\n";
|
12629
|
-
msg += " - create new mirror table with needed pk, rename current table to old_table, generate SQL\n";
|
12630
|
-
msg += " - migrate old data from one table to another\n";
|
12631
|
-
msg += " - delete old_table in schema, generate sql\n\n";
|
12632
|
-
msg += "or create manual migration like below:\n\n";
|
12633
|
-
msg += "ALTER TABLE table_name RENAME TO old_table;\n";
|
12634
|
-
msg += "CREATE TABLE table_name (\n";
|
12635
|
-
msg += " column1 datatype [ NULL | NOT NULL ],\n";
|
12636
|
-
msg += " column2 datatype [ NULL | NOT NULL ],\n";
|
12637
|
-
msg += " ...\n";
|
12638
|
-
msg += " PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)\n";
|
12639
|
-
msg += " );\n";
|
12640
|
-
msg += "INSERT INTO table_name SELECT * FROM old_table;\n\n";
|
12641
|
-
msg += "Due to that we don't generate migration automatically and it has to be done manually\n";
|
12642
|
-
msg += "*/\n";
|
12643
|
-
return msg;
|
12644
|
-
}
|
12645
|
-
};
|
12646
|
-
SqliteAlterTableDeleteCompositePrimaryKeyConvertor = class extends Convertor {
|
12647
|
-
can(statement, dialect7) {
|
12648
|
-
return statement.type === "delete_composite_pk" && dialect7 === "sqlite";
|
12649
|
-
}
|
12650
|
-
convert(statement) {
|
12651
|
-
let msg = "/*\n";
|
12652
|
-
msg += `You're trying to delete PRIMARY KEY(${statement.data}) from '${statement.tableName}' table
|
12653
|
-
`;
|
12654
|
-
msg += "SQLite does not supportprimary key deletion from existing table\n";
|
12655
|
-
msg += "You can do it in 3 steps with drizzle orm:\n";
|
12656
|
-
msg += " - create new mirror table table without pk, rename current table to old_table, generate SQL\n";
|
12657
|
-
msg += " - migrate old data from one table to another\n";
|
12658
|
-
msg += " - delete old_table in schema, generate sql\n\n";
|
12659
|
-
msg += "or create manual migration like below:\n\n";
|
12660
|
-
msg += "ALTER TABLE table_name RENAME TO old_table;\n";
|
12661
|
-
msg += "CREATE TABLE table_name (\n";
|
12662
|
-
msg += " column1 datatype [ NULL | NOT NULL ],\n";
|
12663
|
-
msg += " column2 datatype [ NULL | NOT NULL ],\n";
|
12664
|
-
msg += " ...\n";
|
12665
|
-
msg += " PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)\n";
|
12666
|
-
msg += " );\n";
|
12667
|
-
msg += "INSERT INTO table_name SELECT * FROM old_table;\n\n";
|
12668
|
-
msg += "Due to that we don't generate migration automatically and it has to be done manually\n";
|
12669
|
-
msg += "*/\n";
|
12670
|
-
return msg;
|
12671
|
-
}
|
12672
|
-
};
|
12673
|
-
SqliteAlterTableAlterCompositePrimaryKeyConvertor = class extends Convertor {
|
12674
|
-
can(statement, dialect7) {
|
12675
|
-
return statement.type === "alter_composite_pk" && dialect7 === "sqlite";
|
12676
|
-
}
|
12677
|
-
convert(statement) {
|
12678
|
-
let msg = "/*\n";
|
12679
|
-
msg += "SQLite does not support altering primary key\n";
|
12680
|
-
msg += "You can do it in 3 steps with drizzle orm:\n";
|
12681
|
-
msg += " - create new mirror table with needed pk, rename current table to old_table, generate SQL\n";
|
12682
|
-
msg += " - migrate old data from one table to another\n";
|
12683
|
-
msg += " - delete old_table in schema, generate sql\n\n";
|
12684
|
-
msg += "or create manual migration like below:\n\n";
|
12685
|
-
msg += "ALTER TABLE table_name RENAME TO old_table;\n";
|
12686
|
-
msg += "CREATE TABLE table_name (\n";
|
12687
|
-
msg += " column1 datatype [ NULL | NOT NULL ],\n";
|
12688
|
-
msg += " column2 datatype [ NULL | NOT NULL ],\n";
|
12689
|
-
msg += " ...\n";
|
12690
|
-
msg += " PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)\n";
|
12691
|
-
msg += " );\n";
|
12692
|
-
msg += "INSERT INTO table_name SELECT * FROM old_table;\n\n";
|
12693
|
-
msg += "Due to that we don't generate migration automatically and it has to be done manually\n";
|
12694
|
-
msg += "*/\n";
|
12695
|
-
return msg;
|
12696
|
-
}
|
12697
|
-
};
|
12698
12629
|
PgAlterTableAlterColumnSetPrimaryKeyConvertor = class extends Convertor {
|
12699
12630
|
can(statement, dialect7) {
|
12700
12631
|
return statement.type === "alter_table_alter_column_set_pk" && dialect7 === "postgresql";
|
@@ -12739,51 +12670,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
12739
12670
|
return `ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET NOT NULL;`;
|
12740
12671
|
}
|
12741
12672
|
};
|
12742
|
-
SqliteAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
|
12743
|
-
can(statement, dialect7) {
|
12744
|
-
return statement.type === "alter_table_alter_column_set_notnull" && dialect7 === "sqlite";
|
12745
|
-
}
|
12746
|
-
convert(statement) {
|
12747
|
-
return `/*
|
12748
|
-
SQLite does not support "Set not null to column" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
12749
|
-
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
12750
|
-
https://www.sqlite.org/lang_altertable.html
|
12751
|
-
https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
|
12752
|
-
|
12753
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
12754
|
-
*/`;
|
12755
|
-
}
|
12756
|
-
};
|
12757
|
-
SqliteAlterTableAlterColumnSetAutoincrementConvertor = class extends Convertor {
|
12758
|
-
can(statement, dialect7) {
|
12759
|
-
return statement.type === "alter_table_alter_column_set_autoincrement" && dialect7 === "sqlite";
|
12760
|
-
}
|
12761
|
-
convert(statement) {
|
12762
|
-
return `/*
|
12763
|
-
SQLite does not support "Set autoincrement to a column" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
12764
|
-
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
12765
|
-
https://www.sqlite.org/lang_altertable.html
|
12766
|
-
https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
|
12767
|
-
|
12768
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
12769
|
-
*/`;
|
12770
|
-
}
|
12771
|
-
};
|
12772
|
-
SqliteAlterTableAlterColumnDropAutoincrementConvertor = class extends Convertor {
|
12773
|
-
can(statement, dialect7) {
|
12774
|
-
return statement.type === "alter_table_alter_column_drop_autoincrement" && dialect7 === "sqlite";
|
12775
|
-
}
|
12776
|
-
convert(statement) {
|
12777
|
-
return `/*
|
12778
|
-
SQLite does not support "Drop autoincrement from a column" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
12779
|
-
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
12780
|
-
https://www.sqlite.org/lang_altertable.html
|
12781
|
-
https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
|
12782
|
-
|
12783
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
12784
|
-
*/`;
|
12785
|
-
}
|
12786
|
-
};
|
12787
12673
|
PgAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
|
12788
12674
|
can(statement, dialect7) {
|
12789
12675
|
return statement.type === "alter_table_alter_column_drop_notnull" && dialect7 === "postgresql";
|
@@ -12794,21 +12680,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
12794
12680
|
return `ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" DROP NOT NULL;`;
|
12795
12681
|
}
|
12796
12682
|
};
|
12797
|
-
SqliteAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
|
12798
|
-
can(statement, dialect7) {
|
12799
|
-
return statement.type === "alter_table_alter_column_drop_notnull" && dialect7 === "sqlite";
|
12800
|
-
}
|
12801
|
-
convert(statement) {
|
12802
|
-
return `/*
|
12803
|
-
SQLite does not support "Drop not null from column" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
12804
|
-
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
12805
|
-
https://www.sqlite.org/lang_altertable.html
|
12806
|
-
https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
|
12807
|
-
|
12808
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
12809
|
-
*/`;
|
12810
|
-
}
|
12811
|
-
};
|
12812
12683
|
PgCreateForeignKeyConvertor = class extends Convertor {
|
12813
12684
|
can(statement, dialect7) {
|
12814
12685
|
return statement.type === "create_reference" && dialect7 === "postgresql";
|
@@ -12839,18 +12710,21 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
12839
12710
|
return sql2;
|
12840
12711
|
}
|
12841
12712
|
};
|
12842
|
-
|
12713
|
+
LibSQLCreateForeignKeyConvertor = class extends Convertor {
|
12843
12714
|
can(statement, dialect7) {
|
12844
|
-
return statement.type === "create_reference" && dialect7 === "
|
12715
|
+
return statement.type === "create_reference" && dialect7 === "turso";
|
12845
12716
|
}
|
12846
|
-
convert(statement) {
|
12847
|
-
|
12848
|
-
|
12849
|
-
|
12850
|
-
|
12851
|
-
|
12852
|
-
|
12853
|
-
|
12717
|
+
convert(statement, json2, action) {
|
12718
|
+
const { columnsFrom, columnsTo, tableFrom, onDelete, onUpdate, tableTo } = action === "push" ? SQLiteSquasher.unsquashPushFK(statement.data) : SQLiteSquasher.unsquashFK(statement.data);
|
12719
|
+
const { columnDefault, columnNotNull, columnType } = statement;
|
12720
|
+
const onDeleteStatement = onDelete ? ` ON DELETE ${onDelete}` : "";
|
12721
|
+
const onUpdateStatement = onUpdate ? ` ON UPDATE ${onUpdate}` : "";
|
12722
|
+
const columnsDefaultValue = columnDefault ? ` DEFAULT ${columnDefault}` : "";
|
12723
|
+
const columnNotNullValue = columnNotNull ? ` NOT NULL` : "";
|
12724
|
+
const columnTypeValue = columnType ? ` ${columnType}` : "";
|
12725
|
+
const columnFrom = columnsFrom[0];
|
12726
|
+
const columnTo = columnsTo[0];
|
12727
|
+
return `ALTER TABLE \`${tableFrom}\` ALTER COLUMN "${columnFrom}" TO "${columnFrom}"${columnTypeValue}${columnNotNullValue}${columnsDefaultValue} REFERENCES ${tableTo}(${columnTo})${onDeleteStatement}${onUpdateStatement};`;
|
12854
12728
|
}
|
12855
12729
|
};
|
12856
12730
|
MySqlCreateForeignKeyConvertor = class extends Convertor {
|
@@ -12899,20 +12773,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
12899
12773
|
return sql2;
|
12900
12774
|
}
|
12901
12775
|
};
|
12902
|
-
SqliteAlterForeignKeyConvertor = class extends Convertor {
|
12903
|
-
can(statement, dialect7) {
|
12904
|
-
return statement.type === "alter_reference" && dialect7 === "sqlite";
|
12905
|
-
}
|
12906
|
-
convert(statement) {
|
12907
|
-
return `/*
|
12908
|
-
SQLite does not support "Changing existing foreign key" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
12909
|
-
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
12910
|
-
https://www.sqlite.org/lang_altertable.html
|
12911
|
-
|
12912
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
12913
|
-
*/`;
|
12914
|
-
}
|
12915
|
-
};
|
12916
12776
|
PgDeleteForeignKeyConvertor = class extends Convertor {
|
12917
12777
|
can(statement, dialect7) {
|
12918
12778
|
return statement.type === "delete_reference" && dialect7 === "postgresql";
|
@@ -12925,20 +12785,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
12925
12785
|
`;
|
12926
12786
|
}
|
12927
12787
|
};
|
12928
|
-
SqliteDeleteForeignKeyConvertor = class extends Convertor {
|
12929
|
-
can(statement, dialect7) {
|
12930
|
-
return statement.type === "delete_reference" && dialect7 === "sqlite";
|
12931
|
-
}
|
12932
|
-
convert(statement) {
|
12933
|
-
return `/*
|
12934
|
-
SQLite does not support "Dropping foreign key" out of the box, we do not generate automatic migration for that, so it has to be done manually
|
12935
|
-
Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
|
12936
|
-
https://www.sqlite.org/lang_altertable.html
|
12937
|
-
|
12938
|
-
Due to that we don't generate migration automatically and it has to be done manually
|
12939
|
-
*/`;
|
12940
|
-
}
|
12941
|
-
};
|
12942
12788
|
MySqlDeleteForeignKeyConvertor = class extends Convertor {
|
12943
12789
|
can(statement, dialect7) {
|
12944
12790
|
return statement.type === "delete_reference" && dialect7 === "mysql";
|
@@ -12999,7 +12845,7 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
12999
12845
|
};
|
13000
12846
|
CreateSqliteIndexConvertor = class extends Convertor {
|
13001
12847
|
can(statement, dialect7) {
|
13002
|
-
return statement.type === "create_index" && dialect7 === "sqlite";
|
12848
|
+
return statement.type === "create_index" && (dialect7 === "sqlite" || dialect7 === "turso");
|
13003
12849
|
}
|
13004
12850
|
convert(statement) {
|
13005
12851
|
const { name: name2, columns, isUnique, where } = SQLiteSquasher.unsquashIdx(
|
@@ -13086,7 +12932,7 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
13086
12932
|
};
|
13087
12933
|
SqliteDropIndexConvertor = class extends Convertor {
|
13088
12934
|
can(statement, dialect7) {
|
13089
|
-
return statement.type === "drop_index" && dialect7 === "sqlite";
|
12935
|
+
return statement.type === "drop_index" && (dialect7 === "sqlite" || dialect7 === "turso");
|
13090
12936
|
}
|
13091
12937
|
convert(statement) {
|
13092
12938
|
const { name: name2 } = PgSquasher.unsquashIdx(statement.data);
|
@@ -13102,10 +12948,96 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
13102
12948
|
return `DROP INDEX \`${name2}\` ON \`${statement.tableName}\`;`;
|
13103
12949
|
}
|
13104
12950
|
};
|
12951
|
+
SQLiteRecreateTableConvertor = class extends Convertor {
|
12952
|
+
can(statement, dialect7) {
|
12953
|
+
return statement.type === "recreate_table" && dialect7 === "sqlite";
|
12954
|
+
}
|
12955
|
+
convert(statement) {
|
12956
|
+
const { tableName, columns, compositePKs, referenceData } = statement;
|
12957
|
+
const columnNames = columns.map((it) => `"${it.name}"`).join(", ");
|
12958
|
+
const newTableName = `__new_${tableName}`;
|
12959
|
+
const sqlStatements = [];
|
12960
|
+
sqlStatements.push(`PRAGMA foreign_keys=OFF;`);
|
12961
|
+
sqlStatements.push(
|
12962
|
+
new SQLiteCreateTableConvertor().convert({
|
12963
|
+
type: "sqlite_create_table",
|
12964
|
+
tableName: newTableName,
|
12965
|
+
columns,
|
12966
|
+
referenceData,
|
12967
|
+
compositePKs
|
12968
|
+
})
|
12969
|
+
);
|
12970
|
+
sqlStatements.push(
|
12971
|
+
`INSERT INTO \`${newTableName}\`(${columnNames}) SELECT ${columnNames} FROM \`${tableName}\`;`
|
12972
|
+
);
|
12973
|
+
sqlStatements.push(
|
12974
|
+
new SQLiteDropTableConvertor().convert({
|
12975
|
+
type: "drop_table",
|
12976
|
+
tableName,
|
12977
|
+
schema: ""
|
12978
|
+
})
|
12979
|
+
);
|
12980
|
+
sqlStatements.push(
|
12981
|
+
new SqliteRenameTableConvertor().convert({
|
12982
|
+
fromSchema: "",
|
12983
|
+
tableNameFrom: newTableName,
|
12984
|
+
tableNameTo: tableName,
|
12985
|
+
toSchema: "",
|
12986
|
+
type: "rename_table"
|
12987
|
+
})
|
12988
|
+
);
|
12989
|
+
sqlStatements.push(`PRAGMA foreign_keys=ON;`);
|
12990
|
+
return sqlStatements;
|
12991
|
+
}
|
12992
|
+
};
|
12993
|
+
LibSQLRecreateTableConvertor = class extends Convertor {
|
12994
|
+
can(statement, dialect7) {
|
12995
|
+
return statement.type === "recreate_table" && dialect7 === "turso";
|
12996
|
+
}
|
12997
|
+
convert(statement) {
|
12998
|
+
const { tableName, columns, compositePKs, referenceData } = statement;
|
12999
|
+
const columnNames = columns.map((it) => `"${it.name}"`).join(", ");
|
13000
|
+
const newTableName = `__new_${tableName}`;
|
13001
|
+
const sqlStatements = [];
|
13002
|
+
sqlStatements.push(`PRAGMA foreign_keys=OFF;`);
|
13003
|
+
sqlStatements.push(
|
13004
|
+
new SQLiteCreateTableConvertor().convert({
|
13005
|
+
type: "sqlite_create_table",
|
13006
|
+
tableName: newTableName,
|
13007
|
+
columns,
|
13008
|
+
referenceData,
|
13009
|
+
compositePKs
|
13010
|
+
})
|
13011
|
+
);
|
13012
|
+
sqlStatements.push(
|
13013
|
+
`INSERT INTO \`${newTableName}\`(${columnNames}) SELECT ${columnNames} FROM \`${tableName}\`;`
|
13014
|
+
);
|
13015
|
+
sqlStatements.push(
|
13016
|
+
new SQLiteDropTableConvertor().convert({
|
13017
|
+
type: "drop_table",
|
13018
|
+
tableName,
|
13019
|
+
schema: ""
|
13020
|
+
})
|
13021
|
+
);
|
13022
|
+
sqlStatements.push(
|
13023
|
+
new SqliteRenameTableConvertor().convert({
|
13024
|
+
fromSchema: "",
|
13025
|
+
tableNameFrom: newTableName,
|
13026
|
+
tableNameTo: tableName,
|
13027
|
+
toSchema: "",
|
13028
|
+
type: "rename_table"
|
13029
|
+
})
|
13030
|
+
);
|
13031
|
+
sqlStatements.push(`PRAGMA foreign_keys=ON;`);
|
13032
|
+
return sqlStatements;
|
13033
|
+
}
|
13034
|
+
};
|
13105
13035
|
convertors = [];
|
13106
13036
|
convertors.push(new PgCreateTableConvertor());
|
13107
13037
|
convertors.push(new MySqlCreateTableConvertor());
|
13108
13038
|
convertors.push(new SQLiteCreateTableConvertor());
|
13039
|
+
convertors.push(new SQLiteRecreateTableConvertor());
|
13040
|
+
convertors.push(new LibSQLRecreateTableConvertor());
|
13109
13041
|
convertors.push(new CreateTypeEnumConvertor());
|
13110
13042
|
convertors.push(new CreatePgSequenceConvertor());
|
13111
13043
|
convertors.push(new DropPgSequenceConvertor());
|
@@ -13153,6 +13085,7 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
13153
13085
|
convertors.push(new SqliteAlterTableAlterColumnAlterGeneratedConvertor());
|
13154
13086
|
convertors.push(new SqliteAlterTableAlterColumnSetExpressionConvertor());
|
13155
13087
|
convertors.push(new MySqlModifyColumn());
|
13088
|
+
convertors.push(new LibSQLModifyColumn());
|
13156
13089
|
convertors.push(new PgCreateForeignKeyConvertor());
|
13157
13090
|
convertors.push(new MySqlCreateForeignKeyConvertor());
|
13158
13091
|
convertors.push(new PgAlterForeignKeyConvertor());
|
@@ -13164,24 +13097,10 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
13164
13097
|
convertors.push(new PgAlterTableSetSchemaConvertor());
|
13165
13098
|
convertors.push(new PgAlterTableSetNewSchemaConvertor());
|
13166
13099
|
convertors.push(new PgAlterTableRemoveFromSchemaConvertor());
|
13167
|
-
convertors.push(new
|
13168
|
-
convertors.push(new SqliteAlterForeignKeyConvertor());
|
13169
|
-
convertors.push(new SqliteDeleteForeignKeyConvertor());
|
13170
|
-
convertors.push(new SqliteCreateForeignKeyConvertor());
|
13171
|
-
convertors.push(new SQLiteAlterTableAddUniqueConstraintConvertor());
|
13172
|
-
convertors.push(new SQLiteAlterTableDropUniqueConstraintConvertor());
|
13100
|
+
convertors.push(new LibSQLCreateForeignKeyConvertor());
|
13173
13101
|
convertors.push(new PgAlterTableAlterColumnDropGenerated());
|
13174
13102
|
convertors.push(new PgAlterTableAlterColumnSetGenerated());
|
13175
13103
|
convertors.push(new PgAlterTableAlterColumnAlterGenerated());
|
13176
|
-
convertors.push(new SqliteAlterTableAlterColumnSetNotNullConvertor());
|
13177
|
-
convertors.push(new SqliteAlterTableAlterColumnDropNotNullConvertor());
|
13178
|
-
convertors.push(new SqliteAlterTableAlterColumnSetDefaultConvertor());
|
13179
|
-
convertors.push(new SqliteAlterTableAlterColumnDropDefaultConvertor());
|
13180
|
-
convertors.push(new SqliteAlterTableAlterColumnSetAutoincrementConvertor());
|
13181
|
-
convertors.push(new SqliteAlterTableAlterColumnDropAutoincrementConvertor());
|
13182
|
-
convertors.push(new SqliteAlterTableCreateCompositePrimaryKeyConvertor());
|
13183
|
-
convertors.push(new SqliteAlterTableDeleteCompositePrimaryKeyConvertor());
|
13184
|
-
convertors.push(new SqliteAlterTableAlterCompositePrimaryKeyConvertor());
|
13185
13104
|
convertors.push(new PgAlterTableCreateCompositePrimaryKeyConvertor());
|
13186
13105
|
convertors.push(new PgAlterTableDeleteCompositePrimaryKeyConvertor());
|
13187
13106
|
convertors.push(new PgAlterTableAlterCompositePrimaryKeyConvertor());
|
@@ -13190,19 +13109,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
|
|
13190
13109
|
convertors.push(new MySqlAlterTableCreateCompositePrimaryKeyConvertor());
|
13191
13110
|
convertors.push(new MySqlAlterTableAddPk());
|
13192
13111
|
convertors.push(new MySqlAlterTableAlterCompositePrimaryKeyConvertor());
|
13193
|
-
fromJson = (statements, dialect7) => {
|
13194
|
-
const result = statements.flatMap((statement) => {
|
13195
|
-
const filtered = convertors.filter((it) => {
|
13196
|
-
return it.can(statement, dialect7);
|
13197
|
-
});
|
13198
|
-
const convertor = filtered.length === 1 ? filtered[0] : void 0;
|
13199
|
-
if (!convertor) {
|
13200
|
-
return "";
|
13201
|
-
}
|
13202
|
-
return convertor.convert(statement);
|
13203
|
-
}).filter((it) => it !== "");
|
13204
|
-
return result;
|
13205
|
-
};
|
13206
13112
|
https: `
|
13207
13113
|
create table users (
|
13208
13114
|
id int,
|
@@ -13229,12 +13135,248 @@ drop type __venum;
|
|
13229
13135
|
}
|
13230
13136
|
});
|
13231
13137
|
|
13138
|
+
// src/cli/commands/sqlitePushUtils.ts
|
13139
|
+
var _moveDataStatements, getOldTableName, getNewTableName, logSuggestionsAndReturn;
|
13140
|
+
var init_sqlitePushUtils = __esm({
|
13141
|
+
"src/cli/commands/sqlitePushUtils.ts"() {
|
13142
|
+
"use strict";
|
13143
|
+
init_source();
|
13144
|
+
init_sqliteSchema();
|
13145
|
+
init_sqlgenerator();
|
13146
|
+
init_utils();
|
13147
|
+
_moveDataStatements = (tableName, json, dataLoss = false) => {
|
13148
|
+
const statements = [];
|
13149
|
+
const newTableName = `__new_${tableName}`;
|
13150
|
+
const tableColumns = Object.values(json.tables[tableName].columns);
|
13151
|
+
const referenceData = Object.values(json.tables[tableName].foreignKeys);
|
13152
|
+
const compositePKs = Object.values(
|
13153
|
+
json.tables[tableName].compositePrimaryKeys
|
13154
|
+
).map((it) => SQLiteSquasher.unsquashPK(it));
|
13155
|
+
const fks = referenceData.map((it) => SQLiteSquasher.unsquashPushFK(it));
|
13156
|
+
statements.push(
|
13157
|
+
new SQLiteCreateTableConvertor().convert({
|
13158
|
+
type: "sqlite_create_table",
|
13159
|
+
tableName: newTableName,
|
13160
|
+
columns: tableColumns,
|
13161
|
+
referenceData: fks,
|
13162
|
+
compositePKs
|
13163
|
+
})
|
13164
|
+
);
|
13165
|
+
if (!dataLoss) {
|
13166
|
+
const columns = Object.keys(json.tables[tableName].columns).map(
|
13167
|
+
(c) => `"${c}"`
|
13168
|
+
);
|
13169
|
+
statements.push(
|
13170
|
+
`INSERT INTO \`${newTableName}\`(${columns.join(
|
13171
|
+
", "
|
13172
|
+
)}) SELECT ${columns.join(", ")} FROM \`${tableName}\`;`
|
13173
|
+
);
|
13174
|
+
}
|
13175
|
+
statements.push(
|
13176
|
+
new SQLiteDropTableConvertor().convert({
|
13177
|
+
type: "drop_table",
|
13178
|
+
tableName,
|
13179
|
+
schema: ""
|
13180
|
+
})
|
13181
|
+
);
|
13182
|
+
statements.push(
|
13183
|
+
new SqliteRenameTableConvertor().convert({
|
13184
|
+
fromSchema: "",
|
13185
|
+
tableNameFrom: newTableName,
|
13186
|
+
tableNameTo: tableName,
|
13187
|
+
toSchema: "",
|
13188
|
+
type: "rename_table"
|
13189
|
+
})
|
13190
|
+
);
|
13191
|
+
for (const idx of Object.values(json.tables[tableName].indexes)) {
|
13192
|
+
statements.push(
|
13193
|
+
new CreateSqliteIndexConvertor().convert({
|
13194
|
+
type: "create_index",
|
13195
|
+
tableName,
|
13196
|
+
schema: "",
|
13197
|
+
data: idx
|
13198
|
+
})
|
13199
|
+
);
|
13200
|
+
}
|
13201
|
+
return statements;
|
13202
|
+
};
|
13203
|
+
getOldTableName = (tableName, meta) => {
|
13204
|
+
for (const key of Object.keys(meta.tables)) {
|
13205
|
+
const value = meta.tables[key];
|
13206
|
+
if (`"${tableName}"` === value) {
|
13207
|
+
return key.substring(1, key.length - 1);
|
13208
|
+
}
|
13209
|
+
}
|
13210
|
+
return tableName;
|
13211
|
+
};
|
13212
|
+
getNewTableName = (tableName, meta) => {
|
13213
|
+
if (typeof meta.tables[`"${tableName}"`] !== "undefined") {
|
13214
|
+
return meta.tables[`"${tableName}"`].substring(
|
13215
|
+
1,
|
13216
|
+
meta.tables[`"${tableName}"`].length - 1
|
13217
|
+
);
|
13218
|
+
}
|
13219
|
+
return tableName;
|
13220
|
+
};
|
13221
|
+
logSuggestionsAndReturn = async (connection, statements, json1, json2, meta) => {
|
13222
|
+
let shouldAskForApprove = false;
|
13223
|
+
const statementsToExecute = [];
|
13224
|
+
const infoToPrint = [];
|
13225
|
+
const tablesToRemove = [];
|
13226
|
+
const columnsToRemove = [];
|
13227
|
+
const schemasToRemove = [];
|
13228
|
+
const tablesToTruncate = [];
|
13229
|
+
for (const statement of statements) {
|
13230
|
+
if (statement.type === "drop_table") {
|
13231
|
+
const res = await connection.query(
|
13232
|
+
`select count(*) as count from \`${statement.tableName}\``
|
13233
|
+
);
|
13234
|
+
const count2 = Number(res[0].count);
|
13235
|
+
if (count2 > 0) {
|
13236
|
+
infoToPrint.push(
|
13237
|
+
`\xB7 You're about to delete ${source_default.underline(
|
13238
|
+
statement.tableName
|
13239
|
+
)} table with ${count2} items`
|
13240
|
+
);
|
13241
|
+
tablesToRemove.push(statement.tableName);
|
13242
|
+
shouldAskForApprove = true;
|
13243
|
+
}
|
13244
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push");
|
13245
|
+
statementsToExecute.push(
|
13246
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
13247
|
+
);
|
13248
|
+
} else if (statement.type === "alter_table_drop_column") {
|
13249
|
+
const tableName = statement.tableName;
|
13250
|
+
const columnName = statement.columnName;
|
13251
|
+
const res = await connection.query(
|
13252
|
+
`select count(\`${tableName}\`.\`${columnName}\`) as count from \`${tableName}\``
|
13253
|
+
);
|
13254
|
+
const count2 = Number(res[0].count);
|
13255
|
+
if (count2 > 0) {
|
13256
|
+
infoToPrint.push(
|
13257
|
+
`\xB7 You're about to delete ${source_default.underline(
|
13258
|
+
columnName
|
13259
|
+
)} column in ${tableName} table with ${count2} items`
|
13260
|
+
);
|
13261
|
+
columnsToRemove.push(`${tableName}_${statement.columnName}`);
|
13262
|
+
shouldAskForApprove = true;
|
13263
|
+
}
|
13264
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push");
|
13265
|
+
statementsToExecute.push(
|
13266
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
13267
|
+
);
|
13268
|
+
} else if (statement.type === "sqlite_alter_table_add_column" && (statement.column.notNull && !statement.column.default)) {
|
13269
|
+
const tableName = statement.tableName;
|
13270
|
+
const columnName = statement.column.name;
|
13271
|
+
const res = await connection.query(
|
13272
|
+
`select count(*) as count from \`${tableName}\``
|
13273
|
+
);
|
13274
|
+
const count2 = Number(res[0].count);
|
13275
|
+
if (count2 > 0) {
|
13276
|
+
infoToPrint.push(
|
13277
|
+
`\xB7 You're about to add not-null ${source_default.underline(
|
13278
|
+
columnName
|
13279
|
+
)} column without default value, which contains ${count2} items`
|
13280
|
+
);
|
13281
|
+
tablesToTruncate.push(tableName);
|
13282
|
+
statementsToExecute.push(`delete from ${tableName};`);
|
13283
|
+
shouldAskForApprove = true;
|
13284
|
+
}
|
13285
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push");
|
13286
|
+
statementsToExecute.push(
|
13287
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
13288
|
+
);
|
13289
|
+
} else if (statement.type === "recreate_table") {
|
13290
|
+
const tableName = statement.tableName;
|
13291
|
+
const oldTableName = getOldTableName(tableName, meta);
|
13292
|
+
let dataLoss = false;
|
13293
|
+
const prevColumnNames = Object.keys(json1.tables[oldTableName].columns);
|
13294
|
+
const currentColumnNames = Object.keys(json2.tables[tableName].columns);
|
13295
|
+
const { removedColumns, addedColumns } = findAddedAndRemoved(
|
13296
|
+
prevColumnNames,
|
13297
|
+
currentColumnNames
|
13298
|
+
);
|
13299
|
+
if (removedColumns.length) {
|
13300
|
+
for (const removedColumn of removedColumns) {
|
13301
|
+
const res = await connection.query(
|
13302
|
+
`select count(\`${tableName}\`.\`${removedColumn}\`) as count from \`${tableName}\``
|
13303
|
+
);
|
13304
|
+
const count2 = Number(res[0].count);
|
13305
|
+
if (count2 > 0) {
|
13306
|
+
infoToPrint.push(
|
13307
|
+
`\xB7 You're about to delete ${source_default.underline(
|
13308
|
+
removedColumn
|
13309
|
+
)} column in ${tableName} table with ${count2} items`
|
13310
|
+
);
|
13311
|
+
columnsToRemove.push(removedColumn);
|
13312
|
+
shouldAskForApprove = true;
|
13313
|
+
}
|
13314
|
+
}
|
13315
|
+
}
|
13316
|
+
if (addedColumns.length) {
|
13317
|
+
for (const addedColumn of addedColumns) {
|
13318
|
+
const [res] = await connection.query(
|
13319
|
+
`select count(*) as count from \`${tableName}\``
|
13320
|
+
);
|
13321
|
+
const columnConf = json2.tables[tableName].columns[addedColumn];
|
13322
|
+
const count2 = Number(res.count);
|
13323
|
+
if (count2 > 0 && columnConf.notNull && !columnConf.default) {
|
13324
|
+
dataLoss = true;
|
13325
|
+
infoToPrint.push(
|
13326
|
+
`\xB7 You're about to add not-null ${source_default.underline(
|
13327
|
+
addedColumn
|
13328
|
+
)} column without default value to table, which contains ${count2} items`
|
13329
|
+
);
|
13330
|
+
shouldAskForApprove = true;
|
13331
|
+
tablesToTruncate.push(tableName);
|
13332
|
+
statementsToExecute.push(`DELETE FROM \`${tableName}\`;`);
|
13333
|
+
}
|
13334
|
+
}
|
13335
|
+
}
|
13336
|
+
const tablesReferencingCurrent = [];
|
13337
|
+
for (const table4 of Object.values(json2.tables)) {
|
13338
|
+
const tablesRefs = Object.values(json2.tables[table4.name].foreignKeys).filter((t) => SQLiteSquasher.unsquashPushFK(t).tableTo === tableName).map((it) => SQLiteSquasher.unsquashPushFK(it).tableFrom);
|
13339
|
+
tablesReferencingCurrent.push(...tablesRefs);
|
13340
|
+
}
|
13341
|
+
if (!tablesReferencingCurrent.length) {
|
13342
|
+
statementsToExecute.push(..._moveDataStatements(tableName, json2, dataLoss));
|
13343
|
+
continue;
|
13344
|
+
}
|
13345
|
+
const [{ foreign_keys: pragmaState }] = await connection.query(`PRAGMA foreign_keys;`);
|
13346
|
+
if (pragmaState) {
|
13347
|
+
statementsToExecute.push(`PRAGMA foreign_keys=OFF;`);
|
13348
|
+
}
|
13349
|
+
statementsToExecute.push(..._moveDataStatements(tableName, json2, dataLoss));
|
13350
|
+
if (pragmaState) {
|
13351
|
+
statementsToExecute.push(`PRAGMA foreign_keys=ON;`);
|
13352
|
+
}
|
13353
|
+
} else {
|
13354
|
+
const fromJsonStatement = fromJson([statement], "sqlite", "push");
|
13355
|
+
statementsToExecute.push(
|
13356
|
+
...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
|
13357
|
+
);
|
13358
|
+
}
|
13359
|
+
}
|
13360
|
+
return {
|
13361
|
+
statementsToExecute,
|
13362
|
+
shouldAskForApprove,
|
13363
|
+
infoToPrint,
|
13364
|
+
columnsToRemove: [...new Set(columnsToRemove)],
|
13365
|
+
schemasToRemove: [...new Set(schemasToRemove)],
|
13366
|
+
tablesToTruncate: [...new Set(tablesToTruncate)],
|
13367
|
+
tablesToRemove: [...new Set(tablesToRemove)]
|
13368
|
+
};
|
13369
|
+
};
|
13370
|
+
}
|
13371
|
+
});
|
13372
|
+
|
13232
13373
|
// src/jsonStatements.ts
|
13233
|
-
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;
|
13374
|
+
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;
|
13234
13375
|
var init_jsonStatements = __esm({
|
13235
13376
|
"src/jsonStatements.ts"() {
|
13236
13377
|
"use strict";
|
13237
13378
|
init_source();
|
13379
|
+
init_sqlitePushUtils();
|
13238
13380
|
init_views();
|
13239
13381
|
init_mysqlSchema();
|
13240
13382
|
init_pgSchema();
|
@@ -14018,18 +14160,61 @@ var init_jsonStatements = __esm({
|
|
14018
14160
|
const columnPk = json2.tables[tableName].columns[columnName].primaryKey;
|
14019
14161
|
const columnGenerated = json2.tables[tableName].columns[columnName].generated;
|
14020
14162
|
const compositePk = json2.tables[tableName].compositePrimaryKeys[`${tableName}_${columnName}`];
|
14021
|
-
if (
|
14163
|
+
if (column4.autoincrement?.type === "added") {
|
14022
14164
|
statements.push({
|
14023
|
-
type: "
|
14165
|
+
type: "alter_table_alter_column_set_autoincrement",
|
14024
14166
|
tableName,
|
14025
|
-
|
14026
|
-
|
14027
|
-
|
14028
|
-
|
14029
|
-
|
14030
|
-
|
14031
|
-
|
14032
|
-
|
14167
|
+
columnName,
|
14168
|
+
schema: schema4,
|
14169
|
+
newDataType: columnType,
|
14170
|
+
columnDefault,
|
14171
|
+
columnOnUpdate,
|
14172
|
+
columnNotNull,
|
14173
|
+
columnAutoIncrement,
|
14174
|
+
columnPk
|
14175
|
+
});
|
14176
|
+
}
|
14177
|
+
if (column4.autoincrement?.type === "changed") {
|
14178
|
+
const type = column4.autoincrement.new ? "alter_table_alter_column_set_autoincrement" : "alter_table_alter_column_drop_autoincrement";
|
14179
|
+
statements.push({
|
14180
|
+
type,
|
14181
|
+
tableName,
|
14182
|
+
columnName,
|
14183
|
+
schema: schema4,
|
14184
|
+
newDataType: columnType,
|
14185
|
+
columnDefault,
|
14186
|
+
columnOnUpdate,
|
14187
|
+
columnNotNull,
|
14188
|
+
columnAutoIncrement,
|
14189
|
+
columnPk
|
14190
|
+
});
|
14191
|
+
}
|
14192
|
+
if (column4.autoincrement?.type === "deleted") {
|
14193
|
+
statements.push({
|
14194
|
+
type: "alter_table_alter_column_drop_autoincrement",
|
14195
|
+
tableName,
|
14196
|
+
columnName,
|
14197
|
+
schema: schema4,
|
14198
|
+
newDataType: columnType,
|
14199
|
+
columnDefault,
|
14200
|
+
columnOnUpdate,
|
14201
|
+
columnNotNull,
|
14202
|
+
columnAutoIncrement,
|
14203
|
+
columnPk
|
14204
|
+
});
|
14205
|
+
}
|
14206
|
+
if (typeof column4.name !== "string") {
|
14207
|
+
statements.push({
|
14208
|
+
type: "alter_table_rename_column",
|
14209
|
+
tableName,
|
14210
|
+
oldColumnName: column4.name.old,
|
14211
|
+
newColumnName: column4.name.new,
|
14212
|
+
schema: schema4
|
14213
|
+
});
|
14214
|
+
}
|
14215
|
+
if (column4.type?.type === "changed") {
|
14216
|
+
statements.push({
|
14217
|
+
type: "alter_table_alter_column_set_type",
|
14033
14218
|
tableName,
|
14034
14219
|
columnName,
|
14035
14220
|
newDataType: column4.type.new,
|
@@ -14281,6 +14466,37 @@ var init_jsonStatements = __esm({
|
|
14281
14466
|
};
|
14282
14467
|
});
|
14283
14468
|
};
|
14469
|
+
prepareLibSQLCreateReferencesJson = (tableName, schema4, foreignKeys, json2, action) => {
|
14470
|
+
return Object.values(foreignKeys).map((fkData) => {
|
14471
|
+
const { columnsFrom, tableFrom, columnsTo } = action === "push" ? SQLiteSquasher.unsquashPushFK(fkData) : SQLiteSquasher.unsquashFK(fkData);
|
14472
|
+
let isMulticolumn = false;
|
14473
|
+
if (columnsFrom.length > 1 || columnsTo.length > 1) {
|
14474
|
+
isMulticolumn = true;
|
14475
|
+
return {
|
14476
|
+
type: "create_reference",
|
14477
|
+
tableName,
|
14478
|
+
data: fkData,
|
14479
|
+
schema: schema4,
|
14480
|
+
isMulticolumn
|
14481
|
+
};
|
14482
|
+
}
|
14483
|
+
const columnFrom = columnsFrom[0];
|
14484
|
+
const {
|
14485
|
+
notNull: columnNotNull,
|
14486
|
+
default: columnDefault,
|
14487
|
+
type: columnType
|
14488
|
+
} = json2.tables[tableFrom].columns[columnFrom];
|
14489
|
+
return {
|
14490
|
+
type: "create_reference",
|
14491
|
+
tableName,
|
14492
|
+
data: fkData,
|
14493
|
+
schema: schema4,
|
14494
|
+
columnNotNull,
|
14495
|
+
columnDefault,
|
14496
|
+
columnType
|
14497
|
+
};
|
14498
|
+
});
|
14499
|
+
};
|
14284
14500
|
prepareDropReferencesJson = (tableName, schema4, foreignKeys) => {
|
14285
14501
|
return Object.values(foreignKeys).map((fkData) => {
|
14286
14502
|
return {
|
@@ -14291,6 +14507,53 @@ var init_jsonStatements = __esm({
|
|
14291
14507
|
};
|
14292
14508
|
});
|
14293
14509
|
};
|
14510
|
+
prepareLibSQLDropReferencesJson = (tableName, schema4, foreignKeys, json2, meta, action) => {
|
14511
|
+
const statements = Object.values(foreignKeys).map((fkData) => {
|
14512
|
+
const { columnsFrom, tableFrom, columnsTo, name: name2, tableTo, onDelete, onUpdate } = action === "push" ? SQLiteSquasher.unsquashPushFK(fkData) : SQLiteSquasher.unsquashFK(fkData);
|
14513
|
+
const keys = Object.keys(json2.tables[tableName].columns);
|
14514
|
+
const filtered = columnsFrom.filter((it) => keys.includes(it));
|
14515
|
+
const fullDrop = filtered.length === 0;
|
14516
|
+
if (fullDrop) return;
|
14517
|
+
let isMulticolumn = false;
|
14518
|
+
if (columnsFrom.length > 1 || columnsTo.length > 1) {
|
14519
|
+
isMulticolumn = true;
|
14520
|
+
return {
|
14521
|
+
type: "delete_reference",
|
14522
|
+
tableName,
|
14523
|
+
data: fkData,
|
14524
|
+
schema: schema4,
|
14525
|
+
isMulticolumn
|
14526
|
+
};
|
14527
|
+
}
|
14528
|
+
const columnFrom = columnsFrom[0];
|
14529
|
+
const newTableName = getNewTableName(tableFrom, meta);
|
14530
|
+
const {
|
14531
|
+
notNull: columnNotNull,
|
14532
|
+
default: columnDefault,
|
14533
|
+
type: columnType
|
14534
|
+
} = json2.tables[newTableName].columns[columnFrom];
|
14535
|
+
const fkToSquash = {
|
14536
|
+
columnsFrom,
|
14537
|
+
columnsTo,
|
14538
|
+
name: name2,
|
14539
|
+
tableFrom: newTableName,
|
14540
|
+
tableTo,
|
14541
|
+
onDelete,
|
14542
|
+
onUpdate
|
14543
|
+
};
|
14544
|
+
const foreignKey = action === "push" ? SQLiteSquasher.squashPushFK(fkToSquash) : SQLiteSquasher.squashFK(fkToSquash);
|
14545
|
+
return {
|
14546
|
+
type: "delete_reference",
|
14547
|
+
tableName,
|
14548
|
+
data: foreignKey,
|
14549
|
+
schema: schema4,
|
14550
|
+
columnNotNull,
|
14551
|
+
columnDefault,
|
14552
|
+
columnType
|
14553
|
+
};
|
14554
|
+
});
|
14555
|
+
return statements.filter((it) => it);
|
14556
|
+
};
|
14294
14557
|
prepareAlterReferencesJson = (tableName, schema4, foreignKeys) => {
|
14295
14558
|
const stmts = [];
|
14296
14559
|
Object.values(foreignKeys).map((val) => {
|
@@ -14444,10 +14707,292 @@ var init_jsonStatements = __esm({
|
|
14444
14707
|
}
|
14445
14708
|
});
|
14446
14709
|
|
14710
|
+
// src/statementCombiner.ts
|
14711
|
+
var prepareLibSQLRecreateTable, prepareSQLiteRecreateTable, libSQLCombineStatements, sqliteCombineStatements;
|
14712
|
+
var init_statementCombiner = __esm({
|
14713
|
+
"src/statementCombiner.ts"() {
|
14714
|
+
"use strict";
|
14715
|
+
init_jsonStatements();
|
14716
|
+
init_sqliteSchema();
|
14717
|
+
prepareLibSQLRecreateTable = (table4, action) => {
|
14718
|
+
const { name: name2, columns, uniqueConstraints, indexes } = table4;
|
14719
|
+
const composites = Object.values(table4.compositePrimaryKeys).map(
|
14720
|
+
(it) => SQLiteSquasher.unsquashPK(it)
|
14721
|
+
);
|
14722
|
+
const references2 = Object.values(table4.foreignKeys);
|
14723
|
+
const fks = references2.map(
|
14724
|
+
(it) => action === "push" ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it)
|
14725
|
+
);
|
14726
|
+
const statements = [
|
14727
|
+
{
|
14728
|
+
type: "recreate_table",
|
14729
|
+
tableName: name2,
|
14730
|
+
columns: Object.values(columns),
|
14731
|
+
compositePKs: composites,
|
14732
|
+
referenceData: fks,
|
14733
|
+
uniqueConstraints: Object.values(uniqueConstraints)
|
14734
|
+
}
|
14735
|
+
];
|
14736
|
+
if (Object.keys(indexes).length) {
|
14737
|
+
statements.push(...prepareCreateIndexesJson(name2, "", indexes));
|
14738
|
+
}
|
14739
|
+
return statements;
|
14740
|
+
};
|
14741
|
+
prepareSQLiteRecreateTable = (table4, action) => {
|
14742
|
+
const { name: name2, columns, uniqueConstraints, indexes } = table4;
|
14743
|
+
const composites = Object.values(table4.compositePrimaryKeys).map(
|
14744
|
+
(it) => SQLiteSquasher.unsquashPK(it)
|
14745
|
+
);
|
14746
|
+
const references2 = Object.values(table4.foreignKeys);
|
14747
|
+
const fks = references2.map(
|
14748
|
+
(it) => action === "push" ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it)
|
14749
|
+
);
|
14750
|
+
const statements = [
|
14751
|
+
{
|
14752
|
+
type: "recreate_table",
|
14753
|
+
tableName: name2,
|
14754
|
+
columns: Object.values(columns),
|
14755
|
+
compositePKs: composites,
|
14756
|
+
referenceData: fks,
|
14757
|
+
uniqueConstraints: Object.values(uniqueConstraints)
|
14758
|
+
}
|
14759
|
+
];
|
14760
|
+
if (Object.keys(indexes).length) {
|
14761
|
+
statements.push(...prepareCreateIndexesJson(name2, "", indexes));
|
14762
|
+
}
|
14763
|
+
return statements;
|
14764
|
+
};
|
14765
|
+
libSQLCombineStatements = (statements, json2, action) => {
|
14766
|
+
const newStatements = {};
|
14767
|
+
for (const statement of statements) {
|
14768
|
+
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") {
|
14769
|
+
const tableName2 = statement.tableName;
|
14770
|
+
const statementsForTable2 = newStatements[tableName2];
|
14771
|
+
if (!statementsForTable2) {
|
14772
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14773
|
+
continue;
|
14774
|
+
}
|
14775
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
14776
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
14777
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14778
|
+
if (wasRename) {
|
14779
|
+
newStatements[tableName2].push(...preparedStatements);
|
14780
|
+
} else {
|
14781
|
+
newStatements[tableName2] = preparedStatements;
|
14782
|
+
}
|
14783
|
+
continue;
|
14784
|
+
}
|
14785
|
+
continue;
|
14786
|
+
}
|
14787
|
+
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") {
|
14788
|
+
const { tableName: tableName2, columnName, columnPk } = statement;
|
14789
|
+
const columnIsPartOfForeignKey = Object.values(
|
14790
|
+
json2.tables[tableName2].foreignKeys
|
14791
|
+
).some((it) => {
|
14792
|
+
const unsquashFk = action === "push" ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it);
|
14793
|
+
return unsquashFk.columnsFrom.includes(columnName);
|
14794
|
+
});
|
14795
|
+
const statementsForTable2 = newStatements[tableName2];
|
14796
|
+
if (!statementsForTable2 && (columnIsPartOfForeignKey || columnPk)) {
|
14797
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14798
|
+
continue;
|
14799
|
+
}
|
14800
|
+
if (statementsForTable2 && (columnIsPartOfForeignKey || columnPk)) {
|
14801
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
14802
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
14803
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14804
|
+
if (wasRename) {
|
14805
|
+
newStatements[tableName2].push(...preparedStatements);
|
14806
|
+
} else {
|
14807
|
+
newStatements[tableName2] = preparedStatements;
|
14808
|
+
}
|
14809
|
+
}
|
14810
|
+
continue;
|
14811
|
+
}
|
14812
|
+
if (statementsForTable2 && !(columnIsPartOfForeignKey || columnPk)) {
|
14813
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
14814
|
+
newStatements[tableName2].push(statement);
|
14815
|
+
}
|
14816
|
+
continue;
|
14817
|
+
}
|
14818
|
+
newStatements[tableName2] = [statement];
|
14819
|
+
continue;
|
14820
|
+
}
|
14821
|
+
if (statement.type === "create_reference") {
|
14822
|
+
const tableName2 = statement.tableName;
|
14823
|
+
const data = action === "push" ? SQLiteSquasher.unsquashPushFK(statement.data) : SQLiteSquasher.unsquashFK(statement.data);
|
14824
|
+
const statementsForTable2 = newStatements[tableName2];
|
14825
|
+
if (!statementsForTable2) {
|
14826
|
+
newStatements[tableName2] = statement.isMulticolumn ? prepareLibSQLRecreateTable(json2.tables[tableName2], action) : [statement];
|
14827
|
+
continue;
|
14828
|
+
}
|
14829
|
+
if (!statement.isMulticolumn && statementsForTable2.some(
|
14830
|
+
(st) => st.type === "sqlite_alter_table_add_column" && st.column.name === data.columnsFrom[0]
|
14831
|
+
)) {
|
14832
|
+
continue;
|
14833
|
+
}
|
14834
|
+
if (statement.isMulticolumn) {
|
14835
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
14836
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
14837
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14838
|
+
if (wasRename) {
|
14839
|
+
newStatements[tableName2].push(...preparedStatements);
|
14840
|
+
} else {
|
14841
|
+
newStatements[tableName2] = preparedStatements;
|
14842
|
+
}
|
14843
|
+
continue;
|
14844
|
+
}
|
14845
|
+
continue;
|
14846
|
+
}
|
14847
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
14848
|
+
newStatements[tableName2].push(statement);
|
14849
|
+
}
|
14850
|
+
continue;
|
14851
|
+
}
|
14852
|
+
if (statement.type === "delete_reference") {
|
14853
|
+
const tableName2 = statement.tableName;
|
14854
|
+
const statementsForTable2 = newStatements[tableName2];
|
14855
|
+
if (!statementsForTable2) {
|
14856
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14857
|
+
continue;
|
14858
|
+
}
|
14859
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
14860
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
14861
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14862
|
+
if (wasRename) {
|
14863
|
+
newStatements[tableName2].push(...preparedStatements);
|
14864
|
+
} else {
|
14865
|
+
newStatements[tableName2] = preparedStatements;
|
14866
|
+
}
|
14867
|
+
continue;
|
14868
|
+
}
|
14869
|
+
continue;
|
14870
|
+
}
|
14871
|
+
if (statement.type === "sqlite_alter_table_add_column" && statement.column.primaryKey) {
|
14872
|
+
const tableName2 = statement.tableName;
|
14873
|
+
const statementsForTable2 = newStatements[tableName2];
|
14874
|
+
if (!statementsForTable2) {
|
14875
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14876
|
+
continue;
|
14877
|
+
}
|
14878
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
14879
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
14880
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14881
|
+
if (wasRename) {
|
14882
|
+
newStatements[tableName2].push(...preparedStatements);
|
14883
|
+
} else {
|
14884
|
+
newStatements[tableName2] = preparedStatements;
|
14885
|
+
}
|
14886
|
+
continue;
|
14887
|
+
}
|
14888
|
+
continue;
|
14889
|
+
}
|
14890
|
+
const tableName = statement.type === "rename_table" ? statement.tableNameTo : statement.tableName;
|
14891
|
+
const statementsForTable = newStatements[tableName];
|
14892
|
+
if (!statementsForTable) {
|
14893
|
+
newStatements[tableName] = [statement];
|
14894
|
+
continue;
|
14895
|
+
}
|
14896
|
+
if (!statementsForTable.some(({ type }) => type === "recreate_table")) {
|
14897
|
+
newStatements[tableName].push(statement);
|
14898
|
+
}
|
14899
|
+
}
|
14900
|
+
const combinedStatements = Object.values(newStatements).flat();
|
14901
|
+
const renamedTables = combinedStatements.filter((it) => it.type === "rename_table");
|
14902
|
+
const renamedColumns = combinedStatements.filter((it) => it.type === "alter_table_rename_column");
|
14903
|
+
const rest = combinedStatements.filter((it) => it.type !== "rename_table" && it.type !== "alter_table_rename_column");
|
14904
|
+
return [...renamedTables, ...renamedColumns, ...rest];
|
14905
|
+
};
|
14906
|
+
sqliteCombineStatements = (statements, json2, action) => {
|
14907
|
+
const newStatements = {};
|
14908
|
+
for (const statement of statements) {
|
14909
|
+
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") {
|
14910
|
+
const tableName2 = statement.tableName;
|
14911
|
+
const statementsForTable2 = newStatements[tableName2];
|
14912
|
+
if (!statementsForTable2) {
|
14913
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14914
|
+
continue;
|
14915
|
+
}
|
14916
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
14917
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
14918
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14919
|
+
if (wasRename) {
|
14920
|
+
newStatements[tableName2].push(...preparedStatements);
|
14921
|
+
} else {
|
14922
|
+
newStatements[tableName2] = preparedStatements;
|
14923
|
+
}
|
14924
|
+
continue;
|
14925
|
+
}
|
14926
|
+
continue;
|
14927
|
+
}
|
14928
|
+
if (statement.type === "sqlite_alter_table_add_column" && statement.column.primaryKey) {
|
14929
|
+
const tableName2 = statement.tableName;
|
14930
|
+
const statementsForTable2 = newStatements[tableName2];
|
14931
|
+
if (!statementsForTable2) {
|
14932
|
+
newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14933
|
+
continue;
|
14934
|
+
}
|
14935
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
14936
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
14937
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14938
|
+
if (wasRename) {
|
14939
|
+
newStatements[tableName2].push(...preparedStatements);
|
14940
|
+
} else {
|
14941
|
+
newStatements[tableName2] = preparedStatements;
|
14942
|
+
}
|
14943
|
+
continue;
|
14944
|
+
}
|
14945
|
+
continue;
|
14946
|
+
}
|
14947
|
+
if (statement.type === "create_reference") {
|
14948
|
+
const tableName2 = statement.tableName;
|
14949
|
+
const data = action === "push" ? SQLiteSquasher.unsquashPushFK(statement.data) : SQLiteSquasher.unsquashFK(statement.data);
|
14950
|
+
const statementsForTable2 = newStatements[tableName2];
|
14951
|
+
if (!statementsForTable2) {
|
14952
|
+
newStatements[tableName2] = prepareSQLiteRecreateTable(json2.tables[tableName2], action);
|
14953
|
+
continue;
|
14954
|
+
}
|
14955
|
+
if (data.columnsFrom.length === 1 && statementsForTable2.some(
|
14956
|
+
(st) => st.type === "sqlite_alter_table_add_column" && st.column.name === data.columnsFrom[0]
|
14957
|
+
)) {
|
14958
|
+
continue;
|
14959
|
+
}
|
14960
|
+
if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
|
14961
|
+
const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
|
14962
|
+
const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
|
14963
|
+
if (wasRename) {
|
14964
|
+
newStatements[tableName2].push(...preparedStatements);
|
14965
|
+
} else {
|
14966
|
+
newStatements[tableName2] = preparedStatements;
|
14967
|
+
}
|
14968
|
+
continue;
|
14969
|
+
}
|
14970
|
+
continue;
|
14971
|
+
}
|
14972
|
+
const tableName = statement.type === "rename_table" ? statement.tableNameTo : statement.tableName;
|
14973
|
+
const statementsForTable = newStatements[tableName];
|
14974
|
+
if (!statementsForTable) {
|
14975
|
+
newStatements[tableName] = [statement];
|
14976
|
+
continue;
|
14977
|
+
}
|
14978
|
+
if (!statementsForTable.some(({ type }) => type === "recreate_table")) {
|
14979
|
+
newStatements[tableName].push(statement);
|
14980
|
+
}
|
14981
|
+
}
|
14982
|
+
const combinedStatements = Object.values(newStatements).flat();
|
14983
|
+
const renamedTables = combinedStatements.filter((it) => it.type === "rename_table");
|
14984
|
+
const renamedColumns = combinedStatements.filter((it) => it.type === "alter_table_rename_column");
|
14985
|
+
const rest = combinedStatements.filter((it) => it.type !== "rename_table" && it.type !== "alter_table_rename_column");
|
14986
|
+
return [...renamedTables, ...renamedColumns, ...rest];
|
14987
|
+
};
|
14988
|
+
}
|
14989
|
+
});
|
14990
|
+
|
14447
14991
|
// src/snapshotsDiffer.ts
|
14448
14992
|
var snapshotsDiffer_exports = {};
|
14449
14993
|
__export(snapshotsDiffer_exports, {
|
14450
14994
|
alteredTableScheme: () => alteredTableScheme,
|
14995
|
+
applyLibSQLSnapshotsDiff: () => applyLibSQLSnapshotsDiff,
|
14451
14996
|
applyMysqlSnapshotsDiff: () => applyMysqlSnapshotsDiff,
|
14452
14997
|
applyPgSnapshotsDiff: () => applyPgSnapshotsDiff,
|
14453
14998
|
applySqliteSnapshotsDiff: () => applySqliteSnapshotsDiff,
|
@@ -14457,7 +15002,7 @@ __export(snapshotsDiffer_exports, {
|
|
14457
15002
|
makePatched: () => makePatched,
|
14458
15003
|
makeSelfOrPatched: () => makeSelfOrPatched
|
14459
15004
|
});
|
14460
|
-
var makeChanged, makeSelfOrChanged, makePatched, makeSelfOrPatched, columnSchema, alteredColumnSchema, enumSchema2, changedEnumSchema, tableScheme, alteredTableScheme, diffResultScheme, diffResultSchemeMysql, diffResultSchemeSQLite, schemaChangeFor, nameChangeFor, nameSchemaChangeFor, columnChangeFor, applyPgSnapshotsDiff, applyMysqlSnapshotsDiff, applySqliteSnapshotsDiff;
|
15005
|
+
var makeChanged, makeSelfOrChanged, makePatched, makeSelfOrPatched, columnSchema, alteredColumnSchema, enumSchema2, changedEnumSchema, tableScheme, alteredTableScheme, diffResultScheme, diffResultSchemeMysql, diffResultSchemeSQLite, schemaChangeFor, nameChangeFor, nameSchemaChangeFor, columnChangeFor, applyPgSnapshotsDiff, applyMysqlSnapshotsDiff, applySqliteSnapshotsDiff, applyLibSQLSnapshotsDiff;
|
14461
15006
|
var init_snapshotsDiffer = __esm({
|
14462
15007
|
"src/snapshotsDiffer.ts"() {
|
14463
15008
|
"use strict";
|
@@ -14469,6 +15014,7 @@ var init_snapshotsDiffer = __esm({
|
|
14469
15014
|
init_mysqlSchema();
|
14470
15015
|
init_pgSchema();
|
14471
15016
|
init_sqliteSchema();
|
15017
|
+
init_statementCombiner();
|
14472
15018
|
init_utils();
|
14473
15019
|
makeChanged = (schema4) => {
|
14474
15020
|
return objectType({
|
@@ -15362,33 +15908,332 @@ var init_snapshotsDiffer = __esm({
|
|
15362
15908
|
let addedColumns = [];
|
15363
15909
|
for (const addedPkName of Object.keys(it.addedCompositePKs)) {
|
15364
15910
|
const addedPkColumns = it.addedCompositePKs[addedPkName];
|
15365
|
-
addedColumns = MySqlSquasher.unsquashPK(addedPkColumns).columns;
|
15911
|
+
addedColumns = MySqlSquasher.unsquashPK(addedPkColumns).columns;
|
15912
|
+
}
|
15913
|
+
let deletedColumns = [];
|
15914
|
+
for (const deletedPkName of Object.keys(it.deletedCompositePKs)) {
|
15915
|
+
const deletedPkColumns = it.deletedCompositePKs[deletedPkName];
|
15916
|
+
deletedColumns = MySqlSquasher.unsquashPK(deletedPkColumns).columns;
|
15917
|
+
}
|
15918
|
+
const doPerformDeleteAndCreate = JSON.stringify(addedColumns) !== JSON.stringify(deletedColumns);
|
15919
|
+
let addedCompositePKs = [];
|
15920
|
+
let deletedCompositePKs = [];
|
15921
|
+
let alteredCompositePKs = [];
|
15922
|
+
addedCompositePKs = prepareAddCompositePrimaryKeyMySql(
|
15923
|
+
it.name,
|
15924
|
+
it.addedCompositePKs,
|
15925
|
+
prevFull,
|
15926
|
+
curFull
|
15927
|
+
);
|
15928
|
+
deletedCompositePKs = prepareDeleteCompositePrimaryKeyMySql(
|
15929
|
+
it.name,
|
15930
|
+
it.deletedCompositePKs,
|
15931
|
+
prevFull
|
15932
|
+
);
|
15933
|
+
alteredCompositePKs = prepareAlterCompositePrimaryKeyMySql(
|
15934
|
+
it.name,
|
15935
|
+
it.alteredCompositePKs,
|
15936
|
+
prevFull,
|
15937
|
+
curFull
|
15938
|
+
);
|
15939
|
+
let addedUniqueConstraints = [];
|
15940
|
+
let deletedUniqueConstraints = [];
|
15941
|
+
let alteredUniqueConstraints = [];
|
15942
|
+
addedUniqueConstraints = prepareAddUniqueConstraintPg(
|
15943
|
+
it.name,
|
15944
|
+
it.schema,
|
15945
|
+
it.addedUniqueConstraints
|
15946
|
+
);
|
15947
|
+
deletedUniqueConstraints = prepareDeleteUniqueConstraintPg(
|
15948
|
+
it.name,
|
15949
|
+
it.schema,
|
15950
|
+
it.deletedUniqueConstraints
|
15951
|
+
);
|
15952
|
+
if (it.alteredUniqueConstraints) {
|
15953
|
+
const added = {};
|
15954
|
+
const deleted = {};
|
15955
|
+
for (const k of Object.keys(it.alteredUniqueConstraints)) {
|
15956
|
+
added[k] = it.alteredUniqueConstraints[k].__new;
|
15957
|
+
deleted[k] = it.alteredUniqueConstraints[k].__old;
|
15958
|
+
}
|
15959
|
+
addedUniqueConstraints.push(
|
15960
|
+
...prepareAddUniqueConstraintPg(it.name, it.schema, added)
|
15961
|
+
);
|
15962
|
+
deletedUniqueConstraints.push(
|
15963
|
+
...prepareDeleteUniqueConstraintPg(it.name, it.schema, deleted)
|
15964
|
+
);
|
15965
|
+
}
|
15966
|
+
jsonAddedCompositePKs.push(...addedCompositePKs);
|
15967
|
+
jsonDeletedCompositePKs.push(...deletedCompositePKs);
|
15968
|
+
jsonAlteredCompositePKs.push(...alteredCompositePKs);
|
15969
|
+
jsonAddedUniqueConstraints.push(...addedUniqueConstraints);
|
15970
|
+
jsonDeletedUniqueConstraints.push(...deletedUniqueConstraints);
|
15971
|
+
jsonAlteredUniqueConstraints.push(...alteredUniqueConstraints);
|
15972
|
+
});
|
15973
|
+
const rColumns = jsonRenameColumnsStatements.map((it) => {
|
15974
|
+
const tableName = it.tableName;
|
15975
|
+
const schema4 = it.schema;
|
15976
|
+
return {
|
15977
|
+
from: { schema: schema4, table: tableName, column: it.oldColumnName },
|
15978
|
+
to: { schema: schema4, table: tableName, column: it.newColumnName }
|
15979
|
+
};
|
15980
|
+
});
|
15981
|
+
const jsonTableAlternations = alteredTables.map((it) => {
|
15982
|
+
return prepareAlterColumnsMysql(
|
15983
|
+
it.name,
|
15984
|
+
it.schema,
|
15985
|
+
it.altered,
|
15986
|
+
json1,
|
15987
|
+
json2,
|
15988
|
+
action
|
15989
|
+
);
|
15990
|
+
}).flat();
|
15991
|
+
const jsonCreateIndexesForAllAlteredTables = alteredTables.map((it) => {
|
15992
|
+
return prepareCreateIndexesJson(
|
15993
|
+
it.name,
|
15994
|
+
it.schema,
|
15995
|
+
it.addedIndexes || {},
|
15996
|
+
curFull.internal
|
15997
|
+
);
|
15998
|
+
}).flat();
|
15999
|
+
const jsonDropIndexesForAllAlteredTables = alteredTables.map((it) => {
|
16000
|
+
return prepareDropIndexesJson(
|
16001
|
+
it.name,
|
16002
|
+
it.schema,
|
16003
|
+
it.deletedIndexes || {}
|
16004
|
+
);
|
16005
|
+
}).flat();
|
16006
|
+
alteredTables.forEach((it) => {
|
16007
|
+
const droppedIndexes = Object.keys(it.alteredIndexes).reduce(
|
16008
|
+
(current, item) => {
|
16009
|
+
current[item] = it.alteredIndexes[item].__old;
|
16010
|
+
return current;
|
16011
|
+
},
|
16012
|
+
{}
|
16013
|
+
);
|
16014
|
+
const createdIndexes = Object.keys(it.alteredIndexes).reduce(
|
16015
|
+
(current, item) => {
|
16016
|
+
current[item] = it.alteredIndexes[item].__new;
|
16017
|
+
return current;
|
16018
|
+
},
|
16019
|
+
{}
|
16020
|
+
);
|
16021
|
+
jsonCreateIndexesForAllAlteredTables.push(
|
16022
|
+
...prepareCreateIndexesJson(it.name, it.schema, createdIndexes || {})
|
16023
|
+
);
|
16024
|
+
jsonDropIndexesForAllAlteredTables.push(
|
16025
|
+
...prepareDropIndexesJson(it.name, it.schema, droppedIndexes || {})
|
16026
|
+
);
|
16027
|
+
});
|
16028
|
+
const jsonCreateReferencesForCreatedTables = createdTables.map((it) => {
|
16029
|
+
return prepareCreateReferencesJson(it.name, it.schema, it.foreignKeys);
|
16030
|
+
}).flat();
|
16031
|
+
const jsonReferencesForAllAlteredTables = alteredTables.map((it) => {
|
16032
|
+
const forAdded = prepareCreateReferencesJson(
|
16033
|
+
it.name,
|
16034
|
+
it.schema,
|
16035
|
+
it.addedForeignKeys
|
16036
|
+
);
|
16037
|
+
const forAltered = prepareDropReferencesJson(
|
16038
|
+
it.name,
|
16039
|
+
it.schema,
|
16040
|
+
it.deletedForeignKeys
|
16041
|
+
);
|
16042
|
+
const alteredFKs = prepareAlterReferencesJson(
|
16043
|
+
it.name,
|
16044
|
+
it.schema,
|
16045
|
+
it.alteredForeignKeys
|
16046
|
+
);
|
16047
|
+
return [...forAdded, ...forAltered, ...alteredFKs];
|
16048
|
+
}).flat();
|
16049
|
+
const jsonCreatedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
|
16050
|
+
(t) => t.type === "create_reference"
|
16051
|
+
);
|
16052
|
+
const jsonDroppedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
|
16053
|
+
(t) => t.type === "delete_reference"
|
16054
|
+
);
|
16055
|
+
const jsonMySqlCreateTables = createdTables.map((it) => {
|
16056
|
+
return prepareMySqlCreateTableJson(
|
16057
|
+
it,
|
16058
|
+
curFull,
|
16059
|
+
curFull.internal
|
16060
|
+
);
|
16061
|
+
});
|
16062
|
+
jsonStatements.push(...jsonMySqlCreateTables);
|
16063
|
+
jsonStatements.push(...jsonDropTables);
|
16064
|
+
jsonStatements.push(...jsonRenameTables);
|
16065
|
+
jsonStatements.push(...jsonRenameColumnsStatements);
|
16066
|
+
jsonStatements.push(...jsonDeletedUniqueConstraints);
|
16067
|
+
jsonStatements.push(...jsonDroppedReferencesForAlteredTables);
|
16068
|
+
jsonStatements.push(...jsonDropIndexesForAllAlteredTables);
|
16069
|
+
jsonStatements.push(...jsonDeletedCompositePKs);
|
16070
|
+
jsonStatements.push(...jsonTableAlternations);
|
16071
|
+
jsonStatements.push(...jsonAddedCompositePKs);
|
16072
|
+
jsonStatements.push(...jsonAddedUniqueConstraints);
|
16073
|
+
jsonStatements.push(...jsonDeletedUniqueConstraints);
|
16074
|
+
jsonStatements.push(...jsonAddColumnsStatemets);
|
16075
|
+
jsonStatements.push(...jsonCreateReferencesForCreatedTables);
|
16076
|
+
jsonStatements.push(...jsonCreateIndexesForCreatedTables);
|
16077
|
+
jsonStatements.push(...jsonCreatedReferencesForAlteredTables);
|
16078
|
+
jsonStatements.push(...jsonCreateIndexesForAllAlteredTables);
|
16079
|
+
jsonStatements.push(...jsonDropColumnsStatemets);
|
16080
|
+
jsonStatements.push(...jsonAlteredCompositePKs);
|
16081
|
+
jsonStatements.push(...jsonAddedUniqueConstraints);
|
16082
|
+
jsonStatements.push(...jsonAlteredUniqueConstraints);
|
16083
|
+
const sqlStatements = fromJson(jsonStatements, "mysql");
|
16084
|
+
const uniqueSqlStatements = [];
|
16085
|
+
sqlStatements.forEach((ss) => {
|
16086
|
+
if (!uniqueSqlStatements.includes(ss)) {
|
16087
|
+
uniqueSqlStatements.push(ss);
|
16088
|
+
}
|
16089
|
+
});
|
16090
|
+
const rTables = renamedTables.map((it) => {
|
16091
|
+
return { from: it.from, to: it.to };
|
16092
|
+
});
|
16093
|
+
const _meta = prepareMigrationMeta([], rTables, rColumns);
|
16094
|
+
return {
|
16095
|
+
statements: jsonStatements,
|
16096
|
+
sqlStatements: uniqueSqlStatements,
|
16097
|
+
_meta
|
16098
|
+
};
|
16099
|
+
};
|
16100
|
+
applySqliteSnapshotsDiff = async (json1, json2, tablesResolver2, columnsResolver2, prevFull, curFull, action) => {
|
16101
|
+
const tablesDiff = diffSchemasOrTables(json1.tables, json2.tables);
|
16102
|
+
const {
|
16103
|
+
created: createdTables,
|
16104
|
+
deleted: deletedTables,
|
16105
|
+
renamed: renamedTables
|
16106
|
+
} = await tablesResolver2({
|
16107
|
+
created: tablesDiff.added,
|
16108
|
+
deleted: tablesDiff.deleted
|
16109
|
+
});
|
16110
|
+
const tablesPatchedSnap1 = copy(json1);
|
16111
|
+
tablesPatchedSnap1.tables = mapEntries(tablesPatchedSnap1.tables, (_2, it) => {
|
16112
|
+
const { name: name2 } = nameChangeFor(it, renamedTables);
|
16113
|
+
it.name = name2;
|
16114
|
+
return [name2, it];
|
16115
|
+
});
|
16116
|
+
const res = diffColumns(tablesPatchedSnap1.tables, json2.tables);
|
16117
|
+
const columnRenames = [];
|
16118
|
+
const columnCreates = [];
|
16119
|
+
const columnDeletes = [];
|
16120
|
+
for (let entry of Object.values(res)) {
|
16121
|
+
const { renamed, created, deleted } = await columnsResolver2({
|
16122
|
+
tableName: entry.name,
|
16123
|
+
schema: entry.schema,
|
16124
|
+
deleted: entry.columns.deleted,
|
16125
|
+
created: entry.columns.added
|
16126
|
+
});
|
16127
|
+
if (created.length > 0) {
|
16128
|
+
columnCreates.push({
|
16129
|
+
table: entry.name,
|
16130
|
+
columns: created
|
16131
|
+
});
|
16132
|
+
}
|
16133
|
+
if (deleted.length > 0) {
|
16134
|
+
columnDeletes.push({
|
16135
|
+
table: entry.name,
|
16136
|
+
columns: deleted
|
16137
|
+
});
|
16138
|
+
}
|
16139
|
+
if (renamed.length > 0) {
|
16140
|
+
columnRenames.push({
|
16141
|
+
table: entry.name,
|
16142
|
+
renames: renamed
|
16143
|
+
});
|
16144
|
+
}
|
16145
|
+
}
|
16146
|
+
const columnRenamesDict = columnRenames.reduce(
|
16147
|
+
(acc, it) => {
|
16148
|
+
acc[it.table] = it.renames;
|
16149
|
+
return acc;
|
16150
|
+
},
|
16151
|
+
{}
|
16152
|
+
);
|
16153
|
+
const columnsPatchedSnap1 = copy(tablesPatchedSnap1);
|
16154
|
+
columnsPatchedSnap1.tables = mapEntries(
|
16155
|
+
columnsPatchedSnap1.tables,
|
16156
|
+
(tableKey2, tableValue) => {
|
16157
|
+
const patchedColumns = mapKeys(
|
16158
|
+
tableValue.columns,
|
16159
|
+
(columnKey, column4) => {
|
16160
|
+
const rens = columnRenamesDict[tableValue.name] || [];
|
16161
|
+
const newName = columnChangeFor(columnKey, rens);
|
16162
|
+
column4.name = newName;
|
16163
|
+
return newName;
|
16164
|
+
}
|
16165
|
+
);
|
16166
|
+
tableValue.columns = patchedColumns;
|
16167
|
+
return [tableKey2, tableValue];
|
16168
|
+
}
|
16169
|
+
);
|
16170
|
+
const diffResult = applyJsonDiff(columnsPatchedSnap1, json2);
|
16171
|
+
const typedResult = diffResultSchemeSQLite.parse(diffResult);
|
16172
|
+
const tablesMap = {};
|
16173
|
+
typedResult.alteredTablesWithColumns.forEach((obj) => {
|
16174
|
+
tablesMap[obj.name] = obj;
|
16175
|
+
});
|
16176
|
+
const jsonCreateTables = createdTables.map((it) => {
|
16177
|
+
return prepareSQLiteCreateTable(it, action);
|
16178
|
+
});
|
16179
|
+
const jsonCreateIndexesForCreatedTables = createdTables.map((it) => {
|
16180
|
+
return prepareCreateIndexesJson(
|
16181
|
+
it.name,
|
16182
|
+
it.schema,
|
16183
|
+
it.indexes,
|
16184
|
+
curFull.internal
|
16185
|
+
);
|
16186
|
+
}).flat();
|
16187
|
+
const jsonDropTables = deletedTables.map((it) => {
|
16188
|
+
return prepareDropTableJson(it);
|
16189
|
+
});
|
16190
|
+
const jsonRenameTables = renamedTables.map((it) => {
|
16191
|
+
return prepareRenameTableJson(it.from, it.to);
|
16192
|
+
});
|
16193
|
+
const jsonRenameColumnsStatements = columnRenames.map((it) => prepareRenameColumns(it.table, "", it.renames)).flat();
|
16194
|
+
const jsonDropColumnsStatemets = columnDeletes.map((it) => _prepareDropColumns(it.table, "", it.columns)).flat();
|
16195
|
+
const jsonAddColumnsStatemets = columnCreates.map((it) => {
|
16196
|
+
return _prepareSqliteAddColumns(
|
16197
|
+
it.table,
|
16198
|
+
it.columns,
|
16199
|
+
tablesMap[it.table] && tablesMap[it.table].addedForeignKeys ? Object.values(tablesMap[it.table].addedForeignKeys) : []
|
16200
|
+
);
|
16201
|
+
}).flat();
|
16202
|
+
const allAltered = typedResult.alteredTablesWithColumns;
|
16203
|
+
const jsonAddedCompositePKs = [];
|
16204
|
+
const jsonDeletedCompositePKs = [];
|
16205
|
+
const jsonAlteredCompositePKs = [];
|
16206
|
+
const jsonAddedUniqueConstraints = [];
|
16207
|
+
const jsonDeletedUniqueConstraints = [];
|
16208
|
+
const jsonAlteredUniqueConstraints = [];
|
16209
|
+
allAltered.forEach((it) => {
|
16210
|
+
let addedColumns = [];
|
16211
|
+
for (const addedPkName of Object.keys(it.addedCompositePKs)) {
|
16212
|
+
const addedPkColumns = it.addedCompositePKs[addedPkName];
|
16213
|
+
addedColumns = SQLiteSquasher.unsquashPK(addedPkColumns);
|
15366
16214
|
}
|
15367
16215
|
let deletedColumns = [];
|
15368
16216
|
for (const deletedPkName of Object.keys(it.deletedCompositePKs)) {
|
15369
16217
|
const deletedPkColumns = it.deletedCompositePKs[deletedPkName];
|
15370
|
-
deletedColumns =
|
16218
|
+
deletedColumns = SQLiteSquasher.unsquashPK(deletedPkColumns);
|
15371
16219
|
}
|
15372
16220
|
const doPerformDeleteAndCreate = JSON.stringify(addedColumns) !== JSON.stringify(deletedColumns);
|
15373
16221
|
let addedCompositePKs = [];
|
15374
16222
|
let deletedCompositePKs = [];
|
15375
16223
|
let alteredCompositePKs = [];
|
15376
|
-
|
15377
|
-
|
15378
|
-
|
15379
|
-
|
15380
|
-
|
15381
|
-
|
15382
|
-
|
15383
|
-
|
15384
|
-
|
15385
|
-
|
15386
|
-
|
15387
|
-
alteredCompositePKs = prepareAlterCompositePrimaryKeyMySql(
|
16224
|
+
if (doPerformDeleteAndCreate) {
|
16225
|
+
addedCompositePKs = prepareAddCompositePrimaryKeySqlite(
|
16226
|
+
it.name,
|
16227
|
+
it.addedCompositePKs
|
16228
|
+
);
|
16229
|
+
deletedCompositePKs = prepareDeleteCompositePrimaryKeySqlite(
|
16230
|
+
it.name,
|
16231
|
+
it.deletedCompositePKs
|
16232
|
+
);
|
16233
|
+
}
|
16234
|
+
alteredCompositePKs = prepareAlterCompositePrimaryKeySqlite(
|
15388
16235
|
it.name,
|
15389
|
-
it.alteredCompositePKs
|
15390
|
-
prevFull,
|
15391
|
-
curFull
|
16236
|
+
it.alteredCompositePKs
|
15392
16237
|
);
|
15393
16238
|
let addedUniqueConstraints = [];
|
15394
16239
|
let deletedUniqueConstraints = [];
|
@@ -15432,17 +16277,10 @@ var init_snapshotsDiffer = __esm({
|
|
15432
16277
|
to: { schema: schema4, table: tableName, column: it.newColumnName }
|
15433
16278
|
};
|
15434
16279
|
});
|
15435
|
-
const jsonTableAlternations =
|
15436
|
-
return
|
15437
|
-
it.name,
|
15438
|
-
it.schema,
|
15439
|
-
it.altered,
|
15440
|
-
json1,
|
15441
|
-
json2,
|
15442
|
-
action
|
15443
|
-
);
|
16280
|
+
const jsonTableAlternations = allAltered.map((it) => {
|
16281
|
+
return prepareSqliteAlterColumns(it.name, it.schema, it.altered, json2);
|
15444
16282
|
}).flat();
|
15445
|
-
const jsonCreateIndexesForAllAlteredTables =
|
16283
|
+
const jsonCreateIndexesForAllAlteredTables = allAltered.map((it) => {
|
15446
16284
|
return prepareCreateIndexesJson(
|
15447
16285
|
it.name,
|
15448
16286
|
it.schema,
|
@@ -15450,14 +16288,14 @@ var init_snapshotsDiffer = __esm({
|
|
15450
16288
|
curFull.internal
|
15451
16289
|
);
|
15452
16290
|
}).flat();
|
15453
|
-
const jsonDropIndexesForAllAlteredTables =
|
16291
|
+
const jsonDropIndexesForAllAlteredTables = allAltered.map((it) => {
|
15454
16292
|
return prepareDropIndexesJson(
|
15455
16293
|
it.name,
|
15456
16294
|
it.schema,
|
15457
16295
|
it.deletedIndexes || {}
|
15458
16296
|
);
|
15459
16297
|
}).flat();
|
15460
|
-
|
16298
|
+
allAltered.forEach((it) => {
|
15461
16299
|
const droppedIndexes = Object.keys(it.alteredIndexes).reduce(
|
15462
16300
|
(current, item) => {
|
15463
16301
|
current[item] = it.alteredIndexes[item].__old;
|
@@ -15473,16 +16311,18 @@ var init_snapshotsDiffer = __esm({
|
|
15473
16311
|
{}
|
15474
16312
|
);
|
15475
16313
|
jsonCreateIndexesForAllAlteredTables.push(
|
15476
|
-
...prepareCreateIndexesJson(
|
16314
|
+
...prepareCreateIndexesJson(
|
16315
|
+
it.name,
|
16316
|
+
it.schema,
|
16317
|
+
createdIndexes || {},
|
16318
|
+
curFull.internal
|
16319
|
+
)
|
15477
16320
|
);
|
15478
16321
|
jsonDropIndexesForAllAlteredTables.push(
|
15479
16322
|
...prepareDropIndexesJson(it.name, it.schema, droppedIndexes || {})
|
15480
16323
|
);
|
15481
16324
|
});
|
15482
|
-
const
|
15483
|
-
return prepareCreateReferencesJson(it.name, it.schema, it.foreignKeys);
|
15484
|
-
}).flat();
|
15485
|
-
const jsonReferencesForAllAlteredTables = alteredTables.map((it) => {
|
16325
|
+
const jsonReferencesForAllAlteredTables = allAltered.map((it) => {
|
15486
16326
|
const forAdded = prepareCreateReferencesJson(
|
15487
16327
|
it.name,
|
15488
16328
|
it.schema,
|
@@ -15506,35 +16346,25 @@ var init_snapshotsDiffer = __esm({
|
|
15506
16346
|
const jsonDroppedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
|
15507
16347
|
(t) => t.type === "delete_reference"
|
15508
16348
|
);
|
15509
|
-
const
|
15510
|
-
|
15511
|
-
it,
|
15512
|
-
curFull,
|
15513
|
-
curFull.internal
|
15514
|
-
);
|
15515
|
-
});
|
15516
|
-
jsonStatements.push(...jsonMySqlCreateTables);
|
16349
|
+
const jsonStatements = [];
|
16350
|
+
jsonStatements.push(...jsonCreateTables);
|
15517
16351
|
jsonStatements.push(...jsonDropTables);
|
15518
16352
|
jsonStatements.push(...jsonRenameTables);
|
15519
16353
|
jsonStatements.push(...jsonRenameColumnsStatements);
|
15520
|
-
jsonStatements.push(...jsonDeletedUniqueConstraints);
|
15521
16354
|
jsonStatements.push(...jsonDroppedReferencesForAlteredTables);
|
15522
16355
|
jsonStatements.push(...jsonDropIndexesForAllAlteredTables);
|
15523
16356
|
jsonStatements.push(...jsonDeletedCompositePKs);
|
15524
16357
|
jsonStatements.push(...jsonTableAlternations);
|
15525
16358
|
jsonStatements.push(...jsonAddedCompositePKs);
|
15526
|
-
jsonStatements.push(...jsonAddedUniqueConstraints);
|
15527
|
-
jsonStatements.push(...jsonDeletedUniqueConstraints);
|
15528
16359
|
jsonStatements.push(...jsonAddColumnsStatemets);
|
15529
|
-
jsonStatements.push(...jsonCreateReferencesForCreatedTables);
|
15530
16360
|
jsonStatements.push(...jsonCreateIndexesForCreatedTables);
|
15531
|
-
jsonStatements.push(...jsonCreatedReferencesForAlteredTables);
|
15532
16361
|
jsonStatements.push(...jsonCreateIndexesForAllAlteredTables);
|
16362
|
+
jsonStatements.push(...jsonCreatedReferencesForAlteredTables);
|
15533
16363
|
jsonStatements.push(...jsonDropColumnsStatemets);
|
15534
16364
|
jsonStatements.push(...jsonAlteredCompositePKs);
|
15535
|
-
jsonStatements.push(...jsonAddedUniqueConstraints);
|
15536
16365
|
jsonStatements.push(...jsonAlteredUniqueConstraints);
|
15537
|
-
const
|
16366
|
+
const combinedJsonStatements = sqliteCombineStatements(jsonStatements, json2, action);
|
16367
|
+
const sqlStatements = fromJson(combinedJsonStatements, "sqlite");
|
15538
16368
|
const uniqueSqlStatements = [];
|
15539
16369
|
sqlStatements.forEach((ss) => {
|
15540
16370
|
if (!uniqueSqlStatements.includes(ss)) {
|
@@ -15546,12 +16376,12 @@ var init_snapshotsDiffer = __esm({
|
|
15546
16376
|
});
|
15547
16377
|
const _meta = prepareMigrationMeta([], rTables, rColumns);
|
15548
16378
|
return {
|
15549
|
-
statements:
|
16379
|
+
statements: combinedJsonStatements,
|
15550
16380
|
sqlStatements: uniqueSqlStatements,
|
15551
16381
|
_meta
|
15552
16382
|
};
|
15553
16383
|
};
|
15554
|
-
|
16384
|
+
applyLibSQLSnapshotsDiff = async (json1, json2, tablesResolver2, columnsResolver2, prevFull, curFull, action) => {
|
15555
16385
|
const tablesDiff = diffSchemasOrTables(json1.tables, json2.tables);
|
15556
16386
|
const {
|
15557
16387
|
created: createdTables,
|
@@ -15653,6 +16483,18 @@ var init_snapshotsDiffer = __esm({
|
|
15653
16483
|
tablesMap[it.table] && tablesMap[it.table].addedForeignKeys ? Object.values(tablesMap[it.table].addedForeignKeys) : []
|
15654
16484
|
);
|
15655
16485
|
}).flat();
|
16486
|
+
const rColumns = jsonRenameColumnsStatements.map((it) => {
|
16487
|
+
const tableName = it.tableName;
|
16488
|
+
const schema4 = it.schema;
|
16489
|
+
return {
|
16490
|
+
from: { schema: schema4, table: tableName, column: it.oldColumnName },
|
16491
|
+
to: { schema: schema4, table: tableName, column: it.newColumnName }
|
16492
|
+
};
|
16493
|
+
});
|
16494
|
+
const rTables = renamedTables.map((it) => {
|
16495
|
+
return { from: it.from, to: it.to };
|
16496
|
+
});
|
16497
|
+
const _meta = prepareMigrationMeta([], rTables, rColumns);
|
15656
16498
|
const allAltered = typedResult.alteredTablesWithColumns;
|
15657
16499
|
const jsonAddedCompositePKs = [];
|
15658
16500
|
const jsonDeletedCompositePKs = [];
|
@@ -15723,14 +16565,6 @@ var init_snapshotsDiffer = __esm({
|
|
15723
16565
|
jsonDeletedUniqueConstraints.push(...deletedUniqueConstraints);
|
15724
16566
|
jsonAlteredUniqueConstraints.push(...alteredUniqueConstraints);
|
15725
16567
|
});
|
15726
|
-
const rColumns = jsonRenameColumnsStatements.map((it) => {
|
15727
|
-
const tableName = it.tableName;
|
15728
|
-
const schema4 = it.schema;
|
15729
|
-
return {
|
15730
|
-
from: { schema: schema4, table: tableName, column: it.oldColumnName },
|
15731
|
-
to: { schema: schema4, table: tableName, column: it.newColumnName }
|
15732
|
-
};
|
15733
|
-
});
|
15734
16568
|
const jsonTableAlternations = allAltered.map((it) => {
|
15735
16569
|
return prepareSqliteAlterColumns(it.name, it.schema, it.altered, json2);
|
15736
16570
|
}).flat();
|
@@ -15777,21 +16611,22 @@ var init_snapshotsDiffer = __esm({
|
|
15777
16611
|
);
|
15778
16612
|
});
|
15779
16613
|
const jsonReferencesForAllAlteredTables = allAltered.map((it) => {
|
15780
|
-
const forAdded =
|
15781
|
-
it.name,
|
15782
|
-
it.schema,
|
15783
|
-
it.addedForeignKeys
|
15784
|
-
);
|
15785
|
-
const forAltered = prepareDropReferencesJson(
|
16614
|
+
const forAdded = prepareLibSQLCreateReferencesJson(
|
15786
16615
|
it.name,
|
15787
16616
|
it.schema,
|
15788
|
-
it.
|
16617
|
+
it.addedForeignKeys,
|
16618
|
+
json2,
|
16619
|
+
action
|
15789
16620
|
);
|
15790
|
-
const
|
16621
|
+
const forAltered = prepareLibSQLDropReferencesJson(
|
15791
16622
|
it.name,
|
15792
16623
|
it.schema,
|
15793
|
-
it.
|
16624
|
+
it.deletedForeignKeys,
|
16625
|
+
json2,
|
16626
|
+
_meta,
|
16627
|
+
action
|
15794
16628
|
);
|
16629
|
+
const alteredFKs = prepareAlterReferencesJson(it.name, it.schema, it.alteredForeignKeys);
|
15795
16630
|
return [...forAdded, ...forAltered, ...alteredFKs];
|
15796
16631
|
}).flat();
|
15797
16632
|
const jsonCreatedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
|
@@ -15817,19 +16652,21 @@ var init_snapshotsDiffer = __esm({
|
|
15817
16652
|
jsonStatements.push(...jsonDropColumnsStatemets);
|
15818
16653
|
jsonStatements.push(...jsonAlteredCompositePKs);
|
15819
16654
|
jsonStatements.push(...jsonAlteredUniqueConstraints);
|
15820
|
-
const
|
16655
|
+
const combinedJsonStatements = libSQLCombineStatements(jsonStatements, json2, action);
|
16656
|
+
const sqlStatements = fromJson(
|
16657
|
+
combinedJsonStatements,
|
16658
|
+
"turso",
|
16659
|
+
action,
|
16660
|
+
json2
|
16661
|
+
);
|
15821
16662
|
const uniqueSqlStatements = [];
|
15822
16663
|
sqlStatements.forEach((ss) => {
|
15823
16664
|
if (!uniqueSqlStatements.includes(ss)) {
|
15824
16665
|
uniqueSqlStatements.push(ss);
|
15825
16666
|
}
|
15826
16667
|
});
|
15827
|
-
const rTables = renamedTables.map((it) => {
|
15828
|
-
return { from: it.from, to: it.to };
|
15829
|
-
});
|
15830
|
-
const _meta = prepareMigrationMeta([], rTables, rColumns);
|
15831
16668
|
return {
|
15832
|
-
statements:
|
16669
|
+
statements: combinedJsonStatements,
|
15833
16670
|
sqlStatements: uniqueSqlStatements,
|
15834
16671
|
_meta
|
15835
16672
|
};
|
@@ -15853,7 +16690,7 @@ var init_schemaValidator = __esm({
|
|
15853
16690
|
init_mysqlSchema();
|
15854
16691
|
init_pgSchema();
|
15855
16692
|
init_sqliteSchema();
|
15856
|
-
dialects = ["postgresql", "mysql", "sqlite"];
|
16693
|
+
dialects = ["postgresql", "mysql", "sqlite", "turso"];
|
15857
16694
|
dialect3 = enumType(dialects);
|
15858
16695
|
commonSquashedSchema = unionType([
|
15859
16696
|
pgSchemaSquashed,
|
@@ -15865,7 +16702,7 @@ var init_schemaValidator = __esm({
|
|
15865
16702
|
});
|
15866
16703
|
|
15867
16704
|
// src/cli/validations/common.ts
|
15868
|
-
var sqliteDriversLiterals, prefixes, prefix, sqliteDriver, postgresDriver, driver, configMigrations, configCommonSchema, casing, introspectParams, configIntrospectCliSchema, configGenerateSchema, configPushSchema;
|
16705
|
+
var sqliteDriversLiterals, postgresqlDriversLiterals, prefixes, prefix, sqliteDriver, postgresDriver, driver, configMigrations, configCommonSchema, casing, introspectParams, configIntrospectCliSchema, configGenerateSchema, configPushSchema;
|
15869
16706
|
var init_common = __esm({
|
15870
16707
|
"src/cli/validations/common.ts"() {
|
15871
16708
|
"use strict";
|
@@ -15873,10 +16710,13 @@ var init_common = __esm({
|
|
15873
16710
|
init_schemaValidator();
|
15874
16711
|
init_outputs();
|
15875
16712
|
sqliteDriversLiterals = [
|
15876
|
-
literalType("turso"),
|
15877
16713
|
literalType("d1-http"),
|
15878
16714
|
literalType("expo")
|
15879
16715
|
];
|
16716
|
+
postgresqlDriversLiterals = [
|
16717
|
+
literalType("aws-data-api"),
|
16718
|
+
literalType("pglite")
|
16719
|
+
];
|
15880
16720
|
prefixes = [
|
15881
16721
|
"index",
|
15882
16722
|
"timestamp",
|
@@ -15889,7 +16729,7 @@ var init_common = __esm({
|
|
15889
16729
|
const _2 = "";
|
15890
16730
|
}
|
15891
16731
|
sqliteDriver = unionType(sqliteDriversLiterals);
|
15892
|
-
postgresDriver =
|
16732
|
+
postgresDriver = unionType(postgresqlDriversLiterals);
|
15893
16733
|
driver = unionType([sqliteDriver, postgresDriver]);
|
15894
16734
|
configMigrations = objectType({
|
15895
16735
|
table: stringType().optional(),
|
@@ -33951,6 +34791,21 @@ var init_cli = __esm({
|
|
33951
34791
|
}
|
33952
34792
|
});
|
33953
34793
|
|
34794
|
+
// src/cli/validations/libsql.ts
|
34795
|
+
var libSQLCredentials;
|
34796
|
+
var init_libsql = __esm({
|
34797
|
+
"src/cli/validations/libsql.ts"() {
|
34798
|
+
"use strict";
|
34799
|
+
init_lib();
|
34800
|
+
init_views();
|
34801
|
+
init_common();
|
34802
|
+
libSQLCredentials = objectType({
|
34803
|
+
url: stringType().min(1),
|
34804
|
+
authToken: stringType().min(1).optional()
|
34805
|
+
});
|
34806
|
+
}
|
34807
|
+
});
|
34808
|
+
|
33954
34809
|
// src/cli/validations/mysql.ts
|
33955
34810
|
var mysqlCredentials;
|
33956
34811
|
var init_mysql = __esm({
|
@@ -34028,6 +34883,10 @@ var init_postgres = __esm({
|
|
34028
34883
|
database: stringType().min(1),
|
34029
34884
|
secretArn: stringType().min(1),
|
34030
34885
|
resourceArn: stringType().min(1)
|
34886
|
+
}),
|
34887
|
+
objectType({
|
34888
|
+
driver: literalType("pglite"),
|
34889
|
+
url: stringType().min(1)
|
34031
34890
|
})
|
34032
34891
|
]);
|
34033
34892
|
}
|
@@ -34118,6 +34977,8 @@ var init_utils8 = __esm({
|
|
34118
34977
|
init_serializer();
|
34119
34978
|
init_cli();
|
34120
34979
|
init_common();
|
34980
|
+
init_libsql();
|
34981
|
+
init_libsql();
|
34121
34982
|
init_mysql();
|
34122
34983
|
init_outputs();
|
34123
34984
|
init_postgres();
|
@@ -35089,284 +35950,8 @@ var sqlitePushIntrospect = async (db, filters) => {
|
|
35089
35950
|
return { schema: schema4 };
|
35090
35951
|
};
|
35091
35952
|
|
35092
|
-
// src/cli/commands/sqlitePushUtils.ts
|
35093
|
-
init_source();
|
35094
|
-
init_sqliteSchema();
|
35095
|
-
init_sqlgenerator();
|
35096
|
-
var _moveDataStatements = (tableName, json, dataLoss = false) => {
|
35097
|
-
const statements = [];
|
35098
|
-
statements.push(
|
35099
|
-
new SqliteRenameTableConvertor().convert({
|
35100
|
-
type: "rename_table",
|
35101
|
-
tableNameFrom: tableName,
|
35102
|
-
tableNameTo: `__old_push_${tableName}`,
|
35103
|
-
fromSchema: "",
|
35104
|
-
toSchema: ""
|
35105
|
-
})
|
35106
|
-
);
|
35107
|
-
const tableColumns = Object.values(json.tables[tableName].columns);
|
35108
|
-
const referenceData = Object.values(json.tables[tableName].foreignKeys);
|
35109
|
-
const compositePKs = Object.values(
|
35110
|
-
json.tables[tableName].compositePrimaryKeys
|
35111
|
-
).map((it) => SQLiteSquasher.unsquashPK(it));
|
35112
|
-
const fks = referenceData.map((it) => SQLiteSquasher.unsquashPushFK(it));
|
35113
|
-
statements.push(
|
35114
|
-
new SQLiteCreateTableConvertor().convert({
|
35115
|
-
type: "sqlite_create_table",
|
35116
|
-
tableName,
|
35117
|
-
columns: tableColumns,
|
35118
|
-
referenceData: fks,
|
35119
|
-
compositePKs
|
35120
|
-
})
|
35121
|
-
);
|
35122
|
-
if (!dataLoss) {
|
35123
|
-
statements.push(
|
35124
|
-
`INSERT INTO "${tableName}" SELECT * FROM "__old_push_${tableName}";`
|
35125
|
-
);
|
35126
|
-
}
|
35127
|
-
statements.push(
|
35128
|
-
new SQLiteDropTableConvertor().convert({
|
35129
|
-
type: "drop_table",
|
35130
|
-
tableName: `__old_push_${tableName}`,
|
35131
|
-
schema: ""
|
35132
|
-
})
|
35133
|
-
);
|
35134
|
-
for (const idx of Object.values(json.tables[tableName].indexes)) {
|
35135
|
-
statements.push(
|
35136
|
-
new CreateSqliteIndexConvertor().convert({
|
35137
|
-
type: "create_index",
|
35138
|
-
tableName,
|
35139
|
-
schema: "",
|
35140
|
-
data: idx
|
35141
|
-
})
|
35142
|
-
);
|
35143
|
-
}
|
35144
|
-
return statements;
|
35145
|
-
};
|
35146
|
-
var getOldTableName = (tableName, meta) => {
|
35147
|
-
for (const key of Object.keys(meta.tables)) {
|
35148
|
-
const value = meta.tables[key];
|
35149
|
-
if (`"${tableName}"` === value) {
|
35150
|
-
return key.substring(1, key.length - 1);
|
35151
|
-
}
|
35152
|
-
}
|
35153
|
-
return tableName;
|
35154
|
-
};
|
35155
|
-
var getNewTableName = (tableName, meta) => {
|
35156
|
-
if (typeof meta.tables[`"${tableName}"`] !== "undefined") {
|
35157
|
-
return meta.tables[`"${tableName}"`].substring(
|
35158
|
-
1,
|
35159
|
-
meta.tables[`"${tableName}"`].length - 1
|
35160
|
-
);
|
35161
|
-
}
|
35162
|
-
return tableName;
|
35163
|
-
};
|
35164
|
-
var logSuggestionsAndReturn = async (connection, statements, json1, json2, meta) => {
|
35165
|
-
let shouldAskForApprove = false;
|
35166
|
-
const statementsToExecute = [];
|
35167
|
-
const infoToPrint = [];
|
35168
|
-
const tablesToRemove = [];
|
35169
|
-
const columnsToRemove = [];
|
35170
|
-
const schemasToRemove = [];
|
35171
|
-
const tablesToTruncate = [];
|
35172
|
-
const tablesContext = {};
|
35173
|
-
for (const statement of statements) {
|
35174
|
-
if (statement.type === "drop_table") {
|
35175
|
-
const res = await connection.query(
|
35176
|
-
`select count(*) as count from \`${statement.tableName}\``
|
35177
|
-
);
|
35178
|
-
const count2 = Number(res[0].count);
|
35179
|
-
if (count2 > 0) {
|
35180
|
-
infoToPrint.push(
|
35181
|
-
`\xB7 You're about to delete ${source_default.underline(
|
35182
|
-
statement.tableName
|
35183
|
-
)} table with ${count2} items`
|
35184
|
-
);
|
35185
|
-
tablesToRemove.push(statement.tableName);
|
35186
|
-
shouldAskForApprove = true;
|
35187
|
-
}
|
35188
|
-
const stmnt = fromJson([statement], "sqlite")[0];
|
35189
|
-
statementsToExecute.push(stmnt);
|
35190
|
-
} else if (statement.type === "alter_table_drop_column") {
|
35191
|
-
const newTableName = getOldTableName(statement.tableName, meta);
|
35192
|
-
const columnIsPartOfPk = Object.values(
|
35193
|
-
json1.tables[newTableName].compositePrimaryKeys
|
35194
|
-
).find((c) => SQLiteSquasher.unsquashPK(c).includes(statement.columnName));
|
35195
|
-
const columnIsPartOfIndex = Object.values(
|
35196
|
-
json1.tables[newTableName].indexes
|
35197
|
-
).find((c) => SQLiteSquasher.unsquashIdx(c).columns.includes(statement.columnName));
|
35198
|
-
const columnIsPk = json1.tables[newTableName].columns[statement.columnName].primaryKey;
|
35199
|
-
const columnIsPartOfFk = Object.values(
|
35200
|
-
json1.tables[newTableName].foreignKeys
|
35201
|
-
).find(
|
35202
|
-
(t) => SQLiteSquasher.unsquashPushFK(t).columnsFrom.includes(
|
35203
|
-
statement.columnName
|
35204
|
-
)
|
35205
|
-
);
|
35206
|
-
const res = await connection.query(
|
35207
|
-
`select count(*) as count from \`${newTableName}\``
|
35208
|
-
);
|
35209
|
-
const count2 = Number(res[0].count);
|
35210
|
-
if (count2 > 0) {
|
35211
|
-
infoToPrint.push(
|
35212
|
-
`\xB7 You're about to delete ${source_default.underline(
|
35213
|
-
statement.columnName
|
35214
|
-
)} column in ${newTableName} table with ${count2} items`
|
35215
|
-
);
|
35216
|
-
columnsToRemove.push(`${newTableName}_${statement.columnName}`);
|
35217
|
-
shouldAskForApprove = true;
|
35218
|
-
}
|
35219
|
-
if (columnIsPk || columnIsPartOfPk || columnIsPartOfIndex || columnIsPartOfFk) {
|
35220
|
-
tablesContext[newTableName] = [
|
35221
|
-
..._moveDataStatements(statement.tableName, json2, true)
|
35222
|
-
];
|
35223
|
-
const tablesReferncingCurrent = [];
|
35224
|
-
for (const table4 of Object.values(json1.tables)) {
|
35225
|
-
const tablesRefs = Object.values(json1.tables[table4.name].foreignKeys).filter(
|
35226
|
-
(t) => SQLiteSquasher.unsquashPushFK(t).tableTo === newTableName
|
35227
|
-
).map((t) => SQLiteSquasher.unsquashPushFK(t).tableFrom);
|
35228
|
-
tablesReferncingCurrent.push(...tablesRefs);
|
35229
|
-
}
|
35230
|
-
const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
|
35231
|
-
for (const table4 of uniqueTableRefs) {
|
35232
|
-
if (typeof tablesContext[table4] === "undefined") {
|
35233
|
-
tablesContext[table4] = [..._moveDataStatements(table4, json2)];
|
35234
|
-
}
|
35235
|
-
}
|
35236
|
-
} else {
|
35237
|
-
if (typeof tablesContext[newTableName] === "undefined") {
|
35238
|
-
const stmnt = fromJson([statement], "sqlite")[0];
|
35239
|
-
statementsToExecute.push(stmnt);
|
35240
|
-
}
|
35241
|
-
}
|
35242
|
-
} else if (statement.type === "sqlite_alter_table_add_column") {
|
35243
|
-
const newTableName = getOldTableName(statement.tableName, meta);
|
35244
|
-
if (statement.column.notNull && !statement.column.default) {
|
35245
|
-
const res = await connection.query(
|
35246
|
-
`select count(*) as count from \`${newTableName}\``
|
35247
|
-
);
|
35248
|
-
const count2 = Number(res[0].count);
|
35249
|
-
if (count2 > 0) {
|
35250
|
-
infoToPrint.push(
|
35251
|
-
`\xB7 You're about to add not-null ${source_default.underline(
|
35252
|
-
statement.column.name
|
35253
|
-
)} column without default value, which contains ${count2} items`
|
35254
|
-
);
|
35255
|
-
tablesToTruncate.push(newTableName);
|
35256
|
-
statementsToExecute.push(`delete from ${newTableName};`);
|
35257
|
-
shouldAskForApprove = true;
|
35258
|
-
}
|
35259
|
-
}
|
35260
|
-
if (statement.column.primaryKey) {
|
35261
|
-
tablesContext[newTableName] = [
|
35262
|
-
..._moveDataStatements(statement.tableName, json2, true)
|
35263
|
-
];
|
35264
|
-
const tablesReferncingCurrent = [];
|
35265
|
-
for (const table4 of Object.values(json1.tables)) {
|
35266
|
-
const tablesRefs = Object.values(json1.tables[table4.name].foreignKeys).filter(
|
35267
|
-
(t) => SQLiteSquasher.unsquashPushFK(t).tableTo === newTableName
|
35268
|
-
).map((t) => SQLiteSquasher.unsquashPushFK(t).tableFrom);
|
35269
|
-
tablesReferncingCurrent.push(...tablesRefs);
|
35270
|
-
}
|
35271
|
-
const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
|
35272
|
-
for (const table4 of uniqueTableRefs) {
|
35273
|
-
if (typeof tablesContext[table4] === "undefined") {
|
35274
|
-
tablesContext[table4] = [..._moveDataStatements(table4, json2)];
|
35275
|
-
}
|
35276
|
-
}
|
35277
|
-
} else {
|
35278
|
-
if (typeof tablesContext[newTableName] === "undefined") {
|
35279
|
-
const stmnt = fromJson([statement], "sqlite")[0];
|
35280
|
-
statementsToExecute.push(stmnt);
|
35281
|
-
}
|
35282
|
-
}
|
35283
|
-
} 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") {
|
35284
|
-
if (!(statement.type === "alter_table_alter_column_set_notnull" && statement.columnPk)) {
|
35285
|
-
const newTableName = getOldTableName(statement.tableName, meta);
|
35286
|
-
if (statement.type === "alter_table_alter_column_set_notnull" && typeof statement.columnDefault === "undefined") {
|
35287
|
-
const res = await connection.query(
|
35288
|
-
`select count(*) as count from \`${newTableName}\``
|
35289
|
-
);
|
35290
|
-
const count2 = Number(res[0].count);
|
35291
|
-
if (count2 > 0) {
|
35292
|
-
infoToPrint.push(
|
35293
|
-
`\xB7 You're about to add not-null constraint to ${source_default.underline(
|
35294
|
-
statement.columnName
|
35295
|
-
)} column without default value, which contains ${count2} items`
|
35296
|
-
);
|
35297
|
-
tablesToTruncate.push(newTableName);
|
35298
|
-
shouldAskForApprove = true;
|
35299
|
-
}
|
35300
|
-
tablesContext[newTableName] = _moveDataStatements(
|
35301
|
-
statement.tableName,
|
35302
|
-
json1,
|
35303
|
-
true
|
35304
|
-
);
|
35305
|
-
} else {
|
35306
|
-
if (typeof tablesContext[newTableName] === "undefined") {
|
35307
|
-
tablesContext[newTableName] = _moveDataStatements(
|
35308
|
-
statement.tableName,
|
35309
|
-
json1
|
35310
|
-
);
|
35311
|
-
}
|
35312
|
-
}
|
35313
|
-
const tablesReferncingCurrent = [];
|
35314
|
-
for (const table4 of Object.values(json1.tables)) {
|
35315
|
-
const tablesRefs = Object.values(json1.tables[table4.name].foreignKeys).filter(
|
35316
|
-
(t) => SQLiteSquasher.unsquashPushFK(t).tableTo === newTableName
|
35317
|
-
).map((t) => {
|
35318
|
-
return getNewTableName(
|
35319
|
-
SQLiteSquasher.unsquashPushFK(t).tableFrom,
|
35320
|
-
meta
|
35321
|
-
);
|
35322
|
-
});
|
35323
|
-
tablesReferncingCurrent.push(...tablesRefs);
|
35324
|
-
}
|
35325
|
-
const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
|
35326
|
-
for (const table4 of uniqueTableRefs) {
|
35327
|
-
if (typeof tablesContext[table4] === "undefined") {
|
35328
|
-
tablesContext[table4] = [..._moveDataStatements(table4, json1)];
|
35329
|
-
}
|
35330
|
-
}
|
35331
|
-
}
|
35332
|
-
} else if (statement.type === "create_reference" || statement.type === "delete_reference" || statement.type === "alter_reference") {
|
35333
|
-
const fk4 = SQLiteSquasher.unsquashPushFK(statement.data);
|
35334
|
-
if (typeof tablesContext[statement.tableName] === "undefined") {
|
35335
|
-
tablesContext[statement.tableName] = _moveDataStatements(
|
35336
|
-
statement.tableName,
|
35337
|
-
json2
|
35338
|
-
);
|
35339
|
-
}
|
35340
|
-
} 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") {
|
35341
|
-
const newTableName = getOldTableName(statement.tableName, meta);
|
35342
|
-
if (typeof tablesContext[newTableName] === "undefined") {
|
35343
|
-
tablesContext[newTableName] = _moveDataStatements(
|
35344
|
-
statement.tableName,
|
35345
|
-
json2
|
35346
|
-
);
|
35347
|
-
}
|
35348
|
-
} else {
|
35349
|
-
const stmnt = fromJson([statement], "sqlite");
|
35350
|
-
if (typeof stmnt !== "undefined") {
|
35351
|
-
statementsToExecute.push(...stmnt);
|
35352
|
-
}
|
35353
|
-
}
|
35354
|
-
}
|
35355
|
-
for (const context of Object.values(tablesContext)) {
|
35356
|
-
statementsToExecute.push(...context);
|
35357
|
-
}
|
35358
|
-
return {
|
35359
|
-
statementsToExecute,
|
35360
|
-
shouldAskForApprove,
|
35361
|
-
infoToPrint,
|
35362
|
-
columnsToRemove: [...new Set(columnsToRemove)],
|
35363
|
-
schemasToRemove: [...new Set(schemasToRemove)],
|
35364
|
-
tablesToTruncate: [...new Set(tablesToTruncate)],
|
35365
|
-
tablesToRemove: [...new Set(tablesToRemove)]
|
35366
|
-
};
|
35367
|
-
};
|
35368
|
-
|
35369
35953
|
// src/api.ts
|
35954
|
+
init_sqlitePushUtils();
|
35370
35955
|
init_global();
|
35371
35956
|
init_migrationPreparator();
|
35372
35957
|
init_mysqlSchema();
|