orasql-gen 0.1.0
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/.orasql.example +12 -0
- package/LICENSE +21 -0
- package/README.md +320 -0
- package/dist/commands/gen.d.ts +3 -0
- package/dist/commands/gen.d.ts.map +1 -0
- package/dist/commands/gen.js +281 -0
- package/dist/commands/gen.js.map +1 -0
- package/dist/commands/history.d.ts +3 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +65 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/inspect.d.ts +3 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +80 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/profile.d.ts +3 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +86 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/schemas.d.ts +3 -0
- package/dist/commands/schemas.d.ts.map +1 -0
- package/dist/commands/schemas.js +62 -0
- package/dist/commands/schemas.js.map +1 -0
- package/dist/core/connection.d.ts +6 -0
- package/dist/core/connection.d.ts.map +1 -0
- package/dist/core/connection.js +54 -0
- package/dist/core/connection.js.map +1 -0
- package/dist/core/inspector.d.ts +27 -0
- package/dist/core/inspector.d.ts.map +1 -0
- package/dist/core/inspector.js +135 -0
- package/dist/core/inspector.js.map +1 -0
- package/dist/generators/insert.d.ts +3 -0
- package/dist/generators/insert.d.ts.map +1 -0
- package/dist/generators/insert.js +51 -0
- package/dist/generators/insert.js.map +1 -0
- package/dist/generators/interactive.d.ts +3 -0
- package/dist/generators/interactive.d.ts.map +1 -0
- package/dist/generators/interactive.js +118 -0
- package/dist/generators/interactive.js.map +1 -0
- package/dist/generators/select.d.ts +3 -0
- package/dist/generators/select.d.ts.map +1 -0
- package/dist/generators/select.js +63 -0
- package/dist/generators/select.js.map +1 -0
- package/dist/generators/update.d.ts +3 -0
- package/dist/generators/update.d.ts.map +1 -0
- package/dist/generators/update.js +39 -0
- package/dist/generators/update.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +13 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/config.d.ts +12 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +42 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/history.d.ts +11 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js +51 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/profiles.d.ts +11 -0
- package/dist/utils/profiles.d.ts.map +1 -0
- package/dist/utils/profiles.js +47 -0
- package/dist/utils/profiles.js.map +1 -0
- package/dist/utils/topology.d.ts +8 -0
- package/dist/utils/topology.d.ts.map +1 -0
- package/dist/utils/topology.js +63 -0
- package/dist/utils/topology.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerHistory = registerHistory;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const history_1 = require("../utils/history");
|
|
9
|
+
const clipboard_1 = require("../utils/clipboard");
|
|
10
|
+
function registerHistory(program) {
|
|
11
|
+
program
|
|
12
|
+
.command('history')
|
|
13
|
+
.description('Muestra el historial de queries generados')
|
|
14
|
+
.option('-n, --last <n>', 'Mostrar los últimos N queries', '10')
|
|
15
|
+
.option('--clear', 'Limpiar el historial')
|
|
16
|
+
.option('--get <id>', 'Mostrar el SQL de una entrada específica por ID')
|
|
17
|
+
.option('--clipboard <id>', 'Copiar el SQL de una entrada al portapapeles')
|
|
18
|
+
.action((options) => {
|
|
19
|
+
if (options.clear) {
|
|
20
|
+
(0, history_1.clearHistory)();
|
|
21
|
+
console.log(chalk_1.default.green('\n✓ Historial limpiado.\n'));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const entries = (0, history_1.readHistory)();
|
|
25
|
+
if (options.clipboard) {
|
|
26
|
+
const id = parseInt(options.clipboard);
|
|
27
|
+
const entry = entries.find((e) => e.id === id);
|
|
28
|
+
if (!entry) {
|
|
29
|
+
console.error(chalk_1.default.red(`\n✗ No se encontró la entrada con ID ${id}.\n`));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
(0, clipboard_1.copyToClipboard)(entry.sql);
|
|
33
|
+
console.log(chalk_1.default.green(`\n✓ SQL del ID ${id} copiado al portapapeles.\n`));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (options.get) {
|
|
37
|
+
const id = parseInt(options.get);
|
|
38
|
+
const entry = entries.find((e) => e.id === id);
|
|
39
|
+
if (!entry) {
|
|
40
|
+
console.error(chalk_1.default.red(`\n✗ No se encontró la entrada con ID ${id}.\n`));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
console.log(chalk_1.default.bold.white(`\n[#${entry.id}] ${entry.command} — ${entry.table} — ${entry.timestamp}\n`));
|
|
44
|
+
console.log(chalk_1.default.gray('─'.repeat(80)));
|
|
45
|
+
console.log(chalk_1.default.yellow(entry.sql));
|
|
46
|
+
console.log(chalk_1.default.gray('─'.repeat(80) + '\n'));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (entries.length === 0) {
|
|
50
|
+
console.log(chalk_1.default.gray('\nNo hay historial de queries todavía.\n'));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const n = parseInt(options.last);
|
|
54
|
+
const recent = entries.slice(-n).reverse();
|
|
55
|
+
console.log(chalk_1.default.bold.white(`\nÚltimos ${recent.length} queries generados:\n`));
|
|
56
|
+
console.log(chalk_1.default.bold(`${'ID'.padEnd(6)}${'Comando'.padEnd(15)}${'Tabla'.padEnd(25)}Fecha`));
|
|
57
|
+
console.log(chalk_1.default.gray('─'.repeat(70)));
|
|
58
|
+
for (const e of recent) {
|
|
59
|
+
const date = new Date(e.timestamp).toLocaleString('es-MX');
|
|
60
|
+
console.log(`${chalk_1.default.yellow(`#${e.id}`.padEnd(6))}${chalk_1.default.cyan(e.command.padEnd(15))}${chalk_1.default.white(e.table.padEnd(25))}${chalk_1.default.gray(date)}`);
|
|
61
|
+
}
|
|
62
|
+
console.log(chalk_1.default.gray(`\nTip: usa --get <ID> para ver el SQL completo, --clipboard <ID> para copiar.\n`));
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmDtD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerInspect = registerInspect;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const config_1 = require("../utils/config");
|
|
9
|
+
const connection_1 = require("../core/connection");
|
|
10
|
+
const inspector_1 = require("../core/inspector");
|
|
11
|
+
function registerInspect(program) {
|
|
12
|
+
program
|
|
13
|
+
.command('inspect <tabla>')
|
|
14
|
+
.description('Muestra la estructura de una tabla Oracle (columnas, tipos, PKs, FKs, secuencias)')
|
|
15
|
+
.option('-s, --schema <schema>', 'Schema a usar (sobreescribe el del archivo .orasql)')
|
|
16
|
+
.action(async (tabla, options) => {
|
|
17
|
+
var _a;
|
|
18
|
+
let connection;
|
|
19
|
+
try {
|
|
20
|
+
const config = (0, config_1.loadConfig)();
|
|
21
|
+
const schema = (_a = options.schema) !== null && _a !== void 0 ? _a : config.schema;
|
|
22
|
+
console.log(chalk_1.default.cyan(`\nConectando a Oracle ${config.host}:${config.port}/${config.sid}...`));
|
|
23
|
+
connection = await (0, connection_1.getConnection)(config);
|
|
24
|
+
console.log(chalk_1.default.green('✓ Conectado\n'));
|
|
25
|
+
const tableInfo = await (0, inspector_1.inspectTable)(connection, tabla, schema);
|
|
26
|
+
// Header
|
|
27
|
+
console.log(chalk_1.default.bold.white(`Tabla: ${chalk_1.default.yellow(tableInfo.schema)}.${chalk_1.default.yellow(tableInfo.name)}`));
|
|
28
|
+
console.log(chalk_1.default.gray(`${'─'.repeat(80)}`));
|
|
29
|
+
// Column headers
|
|
30
|
+
const col1 = 'Columna'.padEnd(30);
|
|
31
|
+
const col2 = 'Tipo'.padEnd(22);
|
|
32
|
+
const col3 = 'Null'.padEnd(6);
|
|
33
|
+
const col4 = 'Flags';
|
|
34
|
+
console.log(chalk_1.default.bold(`${col1}${col2}${col3}${col4}`));
|
|
35
|
+
console.log(chalk_1.default.gray(`${'─'.repeat(80)}`));
|
|
36
|
+
// Rows
|
|
37
|
+
for (const col of tableInfo.columns) {
|
|
38
|
+
const flags = buildFlags(col);
|
|
39
|
+
const typeStr = formatType(col);
|
|
40
|
+
const nullStr = col.nullable ? 'YES' : 'NO';
|
|
41
|
+
const name = col.name.padEnd(30);
|
|
42
|
+
const type = typeStr.padEnd(22);
|
|
43
|
+
const nullable = (col.nullable ? chalk_1.default.gray(nullStr) : chalk_1.default.red(nullStr)).padEnd(15);
|
|
44
|
+
console.log(`${chalk_1.default.white(name)}${chalk_1.default.cyan(type)}${nullable}${flags}`);
|
|
45
|
+
}
|
|
46
|
+
console.log(chalk_1.default.gray(`${'─'.repeat(80)}`));
|
|
47
|
+
console.log(chalk_1.default.gray(`Total: ${tableInfo.columns.length} columnas\n`));
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.error(chalk_1.default.red(`\n✗ Error: ${err.message}\n`));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
if (connection)
|
|
55
|
+
await (0, connection_1.closeConnection)(connection);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function formatType(col) {
|
|
60
|
+
if (col.dataType === 'NUMBER' && col.dataPrecision !== null) {
|
|
61
|
+
return `NUMBER(${col.dataPrecision}${col.dataScale ? `,${col.dataScale}` : ''})`;
|
|
62
|
+
}
|
|
63
|
+
if (['VARCHAR2', 'CHAR', 'NVARCHAR2'].includes(col.dataType) && col.dataLength) {
|
|
64
|
+
return `${col.dataType}(${col.dataLength})`;
|
|
65
|
+
}
|
|
66
|
+
return col.dataType;
|
|
67
|
+
}
|
|
68
|
+
function buildFlags(col) {
|
|
69
|
+
const flags = [];
|
|
70
|
+
if (col.isPrimaryKey)
|
|
71
|
+
flags.push(chalk_1.default.yellow('[PK]'));
|
|
72
|
+
if (col.isForeignKey)
|
|
73
|
+
flags.push(chalk_1.default.blue(`[FK→${col.referencedTable}]`));
|
|
74
|
+
if (col.sequence)
|
|
75
|
+
flags.push(chalk_1.default.magenta(`[SEQ:${col.sequence}]`));
|
|
76
|
+
if (col.dataDefault && !col.sequence)
|
|
77
|
+
flags.push(chalk_1.default.gray(`[DEFAULT:${col.dataDefault.trim()}]`));
|
|
78
|
+
return flags.join(' ');
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=inspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6EtD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerProfile = registerProfile;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const config_1 = require("../utils/config");
|
|
11
|
+
const profiles_1 = require("../utils/profiles");
|
|
12
|
+
const ORASQL_FILE = path_1.default.resolve(process.cwd(), '.orasql');
|
|
13
|
+
function registerProfile(program) {
|
|
14
|
+
const profile = program
|
|
15
|
+
.command('profile')
|
|
16
|
+
.description('Gestiona perfiles de conexión (DEV, QA, PROD, etc.)');
|
|
17
|
+
// profile save <nombre>
|
|
18
|
+
profile
|
|
19
|
+
.command('save <nombre>')
|
|
20
|
+
.description('Guarda la configuración actual de .orasql como un perfil')
|
|
21
|
+
.action((nombre) => {
|
|
22
|
+
try {
|
|
23
|
+
const config = (0, config_1.loadConfig)();
|
|
24
|
+
(0, profiles_1.saveProfile)(nombre.toUpperCase(), config);
|
|
25
|
+
console.log(chalk_1.default.green(`\n✓ Perfil "${nombre.toUpperCase()}" guardado.\n`));
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
console.error(chalk_1.default.red(`\n✗ Error: ${err.message}\n`));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
// profile use <nombre>
|
|
33
|
+
profile
|
|
34
|
+
.command('use <nombre>')
|
|
35
|
+
.description('Carga un perfil guardado y lo aplica al .orasql actual')
|
|
36
|
+
.action((nombre) => {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
const found = (0, profiles_1.getProfile)(nombre.toUpperCase());
|
|
39
|
+
if (!found) {
|
|
40
|
+
console.error(chalk_1.default.red(`\n✗ Perfil "${nombre.toUpperCase()}" no encontrado.\n`));
|
|
41
|
+
console.log(chalk_1.default.gray('Usa "orasql-gen profile list" para ver los perfiles disponibles.\n'));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
fs_1.default.writeFileSync(ORASQL_FILE, JSON.stringify(found.config, null, 2), 'utf-8');
|
|
45
|
+
const id = (_b = (_a = found.config.serviceName) !== null && _a !== void 0 ? _a : found.config.sid) !== null && _b !== void 0 ? _b : '';
|
|
46
|
+
console.log(chalk_1.default.green(`\n✓ Perfil "${found.name}" activado.`));
|
|
47
|
+
console.log(chalk_1.default.gray(` Host: ${found.config.host}:${found.config.port}/${id}`));
|
|
48
|
+
console.log(chalk_1.default.gray(` Schema: ${found.config.schema}\n`));
|
|
49
|
+
});
|
|
50
|
+
// profile list
|
|
51
|
+
profile
|
|
52
|
+
.command('list')
|
|
53
|
+
.description('Lista todos los perfiles guardados')
|
|
54
|
+
.action(() => {
|
|
55
|
+
var _a, _b;
|
|
56
|
+
const profiles = (0, profiles_1.readProfiles)();
|
|
57
|
+
if (profiles.length === 0) {
|
|
58
|
+
console.log(chalk_1.default.gray('\nNo hay perfiles guardados todavía.\n'));
|
|
59
|
+
console.log(chalk_1.default.gray('Usa "orasql-gen profile save <nombre>" para guardar uno.\n'));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
console.log(chalk_1.default.bold.white('\nPerfiles de conexión guardados:\n'));
|
|
63
|
+
console.log(chalk_1.default.bold(`${'Nombre'.padEnd(15)}${'Host'.padEnd(30)}${'Schema'.padEnd(20)}Guardado`));
|
|
64
|
+
console.log(chalk_1.default.gray('─'.repeat(80)));
|
|
65
|
+
for (const p of profiles) {
|
|
66
|
+
const id = (_b = (_a = p.config.serviceName) !== null && _a !== void 0 ? _a : p.config.sid) !== null && _b !== void 0 ? _b : '';
|
|
67
|
+
const host = `${p.config.host}:${p.config.port}/${id}`;
|
|
68
|
+
const date = new Date(p.savedAt).toLocaleDateString('es-MX');
|
|
69
|
+
console.log(`${chalk_1.default.yellow(p.name.padEnd(15))}${chalk_1.default.cyan(host.padEnd(30))}${chalk_1.default.white(p.config.schema.padEnd(20))}${chalk_1.default.gray(date)}`);
|
|
70
|
+
}
|
|
71
|
+
console.log(chalk_1.default.gray('\nUsa "orasql-gen profile use <nombre>" para activar un perfil.\n'));
|
|
72
|
+
});
|
|
73
|
+
// profile delete <nombre>
|
|
74
|
+
profile
|
|
75
|
+
.command('delete <nombre>')
|
|
76
|
+
.description('Elimina un perfil guardado')
|
|
77
|
+
.action((nombre) => {
|
|
78
|
+
const deleted = (0, profiles_1.deleteProfile)(nombre.toUpperCase());
|
|
79
|
+
if (!deleted) {
|
|
80
|
+
console.error(chalk_1.default.red(`\n✗ Perfil "${nombre.toUpperCase()}" no encontrado.\n`));
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
console.log(chalk_1.default.green(`\n✓ Perfil "${nombre.toUpperCase()}" eliminado.\n`));
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/commands/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuDtD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerSchemas = registerSchemas;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const config_1 = require("../utils/config");
|
|
9
|
+
const connection_1 = require("../core/connection");
|
|
10
|
+
const oracledb_1 = __importDefault(require("oracledb"));
|
|
11
|
+
function registerSchemas(program) {
|
|
12
|
+
program
|
|
13
|
+
.command('schemas')
|
|
14
|
+
.description('Lista los schemas disponibles y busca en cuál schema está una tabla')
|
|
15
|
+
.option('-t, --tabla <tabla>', 'Buscar en qué schema existe esta tabla')
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
var _a;
|
|
18
|
+
let connection;
|
|
19
|
+
try {
|
|
20
|
+
const config = (0, config_1.loadConfig)();
|
|
21
|
+
connection = await (0, connection_1.getConnection)(config);
|
|
22
|
+
if (options.tabla) {
|
|
23
|
+
// Buscar en qué schema está la tabla
|
|
24
|
+
const upperTabla = options.tabla.toUpperCase();
|
|
25
|
+
const result = await connection.execute(`SELECT OWNER, TABLE_NAME, NUM_ROWS
|
|
26
|
+
FROM ALL_TABLES
|
|
27
|
+
WHERE TABLE_NAME = :tbl
|
|
28
|
+
ORDER BY OWNER`, { tbl: upperTabla }, { outFormat: oracledb_1.default.OUT_FORMAT_OBJECT });
|
|
29
|
+
if (!result.rows || result.rows.length === 0) {
|
|
30
|
+
console.log(chalk_1.default.red(`\n✗ Tabla "${upperTabla}" no encontrada en ningún schema accesible.\n`));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.log(chalk_1.default.bold.white(`\nTabla "${upperTabla}" encontrada en:\n`));
|
|
34
|
+
for (const row of result.rows) {
|
|
35
|
+
console.log(` ${chalk_1.default.yellow(row.OWNER)} ${chalk_1.default.gray(`(filas aprox: ${(_a = row.NUM_ROWS) !== null && _a !== void 0 ? _a : 'N/A'})`)}`);
|
|
36
|
+
}
|
|
37
|
+
console.log(chalk_1.default.gray(`\nUsa ese valor en "schema" dentro de tu .orasql\n`));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// Listar todos los schemas accesibles
|
|
42
|
+
const result = await connection.execute(`SELECT DISTINCT OWNER
|
|
43
|
+
FROM ALL_TABLES
|
|
44
|
+
ORDER BY OWNER`, {}, { outFormat: oracledb_1.default.OUT_FORMAT_OBJECT });
|
|
45
|
+
console.log(chalk_1.default.bold.white(`\nSchemas accesibles con tu usuario:\n`));
|
|
46
|
+
for (const row of (result.rows || [])) {
|
|
47
|
+
console.log(` ${chalk_1.default.yellow(row.OWNER)}`);
|
|
48
|
+
}
|
|
49
|
+
console.log(chalk_1.default.gray(`\nTip: usa --tabla <nombre> para encontrar en qué schema está una tabla específica\n`));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
console.error(chalk_1.default.red(`\n✗ Error: ${err.message}\n`));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
if (connection)
|
|
58
|
+
await (0, connection_1.closeConnection)(connection);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/commands/schemas.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAC1B,4CAA6C;AAC7C,mDAAoE;AACpE,wDAAgC;AAEhC,yBAAgC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;;QAC5C,IAAI,UAAU,CAAC;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;YAC5B,UAAU,GAAG,MAAM,IAAA,0BAAa,EAAC,MAAM,CAAC,CAAC;YAEzC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,qCAAqC;gBACrC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CACrC;;;4BAGgB,EAChB,EAAE,GAAG,EAAE,UAAU,EAAE,EACnB,EAAE,SAAS,EAAE,kBAAQ,CAAC,iBAAiB,EAAE,CAC1C,CAAC;gBAEF,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,UAAU,+CAA+C,CAAC,CAAC,CAAC;gBAClG,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,UAAU,oBAAoB,CAAC,CAAC,CAAC;oBAC1E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAa,EAAE,CAAC;wBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,iBAAiB,MAAA,GAAG,CAAC,QAAQ,mCAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;oBACxG,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,sCAAsC;gBACtC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CACrC;;4BAEgB,EAChB,EAAE,EACF,EAAE,SAAS,EAAE,kBAAQ,CAAC,iBAAiB,EAAE,CAC1C,CAAC;gBAEF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBACxE,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAU,EAAE,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC9C,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC,CAAC;YAClH,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;gBAAS,CAAC;YACT,IAAI,UAAU;gBAAE,MAAM,IAAA,4BAAe,EAAC,UAAU,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import oracledb from 'oracledb';
|
|
2
|
+
import { OraConfig } from '../utils/config';
|
|
3
|
+
export type Connection = oracledb.Connection;
|
|
4
|
+
export declare function getConnection(config: OraConfig): Promise<Connection>;
|
|
5
|
+
export declare function closeConnection(connection: Connection): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/core/connection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;AAkB7C,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAqB1E;AAED,wBAAsB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getConnection = getConnection;
|
|
7
|
+
exports.closeConnection = closeConnection;
|
|
8
|
+
const oracledb_1 = __importDefault(require("oracledb"));
|
|
9
|
+
let thickModeInitialized = false;
|
|
10
|
+
function enableThickMode(libDir) {
|
|
11
|
+
if (thickModeInitialized)
|
|
12
|
+
return;
|
|
13
|
+
try {
|
|
14
|
+
oracledb_1.default.initOracleClient(libDir ? { libDir } : undefined);
|
|
15
|
+
thickModeInitialized = true;
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
throw new Error(`No se pudo inicializar Oracle Instant Client.\n` +
|
|
19
|
+
`Verifica que la ruta "instantClientDir" en .orasql sea correcta.\n` +
|
|
20
|
+
`Detalle: ${err.message}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function getConnection(config) {
|
|
24
|
+
enableThickMode(config.instantClientDir);
|
|
25
|
+
try {
|
|
26
|
+
const connectString = config.serviceName
|
|
27
|
+
? `(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=${config.host})(PORT=${config.port}))(CONNECT_DATA=(SERVICE_NAME=${config.serviceName})))`
|
|
28
|
+
: `(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=${config.host})(PORT=${config.port}))(CONNECT_DATA=(SID=${config.sid})))`;
|
|
29
|
+
const connection = await oracledb_1.default.getConnection({
|
|
30
|
+
user: config.user,
|
|
31
|
+
password: config.password,
|
|
32
|
+
connectString,
|
|
33
|
+
});
|
|
34
|
+
return connection;
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
if (err.errorNum === 1017) {
|
|
38
|
+
throw new Error('Credenciales incorrectas. Verifica usuario y contraseña en ".orasql".');
|
|
39
|
+
}
|
|
40
|
+
if (err.errorNum === 12541 || err.code === 'ECONNREFUSED') {
|
|
41
|
+
throw new Error(`No se pudo conectar a Oracle en ${config.host}:${config.port}. Verifica que el servicio esté activo.`);
|
|
42
|
+
}
|
|
43
|
+
throw new Error(`Error de conexión: ${err.message}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function closeConnection(connection) {
|
|
47
|
+
try {
|
|
48
|
+
await connection.close();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Ignorar errores al cerrar
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/core/connection.ts"],"names":[],"mappings":";;;;;;;AAAA,wDAAgC;AAKhC,IAAI,oBAAoB,GAAG,KAAK,CAAC;AAEjC,SAAS,eAAe,CAAC,MAAe;IACtC,IAAI,oBAAoB;QAAE,OAAO;IACjC,IAAI,CAAC;QACH,kBAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3D,oBAAoB,GAAG,IAAI,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,iDAAiD;YACjD,oEAAoE;YACpE,YAAY,GAAG,CAAC,OAAO,EAAE,CAC1B,CAAC;IACJ,CAAC;AACH,CAAC;AAEM,KAAK,wBAAwB,MAAiB;IACnD,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW;YACtC,CAAC,CAAC,6CAA6C,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,IAAI,iCAAiC,MAAM,CAAC,WAAW,KAAK;YACvI,CAAC,CAAC,6CAA6C,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,IAAI,wBAAwB,MAAM,CAAC,GAAG,KAAK,CAAC;QACzH,MAAM,UAAU,GAAG,MAAM,kBAAQ,CAAC,aAAa,CAAC;YAC9C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,aAAa;SACd,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,yCAAyC,CAAC,CAAC;QAC1H,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAEM,KAAK,0BAA0B,UAAsB;IAC1D,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Connection } from './connection';
|
|
2
|
+
export interface ColumnInfo {
|
|
3
|
+
name: string;
|
|
4
|
+
dataType: string;
|
|
5
|
+
nullable: boolean;
|
|
6
|
+
dataDefault: string | null;
|
|
7
|
+
dataLength: number | null;
|
|
8
|
+
dataPrecision: number | null;
|
|
9
|
+
dataScale: number | null;
|
|
10
|
+
isPrimaryKey: boolean;
|
|
11
|
+
isForeignKey: boolean;
|
|
12
|
+
referencedTable: string | null;
|
|
13
|
+
referencedColumn: string | null;
|
|
14
|
+
sequence: string | null;
|
|
15
|
+
}
|
|
16
|
+
export interface TableInfo {
|
|
17
|
+
name: string;
|
|
18
|
+
schema: string;
|
|
19
|
+
columns: ColumnInfo[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Busca en qué schemas está disponible una tabla.
|
|
23
|
+
* Retorna lista de owners (schemas) que tienen esa tabla.
|
|
24
|
+
*/
|
|
25
|
+
export declare function findTableOwners(connection: Connection, tableName: string): Promise<string[]>;
|
|
26
|
+
export declare function inspectTable(connection: Connection, tableName: string, schema: string): Promise<TableInfo>;
|
|
27
|
+
//# sourceMappingURL=inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/core/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAOnB;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,CAAC,CA+IpB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.findTableOwners = findTableOwners;
|
|
7
|
+
exports.inspectTable = inspectTable;
|
|
8
|
+
/**
|
|
9
|
+
* Busca en qué schemas está disponible una tabla.
|
|
10
|
+
* Retorna lista de owners (schemas) que tienen esa tabla.
|
|
11
|
+
*/
|
|
12
|
+
async function findTableOwners(connection, tableName) {
|
|
13
|
+
const result = await connection.execute(`SELECT OWNER FROM ALL_TABLES WHERE TABLE_NAME = :tbl ORDER BY OWNER`, { tbl: tableName.toUpperCase() }, { outFormat: oracledb_1.default.OUT_FORMAT_OBJECT });
|
|
14
|
+
return (result.rows || []).map((r) => r.OWNER);
|
|
15
|
+
}
|
|
16
|
+
async function inspectTable(connection, tableName, schema) {
|
|
17
|
+
const upperTable = tableName.toUpperCase();
|
|
18
|
+
let upperSchema = schema.toUpperCase();
|
|
19
|
+
// 1. Obtener columnas de la tabla
|
|
20
|
+
let colResult = await connection.execute(`SELECT
|
|
21
|
+
col.COLUMN_NAME,
|
|
22
|
+
col.DATA_TYPE,
|
|
23
|
+
col.NULLABLE,
|
|
24
|
+
col.DATA_DEFAULT,
|
|
25
|
+
col.DATA_LENGTH,
|
|
26
|
+
col.DATA_PRECISION,
|
|
27
|
+
col.DATA_SCALE,
|
|
28
|
+
col.COLUMN_ID
|
|
29
|
+
FROM ALL_TAB_COLUMNS col
|
|
30
|
+
WHERE col.OWNER = :schema
|
|
31
|
+
AND col.TABLE_NAME = :tbl
|
|
32
|
+
ORDER BY col.COLUMN_ID`, { schema: upperSchema, tbl: upperTable }, { outFormat: oracledb_1.default.OUT_FORMAT_OBJECT });
|
|
33
|
+
// Auto-discovery: si no se encontró en el schema por defecto, buscar en otros schemas
|
|
34
|
+
if (!colResult.rows || colResult.rows.length === 0) {
|
|
35
|
+
const owners = await findTableOwners(connection, upperTable);
|
|
36
|
+
if (owners.length === 0) {
|
|
37
|
+
throw new Error(`Tabla "${upperTable}" no encontrada en ningún schema accesible.`);
|
|
38
|
+
}
|
|
39
|
+
if (owners.length > 1) {
|
|
40
|
+
throw new Error(`Tabla "${upperTable}" encontrada en múltiples schemas: ${owners.join(', ')}.\n` +
|
|
41
|
+
`Especifica el schema con: --schema <nombre>\n` +
|
|
42
|
+
`Ejemplo: --schema ${owners[0]}`);
|
|
43
|
+
}
|
|
44
|
+
// Encontrada en exactamente un schema → usarlo automáticamente
|
|
45
|
+
upperSchema = owners[0];
|
|
46
|
+
console.log(` ℹ️ Tabla encontrada en schema: ${upperSchema}`);
|
|
47
|
+
colResult = await connection.execute(`SELECT
|
|
48
|
+
col.COLUMN_NAME,
|
|
49
|
+
col.DATA_TYPE,
|
|
50
|
+
col.NULLABLE,
|
|
51
|
+
col.DATA_DEFAULT,
|
|
52
|
+
col.DATA_LENGTH,
|
|
53
|
+
col.DATA_PRECISION,
|
|
54
|
+
col.DATA_SCALE,
|
|
55
|
+
col.COLUMN_ID
|
|
56
|
+
FROM ALL_TAB_COLUMNS col
|
|
57
|
+
WHERE col.OWNER = :schema
|
|
58
|
+
AND col.TABLE_NAME = :tbl
|
|
59
|
+
ORDER BY col.COLUMN_ID`, { schema: upperSchema, tbl: upperTable }, { outFormat: oracledb_1.default.OUT_FORMAT_OBJECT });
|
|
60
|
+
}
|
|
61
|
+
// 2. Obtener Primary Keys
|
|
62
|
+
const pkResult = await connection.execute(`SELECT col.COLUMN_NAME
|
|
63
|
+
FROM ALL_CONSTRAINTS con
|
|
64
|
+
JOIN ALL_CONS_COLUMNS col ON con.CONSTRAINT_NAME = col.CONSTRAINT_NAME
|
|
65
|
+
AND con.OWNER = col.OWNER
|
|
66
|
+
WHERE con.OWNER = :schema
|
|
67
|
+
AND con.TABLE_NAME = :tbl
|
|
68
|
+
AND con.CONSTRAINT_TYPE = 'P'`, { schema: upperSchema, tbl: upperTable }, { outFormat: oracledb_1.default.OUT_FORMAT_OBJECT });
|
|
69
|
+
const primaryKeys = new Set((pkResult.rows || []).map((r) => r.COLUMN_NAME));
|
|
70
|
+
// 3. Obtener Foreign Keys
|
|
71
|
+
const fkResult = await connection.execute(`SELECT
|
|
72
|
+
col.COLUMN_NAME,
|
|
73
|
+
rcon.TABLE_NAME AS REF_TABLE,
|
|
74
|
+
rcol.COLUMN_NAME AS REF_COLUMN
|
|
75
|
+
FROM ALL_CONSTRAINTS con
|
|
76
|
+
JOIN ALL_CONS_COLUMNS col ON con.CONSTRAINT_NAME = col.CONSTRAINT_NAME
|
|
77
|
+
AND con.OWNER = col.OWNER
|
|
78
|
+
JOIN ALL_CONSTRAINTS rcon ON con.R_CONSTRAINT_NAME = rcon.CONSTRAINT_NAME
|
|
79
|
+
AND con.R_OWNER = rcon.OWNER
|
|
80
|
+
JOIN ALL_CONS_COLUMNS rcol ON rcon.CONSTRAINT_NAME = rcol.CONSTRAINT_NAME
|
|
81
|
+
AND rcon.OWNER = rcol.OWNER
|
|
82
|
+
WHERE con.OWNER = :schema
|
|
83
|
+
AND con.TABLE_NAME = :tbl
|
|
84
|
+
AND con.CONSTRAINT_TYPE = 'R'`, { schema: upperSchema, tbl: upperTable }, { outFormat: oracledb_1.default.OUT_FORMAT_OBJECT });
|
|
85
|
+
const foreignKeys = new Map();
|
|
86
|
+
for (const fk of (fkResult.rows || [])) {
|
|
87
|
+
foreignKeys.set(fk.COLUMN_NAME, {
|
|
88
|
+
table: fk.REF_TABLE,
|
|
89
|
+
column: fk.REF_COLUMN,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// 4. Buscar secuencias relacionadas (por convención SEQ_TABLENAME o SEQ_TABLENAME_COLUMNNAME)
|
|
93
|
+
const seqResult = await connection.execute(`SELECT SEQUENCE_NAME
|
|
94
|
+
FROM ALL_SEQUENCES
|
|
95
|
+
WHERE SEQUENCE_OWNER = :schema
|
|
96
|
+
AND (SEQUENCE_NAME LIKE :seq1 OR SEQUENCE_NAME LIKE :seq2)`, {
|
|
97
|
+
schema: upperSchema,
|
|
98
|
+
seq1: `SEQ_${upperTable}%`,
|
|
99
|
+
seq2: `%${upperTable}%SEQ%`,
|
|
100
|
+
}, { outFormat: oracledb_1.default.OUT_FORMAT_OBJECT });
|
|
101
|
+
const sequences = (seqResult.rows || []).map((r) => r.SEQUENCE_NAME);
|
|
102
|
+
// 5. Mapear columnas
|
|
103
|
+
const columns = colResult.rows.map((row) => {
|
|
104
|
+
var _a, _b;
|
|
105
|
+
const colName = row.COLUMN_NAME;
|
|
106
|
+
const fkRef = foreignKeys.get(colName);
|
|
107
|
+
const sequence = findSequenceForColumn(sequences, upperTable, colName);
|
|
108
|
+
return {
|
|
109
|
+
name: colName,
|
|
110
|
+
dataType: row.DATA_TYPE,
|
|
111
|
+
nullable: row.NULLABLE === 'Y',
|
|
112
|
+
dataDefault: row.DATA_DEFAULT ? String(row.DATA_DEFAULT).trim() : null,
|
|
113
|
+
dataLength: row.DATA_LENGTH,
|
|
114
|
+
dataPrecision: row.DATA_PRECISION,
|
|
115
|
+
dataScale: row.DATA_SCALE,
|
|
116
|
+
isPrimaryKey: primaryKeys.has(colName),
|
|
117
|
+
isForeignKey: !!fkRef,
|
|
118
|
+
referencedTable: (_a = fkRef === null || fkRef === void 0 ? void 0 : fkRef.table) !== null && _a !== void 0 ? _a : null,
|
|
119
|
+
referencedColumn: (_b = fkRef === null || fkRef === void 0 ? void 0 : fkRef.column) !== null && _b !== void 0 ? _b : null,
|
|
120
|
+
sequence,
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
return { name: upperTable, schema: upperSchema, columns };
|
|
124
|
+
}
|
|
125
|
+
function findSequenceForColumn(sequences, tableName, columnName) {
|
|
126
|
+
// Prioridad: SEQ_TABLENAME_COLUMNNAME > SEQ_TABLENAME
|
|
127
|
+
const exactMatch = sequences.find((s) => s === `SEQ_${tableName}_${columnName}` || s === `SEQ_${columnName}`);
|
|
128
|
+
if (exactMatch)
|
|
129
|
+
return exactMatch;
|
|
130
|
+
const tableMatch = sequences.find((s) => s.startsWith(`SEQ_${tableName}`));
|
|
131
|
+
return tableMatch !== null && tableMatch !== void 0 ? tableMatch : null;
|
|
132
|
+
}
|
|
133
|
+
// Necesitamos importar oracledb para OUT_FORMAT_OBJECT
|
|
134
|
+
const oracledb_1 = __importDefault(require("oracledb"));
|
|
135
|
+
//# sourceMappingURL=inspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/core/inspector.ts"],"names":[],"mappings":";;;;;;;AAuBA;;;GAGG;AACI,KAAK,0BACV,UAAsB,EACtB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CACrC,qEAAqE,EACrE,EAAE,GAAG,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,EAChC,EAAE,SAAS,EAAE,kBAAQ,CAAC,iBAAiB,EAAE,CAC1C,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAe,CAAC,CAAC;AAChE,CAAC;AAEM,KAAK,uBACV,UAAsB,EACtB,SAAiB,EACjB,MAAc;IAEd,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEvC,kCAAkC;IAClC,IAAI,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CACtC;;;;;;;;;;;;4BAYwB,EACxB,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,EACxC,EAAE,SAAS,EAAE,kBAAQ,CAAC,iBAAiB,EAAE,CAC1C,CAAC;IAEF,sFAAsF;IACtF,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAE7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,6CAA6C,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,UAAU,UAAU,sCAAsC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAChF,+CAA+C;gBAC/C,qBAAqB,MAAM,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC;QACJ,CAAC;QAED,+DAA+D;QAC/D,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAC;QAEhE,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAClC;;;;;;;;;;;;8BAYwB,EACxB,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,EACxC,EAAE,SAAS,EAAE,kBAAQ,CAAC,iBAAiB,EAAE,CAC1C,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CACvC;;;;;;qCAMiC,EACjC,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,EACxC,EAAE,SAAS,EAAE,kBAAQ,CAAC,iBAAiB,EAAE,CAC1C,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAElF,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CACvC;;;;;;;;;;;;;qCAaiC,EACjC,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,EACxC,EAAE,SAAS,EAAE,kBAAQ,CAAC,iBAAiB,EAAE,CAC1C,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6C,CAAC;IACzE,KAAK,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAU,EAAE,CAAC;QAChD,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE;YAC9B,KAAK,EAAE,EAAE,CAAC,SAAS;YACnB,MAAM,EAAE,EAAE,CAAC,UAAU;SACtB,CAAC,CAAC;IACL,CAAC;IAED,8FAA8F;IAC9F,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CACxC;;;kEAG8D,EAC9D;QACE,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,OAAO,UAAU,GAAG;QAC1B,IAAI,EAAE,IAAI,UAAU,OAAO;KAC5B,EACD,EAAE,SAAS,EAAE,kBAAQ,CAAC,iBAAiB,EAAE,CAC1C,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,aAAuB,CAAC,CAAC;IAEpF,qBAAqB;IACrB,MAAM,OAAO,GAAkB,SAAS,CAAC,IAAc,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;;QACvE,MAAM,OAAO,GAAW,GAAG,CAAC,WAAW,CAAC;QACxC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAEvE,OAAO;YACL,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,GAAG,CAAC,SAAS;YACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,GAAG;YAC9B,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;YACtE,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,aAAa,EAAE,GAAG,CAAC,cAAc;YACjC,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;YACtC,YAAY,EAAE,CAAC,CAAC,KAAK;YACrB,eAAe,QAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,IAAI;YACrC,gBAAgB,QAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,mCAAI,IAAI;YACvC,QAAQ;SACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,qBAAqB,CAC5B,SAAmB,EACnB,SAAiB,EACjB,UAAkB;IAElB,sDAAsD;IACtD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,SAAS,IAAI,UAAU,EAAE,IAAI,CAAC,KAAK,OAAO,UAAU,EAAE,CAC3E,CAAC;IACF,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC;IAC3E,OAAO,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC;AAC5B,CAAC;AAED,uDAAuD;AACvD,wDAAgC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert.d.ts","sourceRoot":"","sources":["../../src/generators/insert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAK1D,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAYvD"}
|