drizzle-kit 0.14.2 → 0.14.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +953 -252
- package/package.json +21 -5
package/index.js
CHANGED
|
@@ -1901,7 +1901,7 @@ var require_common = __commonJS({
|
|
|
1901
1901
|
function setup(env2) {
|
|
1902
1902
|
createDebug.debug = createDebug;
|
|
1903
1903
|
createDebug.default = createDebug;
|
|
1904
|
-
createDebug.coerce =
|
|
1904
|
+
createDebug.coerce = coerce2;
|
|
1905
1905
|
createDebug.disable = disable;
|
|
1906
1906
|
createDebug.enable = enable;
|
|
1907
1907
|
createDebug.enabled = enabled;
|
|
@@ -2042,7 +2042,7 @@ var require_common = __commonJS({
|
|
|
2042
2042
|
function toNamespace(regexp) {
|
|
2043
2043
|
return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*");
|
|
2044
2044
|
}
|
|
2045
|
-
function
|
|
2045
|
+
function coerce2(val) {
|
|
2046
2046
|
if (val instanceof Error) {
|
|
2047
2047
|
return val.stack || val.message;
|
|
2048
2048
|
}
|
|
@@ -4516,16 +4516,16 @@ var require_node2 = __commonJS({
|
|
|
4516
4516
|
var source = frame.getFileName() || frame.getScriptNameOrSourceURL();
|
|
4517
4517
|
if (source) {
|
|
4518
4518
|
var line = frame.getLineNumber();
|
|
4519
|
-
var
|
|
4519
|
+
var column5 = frame.getColumnNumber() - 1;
|
|
4520
4520
|
var noHeader = /^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/;
|
|
4521
4521
|
var headerLength = noHeader.test(process.version) ? 0 : 62;
|
|
4522
|
-
if (line === 1 &&
|
|
4523
|
-
|
|
4522
|
+
if (line === 1 && column5 > headerLength && !isInBrowser() && !frame.isEval()) {
|
|
4523
|
+
column5 -= headerLength;
|
|
4524
4524
|
}
|
|
4525
4525
|
var position = mapSourcePosition({
|
|
4526
4526
|
source,
|
|
4527
4527
|
line,
|
|
4528
|
-
column:
|
|
4528
|
+
column: column5
|
|
4529
4529
|
});
|
|
4530
4530
|
state.curPosition = position;
|
|
4531
4531
|
frame = cloneCallSite(frame);
|
|
@@ -4583,7 +4583,7 @@ var require_node2 = __commonJS({
|
|
|
4583
4583
|
if (match) {
|
|
4584
4584
|
var source = match[1];
|
|
4585
4585
|
var line = +match[2];
|
|
4586
|
-
var
|
|
4586
|
+
var column5 = +match[3];
|
|
4587
4587
|
var contents = fileContentsCache[source];
|
|
4588
4588
|
if (!contents && fs32 && fs32.existsSync(source)) {
|
|
4589
4589
|
try {
|
|
@@ -4595,7 +4595,7 @@ var require_node2 = __commonJS({
|
|
|
4595
4595
|
if (contents) {
|
|
4596
4596
|
var code = contents.split(/(?:\r\n|\r|\n)/)[line - 1];
|
|
4597
4597
|
if (code) {
|
|
4598
|
-
return source + ":" + line + "\n" + code + "\n" + new Array(
|
|
4598
|
+
return source + ":" + line + "\n" + code + "\n" + new Array(column5).join(" ") + "^";
|
|
4599
4599
|
}
|
|
4600
4600
|
}
|
|
4601
4601
|
}
|
|
@@ -5545,7 +5545,7 @@ var require_node2 = __commonJS({
|
|
|
5545
5545
|
var stack = void 0;
|
|
5546
5546
|
var pos = void 0;
|
|
5547
5547
|
var line = void 0;
|
|
5548
|
-
var
|
|
5548
|
+
var column5 = void 0;
|
|
5549
5549
|
var token = void 0;
|
|
5550
5550
|
var key = void 0;
|
|
5551
5551
|
var root = void 0;
|
|
@@ -5555,7 +5555,7 @@ var require_node2 = __commonJS({
|
|
|
5555
5555
|
stack = [];
|
|
5556
5556
|
pos = 0;
|
|
5557
5557
|
line = 1;
|
|
5558
|
-
|
|
5558
|
+
column5 = 0;
|
|
5559
5559
|
token = void 0;
|
|
5560
5560
|
key = void 0;
|
|
5561
5561
|
root = void 0;
|
|
@@ -5609,11 +5609,11 @@ var require_node2 = __commonJS({
|
|
|
5609
5609
|
var c2 = peek();
|
|
5610
5610
|
if (c2 === "\n") {
|
|
5611
5611
|
line++;
|
|
5612
|
-
|
|
5612
|
+
column5 = 0;
|
|
5613
5613
|
} else if (c2) {
|
|
5614
|
-
|
|
5614
|
+
column5 += c2.length;
|
|
5615
5615
|
} else {
|
|
5616
|
-
|
|
5616
|
+
column5++;
|
|
5617
5617
|
}
|
|
5618
5618
|
if (c2) {
|
|
5619
5619
|
pos += c2.length;
|
|
@@ -6047,7 +6047,7 @@ var require_node2 = __commonJS({
|
|
|
6047
6047
|
throw invalidChar(read());
|
|
6048
6048
|
} };
|
|
6049
6049
|
function newToken(type, value) {
|
|
6050
|
-
return { type, value, line, column:
|
|
6050
|
+
return { type, value, line, column: column5 };
|
|
6051
6051
|
}
|
|
6052
6052
|
function literal(s) {
|
|
6053
6053
|
var _iteratorNormalCompletion = true;
|
|
@@ -6284,16 +6284,16 @@ var require_node2 = __commonJS({
|
|
|
6284
6284
|
}
|
|
6285
6285
|
function invalidChar(c2) {
|
|
6286
6286
|
if (c2 === void 0) {
|
|
6287
|
-
return syntaxError("JSON5: invalid end of input at " + line + ":" +
|
|
6287
|
+
return syntaxError("JSON5: invalid end of input at " + line + ":" + column5);
|
|
6288
6288
|
}
|
|
6289
|
-
return syntaxError("JSON5: invalid character '" + formatChar(c2) + "' at " + line + ":" +
|
|
6289
|
+
return syntaxError("JSON5: invalid character '" + formatChar(c2) + "' at " + line + ":" + column5);
|
|
6290
6290
|
}
|
|
6291
6291
|
function invalidEOF() {
|
|
6292
|
-
return syntaxError("JSON5: invalid end of input at " + line + ":" +
|
|
6292
|
+
return syntaxError("JSON5: invalid end of input at " + line + ":" + column5);
|
|
6293
6293
|
}
|
|
6294
6294
|
function invalidIdentifier() {
|
|
6295
|
-
|
|
6296
|
-
return syntaxError("JSON5: invalid identifier character at " + line + ":" +
|
|
6295
|
+
column5 -= 5;
|
|
6296
|
+
return syntaxError("JSON5: invalid identifier character at " + line + ":" + column5);
|
|
6297
6297
|
}
|
|
6298
6298
|
function separatorChar(c2) {
|
|
6299
6299
|
console.warn("JSON5: '" + c2 + "' is not valid ECMAScript; consider escaping");
|
|
@@ -6312,7 +6312,7 @@ var require_node2 = __commonJS({
|
|
|
6312
6312
|
function syntaxError(message) {
|
|
6313
6313
|
var err = new SyntaxError(message);
|
|
6314
6314
|
err.lineNumber = line;
|
|
6315
|
-
err.columnNumber =
|
|
6315
|
+
err.columnNumber = column5;
|
|
6316
6316
|
return err;
|
|
6317
6317
|
}
|
|
6318
6318
|
module22.exports = exports2["default"];
|
|
@@ -6670,31 +6670,31 @@ var require_node2 = __commonJS({
|
|
|
6670
6670
|
var configAbsolutePath = walkForTsConfig(cwd);
|
|
6671
6671
|
return configAbsolutePath ? path3.resolve(configAbsolutePath) : void 0;
|
|
6672
6672
|
}
|
|
6673
|
-
function walkForTsConfig(directory,
|
|
6674
|
-
if (
|
|
6675
|
-
|
|
6673
|
+
function walkForTsConfig(directory, existsSync2) {
|
|
6674
|
+
if (existsSync2 === void 0) {
|
|
6675
|
+
existsSync2 = fs32.existsSync;
|
|
6676
6676
|
}
|
|
6677
6677
|
var configPath = path3.join(directory, "./tsconfig.json");
|
|
6678
|
-
if (
|
|
6678
|
+
if (existsSync2(configPath)) {
|
|
6679
6679
|
return configPath;
|
|
6680
6680
|
}
|
|
6681
6681
|
var parentDirectory = path3.join(directory, "../");
|
|
6682
6682
|
if (directory === parentDirectory) {
|
|
6683
6683
|
return void 0;
|
|
6684
6684
|
}
|
|
6685
|
-
return walkForTsConfig(parentDirectory,
|
|
6685
|
+
return walkForTsConfig(parentDirectory, existsSync2);
|
|
6686
6686
|
}
|
|
6687
6687
|
exports2.walkForTsConfig = walkForTsConfig;
|
|
6688
|
-
function loadTsconfig(configFilePath,
|
|
6689
|
-
if (
|
|
6690
|
-
|
|
6688
|
+
function loadTsconfig(configFilePath, existsSync2, readFileSync) {
|
|
6689
|
+
if (existsSync2 === void 0) {
|
|
6690
|
+
existsSync2 = fs32.existsSync;
|
|
6691
6691
|
}
|
|
6692
6692
|
if (readFileSync === void 0) {
|
|
6693
6693
|
readFileSync = function(filename) {
|
|
6694
6694
|
return fs32.readFileSync(filename, "utf8");
|
|
6695
6695
|
};
|
|
6696
6696
|
}
|
|
6697
|
-
if (!
|
|
6697
|
+
if (!existsSync2(configFilePath)) {
|
|
6698
6698
|
return void 0;
|
|
6699
6699
|
}
|
|
6700
6700
|
var configString = readFileSync(configFilePath);
|
|
@@ -6707,10 +6707,10 @@ var require_node2 = __commonJS({
|
|
|
6707
6707
|
}
|
|
6708
6708
|
var currentDir = path3.dirname(configFilePath);
|
|
6709
6709
|
var extendedConfigPath = path3.join(currentDir, extendedConfig);
|
|
6710
|
-
if (extendedConfig.indexOf("/") !== -1 && extendedConfig.indexOf(".") !== -1 && !
|
|
6710
|
+
if (extendedConfig.indexOf("/") !== -1 && extendedConfig.indexOf(".") !== -1 && !existsSync2(extendedConfigPath)) {
|
|
6711
6711
|
extendedConfigPath = path3.join(currentDir, "node_modules", extendedConfig);
|
|
6712
6712
|
}
|
|
6713
|
-
var base = loadTsconfig(extendedConfigPath,
|
|
6713
|
+
var base = loadTsconfig(extendedConfigPath, existsSync2, readFileSync) || {};
|
|
6714
6714
|
if (base.compilerOptions && base.compilerOptions.baseUrl) {
|
|
6715
6715
|
var extendsDir = path3.dirname(extendedConfig);
|
|
6716
6716
|
base.compilerOptions.baseUrl = path3.join(extendsDir, base.compilerOptions.baseUrl);
|
|
@@ -7382,9 +7382,11 @@ var init_pgImports = __esm({
|
|
|
7382
7382
|
// src/serializer/pgSerializer.ts
|
|
7383
7383
|
var pgSerializer_exports = {};
|
|
7384
7384
|
__export(pgSerializer_exports, {
|
|
7385
|
-
|
|
7385
|
+
fromDatabase: () => fromDatabase,
|
|
7386
|
+
generatePgSnapshot: () => generatePgSnapshot,
|
|
7387
|
+
indexName: () => indexName
|
|
7386
7388
|
});
|
|
7387
|
-
var import_drizzle_orm_pg2, import_utils, import_sql, import_table, dialect4, generatePgSnapshot;
|
|
7389
|
+
var import_drizzle_orm_pg2, import_utils, import_sql, import_table, dialect4, indexName, generatePgSnapshot, fromDatabase;
|
|
7388
7390
|
var init_pgSerializer = __esm({
|
|
7389
7391
|
"src/serializer/pgSerializer.ts"() {
|
|
7390
7392
|
import_drizzle_orm_pg2 = require("drizzle-orm-pg");
|
|
@@ -7392,6 +7394,9 @@ var init_pgSerializer = __esm({
|
|
|
7392
7394
|
import_sql = require("drizzle-orm/sql");
|
|
7393
7395
|
import_table = require("drizzle-orm/table");
|
|
7394
7396
|
dialect4 = new import_drizzle_orm_pg2.PgDialect();
|
|
7397
|
+
indexName = (tableName, columns) => {
|
|
7398
|
+
return `${tableName}_${columns.join("_")}_index`;
|
|
7399
|
+
};
|
|
7395
7400
|
generatePgSnapshot = (tables, enums) => {
|
|
7396
7401
|
const result = {};
|
|
7397
7402
|
for (const table4 of tables) {
|
|
@@ -7399,37 +7404,41 @@ var init_pgSerializer = __esm({
|
|
|
7399
7404
|
const columnsObject = {};
|
|
7400
7405
|
const indexesObject = {};
|
|
7401
7406
|
const foreignKeysObject = {};
|
|
7402
|
-
(0, import_utils.getTableColumns)(table4).forEach((
|
|
7403
|
-
const notNull =
|
|
7404
|
-
const primaryKey =
|
|
7405
|
-
const sqlTypeLowered =
|
|
7407
|
+
(0, import_utils.getTableColumns)(table4).forEach((column5) => {
|
|
7408
|
+
const notNull = column5.notNull;
|
|
7409
|
+
const primaryKey = column5.primary;
|
|
7410
|
+
const sqlTypeLowered = column5.getSQLType().toLowerCase();
|
|
7406
7411
|
const columnToSet = {
|
|
7407
|
-
name:
|
|
7408
|
-
type:
|
|
7412
|
+
name: column5.name,
|
|
7413
|
+
type: column5.getSQLType(),
|
|
7409
7414
|
primaryKey,
|
|
7410
7415
|
notNull
|
|
7411
7416
|
};
|
|
7412
|
-
if (
|
|
7413
|
-
if (
|
|
7414
|
-
columnToSet.default =
|
|
7417
|
+
if (column5.default !== void 0) {
|
|
7418
|
+
if (column5.default instanceof import_sql.SQL) {
|
|
7419
|
+
columnToSet.default = column5.default.queryChunks.map((it) => {
|
|
7415
7420
|
if (typeof it === "string") {
|
|
7416
7421
|
return `${it}`;
|
|
7417
7422
|
}
|
|
7418
7423
|
throw new Error("Only strings are allowed in .default()");
|
|
7419
7424
|
}).join();
|
|
7420
7425
|
} else {
|
|
7421
|
-
if (typeof
|
|
7422
|
-
columnToSet.default = `'${
|
|
7426
|
+
if (typeof column5.default === "string") {
|
|
7427
|
+
columnToSet.default = `'${column5.default}'`;
|
|
7423
7428
|
} else {
|
|
7424
7429
|
if (sqlTypeLowered === "jsonb" || sqlTypeLowered === "json") {
|
|
7425
|
-
columnToSet.default = `'${JSON.stringify(
|
|
7430
|
+
columnToSet.default = `'${JSON.stringify(
|
|
7431
|
+
column5.default
|
|
7432
|
+
)}'::${sqlTypeLowered}`;
|
|
7433
|
+
} else if (column5.default instanceof Date) {
|
|
7434
|
+
columnToSet.default = `'${column5.default.toISOString()}'`;
|
|
7426
7435
|
} else {
|
|
7427
|
-
columnToSet.default =
|
|
7436
|
+
columnToSet.default = column5.default;
|
|
7428
7437
|
}
|
|
7429
7438
|
}
|
|
7430
7439
|
}
|
|
7431
7440
|
}
|
|
7432
|
-
columnsObject[
|
|
7441
|
+
columnsObject[column5.name] = columnToSet;
|
|
7433
7442
|
});
|
|
7434
7443
|
const foreignKeys = (0, import_utils.getTableForeignKeys)(table4).map((fk4) => {
|
|
7435
7444
|
const name = fk4.getName();
|
|
@@ -7456,7 +7465,11 @@ var init_pgSerializer = __esm({
|
|
|
7456
7465
|
(0, import_utils.getTableIndexes)(table4).forEach((value) => {
|
|
7457
7466
|
var _a;
|
|
7458
7467
|
const columns = value.config.columns;
|
|
7459
|
-
|
|
7468
|
+
let name = value.config.name;
|
|
7469
|
+
name = name ? name : indexName(
|
|
7470
|
+
tableName,
|
|
7471
|
+
columns.map((it) => it.name)
|
|
7472
|
+
);
|
|
7460
7473
|
let indexColumns = columns.map((it) => {
|
|
7461
7474
|
if (it instanceof import_sql.SQL) {
|
|
7462
7475
|
return dialect4.sqlToQuery(it).sql;
|
|
@@ -7488,6 +7501,201 @@ var init_pgSerializer = __esm({
|
|
|
7488
7501
|
}, {});
|
|
7489
7502
|
return { version: "3", dialect: "pg", tables: result, enums: enumsToReturn };
|
|
7490
7503
|
};
|
|
7504
|
+
fromDatabase = async (db, progressCallback) => {
|
|
7505
|
+
const result = {};
|
|
7506
|
+
const allTables = await db.execute(
|
|
7507
|
+
import_sql.sql`SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema != 'pg_catalog' and table_schema != 'information_schema';`
|
|
7508
|
+
);
|
|
7509
|
+
progressCallback("fetched all tables");
|
|
7510
|
+
const all = allTables.rows.map((row) => {
|
|
7511
|
+
return new Promise(async (res, rej) => {
|
|
7512
|
+
const tableName = row.table_name;
|
|
7513
|
+
try {
|
|
7514
|
+
const columnToReturn = {};
|
|
7515
|
+
const indexToReturn = {};
|
|
7516
|
+
const foreignKeysToReturn = {};
|
|
7517
|
+
const tableResponse = await db.execute(
|
|
7518
|
+
import_sql.sql.raw(`SELECT a.attrelid::regclass::text, a.attname, is_nullable
|
|
7519
|
+
, CASE WHEN a.atttypid = ANY ('{int,int8,int2}'::regtype[])
|
|
7520
|
+
AND EXISTS (
|
|
7521
|
+
SELECT FROM pg_attrdef ad
|
|
7522
|
+
WHERE ad.adrelid = a.attrelid
|
|
7523
|
+
AND ad.adnum = a.attnum
|
|
7524
|
+
AND pg_get_expr(ad.adbin, ad.adrelid)
|
|
7525
|
+
= 'nextval('''
|
|
7526
|
+
|| (pg_get_serial_sequence (a.attrelid::regclass::text
|
|
7527
|
+
, a.attname))::regclass
|
|
7528
|
+
|| '''::regclass)'
|
|
7529
|
+
)
|
|
7530
|
+
THEN CASE a.atttypid
|
|
7531
|
+
WHEN 'int'::regtype THEN 'serial'
|
|
7532
|
+
WHEN 'int8'::regtype THEN 'bigserial'
|
|
7533
|
+
WHEN 'int2'::regtype THEN 'smallserial'
|
|
7534
|
+
END
|
|
7535
|
+
ELSE format_type(a.atttypid, a.atttypmod)
|
|
7536
|
+
END AS data_type, INFORMATION_SCHEMA.COLUMNS.table_name, INFORMATION_SCHEMA.COLUMNS.column_name, INFORMATION_SCHEMA.COLUMNS.column_default
|
|
7537
|
+
FROM pg_attribute a
|
|
7538
|
+
JOIN INFORMATION_SCHEMA.COLUMNS ON INFORMATION_SCHEMA.COLUMNS.column_name = a.attname
|
|
7539
|
+
WHERE a.attrelid = '"${tableName}"'::regclass and INFORMATION_SCHEMA.COLUMNS.table_name = '${tableName}'
|
|
7540
|
+
AND a.attnum > 0
|
|
7541
|
+
AND NOT a.attisdropped
|
|
7542
|
+
ORDER BY a.attnum;`)
|
|
7543
|
+
);
|
|
7544
|
+
const tableConstraints = await db.execute(
|
|
7545
|
+
import_sql.sql.raw(`SELECT c.column_name, c.data_type, constraint_type, constraint_name
|
|
7546
|
+
FROM information_schema.table_constraints tc
|
|
7547
|
+
JOIN information_schema.constraint_column_usage AS ccu USING (constraint_schema, constraint_name)
|
|
7548
|
+
JOIN information_schema.columns AS c ON c.table_schema = tc.constraint_schema
|
|
7549
|
+
AND tc.table_name = c.table_name AND ccu.column_name = c.column_name
|
|
7550
|
+
WHERE tc.table_name = '${tableName}';`)
|
|
7551
|
+
);
|
|
7552
|
+
const tableForeignKeys = await db.execute(
|
|
7553
|
+
import_sql.sql.raw(`SELECT
|
|
7554
|
+
tc.table_schema,
|
|
7555
|
+
tc.constraint_name,
|
|
7556
|
+
tc.table_name,
|
|
7557
|
+
kcu.column_name,
|
|
7558
|
+
ccu.table_schema AS foreign_table_schema,
|
|
7559
|
+
ccu.table_name AS foreign_table_name,
|
|
7560
|
+
ccu.column_name AS foreign_column_name,
|
|
7561
|
+
rc.delete_rule, rc.update_rule
|
|
7562
|
+
FROM
|
|
7563
|
+
information_schema.table_constraints AS tc
|
|
7564
|
+
JOIN information_schema.key_column_usage AS kcu
|
|
7565
|
+
ON tc.constraint_name = kcu.constraint_name
|
|
7566
|
+
AND tc.table_schema = kcu.table_schema
|
|
7567
|
+
JOIN information_schema.constraint_column_usage AS ccu
|
|
7568
|
+
ON ccu.constraint_name = tc.constraint_name
|
|
7569
|
+
AND ccu.table_schema = tc.table_schema
|
|
7570
|
+
JOIN information_schema.referential_constraints AS rc
|
|
7571
|
+
ON ccu.constraint_name = rc.constraint_name
|
|
7572
|
+
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name='${tableName}';`)
|
|
7573
|
+
);
|
|
7574
|
+
for (const fk4 of tableForeignKeys.rows) {
|
|
7575
|
+
const columnFrom = fk4.column_name;
|
|
7576
|
+
const tableTo = fk4.foreign_table_name;
|
|
7577
|
+
const columnTo = fk4.foreign_column_name;
|
|
7578
|
+
const foreignKeyName = fk4.constraint_name;
|
|
7579
|
+
const onUpdate = fk4.update_rule.toLowerCase();
|
|
7580
|
+
const onDelete = fk4.delete_rule.toLowerCase();
|
|
7581
|
+
if (typeof foreignKeysToReturn[foreignKeyName] !== "undefined") {
|
|
7582
|
+
foreignKeysToReturn[foreignKeyName].columnsFrom.push(columnFrom);
|
|
7583
|
+
foreignKeysToReturn[foreignKeyName].columnsTo.push(columnTo);
|
|
7584
|
+
} else {
|
|
7585
|
+
foreignKeysToReturn[foreignKeyName] = {
|
|
7586
|
+
name: foreignKeyName,
|
|
7587
|
+
tableFrom: tableName,
|
|
7588
|
+
tableTo,
|
|
7589
|
+
columnsFrom: [columnFrom],
|
|
7590
|
+
columnsTo: [columnTo],
|
|
7591
|
+
onDelete,
|
|
7592
|
+
onUpdate
|
|
7593
|
+
};
|
|
7594
|
+
}
|
|
7595
|
+
foreignKeysToReturn[foreignKeyName].columnsFrom = [
|
|
7596
|
+
...new Set(foreignKeysToReturn[foreignKeyName].columnsFrom)
|
|
7597
|
+
];
|
|
7598
|
+
foreignKeysToReturn[foreignKeyName].columnsTo = [
|
|
7599
|
+
...new Set(foreignKeysToReturn[foreignKeyName].columnsTo)
|
|
7600
|
+
];
|
|
7601
|
+
}
|
|
7602
|
+
for (const columnResponse of tableResponse.rows) {
|
|
7603
|
+
const columnName = columnResponse.attname;
|
|
7604
|
+
const columnType = columnResponse.data_type;
|
|
7605
|
+
const primaryKey = tableConstraints.rows.filter(
|
|
7606
|
+
(mapRow) => columnName === mapRow.column_name && mapRow.constraint_type === "PRIMARY KEY"
|
|
7607
|
+
);
|
|
7608
|
+
const uniqueKey = tableConstraints.rows.filter(
|
|
7609
|
+
(mapRow) => columnName === mapRow.column_name && mapRow.constraint_type === "UNIQUE"
|
|
7610
|
+
);
|
|
7611
|
+
const defaultValue = columnResponse.column_default === null ? void 0 : columnResponse.column_default;
|
|
7612
|
+
const isSerial = columnType === "serial";
|
|
7613
|
+
columnToReturn[columnName] = {
|
|
7614
|
+
name: columnName,
|
|
7615
|
+
type: columnType.replace("character varying", "varchar").trimChar('"'),
|
|
7616
|
+
primaryKey: !!primaryKey[0],
|
|
7617
|
+
notNull: columnResponse.is_nullable === "NO"
|
|
7618
|
+
};
|
|
7619
|
+
if (!isSerial && typeof defaultValue !== "undefined") {
|
|
7620
|
+
columnToReturn[columnName].default = defaultValue;
|
|
7621
|
+
}
|
|
7622
|
+
}
|
|
7623
|
+
const dbIndexes = await db.execute(
|
|
7624
|
+
import_sql.sql.raw(`select
|
|
7625
|
+
t.relname as table_name,
|
|
7626
|
+
i.relname as index_name,
|
|
7627
|
+
ix.indisunique as is_unique,
|
|
7628
|
+
a.attname as column_name
|
|
7629
|
+
from
|
|
7630
|
+
pg_class t,
|
|
7631
|
+
pg_class i,
|
|
7632
|
+
pg_index ix,
|
|
7633
|
+
pg_attribute a
|
|
7634
|
+
where
|
|
7635
|
+
t.oid = ix.indrelid
|
|
7636
|
+
and i.oid = ix.indexrelid
|
|
7637
|
+
and a.attrelid = t.oid
|
|
7638
|
+
and a.attnum = ANY(ix.indkey)
|
|
7639
|
+
and t.relkind = 'r'
|
|
7640
|
+
and t.relname = '${tableName}'
|
|
7641
|
+
and ix.indisprimary = false
|
|
7642
|
+
order by
|
|
7643
|
+
t.relname,
|
|
7644
|
+
i.relname;`)
|
|
7645
|
+
);
|
|
7646
|
+
for (const dbIndex of dbIndexes.rows) {
|
|
7647
|
+
const indexName2 = dbIndex.index_name;
|
|
7648
|
+
const indexColumnName = dbIndex.column_name;
|
|
7649
|
+
const indexIsUnique = dbIndex.is_unique;
|
|
7650
|
+
if (typeof indexToReturn[indexName2] !== "undefined") {
|
|
7651
|
+
indexToReturn[indexName2].columns.push(indexColumnName);
|
|
7652
|
+
} else {
|
|
7653
|
+
indexToReturn[indexName2] = {
|
|
7654
|
+
name: indexName2,
|
|
7655
|
+
columns: [indexColumnName],
|
|
7656
|
+
isUnique: indexIsUnique
|
|
7657
|
+
};
|
|
7658
|
+
}
|
|
7659
|
+
}
|
|
7660
|
+
result[tableName] = {
|
|
7661
|
+
name: tableName,
|
|
7662
|
+
columns: columnToReturn,
|
|
7663
|
+
indexes: indexToReturn,
|
|
7664
|
+
foreignKeys: foreignKeysToReturn
|
|
7665
|
+
};
|
|
7666
|
+
progressCallback(`fetched ${tableName} metadata`);
|
|
7667
|
+
} catch (e) {
|
|
7668
|
+
rej(e);
|
|
7669
|
+
return;
|
|
7670
|
+
}
|
|
7671
|
+
res("");
|
|
7672
|
+
});
|
|
7673
|
+
});
|
|
7674
|
+
for await (const _ of all) {
|
|
7675
|
+
}
|
|
7676
|
+
const allEnums = await db.execute(
|
|
7677
|
+
import_sql.sql.raw(`select n.nspname as enum_schema,
|
|
7678
|
+
t.typname as enum_name,
|
|
7679
|
+
e.enumlabel as enum_value
|
|
7680
|
+
from pg_type t
|
|
7681
|
+
join pg_enum e on t.oid = e.enumtypid
|
|
7682
|
+
join pg_catalog.pg_namespace n ON n.oid = t.typnamespace;`)
|
|
7683
|
+
);
|
|
7684
|
+
const enumsToReturn = {};
|
|
7685
|
+
for (const dbEnum of allEnums.rows) {
|
|
7686
|
+
const enumName = dbEnum.enum_name;
|
|
7687
|
+
const enumValue = dbEnum.enum_value;
|
|
7688
|
+
if (enumsToReturn[enumName] !== void 0 && enumsToReturn[enumName] !== null) {
|
|
7689
|
+
enumsToReturn[enumName].values[enumValue] = enumValue;
|
|
7690
|
+
} else {
|
|
7691
|
+
enumsToReturn[enumName] = {
|
|
7692
|
+
name: enumName,
|
|
7693
|
+
values: { [enumValue]: enumValue }
|
|
7694
|
+
};
|
|
7695
|
+
}
|
|
7696
|
+
}
|
|
7697
|
+
return { version: "3", dialect: "pg", tables: result, enums: enumsToReturn };
|
|
7698
|
+
};
|
|
7491
7699
|
}
|
|
7492
7700
|
});
|
|
7493
7701
|
|
|
@@ -7540,32 +7748,32 @@ var init_mysqlSerializer = __esm({
|
|
|
7540
7748
|
const columnsObject = {};
|
|
7541
7749
|
const indexesObject = {};
|
|
7542
7750
|
const foreignKeysObject = {};
|
|
7543
|
-
(0, import_utils2.getTableColumns)(table4).forEach((
|
|
7544
|
-
const notNull =
|
|
7545
|
-
const primaryKey =
|
|
7751
|
+
(0, import_utils2.getTableColumns)(table4).forEach((column5) => {
|
|
7752
|
+
const notNull = column5.notNull;
|
|
7753
|
+
const primaryKey = column5.primary;
|
|
7546
7754
|
const columnToSet = {
|
|
7547
|
-
name:
|
|
7548
|
-
type:
|
|
7755
|
+
name: column5.name,
|
|
7756
|
+
type: column5.getSQLType(),
|
|
7549
7757
|
primaryKey,
|
|
7550
7758
|
notNull,
|
|
7551
|
-
autoincrement:
|
|
7759
|
+
autoincrement: column5 instanceof import_common.MySqlColumnWithAutoIncrement ? column5.autoIncrement : false
|
|
7552
7760
|
};
|
|
7553
|
-
if (
|
|
7554
|
-
if (
|
|
7555
|
-
columnToSet.default =
|
|
7761
|
+
if (column5.default !== void 0) {
|
|
7762
|
+
if (column5.default instanceof import_sql2.SQL) {
|
|
7763
|
+
columnToSet.default = column5.default.queryChunks.map((it) => {
|
|
7556
7764
|
if (typeof it === "string") {
|
|
7557
7765
|
return `${it}`;
|
|
7558
7766
|
}
|
|
7559
7767
|
throw new Error();
|
|
7560
7768
|
}).join();
|
|
7561
7769
|
} else {
|
|
7562
|
-
columnToSet.default = typeof
|
|
7770
|
+
columnToSet.default = typeof column5.default === "string" ? `'${column5.default}'` : column5.default;
|
|
7563
7771
|
}
|
|
7564
|
-
if (["blob", "text", "json"].includes(
|
|
7772
|
+
if (["blob", "text", "json"].includes(column5.getSQLType())) {
|
|
7565
7773
|
columnToSet.default = `(${columnToSet.default})`;
|
|
7566
7774
|
}
|
|
7567
7775
|
}
|
|
7568
|
-
columnsObject[
|
|
7776
|
+
columnsObject[column5.name] = columnToSet;
|
|
7569
7777
|
});
|
|
7570
7778
|
const foreignKeys = (0, import_utils2.getTableForeignKeys)(table4).map((fk4) => {
|
|
7571
7779
|
const name = fk4.getName();
|
|
@@ -7668,31 +7876,31 @@ var init_sqliteSerializer = __esm({
|
|
|
7668
7876
|
const columnsObject = {};
|
|
7669
7877
|
const indexesObject = {};
|
|
7670
7878
|
const foreignKeysObject = {};
|
|
7671
|
-
(0, import_utils3.getTableColumns)(table4).forEach((
|
|
7672
|
-
const notNull =
|
|
7673
|
-
const primaryKey =
|
|
7879
|
+
(0, import_utils3.getTableColumns)(table4).forEach((column5) => {
|
|
7880
|
+
const notNull = column5.notNull;
|
|
7881
|
+
const primaryKey = column5.primary;
|
|
7674
7882
|
const columnToSet = {
|
|
7675
|
-
name:
|
|
7676
|
-
type:
|
|
7883
|
+
name: column5.name,
|
|
7884
|
+
type: column5.getSQLType(),
|
|
7677
7885
|
primaryKey,
|
|
7678
7886
|
notNull
|
|
7679
7887
|
};
|
|
7680
|
-
if (
|
|
7681
|
-
if (
|
|
7682
|
-
columnToSet.default =
|
|
7888
|
+
if (column5.default !== void 0) {
|
|
7889
|
+
if (column5.default instanceof import_sql3.SQL) {
|
|
7890
|
+
columnToSet.default = column5.default.queryChunks.map((it) => {
|
|
7683
7891
|
if (typeof it === "string") {
|
|
7684
7892
|
return `${it}`;
|
|
7685
7893
|
}
|
|
7686
7894
|
throw new Error("Only strings are allowed in .default()");
|
|
7687
7895
|
}).join();
|
|
7688
7896
|
} else {
|
|
7689
|
-
columnToSet.default = typeof
|
|
7897
|
+
columnToSet.default = typeof column5.default === "string" ? `'${column5.default}'` : column5.default;
|
|
7690
7898
|
}
|
|
7691
|
-
if (["blob", "text", "json"].includes(
|
|
7899
|
+
if (["blob", "text", "json"].includes(column5.getSQLType())) {
|
|
7692
7900
|
columnToSet.default = `(${columnToSet.default})`;
|
|
7693
7901
|
}
|
|
7694
7902
|
}
|
|
7695
|
-
columnsObject[
|
|
7903
|
+
columnsObject[column5.name] = columnToSet;
|
|
7696
7904
|
});
|
|
7697
7905
|
const foreignKeys = (0, import_utils3.getTableForeignKeys)(table4).map((fk4) => {
|
|
7698
7906
|
const name = fk4.getName();
|
|
@@ -14310,7 +14518,7 @@ var require_hanji = __commonJS({
|
|
|
14310
14518
|
}
|
|
14311
14519
|
};
|
|
14312
14520
|
exports.Terminal = Terminal;
|
|
14313
|
-
var
|
|
14521
|
+
var TaskView2 = class {
|
|
14314
14522
|
constructor() {
|
|
14315
14523
|
this.attachCallbacks = [];
|
|
14316
14524
|
this.detachCallbacks = [];
|
|
@@ -14334,7 +14542,7 @@ var require_hanji = __commonJS({
|
|
|
14334
14542
|
}
|
|
14335
14543
|
}
|
|
14336
14544
|
};
|
|
14337
|
-
exports.TaskView =
|
|
14545
|
+
exports.TaskView = TaskView2;
|
|
14338
14546
|
var TaskTerminal = class {
|
|
14339
14547
|
constructor(view, stdout) {
|
|
14340
14548
|
this.view = view;
|
|
@@ -14355,7 +14563,7 @@ var require_hanji = __commonJS({
|
|
|
14355
14563
|
}
|
|
14356
14564
|
};
|
|
14357
14565
|
exports.TaskTerminal = TaskTerminal;
|
|
14358
|
-
function
|
|
14566
|
+
function render5(view) {
|
|
14359
14567
|
const { stdin, stdout, closable } = (0, readline_1.prepareReadLine)();
|
|
14360
14568
|
if (view instanceof Prompt2) {
|
|
14361
14569
|
const terminal = new Terminal(view, stdin, stdout, closable);
|
|
@@ -14367,8 +14575,8 @@ var require_hanji = __commonJS({
|
|
|
14367
14575
|
closable.close();
|
|
14368
14576
|
return;
|
|
14369
14577
|
}
|
|
14370
|
-
exports.render =
|
|
14371
|
-
function
|
|
14578
|
+
exports.render = render5;
|
|
14579
|
+
function renderWithTask2(view, task) {
|
|
14372
14580
|
return __awaiter(this, void 0, void 0, function* () {
|
|
14373
14581
|
const terminal = new TaskTerminal(view, process.stdout);
|
|
14374
14582
|
terminal.requestLayout();
|
|
@@ -14377,7 +14585,7 @@ var require_hanji = __commonJS({
|
|
|
14377
14585
|
return result;
|
|
14378
14586
|
});
|
|
14379
14587
|
}
|
|
14380
|
-
exports.renderWithTask =
|
|
14588
|
+
exports.renderWithTask = renderWithTask2;
|
|
14381
14589
|
var terminateHandler;
|
|
14382
14590
|
function onTerminate(callback) {
|
|
14383
14591
|
terminateHandler = callback;
|
|
@@ -17536,6 +17744,13 @@ var optionalType = ZodOptional.create;
|
|
|
17536
17744
|
var nullableType = ZodNullable.create;
|
|
17537
17745
|
var preprocessType = ZodEffects.createWithPreprocess;
|
|
17538
17746
|
var pipelineType = ZodPipeline.create;
|
|
17747
|
+
var coerce = {
|
|
17748
|
+
string: (arg) => ZodString.create({ ...arg, coerce: true }),
|
|
17749
|
+
number: (arg) => ZodNumber.create({ ...arg, coerce: true }),
|
|
17750
|
+
boolean: (arg) => ZodBoolean.create({ ...arg, coerce: true }),
|
|
17751
|
+
bigint: (arg) => ZodBigInt.create({ ...arg, coerce: true }),
|
|
17752
|
+
date: (arg) => ZodDate.create({ ...arg, coerce: true })
|
|
17753
|
+
};
|
|
17539
17754
|
|
|
17540
17755
|
// src/serializer/mysqlSchema.ts
|
|
17541
17756
|
var index = objectType({
|
|
@@ -17894,26 +18109,26 @@ var import_crypto = require("crypto");
|
|
|
17894
18109
|
var import_fs = __toESM(require("fs"));
|
|
17895
18110
|
var import_node = __toESM(require_node2());
|
|
17896
18111
|
var import_path = __toESM(require("path"));
|
|
17897
|
-
var serialize = (path3,
|
|
18112
|
+
var serialize = (path3, dialect8) => {
|
|
17898
18113
|
const fileName = import_fs.default.lstatSync(path3).isDirectory() ? null : import_path.default.resolve(path3);
|
|
17899
18114
|
const filenames = fileName ? [fileName] : import_fs.default.readdirSync(path3).map((it) => import_path.default.join(import_path.default.resolve(path3), it));
|
|
17900
18115
|
const { unregister } = (0, import_node.register)({
|
|
17901
18116
|
target: "node14",
|
|
17902
18117
|
loader: "ts"
|
|
17903
18118
|
});
|
|
17904
|
-
if (
|
|
18119
|
+
if (dialect8 === "pg") {
|
|
17905
18120
|
const { prepareFromPgImports: prepareFromPgImports2 } = (init_pgImports(), __toCommonJS(pgImports_exports));
|
|
17906
18121
|
const { generatePgSnapshot: generatePgSnapshot2 } = (init_pgSerializer(), __toCommonJS(pgSerializer_exports));
|
|
17907
18122
|
const { tables, enums } = prepareFromPgImports2(filenames);
|
|
17908
18123
|
unregister();
|
|
17909
18124
|
return generatePgSnapshot2(tables, enums);
|
|
17910
|
-
} else if (
|
|
18125
|
+
} else if (dialect8 === "mysql") {
|
|
17911
18126
|
const { prepareFromMySqlImports: prepareFromMySqlImports2 } = (init_mysqlImports(), __toCommonJS(mysqlImports_exports));
|
|
17912
18127
|
const { generateMySqlSnapshot: generateMySqlSnapshot2 } = (init_mysqlSerializer(), __toCommonJS(mysqlSerializer_exports));
|
|
17913
18128
|
const { tables, enums } = prepareFromMySqlImports2(filenames);
|
|
17914
18129
|
unregister();
|
|
17915
18130
|
return generateMySqlSnapshot2(tables, enums);
|
|
17916
|
-
} else if (
|
|
18131
|
+
} else if (dialect8 === "sqlite") {
|
|
17917
18132
|
const { prepareFromSqliteImports: prepareFromSqliteImports2 } = (init_sqliteImports(), __toCommonJS(sqliteImports_exports));
|
|
17918
18133
|
const { generateSqliteSnapshot: generateSqliteSnapshot2 } = (init_sqliteSerializer(), __toCommonJS(sqliteSerializer_exports));
|
|
17919
18134
|
const { tables, enums } = prepareFromSqliteImports2(filenames);
|
|
@@ -17927,11 +18142,34 @@ var serialize = (path3, dialect7) => {
|
|
|
17927
18142
|
var serializer_default = serialize;
|
|
17928
18143
|
|
|
17929
18144
|
// src/sqlgenerator.ts
|
|
18145
|
+
var pgNativeTypes = /* @__PURE__ */ new Set([
|
|
18146
|
+
"uuid",
|
|
18147
|
+
"smallint",
|
|
18148
|
+
"integer",
|
|
18149
|
+
"bigint",
|
|
18150
|
+
"boolean",
|
|
18151
|
+
"text",
|
|
18152
|
+
"varchar",
|
|
18153
|
+
"serial",
|
|
18154
|
+
"bigserial",
|
|
18155
|
+
"decimal",
|
|
18156
|
+
"numeric",
|
|
18157
|
+
"real",
|
|
18158
|
+
"json",
|
|
18159
|
+
"jsonb",
|
|
18160
|
+
"time",
|
|
18161
|
+
"timestamp",
|
|
18162
|
+
"date",
|
|
18163
|
+
"interval",
|
|
18164
|
+
"bigint",
|
|
18165
|
+
"bigserial",
|
|
18166
|
+
"double precision"
|
|
18167
|
+
]);
|
|
17930
18168
|
var Convertor = class {
|
|
17931
18169
|
};
|
|
17932
18170
|
var PgCreateTableConvertor = class extends Convertor {
|
|
17933
|
-
can(statement,
|
|
17934
|
-
return statement.type === "create_table" &&
|
|
18171
|
+
can(statement, dialect8) {
|
|
18172
|
+
return statement.type === "create_table" && dialect8 === "pg";
|
|
17935
18173
|
}
|
|
17936
18174
|
convert(st) {
|
|
17937
18175
|
const { tableName, columns } = st;
|
|
@@ -17939,11 +18177,12 @@ var PgCreateTableConvertor = class extends Convertor {
|
|
|
17939
18177
|
statement += `CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
17940
18178
|
`;
|
|
17941
18179
|
for (let i = 0; i < columns.length; i++) {
|
|
17942
|
-
const
|
|
17943
|
-
const primaryKeyStatement =
|
|
17944
|
-
const notNullStatement =
|
|
17945
|
-
const defaultStatement =
|
|
17946
|
-
|
|
18180
|
+
const column5 = columns[i];
|
|
18181
|
+
const primaryKeyStatement = column5.primaryKey ? "PRIMARY KEY" : "";
|
|
18182
|
+
const notNullStatement = column5.notNull ? "NOT NULL" : "";
|
|
18183
|
+
const defaultStatement = column5.default !== void 0 ? `DEFAULT ${column5.default}` : "";
|
|
18184
|
+
const type = pgNativeTypes.has(column5.type) ? column5.type : `"${column5.type}"`;
|
|
18185
|
+
statement += " " + `"${column5.name}" ${type} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.replace(/ +/g, " ").trim();
|
|
17947
18186
|
statement += (i === columns.length - 1 ? "" : ",") + "\n";
|
|
17948
18187
|
}
|
|
17949
18188
|
statement += `);`;
|
|
@@ -17953,8 +18192,8 @@ var PgCreateTableConvertor = class extends Convertor {
|
|
|
17953
18192
|
}
|
|
17954
18193
|
};
|
|
17955
18194
|
var MySqlCreateTableConvertor = class extends Convertor {
|
|
17956
|
-
can(statement,
|
|
17957
|
-
return statement.type === "create_table" &&
|
|
18195
|
+
can(statement, dialect8) {
|
|
18196
|
+
return statement.type === "create_table" && dialect8 === "mysql";
|
|
17958
18197
|
}
|
|
17959
18198
|
convert(st) {
|
|
17960
18199
|
const { tableName, columns } = st;
|
|
@@ -17962,12 +18201,12 @@ var MySqlCreateTableConvertor = class extends Convertor {
|
|
|
17962
18201
|
statement += `CREATE TABLE ${tableName} (
|
|
17963
18202
|
`;
|
|
17964
18203
|
for (let i = 0; i < columns.length; i++) {
|
|
17965
|
-
const
|
|
17966
|
-
const primaryKeyStatement =
|
|
17967
|
-
const notNullStatement =
|
|
17968
|
-
const defaultStatement =
|
|
17969
|
-
const autoincrementStatement =
|
|
17970
|
-
statement += " " + `\`${
|
|
18204
|
+
const column5 = columns[i];
|
|
18205
|
+
const primaryKeyStatement = column5.primaryKey ? "PRIMARY KEY" : "";
|
|
18206
|
+
const notNullStatement = column5.notNull ? "NOT NULL" : "";
|
|
18207
|
+
const defaultStatement = column5.default !== void 0 ? `DEFAULT ${column5.default}` : "";
|
|
18208
|
+
const autoincrementStatement = column5.autoincrement ? "AUTO_INCREMENT" : "";
|
|
18209
|
+
statement += " " + `\`${column5.name}\` ${column5.type} ${autoincrementStatement} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.replace(/ +/g, " ").trim();
|
|
17971
18210
|
statement += (i === columns.length - 1 ? "" : ",") + "\n";
|
|
17972
18211
|
}
|
|
17973
18212
|
statement += `);`;
|
|
@@ -17977,21 +18216,21 @@ var MySqlCreateTableConvertor = class extends Convertor {
|
|
|
17977
18216
|
}
|
|
17978
18217
|
};
|
|
17979
18218
|
var SQLiteCreateTableConvertor = class extends Convertor {
|
|
17980
|
-
can(statement,
|
|
17981
|
-
return statement.type === "sqlite_create_table" &&
|
|
18219
|
+
can(statement, dialect8) {
|
|
18220
|
+
return statement.type === "sqlite_create_table" && dialect8 === "sqlite";
|
|
17982
18221
|
}
|
|
17983
18222
|
convert(st) {
|
|
17984
18223
|
const { tableName, columns, referenceData } = st;
|
|
17985
18224
|
let statement = "";
|
|
17986
18225
|
statement += `CREATE TABLE ${tableName} (`;
|
|
17987
18226
|
for (let i = 0; i < columns.length; i++) {
|
|
17988
|
-
const
|
|
17989
|
-
const primaryKeyStatement =
|
|
17990
|
-
const notNullStatement =
|
|
17991
|
-
const defaultStatement =
|
|
17992
|
-
const autoincrementStatement =
|
|
18227
|
+
const column5 = columns[i];
|
|
18228
|
+
const primaryKeyStatement = column5.primaryKey ? "PRIMARY KEY" : "";
|
|
18229
|
+
const notNullStatement = column5.notNull ? "NOT NULL" : "";
|
|
18230
|
+
const defaultStatement = column5.default !== void 0 ? `DEFAULT ${column5.default}` : "";
|
|
18231
|
+
const autoincrementStatement = column5.autoincrement ? "AUTO_INCREMENT" : "";
|
|
17993
18232
|
statement += "\n ";
|
|
17994
|
-
statement += `\`${
|
|
18233
|
+
statement += `\`${column5.name}\` ${column5.type} ${autoincrementStatement} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.squashSpaces();
|
|
17995
18234
|
statement += ",";
|
|
17996
18235
|
}
|
|
17997
18236
|
for (let i = 0; i < referenceData.length; i++) {
|
|
@@ -18013,7 +18252,7 @@ var SQLiteCreateTableConvertor = class extends Convertor {
|
|
|
18013
18252
|
statement += `FOREIGN KEY (${fromColumnsString}) REFERENCES ${tableTo}(${toColumnsString}) ${onUpdateStatement} ${onDeleteStatement}`.squashSpaces();
|
|
18014
18253
|
statement += ",";
|
|
18015
18254
|
}
|
|
18016
|
-
statement.trimChar(",");
|
|
18255
|
+
statement = statement.trimChar(",");
|
|
18017
18256
|
statement += `
|
|
18018
18257
|
`;
|
|
18019
18258
|
statement += `);`;
|
|
@@ -18033,7 +18272,7 @@ var CreateTypeEnumConvertor = class extends Convertor {
|
|
|
18033
18272
|
valuesStatement += ")";
|
|
18034
18273
|
let statement = "DO $$ BEGIN";
|
|
18035
18274
|
statement += "\n";
|
|
18036
|
-
statement += ` CREATE TYPE ${name} AS ENUM${valuesStatement};`;
|
|
18275
|
+
statement += ` CREATE TYPE "${name}" AS ENUM${valuesStatement};`;
|
|
18037
18276
|
statement += "\n";
|
|
18038
18277
|
statement += "EXCEPTION";
|
|
18039
18278
|
statement += "\n";
|
|
@@ -18050,7 +18289,7 @@ var AlterTypeAddValueConvertor = class extends Convertor {
|
|
|
18050
18289
|
}
|
|
18051
18290
|
convert(st) {
|
|
18052
18291
|
const { name, value } = st;
|
|
18053
|
-
return `ALTER TYPE ${name} ADD VALUE '${value}';`;
|
|
18292
|
+
return `ALTER TYPE "${name}" ADD VALUE '${value}';`;
|
|
18054
18293
|
}
|
|
18055
18294
|
};
|
|
18056
18295
|
var DropTableConvertor = class extends Convertor {
|
|
@@ -18063,8 +18302,8 @@ var DropTableConvertor = class extends Convertor {
|
|
|
18063
18302
|
}
|
|
18064
18303
|
};
|
|
18065
18304
|
var PgRenameTableConvertor = class extends Convertor {
|
|
18066
|
-
can(statement,
|
|
18067
|
-
return statement.type === "rename_table" &&
|
|
18305
|
+
can(statement, dialect8) {
|
|
18306
|
+
return statement.type === "rename_table" && dialect8 === "pg";
|
|
18068
18307
|
}
|
|
18069
18308
|
convert(statement) {
|
|
18070
18309
|
const { tableNameFrom, tableNameTo } = statement;
|
|
@@ -18072,8 +18311,8 @@ var PgRenameTableConvertor = class extends Convertor {
|
|
|
18072
18311
|
}
|
|
18073
18312
|
};
|
|
18074
18313
|
var SqliteRenameTableConvertor = class extends Convertor {
|
|
18075
|
-
can(statement,
|
|
18076
|
-
return statement.type === "rename_table" &&
|
|
18314
|
+
can(statement, dialect8) {
|
|
18315
|
+
return statement.type === "rename_table" && dialect8 === "sqlite";
|
|
18077
18316
|
}
|
|
18078
18317
|
convert(statement) {
|
|
18079
18318
|
const { tableNameFrom, tableNameTo } = statement;
|
|
@@ -18081,8 +18320,8 @@ var SqliteRenameTableConvertor = class extends Convertor {
|
|
|
18081
18320
|
}
|
|
18082
18321
|
};
|
|
18083
18322
|
var MySqlRenameTableConvertor = class extends Convertor {
|
|
18084
|
-
can(statement,
|
|
18085
|
-
return statement.type === "rename_table" &&
|
|
18323
|
+
can(statement, dialect8) {
|
|
18324
|
+
return statement.type === "rename_table" && dialect8 === "mysql";
|
|
18086
18325
|
}
|
|
18087
18326
|
convert(statement) {
|
|
18088
18327
|
const { tableNameFrom, tableNameTo } = statement;
|
|
@@ -18090,8 +18329,8 @@ var MySqlRenameTableConvertor = class extends Convertor {
|
|
|
18090
18329
|
}
|
|
18091
18330
|
};
|
|
18092
18331
|
var PgAlterTableRenameColumnConvertor = class extends Convertor {
|
|
18093
|
-
can(statement,
|
|
18094
|
-
return statement.type === "alter_table_rename_column" &&
|
|
18332
|
+
can(statement, dialect8) {
|
|
18333
|
+
return statement.type === "alter_table_rename_column" && dialect8 === "pg";
|
|
18095
18334
|
}
|
|
18096
18335
|
convert(statement) {
|
|
18097
18336
|
const { tableName, oldColumnName, newColumnName } = statement;
|
|
@@ -18099,8 +18338,8 @@ var PgAlterTableRenameColumnConvertor = class extends Convertor {
|
|
|
18099
18338
|
}
|
|
18100
18339
|
};
|
|
18101
18340
|
var MySqlAlterTableRenameColumnConvertor = class extends Convertor {
|
|
18102
|
-
can(statement,
|
|
18103
|
-
return statement.type === "alter_table_rename_column" &&
|
|
18341
|
+
can(statement, dialect8) {
|
|
18342
|
+
return statement.type === "alter_table_rename_column" && dialect8 === "mysql";
|
|
18104
18343
|
}
|
|
18105
18344
|
convert(statement) {
|
|
18106
18345
|
const { tableName, oldColumnName, newColumnName } = statement;
|
|
@@ -18108,8 +18347,8 @@ var MySqlAlterTableRenameColumnConvertor = class extends Convertor {
|
|
|
18108
18347
|
}
|
|
18109
18348
|
};
|
|
18110
18349
|
var SQLiteAlterTableRenameColumnConvertor = class extends Convertor {
|
|
18111
|
-
can(statement,
|
|
18112
|
-
return statement.type === "alter_table_rename_column" &&
|
|
18350
|
+
can(statement, dialect8) {
|
|
18351
|
+
return statement.type === "alter_table_rename_column" && dialect8 === "sqlite";
|
|
18113
18352
|
}
|
|
18114
18353
|
convert(statement) {
|
|
18115
18354
|
const { tableName, oldColumnName, newColumnName } = statement;
|
|
@@ -18117,8 +18356,8 @@ var SQLiteAlterTableRenameColumnConvertor = class extends Convertor {
|
|
|
18117
18356
|
}
|
|
18118
18357
|
};
|
|
18119
18358
|
var PgAlterTableDropColumnConvertor = class extends Convertor {
|
|
18120
|
-
can(statement,
|
|
18121
|
-
return statement.type === "alter_table_drop_column" &&
|
|
18359
|
+
can(statement, dialect8) {
|
|
18360
|
+
return statement.type === "alter_table_drop_column" && dialect8 === "pg";
|
|
18122
18361
|
}
|
|
18123
18362
|
convert(statement) {
|
|
18124
18363
|
const { tableName, columnName } = statement;
|
|
@@ -18126,8 +18365,8 @@ var PgAlterTableDropColumnConvertor = class extends Convertor {
|
|
|
18126
18365
|
}
|
|
18127
18366
|
};
|
|
18128
18367
|
var MySqlAlterTableDropColumnConvertor = class extends Convertor {
|
|
18129
|
-
can(statement,
|
|
18130
|
-
return statement.type === "alter_table_drop_column" &&
|
|
18368
|
+
can(statement, dialect8) {
|
|
18369
|
+
return statement.type === "alter_table_drop_column" && dialect8 === "mysql";
|
|
18131
18370
|
}
|
|
18132
18371
|
convert(statement) {
|
|
18133
18372
|
const { tableName, columnName } = statement;
|
|
@@ -18135,8 +18374,8 @@ var MySqlAlterTableDropColumnConvertor = class extends Convertor {
|
|
|
18135
18374
|
}
|
|
18136
18375
|
};
|
|
18137
18376
|
var SQLiteAlterTableDropColumnConvertor = class extends Convertor {
|
|
18138
|
-
can(statement,
|
|
18139
|
-
return statement.type === "alter_table_drop_column" &&
|
|
18377
|
+
can(statement, dialect8) {
|
|
18378
|
+
return statement.type === "alter_table_drop_column" && dialect8 === "sqlite";
|
|
18140
18379
|
}
|
|
18141
18380
|
convert(statement) {
|
|
18142
18381
|
const { tableName, columnName } = statement;
|
|
@@ -18144,25 +18383,26 @@ var SQLiteAlterTableDropColumnConvertor = class extends Convertor {
|
|
|
18144
18383
|
}
|
|
18145
18384
|
};
|
|
18146
18385
|
var PgAlterTableAddColumnConvertor = class extends Convertor {
|
|
18147
|
-
can(statement,
|
|
18148
|
-
return statement.type === "alter_table_add_column" &&
|
|
18386
|
+
can(statement, dialect8) {
|
|
18387
|
+
return statement.type === "alter_table_add_column" && dialect8 === "pg";
|
|
18149
18388
|
}
|
|
18150
18389
|
convert(statement) {
|
|
18151
|
-
const { tableName, column:
|
|
18152
|
-
const { name, type, notNull } =
|
|
18153
|
-
const defaultStatement = `${
|
|
18390
|
+
const { tableName, column: column5 } = statement;
|
|
18391
|
+
const { name, type, notNull } = column5;
|
|
18392
|
+
const defaultStatement = `${column5.default !== void 0 ? `DEFAULT ${column5.default}` : ""}`;
|
|
18393
|
+
const fixedType = pgNativeTypes.has(column5.type) ? column5.type : `"${column5.type}"`;
|
|
18154
18394
|
const notNullStatement = `${notNull ? "NOT NULL" : ""}`;
|
|
18155
|
-
return `ALTER TABLE ${tableName} ADD COLUMN "${name}" ${
|
|
18395
|
+
return `ALTER TABLE ${tableName} ADD COLUMN "${name}" ${fixedType} ${defaultStatement} ${notNullStatement}`.replace(/ +/g, " ").trim() + ";";
|
|
18156
18396
|
}
|
|
18157
18397
|
};
|
|
18158
18398
|
var MySqlAlterTableAddColumnConvertor = class extends Convertor {
|
|
18159
|
-
can(statement,
|
|
18160
|
-
return statement.type === "alter_table_add_column" &&
|
|
18399
|
+
can(statement, dialect8) {
|
|
18400
|
+
return statement.type === "alter_table_add_column" && dialect8 === "mysql";
|
|
18161
18401
|
}
|
|
18162
18402
|
convert(statement) {
|
|
18163
|
-
const { tableName, column:
|
|
18164
|
-
const { name, type, notNull, primaryKey, autoincrement } =
|
|
18165
|
-
const defaultStatement = `${
|
|
18403
|
+
const { tableName, column: column5 } = statement;
|
|
18404
|
+
const { name, type, notNull, primaryKey, autoincrement } = column5;
|
|
18405
|
+
const defaultStatement = `${column5.default !== void 0 ? `DEFAULT ${column5.default}` : ""}`;
|
|
18166
18406
|
const notNullStatement = `${notNull ? "NOT NULL" : ""}`;
|
|
18167
18407
|
const primaryKeyStatement = `${primaryKey ? "PRIMARY KEY" : ""}`;
|
|
18168
18408
|
const autoincrementStatement = `${autoincrement ? "AUTO_INCREMENT" : ""}`;
|
|
@@ -18170,13 +18410,13 @@ var MySqlAlterTableAddColumnConvertor = class extends Convertor {
|
|
|
18170
18410
|
}
|
|
18171
18411
|
};
|
|
18172
18412
|
var SQLiteAlterTableAddColumnConvertor = class extends Convertor {
|
|
18173
|
-
can(statement,
|
|
18174
|
-
return statement.type === "sqlite_alter_table_add_column" &&
|
|
18413
|
+
can(statement, dialect8) {
|
|
18414
|
+
return statement.type === "sqlite_alter_table_add_column" && dialect8 === "sqlite";
|
|
18175
18415
|
}
|
|
18176
18416
|
convert(statement) {
|
|
18177
|
-
const { tableName, column:
|
|
18178
|
-
const { name, type, notNull, primaryKey } =
|
|
18179
|
-
const defaultStatement = `${
|
|
18417
|
+
const { tableName, column: column5, referenceData } = statement;
|
|
18418
|
+
const { name, type, notNull, primaryKey } = column5;
|
|
18419
|
+
const defaultStatement = `${column5.default !== void 0 ? `DEFAULT ${column5.default}` : ""}`;
|
|
18180
18420
|
const notNullStatement = `${notNull ? "NOT NULL" : ""}`;
|
|
18181
18421
|
const primaryKeyStatement = `${primaryKey ? "PRIMARY KEY" : ""}`;
|
|
18182
18422
|
const referenceAsObject = referenceData ? SQLiteSquasher.unsquashFK(referenceData) : void 0;
|
|
@@ -18185,8 +18425,8 @@ var SQLiteAlterTableAddColumnConvertor = class extends Convertor {
|
|
|
18185
18425
|
}
|
|
18186
18426
|
};
|
|
18187
18427
|
var PgAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
|
|
18188
|
-
can(statement,
|
|
18189
|
-
return statement.type === "alter_table_alter_column_set_type" &&
|
|
18428
|
+
can(statement, dialect8) {
|
|
18429
|
+
return statement.type === "alter_table_alter_column_set_type" && dialect8 === "pg";
|
|
18190
18430
|
}
|
|
18191
18431
|
convert(statement) {
|
|
18192
18432
|
const { tableName, columnName, newDataType } = statement;
|
|
@@ -18194,8 +18434,8 @@ var PgAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
|
|
|
18194
18434
|
}
|
|
18195
18435
|
};
|
|
18196
18436
|
var SQLiteAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
|
|
18197
|
-
can(statement,
|
|
18198
|
-
return statement.type === "alter_table_alter_column_set_type" &&
|
|
18437
|
+
can(statement, dialect8) {
|
|
18438
|
+
return statement.type === "alter_table_alter_column_set_type" && dialect8 === "sqlite";
|
|
18199
18439
|
}
|
|
18200
18440
|
convert(statement) {
|
|
18201
18441
|
return `/*
|
|
@@ -18209,8 +18449,8 @@ var SQLiteAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
|
|
|
18209
18449
|
}
|
|
18210
18450
|
};
|
|
18211
18451
|
var PgAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
|
|
18212
|
-
can(statement,
|
|
18213
|
-
return statement.type === "alter_table_alter_column_set_default" &&
|
|
18452
|
+
can(statement, dialect8) {
|
|
18453
|
+
return statement.type === "alter_table_alter_column_set_default" && dialect8 === "pg";
|
|
18214
18454
|
}
|
|
18215
18455
|
convert(statement) {
|
|
18216
18456
|
const { tableName, columnName } = statement;
|
|
@@ -18218,8 +18458,8 @@ var PgAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
|
|
|
18218
18458
|
}
|
|
18219
18459
|
};
|
|
18220
18460
|
var SqliteAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
|
|
18221
|
-
can(statement,
|
|
18222
|
-
return statement.type === "alter_table_alter_column_set_default" &&
|
|
18461
|
+
can(statement, dialect8) {
|
|
18462
|
+
return statement.type === "alter_table_alter_column_set_default" && dialect8 === "sqlite";
|
|
18223
18463
|
}
|
|
18224
18464
|
convert(statement) {
|
|
18225
18465
|
return `/*
|
|
@@ -18233,8 +18473,8 @@ var SqliteAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
|
|
|
18233
18473
|
}
|
|
18234
18474
|
};
|
|
18235
18475
|
var PgAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
|
|
18236
|
-
can(statement,
|
|
18237
|
-
return statement.type === "alter_table_alter_column_drop_default" &&
|
|
18476
|
+
can(statement, dialect8) {
|
|
18477
|
+
return statement.type === "alter_table_alter_column_drop_default" && dialect8 === "pg";
|
|
18238
18478
|
}
|
|
18239
18479
|
convert(statement) {
|
|
18240
18480
|
const { tableName, columnName } = statement;
|
|
@@ -18242,8 +18482,8 @@ var PgAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
|
|
|
18242
18482
|
}
|
|
18243
18483
|
};
|
|
18244
18484
|
var SqliteAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
|
|
18245
|
-
can(statement,
|
|
18246
|
-
return statement.type === "alter_table_alter_column_drop_default" &&
|
|
18485
|
+
can(statement, dialect8) {
|
|
18486
|
+
return statement.type === "alter_table_alter_column_drop_default" && dialect8 === "sqlite";
|
|
18247
18487
|
}
|
|
18248
18488
|
convert(statement) {
|
|
18249
18489
|
return `/*
|
|
@@ -18257,8 +18497,8 @@ var SqliteAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
|
|
|
18257
18497
|
}
|
|
18258
18498
|
};
|
|
18259
18499
|
var PgAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
|
|
18260
|
-
can(statement,
|
|
18261
|
-
return statement.type === "alter_table_alter_column_set_notnull" &&
|
|
18500
|
+
can(statement, dialect8) {
|
|
18501
|
+
return statement.type === "alter_table_alter_column_set_notnull" && dialect8 === "pg";
|
|
18262
18502
|
}
|
|
18263
18503
|
convert(statement) {
|
|
18264
18504
|
const { tableName, columnName } = statement;
|
|
@@ -18266,8 +18506,8 @@ var PgAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
|
|
|
18266
18506
|
}
|
|
18267
18507
|
};
|
|
18268
18508
|
var SqliteAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
|
|
18269
|
-
can(statement,
|
|
18270
|
-
return statement.type === "alter_table_alter_column_set_notnull" &&
|
|
18509
|
+
can(statement, dialect8) {
|
|
18510
|
+
return statement.type === "alter_table_alter_column_set_notnull" && dialect8 === "sqlite";
|
|
18271
18511
|
}
|
|
18272
18512
|
convert(statement) {
|
|
18273
18513
|
return `/*
|
|
@@ -18281,8 +18521,8 @@ var SqliteAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
|
|
|
18281
18521
|
}
|
|
18282
18522
|
};
|
|
18283
18523
|
var PgAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
|
|
18284
|
-
can(statement,
|
|
18285
|
-
return statement.type === "alter_table_alter_column_drop_notnull" &&
|
|
18524
|
+
can(statement, dialect8) {
|
|
18525
|
+
return statement.type === "alter_table_alter_column_drop_notnull" && dialect8 === "pg";
|
|
18286
18526
|
}
|
|
18287
18527
|
convert(statement) {
|
|
18288
18528
|
const { tableName, columnName } = statement;
|
|
@@ -18290,8 +18530,8 @@ var PgAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
|
|
|
18290
18530
|
}
|
|
18291
18531
|
};
|
|
18292
18532
|
var SqliteAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
|
|
18293
|
-
can(statement,
|
|
18294
|
-
return statement.type === "alter_table_alter_column_drop_notnull" &&
|
|
18533
|
+
can(statement, dialect8) {
|
|
18534
|
+
return statement.type === "alter_table_alter_column_drop_notnull" && dialect8 === "sqlite";
|
|
18295
18535
|
}
|
|
18296
18536
|
convert(statement) {
|
|
18297
18537
|
return `/*
|
|
@@ -18305,8 +18545,8 @@ var SqliteAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
|
|
|
18305
18545
|
}
|
|
18306
18546
|
};
|
|
18307
18547
|
var PgCreateForeignKeyConvertor = class extends Convertor {
|
|
18308
|
-
can(statement,
|
|
18309
|
-
return statement.type === "create_reference" &&
|
|
18548
|
+
can(statement, dialect8) {
|
|
18549
|
+
return statement.type === "create_reference" && dialect8 === "pg";
|
|
18310
18550
|
}
|
|
18311
18551
|
convert(statement) {
|
|
18312
18552
|
const {
|
|
@@ -18323,17 +18563,17 @@ var PgCreateForeignKeyConvertor = class extends Convertor {
|
|
|
18323
18563
|
const fromColumnsString = columnsFrom.map((it) => `"${it}"`).join(",");
|
|
18324
18564
|
const toColumnsString = columnsTo.map((it) => `"${it}"`).join(",");
|
|
18325
18565
|
const alterStatement = `ALTER TABLE ${tableFrom} ADD CONSTRAINT ${name} FOREIGN KEY (${fromColumnsString}) REFERENCES ${tableTo}(${toColumnsString}) ${onDeleteStatement} ${onUpdateStatement}`.replace(/ +/g, " ").trim();
|
|
18326
|
-
let
|
|
18327
|
-
|
|
18328
|
-
|
|
18329
|
-
|
|
18330
|
-
|
|
18331
|
-
return
|
|
18566
|
+
let sql2 = "DO $$ BEGIN\n";
|
|
18567
|
+
sql2 += " " + alterStatement + ";\n";
|
|
18568
|
+
sql2 += "EXCEPTION\n";
|
|
18569
|
+
sql2 += " WHEN duplicate_object THEN null;\n";
|
|
18570
|
+
sql2 += "END $$;\n";
|
|
18571
|
+
return sql2;
|
|
18332
18572
|
}
|
|
18333
18573
|
};
|
|
18334
18574
|
var SqliteCreateForeignKeyConvertor = class extends Convertor {
|
|
18335
|
-
can(statement,
|
|
18336
|
-
return statement.type === "create_reference" &&
|
|
18575
|
+
can(statement, dialect8) {
|
|
18576
|
+
return statement.type === "create_reference" && dialect8 === "sqlite";
|
|
18337
18577
|
}
|
|
18338
18578
|
convert(statement) {
|
|
18339
18579
|
return `/*
|
|
@@ -18346,8 +18586,8 @@ var SqliteCreateForeignKeyConvertor = class extends Convertor {
|
|
|
18346
18586
|
}
|
|
18347
18587
|
};
|
|
18348
18588
|
var MySqlCreateForeignKeyConvertor = class extends Convertor {
|
|
18349
|
-
can(statement,
|
|
18350
|
-
return statement.type === "create_reference" &&
|
|
18589
|
+
can(statement, dialect8) {
|
|
18590
|
+
return statement.type === "create_reference" && dialect8 === "mysql";
|
|
18351
18591
|
}
|
|
18352
18592
|
convert(statement) {
|
|
18353
18593
|
const {
|
|
@@ -18375,8 +18615,8 @@ var AlterForeignKeyConvertor = class extends Convertor {
|
|
|
18375
18615
|
}
|
|
18376
18616
|
};
|
|
18377
18617
|
var SqliteAlterForeignKeyConvertor = class extends Convertor {
|
|
18378
|
-
can(statement,
|
|
18379
|
-
return statement.type === "alter_reference" &&
|
|
18618
|
+
can(statement, dialect8) {
|
|
18619
|
+
return statement.type === "alter_reference" && dialect8 === "sqlite";
|
|
18380
18620
|
}
|
|
18381
18621
|
convert(statement) {
|
|
18382
18622
|
return `/*
|
|
@@ -18389,8 +18629,8 @@ var SqliteAlterForeignKeyConvertor = class extends Convertor {
|
|
|
18389
18629
|
}
|
|
18390
18630
|
};
|
|
18391
18631
|
var PgDeleteForeignKeyConvertor = class extends Convertor {
|
|
18392
|
-
can(statement,
|
|
18393
|
-
return statement.type === "delete_reference" &&
|
|
18632
|
+
can(statement, dialect8) {
|
|
18633
|
+
return statement.type === "delete_reference" && dialect8 === "pg";
|
|
18394
18634
|
}
|
|
18395
18635
|
convert(statement) {
|
|
18396
18636
|
const tableFrom = statement.tableName;
|
|
@@ -18400,8 +18640,8 @@ var PgDeleteForeignKeyConvertor = class extends Convertor {
|
|
|
18400
18640
|
}
|
|
18401
18641
|
};
|
|
18402
18642
|
var SqliteDeleteForeignKeyConvertor = class extends Convertor {
|
|
18403
|
-
can(statement,
|
|
18404
|
-
return statement.type === "delete_reference" &&
|
|
18643
|
+
can(statement, dialect8) {
|
|
18644
|
+
return statement.type === "delete_reference" && dialect8 === "sqlite";
|
|
18405
18645
|
}
|
|
18406
18646
|
convert(statement) {
|
|
18407
18647
|
return `/*
|
|
@@ -18414,8 +18654,8 @@ var SqliteDeleteForeignKeyConvertor = class extends Convertor {
|
|
|
18414
18654
|
}
|
|
18415
18655
|
};
|
|
18416
18656
|
var MySqlDeleteForeignKeyConvertor = class extends Convertor {
|
|
18417
|
-
can(statement,
|
|
18418
|
-
return statement.type === "delete_reference" &&
|
|
18657
|
+
can(statement, dialect8) {
|
|
18658
|
+
return statement.type === "delete_reference" && dialect8 === "mysql";
|
|
18419
18659
|
}
|
|
18420
18660
|
convert(statement) {
|
|
18421
18661
|
const tableFrom = statement.tableName;
|
|
@@ -18425,8 +18665,8 @@ var MySqlDeleteForeignKeyConvertor = class extends Convertor {
|
|
|
18425
18665
|
}
|
|
18426
18666
|
};
|
|
18427
18667
|
var CreatePgIndexConvertor = class extends Convertor {
|
|
18428
|
-
can(statement,
|
|
18429
|
-
return statement.type === "create_index" &&
|
|
18668
|
+
can(statement, dialect8) {
|
|
18669
|
+
return statement.type === "create_index" && dialect8 === "pg";
|
|
18430
18670
|
}
|
|
18431
18671
|
convert(statement) {
|
|
18432
18672
|
const { name, columns, isUnique } = PgSquasher.unsquashIdx(statement.data);
|
|
@@ -18436,8 +18676,8 @@ var CreatePgIndexConvertor = class extends Convertor {
|
|
|
18436
18676
|
}
|
|
18437
18677
|
};
|
|
18438
18678
|
var CreateMySqlIndexConvertor = class extends Convertor {
|
|
18439
|
-
can(statement,
|
|
18440
|
-
return statement.type === "create_index" &&
|
|
18679
|
+
can(statement, dialect8) {
|
|
18680
|
+
return statement.type === "create_index" && dialect8 === "mysql";
|
|
18441
18681
|
}
|
|
18442
18682
|
convert(statement) {
|
|
18443
18683
|
const { name, columns, isUnique } = PgSquasher.unsquashIdx(statement.data);
|
|
@@ -18447,8 +18687,8 @@ var CreateMySqlIndexConvertor = class extends Convertor {
|
|
|
18447
18687
|
}
|
|
18448
18688
|
};
|
|
18449
18689
|
var CreateSqliteIndexConvertor = class extends Convertor {
|
|
18450
|
-
can(statement,
|
|
18451
|
-
return statement.type === "create_index" &&
|
|
18690
|
+
can(statement, dialect8) {
|
|
18691
|
+
return statement.type === "create_index" && dialect8 === "sqlite";
|
|
18452
18692
|
}
|
|
18453
18693
|
convert(statement) {
|
|
18454
18694
|
const { name, columns, isUnique, where } = SQLiteSquasher.unsquashIdx(
|
|
@@ -18461,8 +18701,8 @@ var CreateSqliteIndexConvertor = class extends Convertor {
|
|
|
18461
18701
|
}
|
|
18462
18702
|
};
|
|
18463
18703
|
var PgDropIndexConvertor = class extends Convertor {
|
|
18464
|
-
can(statement,
|
|
18465
|
-
return statement.type === "drop_index" &&
|
|
18704
|
+
can(statement, dialect8) {
|
|
18705
|
+
return statement.type === "drop_index" && dialect8 === "pg";
|
|
18466
18706
|
}
|
|
18467
18707
|
convert(statement) {
|
|
18468
18708
|
const { name } = PgSquasher.unsquashIdx(statement.data);
|
|
@@ -18470,8 +18710,8 @@ var PgDropIndexConvertor = class extends Convertor {
|
|
|
18470
18710
|
}
|
|
18471
18711
|
};
|
|
18472
18712
|
var SqliteDropIndexConvertor = class extends Convertor {
|
|
18473
|
-
can(statement,
|
|
18474
|
-
return statement.type === "drop_index" &&
|
|
18713
|
+
can(statement, dialect8) {
|
|
18714
|
+
return statement.type === "drop_index" && dialect8 === "sqlite";
|
|
18475
18715
|
}
|
|
18476
18716
|
convert(statement) {
|
|
18477
18717
|
const { name } = PgSquasher.unsquashIdx(statement.data);
|
|
@@ -18520,10 +18760,10 @@ convertors.push(new SqliteAlterTableAlterColumnSetNotNullConvertor());
|
|
|
18520
18760
|
convertors.push(new SqliteAlterTableAlterColumnDropNotNullConvertor());
|
|
18521
18761
|
convertors.push(new SqliteAlterTableAlterColumnSetDefaultConvertor());
|
|
18522
18762
|
convertors.push(new SqliteAlterTableAlterColumnDropDefaultConvertor());
|
|
18523
|
-
var fromJson = (statements,
|
|
18763
|
+
var fromJson = (statements, dialect8) => {
|
|
18524
18764
|
const result = statements.map((statement) => {
|
|
18525
18765
|
const filtered = convertors.filter((it) => {
|
|
18526
|
-
return it.can(statement,
|
|
18766
|
+
return it.can(statement, dialect8);
|
|
18527
18767
|
});
|
|
18528
18768
|
const convertor = filtered.length === 1 ? filtered[0] : void 0;
|
|
18529
18769
|
if (!convertor) {
|
|
@@ -18663,8 +18903,8 @@ var findAlternationsInTable = (table4, oldName, newName) => {
|
|
|
18663
18903
|
deletedForeignKeys
|
|
18664
18904
|
};
|
|
18665
18905
|
};
|
|
18666
|
-
var alternationsInColumn = (
|
|
18667
|
-
const altered = [
|
|
18906
|
+
var alternationsInColumn = (column5) => {
|
|
18907
|
+
const altered = [column5];
|
|
18668
18908
|
const result = altered.map((it) => {
|
|
18669
18909
|
if (typeof it.name !== "string" && "__old" in it.name) {
|
|
18670
18910
|
return { ...it, name: { type: "changed", old: it.name.__old, new: it.name.__new } };
|
|
@@ -18763,11 +19003,11 @@ var prepareRenameColumns = (tableName, pairs) => {
|
|
|
18763
19003
|
};
|
|
18764
19004
|
});
|
|
18765
19005
|
};
|
|
18766
|
-
var prepareAlterTableColumnsJson = (tableName, deleted, added, altered, addedFk,
|
|
19006
|
+
var prepareAlterTableColumnsJson = (tableName, deleted, added, altered, addedFk, dialect8) => {
|
|
18767
19007
|
const statements = [];
|
|
18768
19008
|
const dropColumns = _prepareDropColumns(tableName, deleted);
|
|
18769
19009
|
const alterColumns = _prepareAlterColumns(tableName, altered);
|
|
18770
|
-
if (
|
|
19010
|
+
if (dialect8 === "sqlite") {
|
|
18771
19011
|
let jsonCreateFKStatements = Object.values(addedFk);
|
|
18772
19012
|
const sqliteAddColumns = _prepareSQLiteAddColumns(
|
|
18773
19013
|
tableName,
|
|
@@ -18820,63 +19060,63 @@ var _prepareSQLiteAddColumns = (tableName, columns, referenceData) => {
|
|
|
18820
19060
|
var _prepareAlterColumns = (tableName, columns) => {
|
|
18821
19061
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
18822
19062
|
let statements = [];
|
|
18823
|
-
for (const
|
|
18824
|
-
const columnName = typeof
|
|
18825
|
-
if (typeof
|
|
19063
|
+
for (const column5 of columns) {
|
|
19064
|
+
const columnName = typeof column5.name !== "string" ? column5.name.new : column5.name;
|
|
19065
|
+
if (typeof column5.name !== "string") {
|
|
18826
19066
|
statements.push({
|
|
18827
19067
|
type: "alter_table_rename_column",
|
|
18828
19068
|
tableName,
|
|
18829
|
-
oldColumnName:
|
|
18830
|
-
newColumnName:
|
|
19069
|
+
oldColumnName: column5.name.old,
|
|
19070
|
+
newColumnName: column5.name.new
|
|
18831
19071
|
});
|
|
18832
19072
|
}
|
|
18833
|
-
if (((_a =
|
|
19073
|
+
if (((_a = column5.type) == null ? void 0 : _a.type) === "changed") {
|
|
18834
19074
|
statements.push({
|
|
18835
19075
|
type: "alter_table_alter_column_set_type",
|
|
18836
19076
|
tableName,
|
|
18837
19077
|
columnName,
|
|
18838
|
-
newDataType:
|
|
19078
|
+
newDataType: column5.type.new
|
|
18839
19079
|
});
|
|
18840
19080
|
}
|
|
18841
|
-
if (((_b =
|
|
19081
|
+
if (((_b = column5.default) == null ? void 0 : _b.type) === "added") {
|
|
18842
19082
|
statements.push({
|
|
18843
19083
|
type: "alter_table_alter_column_set_default",
|
|
18844
19084
|
tableName,
|
|
18845
19085
|
columnName,
|
|
18846
|
-
newDefaultValue:
|
|
19086
|
+
newDefaultValue: column5.default.value
|
|
18847
19087
|
});
|
|
18848
19088
|
}
|
|
18849
|
-
if (((_c =
|
|
19089
|
+
if (((_c = column5.default) == null ? void 0 : _c.type) === "changed") {
|
|
18850
19090
|
statements.push({
|
|
18851
19091
|
type: "alter_table_alter_column_set_default",
|
|
18852
19092
|
tableName,
|
|
18853
19093
|
columnName,
|
|
18854
|
-
newDefaultValue:
|
|
19094
|
+
newDefaultValue: column5.default.new
|
|
18855
19095
|
});
|
|
18856
19096
|
}
|
|
18857
|
-
if (((_d =
|
|
19097
|
+
if (((_d = column5.default) == null ? void 0 : _d.type) === "deleted") {
|
|
18858
19098
|
statements.push({
|
|
18859
19099
|
type: "alter_table_alter_column_drop_default",
|
|
18860
19100
|
tableName,
|
|
18861
19101
|
columnName
|
|
18862
19102
|
});
|
|
18863
19103
|
}
|
|
18864
|
-
if (((_e =
|
|
19104
|
+
if (((_e = column5.notNull) == null ? void 0 : _e.type) === "added") {
|
|
18865
19105
|
statements.push({
|
|
18866
19106
|
type: "alter_table_alter_column_set_notnull",
|
|
18867
19107
|
tableName,
|
|
18868
19108
|
columnName
|
|
18869
19109
|
});
|
|
18870
19110
|
}
|
|
18871
|
-
if (((_f =
|
|
18872
|
-
const type =
|
|
19111
|
+
if (((_f = column5.notNull) == null ? void 0 : _f.type) === "changed") {
|
|
19112
|
+
const type = column5.notNull.new ? "alter_table_alter_column_set_notnull" : "alter_table_alter_column_drop_notnull";
|
|
18873
19113
|
statements.push({
|
|
18874
19114
|
type,
|
|
18875
19115
|
tableName,
|
|
18876
19116
|
columnName
|
|
18877
19117
|
});
|
|
18878
19118
|
}
|
|
18879
|
-
if (((_g =
|
|
19119
|
+
if (((_g = column5.notNull) == null ? void 0 : _g.type) === "deleted") {
|
|
18880
19120
|
statements.push({
|
|
18881
19121
|
type: "alter_table_alter_column_drop_notnull",
|
|
18882
19122
|
tableName,
|
|
@@ -18956,13 +19196,13 @@ var mapValues = (obj, map) => {
|
|
|
18956
19196
|
}, {});
|
|
18957
19197
|
return result;
|
|
18958
19198
|
};
|
|
18959
|
-
var squashIndexesAndFKs = (json,
|
|
19199
|
+
var squashIndexesAndFKs = (json, dialect8 = "pg") => {
|
|
18960
19200
|
const mappedTables = Object.fromEntries(
|
|
18961
19201
|
Object.entries(json.tables).map((it) => {
|
|
18962
19202
|
const squashedIndexes = mapValues(it[1].indexes, (index4) => {
|
|
18963
|
-
if (
|
|
19203
|
+
if (dialect8 === "mysql") {
|
|
18964
19204
|
return MySqlSquasher.squashIdx(index4);
|
|
18965
|
-
} else if (
|
|
19205
|
+
} else if (dialect8 === "pg") {
|
|
18966
19206
|
return PgSquasher.squashIdx(index4);
|
|
18967
19207
|
} else {
|
|
18968
19208
|
return SQLiteSquasher.squashIdx(index4);
|
|
@@ -18970,9 +19210,9 @@ var squashIndexesAndFKs = (json, dialect7 = "pg") => {
|
|
|
18970
19210
|
});
|
|
18971
19211
|
const squashedFKs = mapValues(it[1].foreignKeys, (fk4) => {
|
|
18972
19212
|
{
|
|
18973
|
-
if (
|
|
19213
|
+
if (dialect8 === "mysql") {
|
|
18974
19214
|
return MySqlSquasher.squashFK(fk4);
|
|
18975
|
-
} else if (
|
|
19215
|
+
} else if (dialect8 === "pg") {
|
|
18976
19216
|
return PgSquasher.squashFK(fk4);
|
|
18977
19217
|
} else {
|
|
18978
19218
|
return SQLiteSquasher.squashFK(fk4);
|
|
@@ -19079,11 +19319,11 @@ var diffResultScheme = objectType({
|
|
|
19079
19319
|
deletedEnums: enumSchema2.array(),
|
|
19080
19320
|
alteredEnums: changedEnumSchema.array()
|
|
19081
19321
|
}).strict();
|
|
19082
|
-
var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver,
|
|
19322
|
+
var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, dialect8) => {
|
|
19083
19323
|
var _a, _b, _c, _d;
|
|
19084
19324
|
const diffResult = applyJsonDiff(
|
|
19085
|
-
squashIndexesAndFKs(json1,
|
|
19086
|
-
squashIndexesAndFKs(json2,
|
|
19325
|
+
squashIndexesAndFKs(json1, dialect8),
|
|
19326
|
+
squashIndexesAndFKs(json2, dialect8)
|
|
19087
19327
|
);
|
|
19088
19328
|
if (Object.keys(diffResult).length === 0) {
|
|
19089
19329
|
return "";
|
|
@@ -19149,7 +19389,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
|
|
|
19149
19389
|
it.added,
|
|
19150
19390
|
it.altered,
|
|
19151
19391
|
it.addedForeignKeys,
|
|
19152
|
-
|
|
19392
|
+
dialect8
|
|
19153
19393
|
);
|
|
19154
19394
|
}).flat();
|
|
19155
19395
|
const jsonCreateIndexesForAllAlteredTables = allAltered.map((it) => {
|
|
@@ -19162,7 +19402,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
|
|
|
19162
19402
|
return prepareCreateReferencesJson(it.name, it.foreignKeys);
|
|
19163
19403
|
}).flat();
|
|
19164
19404
|
const jsonReferencesForAllAlteredTables = allAltered.map((it) => {
|
|
19165
|
-
const forAdded =
|
|
19405
|
+
const forAdded = dialect8 !== "sqlite" ? prepareCreateReferencesJson(it.name, it.addedForeignKeys) : [];
|
|
19166
19406
|
const forAltered = prepareDropReferencesJson(
|
|
19167
19407
|
it.name,
|
|
19168
19408
|
it.deletedForeignKeys
|
|
@@ -19179,7 +19419,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
|
|
|
19179
19419
|
}).flat()) != null ? _d : [];
|
|
19180
19420
|
jsonStatements.push(...createEnums);
|
|
19181
19421
|
jsonStatements.push(...jsonAlterEnumsWithAddedValues);
|
|
19182
|
-
if (
|
|
19422
|
+
if (dialect8 === "sqlite") {
|
|
19183
19423
|
jsonStatements.push(...jsonSQLiteCreateTables);
|
|
19184
19424
|
} else {
|
|
19185
19425
|
jsonStatements.push(...jsonCreateTables);
|
|
@@ -19188,7 +19428,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
|
|
|
19188
19428
|
jsonStatements.push(...jsonRenameTables);
|
|
19189
19429
|
jsonStatements.push(...jsonRenameColumnsStatements);
|
|
19190
19430
|
jsonStatements.push(...jsonAlterTables);
|
|
19191
|
-
if (
|
|
19431
|
+
if (dialect8 !== "sqlite")
|
|
19192
19432
|
jsonStatements.push(...jsonCreateReferences);
|
|
19193
19433
|
jsonStatements.push(...jsonAlterReferencesForAlteredTables);
|
|
19194
19434
|
jsonStatements.push(...jsonCreateIndexesForCreatedTables);
|
|
@@ -19809,6 +20049,34 @@ Is ${source_default.bold.blue(
|
|
|
19809
20049
|
return this.state.items[this.state.selectedIdx];
|
|
19810
20050
|
}
|
|
19811
20051
|
};
|
|
20052
|
+
var frames = function(values) {
|
|
20053
|
+
let index4 = 0;
|
|
20054
|
+
const iterator = () => {
|
|
20055
|
+
const frame = values[index4];
|
|
20056
|
+
index4 += 1;
|
|
20057
|
+
index4 %= values.length;
|
|
20058
|
+
return frame;
|
|
20059
|
+
};
|
|
20060
|
+
return iterator;
|
|
20061
|
+
};
|
|
20062
|
+
var Progress = class extends import_hanji.TaskView {
|
|
20063
|
+
constructor() {
|
|
20064
|
+
super();
|
|
20065
|
+
this.prefix = [];
|
|
20066
|
+
this.prepend = (msg) => {
|
|
20067
|
+
this.prefix.push(msg);
|
|
20068
|
+
};
|
|
20069
|
+
this.spinner = frames("|/-\\".split(""));
|
|
20070
|
+
this.timeout = setInterval(() => {
|
|
20071
|
+
this.requestLayout();
|
|
20072
|
+
}, 128);
|
|
20073
|
+
this.on("detach", () => clearInterval(this.timeout));
|
|
20074
|
+
}
|
|
20075
|
+
render() {
|
|
20076
|
+
return `${this.spinner()} introspecting database
|
|
20077
|
+
`;
|
|
20078
|
+
}
|
|
20079
|
+
};
|
|
19812
20080
|
|
|
19813
20081
|
// src/migrationPreparator.ts
|
|
19814
20082
|
var validateWithReport = (root, migrationFolders) => {
|
|
@@ -19907,8 +20175,8 @@ var prepareMigration = (outFolder = "drizzle", schemaPath, _dialect) => {
|
|
|
19907
20175
|
const serialized = serializer_default(schemaPath, _dialect);
|
|
19908
20176
|
const id = (0, import_crypto.randomUUID)();
|
|
19909
20177
|
const idPrev = prevSnapshot.id;
|
|
19910
|
-
const { version, dialect:
|
|
19911
|
-
const result = { version, dialect:
|
|
20178
|
+
const { version, dialect: dialect8, ...rest } = serialized;
|
|
20179
|
+
const result = { version, dialect: dialect8, id, prevId: idPrev, ...rest };
|
|
19912
20180
|
return { prev: prevSnapshot, cur: result };
|
|
19913
20181
|
};
|
|
19914
20182
|
var migrationPreparator_default = prepareMigration;
|
|
@@ -19919,9 +20187,9 @@ var import_hanji3 = __toESM(require_hanji());
|
|
|
19919
20187
|
var prepareAndMigrate = async (config) => {
|
|
19920
20188
|
const outFolder = config.out;
|
|
19921
20189
|
const schemaPath = config.schema;
|
|
19922
|
-
const
|
|
20190
|
+
const dialect8 = config.dialect;
|
|
19923
20191
|
try {
|
|
19924
|
-
const { prev, cur } = migrationPreparator_default(outFolder, schemaPath,
|
|
20192
|
+
const { prev, cur } = migrationPreparator_default(outFolder, schemaPath, dialect8);
|
|
19925
20193
|
const toSave = JSON.parse(JSON.stringify(cur));
|
|
19926
20194
|
const validatedPrev = commonSchema.parse(prev);
|
|
19927
20195
|
const validatedCur = commonSchema.parse(cur);
|
|
@@ -19931,8 +20199,8 @@ var prepareAndMigrate = async (config) => {
|
|
|
19931
20199
|
freeeeeeze(validatedPrev);
|
|
19932
20200
|
freeeeeeze(validatedCur);
|
|
19933
20201
|
console.log(schema4(cur));
|
|
19934
|
-
const
|
|
19935
|
-
if (
|
|
20202
|
+
const sql2 = await prepareSQL(validatedPrev, validatedCur, dialect8);
|
|
20203
|
+
if (sql2.length === 0) {
|
|
19936
20204
|
console.log("No schema changes, nothing to migrate \u{1F634}");
|
|
19937
20205
|
return;
|
|
19938
20206
|
}
|
|
@@ -19943,7 +20211,7 @@ var prepareAndMigrate = async (config) => {
|
|
|
19943
20211
|
`${migrationFolderPath}/snapshot.json`,
|
|
19944
20212
|
JSON.stringify(toSave, null, 2)
|
|
19945
20213
|
);
|
|
19946
|
-
import_fs3.default.writeFileSync(`${migrationFolderPath}/migration.sql`,
|
|
20214
|
+
import_fs3.default.writeFileSync(`${migrationFolderPath}/migration.sql`, sql2);
|
|
19947
20215
|
console.log(
|
|
19948
20216
|
source_default.bold.green("Done:"),
|
|
19949
20217
|
import_path2.default.join(`${migrationFolderPath}/migration.sql`)
|
|
@@ -19960,7 +20228,7 @@ var freeeeeeze = (obj) => {
|
|
|
19960
20228
|
}
|
|
19961
20229
|
}
|
|
19962
20230
|
};
|
|
19963
|
-
var prepareSQL = async (prev, cur,
|
|
20231
|
+
var prepareSQL = async (prev, cur, dialect8) => {
|
|
19964
20232
|
const tablesResolver = async (input) => {
|
|
19965
20233
|
try {
|
|
19966
20234
|
const { created, deleted, renamed } = await promptTablesConflict(
|
|
@@ -19991,7 +20259,7 @@ var prepareSQL = async (prev, cur, dialect7) => {
|
|
|
19991
20259
|
cur,
|
|
19992
20260
|
tablesResolver,
|
|
19993
20261
|
columnsResolver,
|
|
19994
|
-
|
|
20262
|
+
dialect8
|
|
19995
20263
|
);
|
|
19996
20264
|
};
|
|
19997
20265
|
var promptColumnsConflicts = async (tableName, newColumns, missingColumns) => {
|
|
@@ -20101,7 +20369,7 @@ var import_fs6 = __toESM(require("fs"));
|
|
|
20101
20369
|
// src/cli/commands/check.ts
|
|
20102
20370
|
var import_fs4 = __toESM(require("fs"));
|
|
20103
20371
|
var checkHandler = (config) => {
|
|
20104
|
-
const { dialect:
|
|
20372
|
+
const { dialect: dialect8, out } = config;
|
|
20105
20373
|
const outFolderExists = import_fs4.default.existsSync(out);
|
|
20106
20374
|
if (!outFolderExists) {
|
|
20107
20375
|
import_fs4.default.mkdirSync(out);
|
|
@@ -20145,7 +20413,7 @@ var import_crypto2 = require("crypto");
|
|
|
20145
20413
|
var import_fs5 = __toESM(require("fs"));
|
|
20146
20414
|
var import_path3 = __toESM(require("path"));
|
|
20147
20415
|
var upHandler = (config) => {
|
|
20148
|
-
const { dialect:
|
|
20416
|
+
const { dialect: dialect8, out } = config;
|
|
20149
20417
|
const outFolderExists = import_fs5.default.existsSync(out);
|
|
20150
20418
|
if (!outFolderExists) {
|
|
20151
20419
|
import_fs5.default.mkdirSync(out);
|
|
@@ -20192,10 +20460,10 @@ var update1to2 = (json) => {
|
|
|
20192
20460
|
const ref = it2[1].references;
|
|
20193
20461
|
const fkName = ref == null ? void 0 : ref.foreignKeyName;
|
|
20194
20462
|
const table5 = ref == null ? void 0 : ref.table;
|
|
20195
|
-
const
|
|
20463
|
+
const column5 = ref == null ? void 0 : ref.column;
|
|
20196
20464
|
const onDelete = ref == null ? void 0 : ref.onDelete;
|
|
20197
20465
|
const onUpdate = ref == null ? void 0 : ref.onDelete;
|
|
20198
|
-
const newRef = ref ? `${fkName};${table5};${
|
|
20466
|
+
const newRef = ref ? `${fkName};${table5};${column5};${onDelete != null ? onDelete : ""};${onUpdate != null ? onUpdate : ""}` : void 0;
|
|
20199
20467
|
return [it2[0], { ...it2[1], references: newRef }];
|
|
20200
20468
|
})
|
|
20201
20469
|
);
|
|
@@ -20235,13 +20503,13 @@ var update2to3 = (json, prevId) => {
|
|
|
20235
20503
|
const tableName = name;
|
|
20236
20504
|
const fks = Object.fromEntries(
|
|
20237
20505
|
refs.map((it2) => {
|
|
20238
|
-
const [name2, table4,
|
|
20506
|
+
const [name2, table4, column5, onDelete, onUpdate] = it2.value.split(";");
|
|
20239
20507
|
const fk4 = {
|
|
20240
20508
|
name: name2,
|
|
20241
20509
|
tableFrom: tableName,
|
|
20242
20510
|
columnsFrom: [it2.column],
|
|
20243
20511
|
tableTo: table4,
|
|
20244
|
-
columnsTo: [
|
|
20512
|
+
columnsTo: [column5],
|
|
20245
20513
|
onUpdate,
|
|
20246
20514
|
onDelete
|
|
20247
20515
|
};
|
|
@@ -20282,11 +20550,419 @@ var update2to3 = (json, prevId) => {
|
|
|
20282
20550
|
};
|
|
20283
20551
|
|
|
20284
20552
|
// src/cli/index.ts
|
|
20553
|
+
var import_hanji5 = __toESM(require_hanji());
|
|
20554
|
+
|
|
20555
|
+
// src/cli/commands/pgIntrospect.ts
|
|
20556
|
+
var import_node2 = require("drizzle-orm-pg/node");
|
|
20285
20557
|
var import_hanji4 = __toESM(require_hanji());
|
|
20558
|
+
var import_pg = require("pg");
|
|
20559
|
+
|
|
20560
|
+
// src/@types/utils.ts
|
|
20561
|
+
String.prototype.trimChar = function(char) {
|
|
20562
|
+
let start = 0;
|
|
20563
|
+
let end = this.length;
|
|
20564
|
+
while (start < end && this[start] === char)
|
|
20565
|
+
++start;
|
|
20566
|
+
while (end > start && this[end - 1] === char)
|
|
20567
|
+
--end;
|
|
20568
|
+
return start > 0 || end < this.length ? this.substring(start, end) : this.toString();
|
|
20569
|
+
};
|
|
20570
|
+
String.prototype.squashSpaces = function() {
|
|
20571
|
+
return this.replace(/ +/g, " ").trim();
|
|
20572
|
+
};
|
|
20573
|
+
String.prototype.camelCase = function() {
|
|
20574
|
+
return this.toLowerCase().replace(/([-_ ][a-z0-9])/g, (group) => {
|
|
20575
|
+
return group.toUpperCase().replace("-", "").replace("_", "").replace(" ", "");
|
|
20576
|
+
});
|
|
20577
|
+
};
|
|
20578
|
+
|
|
20579
|
+
// src/introspect.ts
|
|
20580
|
+
init_pgSerializer();
|
|
20581
|
+
var pgImportsList = /* @__PURE__ */ new Set([
|
|
20582
|
+
"pgTable",
|
|
20583
|
+
"pgEnum",
|
|
20584
|
+
"smallint",
|
|
20585
|
+
"integer",
|
|
20586
|
+
"bigint",
|
|
20587
|
+
"boolean",
|
|
20588
|
+
"text",
|
|
20589
|
+
"varchar",
|
|
20590
|
+
"serial",
|
|
20591
|
+
"bigserial",
|
|
20592
|
+
"decimal",
|
|
20593
|
+
"numeric",
|
|
20594
|
+
"real",
|
|
20595
|
+
"json",
|
|
20596
|
+
"jsonb",
|
|
20597
|
+
"time",
|
|
20598
|
+
"timestamp",
|
|
20599
|
+
"date",
|
|
20600
|
+
"interval",
|
|
20601
|
+
"bigint",
|
|
20602
|
+
"bigserial",
|
|
20603
|
+
"doublePrecision"
|
|
20604
|
+
]);
|
|
20605
|
+
var objToStatement = (json) => {
|
|
20606
|
+
json = Object.fromEntries(Object.entries(json).filter((it) => it[1]));
|
|
20607
|
+
const keys = Object.keys(json);
|
|
20608
|
+
if (keys.length === 0)
|
|
20609
|
+
return;
|
|
20610
|
+
let statement = "{ ";
|
|
20611
|
+
statement += keys.map((it) => `"${it}": "${json[it]}"`).join(", ");
|
|
20612
|
+
statement += " }";
|
|
20613
|
+
return statement;
|
|
20614
|
+
};
|
|
20615
|
+
var objToStatement2 = (json) => {
|
|
20616
|
+
json = Object.fromEntries(Object.entries(json).filter((it) => it[1]));
|
|
20617
|
+
const keys = Object.keys(json);
|
|
20618
|
+
if (keys.length === 0)
|
|
20619
|
+
return;
|
|
20620
|
+
let statement = "{ ";
|
|
20621
|
+
statement += keys.map((it) => `${it}: "${json[it]}"`).join(", ");
|
|
20622
|
+
statement += " }";
|
|
20623
|
+
return statement;
|
|
20624
|
+
};
|
|
20625
|
+
var timeConfig = (json) => {
|
|
20626
|
+
json = Object.fromEntries(Object.entries(json).filter((it) => it[1]));
|
|
20627
|
+
const keys = Object.keys(json);
|
|
20628
|
+
if (keys.length === 0)
|
|
20629
|
+
return;
|
|
20630
|
+
let statement = "{ ";
|
|
20631
|
+
statement += keys.map((it) => `${it}: ${json[it]}`).join(", ");
|
|
20632
|
+
statement += " }";
|
|
20633
|
+
return statement;
|
|
20634
|
+
};
|
|
20635
|
+
var importsPatch = {
|
|
20636
|
+
"double precision": "doublePrecision",
|
|
20637
|
+
"timestamp without time zone": "timestamp"
|
|
20638
|
+
};
|
|
20639
|
+
var relations = /* @__PURE__ */ new Set();
|
|
20640
|
+
var schemaToTypeScript = (schema5) => {
|
|
20641
|
+
Object.values(schema5.tables).forEach((table4) => {
|
|
20642
|
+
Object.values(table4.foreignKeys).forEach((fk4) => {
|
|
20643
|
+
const relation = `${fk4.tableFrom}-${fk4.tableTo}`;
|
|
20644
|
+
relations.add(relation);
|
|
20645
|
+
});
|
|
20646
|
+
});
|
|
20647
|
+
const enumTypes = new Set(Object.values(schema5.enums).map((it) => it.name));
|
|
20648
|
+
const imports = Object.values(schema5.tables).reduce(
|
|
20649
|
+
(res, it) => {
|
|
20650
|
+
const idxImports = Object.values(it.indexes).map(
|
|
20651
|
+
(idx) => idx.isUnique ? "uniqueIndex" : "index"
|
|
20652
|
+
);
|
|
20653
|
+
const fkImpots = Object.values(it.foreignKeys).map((it2) => "foreignKey");
|
|
20654
|
+
res.pg.push(...idxImports);
|
|
20655
|
+
res.pg.push(...fkImpots);
|
|
20656
|
+
const columnImports = Object.values(it.columns).map((col) => {
|
|
20657
|
+
var _a;
|
|
20658
|
+
let patched = (_a = importsPatch[col.type]) != null ? _a : col.type;
|
|
20659
|
+
patched = patched.startsWith("varchar(") ? "varchar" : patched;
|
|
20660
|
+
patched = patched.startsWith("numeric(") ? "numeric" : patched;
|
|
20661
|
+
return patched;
|
|
20662
|
+
}).filter((type) => {
|
|
20663
|
+
return pgImportsList.has(type);
|
|
20664
|
+
});
|
|
20665
|
+
res.pg.push(...columnImports);
|
|
20666
|
+
return res;
|
|
20667
|
+
},
|
|
20668
|
+
{ pg: [] }
|
|
20669
|
+
);
|
|
20670
|
+
const enumStatements = Object.values(schema5.enums).map((it) => {
|
|
20671
|
+
const values = Object.values(it.values).map((it2) => `'${it2}'`).join(", ");
|
|
20672
|
+
return `export const ${it.name.camelCase()} = pgEnum("${it.name}", [${values}])
|
|
20673
|
+
`;
|
|
20674
|
+
}).join("");
|
|
20675
|
+
const tableStatements = Object.values(schema5.tables).map((table4) => {
|
|
20676
|
+
let statement = `export const ${table4.name.camelCase()} = pgTable("${table4.name}", {
|
|
20677
|
+
`;
|
|
20678
|
+
statement += createTableColumns(
|
|
20679
|
+
Object.values(table4.columns),
|
|
20680
|
+
Object.values(table4.foreignKeys),
|
|
20681
|
+
enumTypes
|
|
20682
|
+
);
|
|
20683
|
+
statement += "}";
|
|
20684
|
+
const filteredFKs = Object.values(table4.foreignKeys).filter((it) => {
|
|
20685
|
+
return it.columnsFrom.length > 1 || isSelf(it) || isCyclic(it);
|
|
20686
|
+
});
|
|
20687
|
+
if (Object.keys(table4.indexes).length > 0 || filteredFKs.length > 0) {
|
|
20688
|
+
statement += ",\n";
|
|
20689
|
+
statement += "(table) => {\n";
|
|
20690
|
+
statement += " return {\n";
|
|
20691
|
+
statement += createTableIndexes(table4.name, Object.values(table4.indexes));
|
|
20692
|
+
statement += createTableFKs(Object.values(filteredFKs));
|
|
20693
|
+
statement += " }\n";
|
|
20694
|
+
statement += "}";
|
|
20695
|
+
}
|
|
20696
|
+
statement += ");";
|
|
20697
|
+
return statement;
|
|
20698
|
+
});
|
|
20699
|
+
const uniquePgImports = ["pgTable", "pgEnum", ...new Set(imports.pg)];
|
|
20700
|
+
let result = `import { ${uniquePgImports.join(
|
|
20701
|
+
", "
|
|
20702
|
+
)} } from "drizzle-orm-pg"
|
|
20703
|
+
|
|
20704
|
+
`;
|
|
20705
|
+
result += enumStatements;
|
|
20706
|
+
result += "\n";
|
|
20707
|
+
result += tableStatements.join("\n\n");
|
|
20708
|
+
return result;
|
|
20709
|
+
};
|
|
20710
|
+
var isCyclic = (fk4) => {
|
|
20711
|
+
const key = `${fk4.tableFrom}-${fk4.tableTo}`;
|
|
20712
|
+
const reverse = `${fk4.tableTo}-${fk4.tableFrom}`;
|
|
20713
|
+
return relations.has(key) && relations.has(reverse);
|
|
20714
|
+
};
|
|
20715
|
+
var isSelf = (fk4) => {
|
|
20716
|
+
return fk4.tableFrom === fk4.tableTo;
|
|
20717
|
+
};
|
|
20718
|
+
var column4 = (type, name, enumTypes, defaultValue) => {
|
|
20719
|
+
const lowered = type.toLowerCase();
|
|
20720
|
+
if (lowered === "serial") {
|
|
20721
|
+
return `${name.camelCase()}: serial("${name}")`;
|
|
20722
|
+
}
|
|
20723
|
+
if (lowered === "bigserial") {
|
|
20724
|
+
return `${name.camelCase()}: bigserial("${name}", { mode: "bigint" })`;
|
|
20725
|
+
}
|
|
20726
|
+
if (lowered === "integer") {
|
|
20727
|
+
let out = `${name.camelCase()}: integer("${name}")`;
|
|
20728
|
+
out += defaultValue ? `.default(${defaultValue})` : "";
|
|
20729
|
+
return out;
|
|
20730
|
+
}
|
|
20731
|
+
if (lowered === "smallint") {
|
|
20732
|
+
let out = `${name.camelCase()}: smallint("${name}")`;
|
|
20733
|
+
out += defaultValue ? `.default(${defaultValue})` : "";
|
|
20734
|
+
return out;
|
|
20735
|
+
}
|
|
20736
|
+
if (lowered === "bigint") {
|
|
20737
|
+
let out = `${name.camelCase()}: bigint("${name}", { mode: "bigint" })`;
|
|
20738
|
+
out += defaultValue ? `.default(BigInt(${defaultValue}))` : "";
|
|
20739
|
+
return out;
|
|
20740
|
+
}
|
|
20741
|
+
if (lowered === "boolean") {
|
|
20742
|
+
let out = `${name.camelCase()}: boolean("${name}")`;
|
|
20743
|
+
out += defaultValue ? `.default(${defaultValue})` : "";
|
|
20744
|
+
return out;
|
|
20745
|
+
}
|
|
20746
|
+
if (lowered === "double precision") {
|
|
20747
|
+
let out = `${name.camelCase()}: doublePrecision("${name}")`;
|
|
20748
|
+
out += defaultValue ? `.default(${defaultValue})` : "";
|
|
20749
|
+
return out;
|
|
20750
|
+
}
|
|
20751
|
+
if (lowered === "real") {
|
|
20752
|
+
let out = `${name.camelCase()}: real("${name}")`;
|
|
20753
|
+
out += defaultValue ? `.default(${defaultValue})` : "";
|
|
20754
|
+
return out;
|
|
20755
|
+
}
|
|
20756
|
+
if (lowered.startsWith("numeric")) {
|
|
20757
|
+
let params;
|
|
20758
|
+
if (lowered.length > 7) {
|
|
20759
|
+
const [precision, scale] = lowered.slice(8, lowered.length - 1).split(",");
|
|
20760
|
+
params = { precision, scale };
|
|
20761
|
+
}
|
|
20762
|
+
let out = params ? `${name.camelCase()}: numeric("${name}", ${timeConfig(params)})` : `${name.camelCase()}: numeric("${name}")`;
|
|
20763
|
+
return out;
|
|
20764
|
+
}
|
|
20765
|
+
if (lowered.startsWith("timestamp")) {
|
|
20766
|
+
const withTimezone = lowered.includes("with time zone");
|
|
20767
|
+
const split = lowered.split(" ");
|
|
20768
|
+
let precision = split.length >= 2 ? Number(split[1].substring(1, 2)) : null;
|
|
20769
|
+
precision = precision ? precision : null;
|
|
20770
|
+
const params = timeConfig({ precision, withTimezone });
|
|
20771
|
+
let out = params ? `${name.camelCase()}: timestamp("${name}", ${params})` : `${name.camelCase()}: timestamp("${name}")`;
|
|
20772
|
+
defaultValue = (defaultValue == null ? void 0 : defaultValue.endsWith("::timestamp without time zone")) ? defaultValue.substring(0, defaultValue.length - 29) : defaultValue;
|
|
20773
|
+
defaultValue = (defaultValue == null ? void 0 : defaultValue.endsWith("::timestamp with time zone")) ? defaultValue.substring(0, defaultValue.length - 26) : defaultValue;
|
|
20774
|
+
defaultValue = defaultValue === "now()" || defaultValue === "CURRENT_TIMESTAMP" ? ".defaultNow()" : defaultValue ? `.default(${defaultValue})` : "";
|
|
20775
|
+
out += defaultValue;
|
|
20776
|
+
return out;
|
|
20777
|
+
}
|
|
20778
|
+
if (lowered.startsWith("time")) {
|
|
20779
|
+
const withTimezone = lowered.includes("with time zone");
|
|
20780
|
+
const split = lowered.split(" ");
|
|
20781
|
+
let precision = split.length >= 2 ? Number(split[1].substring(1, 2)) : null;
|
|
20782
|
+
precision = precision ? precision : null;
|
|
20783
|
+
const params = timeConfig({ precision, withTimezone });
|
|
20784
|
+
let out = params ? `${name.camelCase()}: time("${name}", ${params})` : `${name.camelCase()}: time("${name}")`;
|
|
20785
|
+
defaultValue = defaultValue === "now()" ? ".defaultNow()" : defaultValue ? `.default(${defaultValue})` : "";
|
|
20786
|
+
out += defaultValue;
|
|
20787
|
+
return out;
|
|
20788
|
+
}
|
|
20789
|
+
if (lowered.startsWith("interval")) {
|
|
20790
|
+
const withTimezone = lowered.includes("with time zone");
|
|
20791
|
+
const split = lowered.split(" ");
|
|
20792
|
+
let precision = split.length >= 2 ? Number(split[1].substring(1, 2)) : null;
|
|
20793
|
+
precision = precision ? precision : null;
|
|
20794
|
+
const params = timeConfig({ precision, withTimezone });
|
|
20795
|
+
let out = params ? `${name.camelCase()}: interval(${name}, ${params})` : `${name.camelCase()}: interval("${name}")`;
|
|
20796
|
+
out += defaultValue ? `.default(${defaultValue})` : "";
|
|
20797
|
+
return out;
|
|
20798
|
+
}
|
|
20799
|
+
if (lowered === "date") {
|
|
20800
|
+
let out = `${name}: date("${name}")`;
|
|
20801
|
+
defaultValue = defaultValue === "now()" ? ".defaultNow()" : defaultValue ? `.default(${defaultValue})` : "";
|
|
20802
|
+
out += defaultValue;
|
|
20803
|
+
return out;
|
|
20804
|
+
}
|
|
20805
|
+
if (lowered === "text") {
|
|
20806
|
+
let out = `${name.camelCase()}: text("${name}")`;
|
|
20807
|
+
out += defaultValue ? `.default(${defaultValue})` : "";
|
|
20808
|
+
return out;
|
|
20809
|
+
}
|
|
20810
|
+
if (lowered === "json") {
|
|
20811
|
+
let out = `${name.camelCase()}: json("${name}")`;
|
|
20812
|
+
defaultValue = (defaultValue == null ? void 0 : defaultValue.endsWith("::json")) ? defaultValue.substring(1, defaultValue.length - 7) : defaultValue;
|
|
20813
|
+
const def = defaultValue ? objToStatement(JSON.parse(defaultValue)) : null;
|
|
20814
|
+
out += defaultValue ? `.default(${def})` : "";
|
|
20815
|
+
return out;
|
|
20816
|
+
}
|
|
20817
|
+
if (lowered === "jsonb") {
|
|
20818
|
+
let out = `${name.camelCase()}: jsonb("${name}")`;
|
|
20819
|
+
defaultValue = (defaultValue == null ? void 0 : defaultValue.endsWith("::jsonb")) ? defaultValue.substring(1, defaultValue.length - 8) : defaultValue;
|
|
20820
|
+
const def = defaultValue ? objToStatement(JSON.parse(defaultValue)) : null;
|
|
20821
|
+
out += defaultValue ? `.default(${def})` : "";
|
|
20822
|
+
return out;
|
|
20823
|
+
}
|
|
20824
|
+
if (lowered.startsWith("varchar")) {
|
|
20825
|
+
const split = lowered.split(" ");
|
|
20826
|
+
let out;
|
|
20827
|
+
if (split[1]) {
|
|
20828
|
+
out = `${name.camelCase()}: varchar("${name}", { size: ${split[1]} })`;
|
|
20829
|
+
} else {
|
|
20830
|
+
out = `${name.camelCase()}: varchar("${name}")`;
|
|
20831
|
+
}
|
|
20832
|
+
defaultValue = (defaultValue == null ? void 0 : defaultValue.endsWith("::character varying")) ? defaultValue.substring(0, defaultValue.length - 19) : defaultValue;
|
|
20833
|
+
out += defaultValue ? `.default(${defaultValue})` : "";
|
|
20834
|
+
return out;
|
|
20835
|
+
}
|
|
20836
|
+
if (enumTypes.has(type)) {
|
|
20837
|
+
return `${name.camelCase()}: ${type.camelCase()}("${name}")`;
|
|
20838
|
+
}
|
|
20839
|
+
console.log("uknown", type);
|
|
20840
|
+
};
|
|
20841
|
+
var createTableColumns = (columns, fks, enumTypes) => {
|
|
20842
|
+
let statement = "";
|
|
20843
|
+
const oneColumnsFKs = Object.values(fks).filter((it) => {
|
|
20844
|
+
return !isSelf(it) && !isCyclic(it);
|
|
20845
|
+
}).filter((it) => it.columnsFrom.length === 1);
|
|
20846
|
+
const fkByColumnName = oneColumnsFKs.reduce((res, it) => {
|
|
20847
|
+
const arr = res[it.columnsFrom[0]] || [];
|
|
20848
|
+
arr.push(it);
|
|
20849
|
+
res[it.columnsFrom[0]] = arr;
|
|
20850
|
+
return res;
|
|
20851
|
+
}, {});
|
|
20852
|
+
columns.forEach((it) => {
|
|
20853
|
+
statement += " ";
|
|
20854
|
+
statement += column4(it.type, it.name, enumTypes, it.default);
|
|
20855
|
+
statement += it.primaryKey ? ".primaryKey()" : "";
|
|
20856
|
+
statement += it.notNull ? ".notNull()" : "";
|
|
20857
|
+
const fks2 = fkByColumnName[it.name];
|
|
20858
|
+
if (fks2) {
|
|
20859
|
+
const fksStatement = fks2.map((it2) => {
|
|
20860
|
+
const onDelete = it2.onDelete && it2.onDelete !== "no action" ? it2.onDelete : null;
|
|
20861
|
+
const onUpdate = it2.onUpdate && it2.onUpdate !== "no action" ? it2.onUpdate : null;
|
|
20862
|
+
const params = { onDelete, onUpdate };
|
|
20863
|
+
const paramsStr = objToStatement2(params);
|
|
20864
|
+
if (paramsStr) {
|
|
20865
|
+
return `.references(() => ${it2.tableTo.camelCase()}.${it2.columnsTo[0].camelCase()}, ${paramsStr} )`;
|
|
20866
|
+
}
|
|
20867
|
+
return `.references(() => ${it2.tableTo.camelCase()}.${it2.columnsTo[0].camelCase()})`;
|
|
20868
|
+
}).join("");
|
|
20869
|
+
statement += fksStatement;
|
|
20870
|
+
}
|
|
20871
|
+
statement += ",\n";
|
|
20872
|
+
});
|
|
20873
|
+
return statement;
|
|
20874
|
+
};
|
|
20875
|
+
var createTableIndexes = (tableName, idxs) => {
|
|
20876
|
+
let statement = "";
|
|
20877
|
+
idxs.forEach((it) => {
|
|
20878
|
+
let idxKey = it.name.startsWith(tableName) ? it.name.slice(tableName.length + 1) : it.name;
|
|
20879
|
+
idxKey = idxKey.endsWith("_index") ? idxKey.slice(0, -"_index".length) + "_idx" : idxKey;
|
|
20880
|
+
idxKey = idxKey.camelCase();
|
|
20881
|
+
const indexGeneratedName = indexName(tableName, it.columns);
|
|
20882
|
+
const escapedIndexName = indexGeneratedName === it.name ? "" : `"${it.name}"`;
|
|
20883
|
+
statement += ` ${idxKey}: `;
|
|
20884
|
+
statement += it.isUnique ? "uniqueIndex(" : "index(";
|
|
20885
|
+
statement += `${escapedIndexName})`;
|
|
20886
|
+
statement += `.on(${it.columns.map((it2) => `table.${it2.camelCase()}`).join(", ")}),`;
|
|
20887
|
+
statement += `
|
|
20888
|
+
`;
|
|
20889
|
+
});
|
|
20890
|
+
return statement;
|
|
20891
|
+
};
|
|
20892
|
+
var createTableFKs = (fks) => {
|
|
20893
|
+
let statement = "";
|
|
20894
|
+
fks.forEach((it) => {
|
|
20895
|
+
statement += ` ${it.name.camelCase()}: foreignKey({
|
|
20896
|
+
`;
|
|
20897
|
+
statement += ` columns: [${it.columnsFrom.map((i) => `table.${i.camelCase()}`).join(", ")}],
|
|
20898
|
+
`;
|
|
20899
|
+
statement += ` foreignColumns: [${it.columnsTo.map((i) => `${it.tableTo.camelCase()}.${i.camelCase()}`).join(", ")}]
|
|
20900
|
+
`;
|
|
20901
|
+
statement += ` })`;
|
|
20902
|
+
statement += it.onUpdate && it.onUpdate !== "no action" ? `.onUpdate("${it.onUpdate}")` : "";
|
|
20903
|
+
statement += it.onDelete && it.onDelete !== "no action" ? `.onDelete("${it.onDelete}")` : "";
|
|
20904
|
+
statement += `,
|
|
20905
|
+
`;
|
|
20906
|
+
});
|
|
20907
|
+
return statement;
|
|
20908
|
+
};
|
|
20909
|
+
|
|
20910
|
+
// src/cli/commands/pgIntrospect.ts
|
|
20911
|
+
init_pgSerializer();
|
|
20912
|
+
var PgConfig1 = objectType({
|
|
20913
|
+
host: stringType(),
|
|
20914
|
+
port: coerce.number().optional(),
|
|
20915
|
+
user: stringType().default("postgres"),
|
|
20916
|
+
password: stringType().optional(),
|
|
20917
|
+
database: stringType(),
|
|
20918
|
+
ssl: coerce.boolean().optional()
|
|
20919
|
+
}).strict();
|
|
20920
|
+
var PgConfig2 = objectType({
|
|
20921
|
+
connectionString: stringType()
|
|
20922
|
+
}).strict();
|
|
20923
|
+
var pgIntrospect = async (config) => {
|
|
20924
|
+
const pool = new import_pg.Pool(config);
|
|
20925
|
+
const db = (0, import_node2.drizzle)(pool);
|
|
20926
|
+
const progress = new Progress();
|
|
20927
|
+
const res = await (0, import_hanji4.renderWithTask)(
|
|
20928
|
+
progress,
|
|
20929
|
+
fromDatabase(db, (msg) => {
|
|
20930
|
+
})
|
|
20931
|
+
);
|
|
20932
|
+
const tablesCount = Object.keys(res.tables).length.toFixed(0);
|
|
20933
|
+
const columnsCount = Object.values(res.tables).map((it) => Object.keys(it.columns)).flat().length.toFixed(0);
|
|
20934
|
+
const indexesCount = Object.values(res.tables).map((it) => Object.keys(it.indexes)).flat().length.toFixed(0);
|
|
20935
|
+
const fksCount = Object.values(res.tables).map((it) => Object.keys(it.foreignKeys)).flat().length.toFixed(0);
|
|
20936
|
+
const enumsCount = Object.keys(res.enums).length.toFixed(0);
|
|
20937
|
+
const width = Math.max.apply(
|
|
20938
|
+
null,
|
|
20939
|
+
[tablesCount, columnsCount, indexesCount, fksCount, enumsCount].map(
|
|
20940
|
+
(it) => it.length
|
|
20941
|
+
)
|
|
20942
|
+
);
|
|
20943
|
+
let info2 = "";
|
|
20944
|
+
info2 += `[${source_default.green("\u2713")}] ${source_default.bold(tablesCount.padEnd(width))} tables fetched
|
|
20945
|
+
`;
|
|
20946
|
+
info2 += `[${source_default.green("\u2713")}] ${source_default.bold(columnsCount.padEnd(width))} columns fetched
|
|
20947
|
+
`;
|
|
20948
|
+
info2 += `[${source_default.green("\u2713")}] ${source_default.bold(enumsCount.padEnd(width))} enums fetched
|
|
20949
|
+
`;
|
|
20950
|
+
info2 += `[${source_default.green("\u2713")}] ${source_default.bold(indexesCount.padEnd(width))} indexes fetched
|
|
20951
|
+
`;
|
|
20952
|
+
info2 += `[${source_default.green("\u2713")}] ${source_default.bold(fksCount.padEnd(width))} foreign keys fetched
|
|
20953
|
+
`;
|
|
20954
|
+
(0, import_hanji4.render)(info2);
|
|
20955
|
+
const schema5 = { id: originUUID, prevId: "", ...res };
|
|
20956
|
+
const ts = schemaToTypeScript(schema5);
|
|
20957
|
+
return { schema: schema5, ts };
|
|
20958
|
+
};
|
|
20959
|
+
|
|
20960
|
+
// src/cli/index.ts
|
|
20286
20961
|
var import_path4 = __toESM(require("path"));
|
|
20962
|
+
var dialect7 = enumType(["pg", "sqlite", "mysql"]);
|
|
20287
20963
|
var configSchema = objectType({
|
|
20288
20964
|
schema: stringType(),
|
|
20289
|
-
dialect:
|
|
20965
|
+
dialect: dialect7,
|
|
20290
20966
|
out: stringType().default("drizzle")
|
|
20291
20967
|
}).strict();
|
|
20292
20968
|
var optionsSchema = objectType({
|
|
@@ -20311,7 +20987,7 @@ var migrationCommand = new Command("generate").alias("migrate").option(
|
|
|
20311
20987
|
await prepareAndMigrate(result);
|
|
20312
20988
|
});
|
|
20313
20989
|
var prepareGenerateConfig = (options) => {
|
|
20314
|
-
const { schema: schema5, out, dialect:
|
|
20990
|
+
const { schema: schema5, out, dialect: dialect8, config } = options;
|
|
20315
20991
|
if (!(schema5 || out)) {
|
|
20316
20992
|
const path3 = config != null ? config : "drizzle.config.json";
|
|
20317
20993
|
const drizzleConfig = JSON.parse(
|
|
@@ -20319,30 +20995,55 @@ var prepareGenerateConfig = (options) => {
|
|
|
20319
20995
|
);
|
|
20320
20996
|
return drizzleConfig;
|
|
20321
20997
|
}
|
|
20322
|
-
if (!schema5 || !
|
|
20998
|
+
if (!schema5 || !dialect8) {
|
|
20323
20999
|
return new Error(`'schema' and 'dialect' param must be set`);
|
|
20324
21000
|
}
|
|
20325
|
-
return configSchema.parse({ schema: schema5, out, dialect:
|
|
21001
|
+
return configSchema.parse({ schema: schema5, out, dialect: dialect8 });
|
|
20326
21002
|
};
|
|
20327
21003
|
var checkSchema = objectType({
|
|
20328
21004
|
dialect: stringType().default(""),
|
|
20329
21005
|
out: stringType().default("drizzle")
|
|
20330
21006
|
}).strict();
|
|
20331
21007
|
var checkCommand = new Command("check").option("--out <out>", `Output folder, 'drizzle' by default`).option("--dialect <dialect>", "One of pg|mysql|sqlite, pg by default").action((options) => {
|
|
20332
|
-
const { out, dialect:
|
|
20333
|
-
if (!out || !
|
|
20334
|
-
(0,
|
|
21008
|
+
const { out, dialect: dialect8 } = checkSchema.parse(options);
|
|
21009
|
+
if (!out || !dialect8) {
|
|
21010
|
+
(0, import_hanji5.render)(error(`'out' folder and 'dialect' params must be set`));
|
|
20335
21011
|
process.exit(0);
|
|
20336
21012
|
}
|
|
20337
|
-
checkHandler({ out, dialect:
|
|
21013
|
+
checkHandler({ out, dialect: dialect8 });
|
|
20338
21014
|
});
|
|
20339
21015
|
var upCommand = new Command("up").option("--out <out>", `Output folder, 'drizzle' by default`).option("--dialect <dialect>", "One of pg|mysql|sqlite, pg by default").action((options) => {
|
|
20340
|
-
const { out, dialect:
|
|
20341
|
-
if (!out || !
|
|
20342
|
-
(0,
|
|
21016
|
+
const { out, dialect: dialect8 } = checkSchema.parse(options);
|
|
21017
|
+
if (!out || !dialect8) {
|
|
21018
|
+
(0, import_hanji5.render)(error(`'out' folder and 'dialect' params must be set`));
|
|
20343
21019
|
process.exit(0);
|
|
20344
21020
|
}
|
|
20345
|
-
upHandler({ out, dialect:
|
|
21021
|
+
upHandler({ out, dialect: dialect8 });
|
|
21022
|
+
});
|
|
21023
|
+
var pt1 = objectType({
|
|
21024
|
+
out: stringType()
|
|
21025
|
+
});
|
|
21026
|
+
var pgIntrospectConfig = unionType([
|
|
21027
|
+
pt1.extend(PgConfig2.shape),
|
|
21028
|
+
pt1.extend(PgConfig1.shape)
|
|
21029
|
+
]);
|
|
21030
|
+
var introspectPgCommand = new Command("introspect:pg").option("--out <out>", `Result folder`).option("--connectionString <connectionString>", "Postgres connection string").option("--host <host>", "Postgres host").option("--port <port>", "Postgres port").option("--user <user>", "Postgres user").option("--password <password>", "Postgres password").option("--database <database>", "Postgres database name").option("--ssl <ssl>", "Postgres ssl").action(async (options) => {
|
|
21031
|
+
const res = pgIntrospectConfig.safeParse(options);
|
|
21032
|
+
if (!res.success) {
|
|
21033
|
+
console.log("Missing required params");
|
|
21034
|
+
return;
|
|
21035
|
+
}
|
|
21036
|
+
const folder = res.data.out;
|
|
21037
|
+
if (!(0, import_fs6.existsSync)(folder)) {
|
|
21038
|
+
(0, import_fs6.mkdirSync)(folder);
|
|
21039
|
+
}
|
|
21040
|
+
const { schema: schema5, ts } = await pgIntrospect(res.data);
|
|
21041
|
+
const snapshotFile = import_path4.default.join(folder, "snapshot.json");
|
|
21042
|
+
const schemaFile = import_path4.default.join(folder, "schema.ts");
|
|
21043
|
+
(0, import_fs6.writeFileSync)(snapshotFile, JSON.stringify(schema5));
|
|
21044
|
+
(0, import_fs6.writeFileSync)(schemaFile, ts);
|
|
21045
|
+
(0, import_hanji5.render)(`[${source_default.green("\u2713")}] You schema file is ready \u279C ${source_default.bold.underline.blue(schemaFile)} \u{1F680}`);
|
|
21046
|
+
process.exit(1);
|
|
20346
21047
|
});
|
|
20347
21048
|
program.addCommand(migrationCommand);
|
|
20348
21049
|
program.addCommand(checkCommand);
|