bun-query-builder 0.2.16 → 0.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/introspect-db.d.ts +5 -0
- package/dist/bin/cli.js +69 -4
- package/dist/src/index.js +68 -3
- package/package.json +1 -1
|
@@ -13,6 +13,11 @@ export declare function generateModelSource(table: string, columns: Introspected
|
|
|
13
13
|
export declare function introspectDatabase(opts?: { tables?: string[] }): Promise<IntrospectedModel[]>;
|
|
14
14
|
/** Map a raw SQL column type back to a normalized model column type. */
|
|
15
15
|
export declare function sqlTypeToNormalized(rawType: string, dialect: SupportedDialect, ctx?: { enumValues?: string[] }): NormalizedColumnType;
|
|
16
|
+
/**
|
|
17
|
+
* Normalize a MySQL information_schema column without discarding physical
|
|
18
|
+
* details carried only by COLUMN_TYPE (for example TINYINT(1) and VARCHAR(n)).
|
|
19
|
+
*/
|
|
20
|
+
export declare function mysqlColumnType(dataType: unknown, columnType: unknown, enumValues?: string[]): NormalizedColumnType;
|
|
16
21
|
/**
|
|
17
22
|
* The plan type for one Postgres column, given what the catalogue knows.
|
|
18
23
|
*
|
package/dist/bin/cli.js
CHANGED
|
@@ -17764,6 +17764,9 @@ function sqlTypeToNormalized(rawType, dialect, ctx) {
|
|
|
17764
17764
|
return "enum";
|
|
17765
17765
|
return "string";
|
|
17766
17766
|
}
|
|
17767
|
+
function mysqlColumnType(dataType, columnType, enumValues) {
|
|
17768
|
+
return sqlTypeToNormalized(String(columnType || dataType || ""), "mysql", { enumValues });
|
|
17769
|
+
}
|
|
17767
17770
|
function asAction(raw2) {
|
|
17768
17771
|
const v = String(raw2 ?? "").toLowerCase().trim();
|
|
17769
17772
|
if (v === "cascade" || v === "restrict" || v === "set null")
|
|
@@ -17959,7 +17962,7 @@ async function buildMysqlTable(qb, table) {
|
|
|
17959
17962
|
const hasDefault = rawDefault != null;
|
|
17960
17963
|
return {
|
|
17961
17964
|
name,
|
|
17962
|
-
type:
|
|
17965
|
+
type: mysqlColumnType(r.data_type ?? r.DATA_TYPE, columnType, enumValues),
|
|
17963
17966
|
isPrimaryKey,
|
|
17964
17967
|
isUnique: uniqueColumns.has(name),
|
|
17965
17968
|
isNullable: isPrimaryKey ? false : String(r.is_nullable ?? r.IS_NULLABLE).toUpperCase() === "YES",
|
|
@@ -18207,7 +18210,42 @@ class MySQLDriver {
|
|
|
18207
18210
|
sql += ` ON DELETE ${onDelete.toUpperCase()}`;
|
|
18208
18211
|
if (onUpdate)
|
|
18209
18212
|
sql += ` ON UPDATE ${onUpdate.toUpperCase()}`;
|
|
18210
|
-
return `${
|
|
18213
|
+
return `${this.dropForeignKeysOn(tableName, columnName)}
|
|
18214
|
+
${sql};`;
|
|
18215
|
+
}
|
|
18216
|
+
dropForeignKeysOn(tableName, columnName) {
|
|
18217
|
+
const table = this.quoteLiteral(tableName);
|
|
18218
|
+
const column = this.quoteLiteral(columnName);
|
|
18219
|
+
return `SET @drop_fks := (
|
|
18220
|
+
SELECT CONCAT(
|
|
18221
|
+
'ALTER TABLE \`', ${table}, '\` DROP FOREIGN KEY \`',
|
|
18222
|
+
GROUP_CONCAT(kcu.CONSTRAINT_NAME SEPARATOR '\`, DROP FOREIGN KEY \`'),
|
|
18223
|
+
'\`'
|
|
18224
|
+
)
|
|
18225
|
+
FROM information_schema.KEY_COLUMN_USAGE kcu
|
|
18226
|
+
WHERE kcu.TABLE_SCHEMA = DATABASE()
|
|
18227
|
+
AND kcu.TABLE_NAME = ${table}
|
|
18228
|
+
AND kcu.COLUMN_NAME = ${column}
|
|
18229
|
+
AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
|
|
18230
|
+
AND kcu.CONSTRAINT_NAME IN (
|
|
18231
|
+
SELECT single.CONSTRAINT_NAME FROM (
|
|
18232
|
+
SELECT inner_kcu.CONSTRAINT_NAME
|
|
18233
|
+
FROM information_schema.KEY_COLUMN_USAGE inner_kcu
|
|
18234
|
+
WHERE inner_kcu.TABLE_SCHEMA = DATABASE()
|
|
18235
|
+
AND inner_kcu.TABLE_NAME = ${table}
|
|
18236
|
+
AND inner_kcu.REFERENCED_TABLE_NAME IS NOT NULL
|
|
18237
|
+
GROUP BY inner_kcu.CONSTRAINT_NAME
|
|
18238
|
+
HAVING COUNT(*) = 1
|
|
18239
|
+
) AS single
|
|
18240
|
+
)
|
|
18241
|
+
);
|
|
18242
|
+
SET @drop_fks := IFNULL(@drop_fks, 'SELECT 1');
|
|
18243
|
+
PREPARE drop_fks_stmt FROM @drop_fks;
|
|
18244
|
+
EXECUTE drop_fks_stmt;
|
|
18245
|
+
DEALLOCATE PREPARE drop_fks_stmt;`;
|
|
18246
|
+
}
|
|
18247
|
+
quoteLiteral(value) {
|
|
18248
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
18211
18249
|
}
|
|
18212
18250
|
addColumn(tableName, column) {
|
|
18213
18251
|
const typeSql = this.getColumnType(column);
|
|
@@ -18397,7 +18435,34 @@ class PostgresDriver {
|
|
|
18397
18435
|
sql += ` ON DELETE ${onDelete.toUpperCase()}`;
|
|
18398
18436
|
if (onUpdate)
|
|
18399
18437
|
sql += ` ON UPDATE ${onUpdate.toUpperCase()}`;
|
|
18400
|
-
return `${
|
|
18438
|
+
return `${this.dropForeignKeysOn(tableName, columnName)}
|
|
18439
|
+
${sql};`;
|
|
18440
|
+
}
|
|
18441
|
+
dropForeignKeysOn(tableName, columnName) {
|
|
18442
|
+
const table = this.quoteLiteral(tableName);
|
|
18443
|
+
const column = this.quoteLiteral(columnName);
|
|
18444
|
+
return `DO $$
|
|
18445
|
+
DECLARE existing_name text;
|
|
18446
|
+
BEGIN
|
|
18447
|
+
FOR existing_name IN
|
|
18448
|
+
SELECT con.conname
|
|
18449
|
+
FROM pg_constraint con
|
|
18450
|
+
JOIN pg_class rel ON rel.oid = con.conrelid
|
|
18451
|
+
JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
|
|
18452
|
+
WHERE con.contype = 'f'
|
|
18453
|
+
AND rel.relname = ${table}
|
|
18454
|
+
AND nsp.nspname = current_schema()
|
|
18455
|
+
AND con.conkey = ARRAY[(
|
|
18456
|
+
SELECT att.attnum FROM pg_attribute att
|
|
18457
|
+
WHERE att.attrelid = rel.oid AND att.attname = ${column} AND att.attnum > 0
|
|
18458
|
+
)]::smallint[]
|
|
18459
|
+
LOOP
|
|
18460
|
+
EXECUTE format('ALTER TABLE %I DROP CONSTRAINT %I', ${table}, existing_name);
|
|
18461
|
+
END LOOP;
|
|
18462
|
+
END $$;`;
|
|
18463
|
+
}
|
|
18464
|
+
quoteLiteral(value) {
|
|
18465
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
18401
18466
|
}
|
|
18402
18467
|
addColumn(tableName, column) {
|
|
18403
18468
|
const typeSql = this.getColumnType(column);
|
|
@@ -31562,7 +31627,7 @@ function getPrefix() {
|
|
|
31562
31627
|
}
|
|
31563
31628
|
var prefix = getPrefix();
|
|
31564
31629
|
// package.json
|
|
31565
|
-
var version2 = "0.2.
|
|
31630
|
+
var version2 = "0.2.18";
|
|
31566
31631
|
|
|
31567
31632
|
// bin/cli.ts
|
|
31568
31633
|
init_actions();
|
package/dist/src/index.js
CHANGED
|
@@ -17763,6 +17763,9 @@ function sqlTypeToNormalized(rawType, dialect, ctx) {
|
|
|
17763
17763
|
return "enum";
|
|
17764
17764
|
return "string";
|
|
17765
17765
|
}
|
|
17766
|
+
function mysqlColumnType(dataType, columnType, enumValues) {
|
|
17767
|
+
return sqlTypeToNormalized(String(columnType || dataType || ""), "mysql", { enumValues });
|
|
17768
|
+
}
|
|
17766
17769
|
function asAction(raw2) {
|
|
17767
17770
|
const v = String(raw2 ?? "").toLowerCase().trim();
|
|
17768
17771
|
if (v === "cascade" || v === "restrict" || v === "set null")
|
|
@@ -17958,7 +17961,7 @@ async function buildMysqlTable(qb, table) {
|
|
|
17958
17961
|
const hasDefault = rawDefault != null;
|
|
17959
17962
|
return {
|
|
17960
17963
|
name,
|
|
17961
|
-
type:
|
|
17964
|
+
type: mysqlColumnType(r.data_type ?? r.DATA_TYPE, columnType, enumValues),
|
|
17962
17965
|
isPrimaryKey,
|
|
17963
17966
|
isUnique: uniqueColumns.has(name),
|
|
17964
17967
|
isNullable: isPrimaryKey ? false : String(r.is_nullable ?? r.IS_NULLABLE).toUpperCase() === "YES",
|
|
@@ -18206,7 +18209,42 @@ class MySQLDriver {
|
|
|
18206
18209
|
sql += ` ON DELETE ${onDelete.toUpperCase()}`;
|
|
18207
18210
|
if (onUpdate)
|
|
18208
18211
|
sql += ` ON UPDATE ${onUpdate.toUpperCase()}`;
|
|
18209
|
-
return `${
|
|
18212
|
+
return `${this.dropForeignKeysOn(tableName, columnName)}
|
|
18213
|
+
${sql};`;
|
|
18214
|
+
}
|
|
18215
|
+
dropForeignKeysOn(tableName, columnName) {
|
|
18216
|
+
const table = this.quoteLiteral(tableName);
|
|
18217
|
+
const column = this.quoteLiteral(columnName);
|
|
18218
|
+
return `SET @drop_fks := (
|
|
18219
|
+
SELECT CONCAT(
|
|
18220
|
+
'ALTER TABLE \`', ${table}, '\` DROP FOREIGN KEY \`',
|
|
18221
|
+
GROUP_CONCAT(kcu.CONSTRAINT_NAME SEPARATOR '\`, DROP FOREIGN KEY \`'),
|
|
18222
|
+
'\`'
|
|
18223
|
+
)
|
|
18224
|
+
FROM information_schema.KEY_COLUMN_USAGE kcu
|
|
18225
|
+
WHERE kcu.TABLE_SCHEMA = DATABASE()
|
|
18226
|
+
AND kcu.TABLE_NAME = ${table}
|
|
18227
|
+
AND kcu.COLUMN_NAME = ${column}
|
|
18228
|
+
AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
|
|
18229
|
+
AND kcu.CONSTRAINT_NAME IN (
|
|
18230
|
+
SELECT single.CONSTRAINT_NAME FROM (
|
|
18231
|
+
SELECT inner_kcu.CONSTRAINT_NAME
|
|
18232
|
+
FROM information_schema.KEY_COLUMN_USAGE inner_kcu
|
|
18233
|
+
WHERE inner_kcu.TABLE_SCHEMA = DATABASE()
|
|
18234
|
+
AND inner_kcu.TABLE_NAME = ${table}
|
|
18235
|
+
AND inner_kcu.REFERENCED_TABLE_NAME IS NOT NULL
|
|
18236
|
+
GROUP BY inner_kcu.CONSTRAINT_NAME
|
|
18237
|
+
HAVING COUNT(*) = 1
|
|
18238
|
+
) AS single
|
|
18239
|
+
)
|
|
18240
|
+
);
|
|
18241
|
+
SET @drop_fks := IFNULL(@drop_fks, 'SELECT 1');
|
|
18242
|
+
PREPARE drop_fks_stmt FROM @drop_fks;
|
|
18243
|
+
EXECUTE drop_fks_stmt;
|
|
18244
|
+
DEALLOCATE PREPARE drop_fks_stmt;`;
|
|
18245
|
+
}
|
|
18246
|
+
quoteLiteral(value) {
|
|
18247
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
18210
18248
|
}
|
|
18211
18249
|
addColumn(tableName, column) {
|
|
18212
18250
|
const typeSql = this.getColumnType(column);
|
|
@@ -18396,7 +18434,34 @@ class PostgresDriver {
|
|
|
18396
18434
|
sql += ` ON DELETE ${onDelete.toUpperCase()}`;
|
|
18397
18435
|
if (onUpdate)
|
|
18398
18436
|
sql += ` ON UPDATE ${onUpdate.toUpperCase()}`;
|
|
18399
|
-
return `${
|
|
18437
|
+
return `${this.dropForeignKeysOn(tableName, columnName)}
|
|
18438
|
+
${sql};`;
|
|
18439
|
+
}
|
|
18440
|
+
dropForeignKeysOn(tableName, columnName) {
|
|
18441
|
+
const table = this.quoteLiteral(tableName);
|
|
18442
|
+
const column = this.quoteLiteral(columnName);
|
|
18443
|
+
return `DO $$
|
|
18444
|
+
DECLARE existing_name text;
|
|
18445
|
+
BEGIN
|
|
18446
|
+
FOR existing_name IN
|
|
18447
|
+
SELECT con.conname
|
|
18448
|
+
FROM pg_constraint con
|
|
18449
|
+
JOIN pg_class rel ON rel.oid = con.conrelid
|
|
18450
|
+
JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
|
|
18451
|
+
WHERE con.contype = 'f'
|
|
18452
|
+
AND rel.relname = ${table}
|
|
18453
|
+
AND nsp.nspname = current_schema()
|
|
18454
|
+
AND con.conkey = ARRAY[(
|
|
18455
|
+
SELECT att.attnum FROM pg_attribute att
|
|
18456
|
+
WHERE att.attrelid = rel.oid AND att.attname = ${column} AND att.attnum > 0
|
|
18457
|
+
)]::smallint[]
|
|
18458
|
+
LOOP
|
|
18459
|
+
EXECUTE format('ALTER TABLE %I DROP CONSTRAINT %I', ${table}, existing_name);
|
|
18460
|
+
END LOOP;
|
|
18461
|
+
END $$;`;
|
|
18462
|
+
}
|
|
18463
|
+
quoteLiteral(value) {
|
|
18464
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
18400
18465
|
}
|
|
18401
18466
|
addColumn(tableName, column) {
|
|
18402
18467
|
const typeSql = this.getColumnType(column);
|
package/package.json
CHANGED