@thinkdata/cli 0.2.0 → 0.2.2

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.
Files changed (39) hide show
  1. package/dist/bin/thinkdata.js +14 -2
  2. package/dist/bin/thinkdata.js.map +1 -1
  3. package/dist/commands/auth.d.ts +9 -0
  4. package/dist/commands/auth.d.ts.map +1 -0
  5. package/dist/commands/auth.js +61 -0
  6. package/dist/commands/auth.js.map +1 -0
  7. package/dist/commands/compare.d.ts +1 -0
  8. package/dist/commands/compare.d.ts.map +1 -1
  9. package/dist/commands/compare.js +2 -2
  10. package/dist/commands/compare.js.map +1 -1
  11. package/dist/commands/extract.d.ts +1 -0
  12. package/dist/commands/extract.d.ts.map +1 -1
  13. package/dist/commands/extract.js +40 -10
  14. package/dist/commands/extract.js.map +1 -1
  15. package/dist/commands/serve.d.ts.map +1 -1
  16. package/dist/commands/serve.js +120 -1
  17. package/dist/commands/serve.js.map +1 -1
  18. package/dist/extractors/index.d.ts.map +1 -1
  19. package/dist/extractors/index.js +7 -2
  20. package/dist/extractors/index.js.map +1 -1
  21. package/dist/extractors/mssql.d.ts +14 -0
  22. package/dist/extractors/mssql.d.ts.map +1 -0
  23. package/dist/extractors/mssql.js +234 -0
  24. package/dist/extractors/mssql.js.map +1 -0
  25. package/dist/extractors/mysql.d.ts +6 -2
  26. package/dist/extractors/mysql.d.ts.map +1 -1
  27. package/dist/extractors/mysql.js +55 -8
  28. package/dist/extractors/mysql.js.map +1 -1
  29. package/dist/extractors/oracle.d.ts +13 -0
  30. package/dist/extractors/oracle.d.ts.map +1 -0
  31. package/dist/extractors/oracle.js +189 -0
  32. package/dist/extractors/oracle.js.map +1 -0
  33. package/dist/extractors/postgres.d.ts +8 -3
  34. package/dist/extractors/postgres.d.ts.map +1 -1
  35. package/dist/extractors/postgres.js +94 -13
  36. package/dist/extractors/postgres.js.map +1 -1
  37. package/dist/types.d.ts +20 -1
  38. package/dist/types.d.ts.map +1 -1
  39. package/package.json +19 -6
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,kBAAkB;AAClB,MAAM,aAAa,GAA2B;IAC1C,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,CAAC;CACZ,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IACxC,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,UAAU,CAAC;QAChB,KAAK,YAAY;YACb,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACnC,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACV,OAAO,IAAI,cAAc,EAAE,CAAC;QAChC,8BAA8B;QAC9B;YACI,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,0BAA0B,CAAC,CAAC;IACzE,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACjD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACD,kCAAkC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;QACtE,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,eAAe,OAAO,0CAA0C,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAE7E,OAAO;QACH,IAAI,EAAE,IAAgC;QACtC,IAAI,EAAE,GAAG,CAAC,QAAQ;QAClB,IAAI;QACJ,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACzC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACtC,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;QAChD,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;QACnD,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS;KAC/F,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACrC,QAAQ,QAAQ,EAAE,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,YAAY;YACb,OAAO,UAAU,CAAC;QACtB,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACV,OAAO,OAAO,CAAC;QACnB,KAAK,QAAQ;YACT,OAAO,QAAQ,CAAC;QACpB,KAAK,OAAO,CAAC;QACb,KAAK,WAAW;YACZ,OAAO,OAAO,CAAC;QACnB;YACI,OAAO,QAAQ,CAAC;IACxB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { SchemaExtractor, ConnectionConfig, ExtractedSchema, ExtractProgressCallback } from '../types.js';
2
+ export declare class MSSQLExtractor implements SchemaExtractor {
3
+ testConnection(config: ConnectionConfig): Promise<string>;
4
+ extract(config: ConnectionConfig, onProgress?: ExtractProgressCallback): Promise<ExtractedSchema>;
5
+ private createConnection;
6
+ private getVersion;
7
+ private getTables;
8
+ private getPrimaryKeys;
9
+ private getForeignKeys;
10
+ private getIndexes;
11
+ private buildPKMap;
12
+ private buildIndexMap;
13
+ }
14
+ //# sourceMappingURL=mssql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mssql.d.ts","sourceRoot":"","sources":["../../src/extractors/mssql.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EAChB,eAAe,EAKf,uBAAuB,EAC1B,MAAM,aAAa,CAAC;AAErB,qBAAa,cAAe,YAAW,eAAe;IAC5C,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzD,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC;YA8DzF,gBAAgB;YAehB,UAAU;YAKV,SAAS;YAiDT,cAAc;YAYd,cAAc;YA6Cd,UAAU;IAoBxB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;CAmBxB"}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * SQL Server (MSSQL) 스키마 추출기
3
+ */
4
+ import sql from 'mssql';
5
+ export class MSSQLExtractor {
6
+ async testConnection(config) {
7
+ const pool = await this.createConnection(config);
8
+ try {
9
+ const result = await pool.request().query('SELECT @@version AS ver');
10
+ return result.recordset[0].ver;
11
+ }
12
+ finally {
13
+ await pool.close();
14
+ }
15
+ }
16
+ async extract(config, onProgress) {
17
+ const pool = await this.createConnection(config);
18
+ const schema = config.schema || 'dbo';
19
+ try {
20
+ onProgress?.(`Connecting to SQL Server at ${config.host}...`);
21
+ onProgress?.(`Fetching server version...`);
22
+ const version = await this.getVersion(pool);
23
+ onProgress?.(`Fetching tables and columns from schema '${schema}'...`);
24
+ const tables = await this.getTables(pool, schema);
25
+ onProgress?.(`Found ${tables.length} tables.`);
26
+ onProgress?.(`Fetching primary keys...`);
27
+ const pks = await this.getPrimaryKeys(pool, schema);
28
+ onProgress?.(`Fetching foreign keys...`);
29
+ const fks = await this.getForeignKeys(pool, schema);
30
+ onProgress?.(`Fetching indexes...`);
31
+ const indexes = await this.getIndexes(pool, schema);
32
+ onProgress?.(`Building relationships and formatting output...`);
33
+ const pkMap = this.buildPKMap(pks);
34
+ const indexMap = this.buildIndexMap(indexes);
35
+ const extractedTables = tables.map((t) => ({
36
+ name: t.table_name,
37
+ schema: schema,
38
+ comment: t.table_comment || undefined,
39
+ columns: t.columns.map((c) => ({
40
+ name: c.COLUMN_NAME,
41
+ type: c.COLUMN_TYPE,
42
+ nullable: c.IS_NULLABLE === 'YES',
43
+ isPK: pkMap.get(t.table_name)?.has(c.COLUMN_NAME) ?? false,
44
+ defaultValue: c.COLUMN_DEFAULT || undefined,
45
+ comment: c.COLUMN_COMMENT || undefined,
46
+ ordinalPosition: c.ORDINAL_POSITION,
47
+ maxLength: c.CHARACTER_MAXIMUM_LENGTH || undefined,
48
+ numericPrecision: c.NUMERIC_PRECISION || undefined,
49
+ numericScale: c.NUMERIC_SCALE || undefined,
50
+ })),
51
+ indexes: indexMap.get(t.table_name) || [],
52
+ }));
53
+ return {
54
+ dbmsType: 'mssql',
55
+ dbmsVersion: version,
56
+ extractedAt: new Date().toISOString(),
57
+ schemaName: schema,
58
+ tables: extractedTables,
59
+ foreignKeys: fks,
60
+ };
61
+ }
62
+ finally {
63
+ await pool.close();
64
+ }
65
+ }
66
+ // ─── Private ─────────────────────────────────────────
67
+ async createConnection(config) {
68
+ return sql.connect({
69
+ server: config.host,
70
+ port: config.port,
71
+ database: config.database,
72
+ user: config.user,
73
+ password: config.password,
74
+ options: {
75
+ encrypt: config.ssl || false,
76
+ trustServerCertificate: !config.ssl,
77
+ },
78
+ connectionTimeout: 10000,
79
+ });
80
+ }
81
+ async getVersion(pool) {
82
+ const result = await pool.request().query('SELECT @@version AS ver');
83
+ return result.recordset[0].ver;
84
+ }
85
+ async getTables(pool, schema) {
86
+ const result = await pool.request()
87
+ .input('schema', sql.NVarChar, schema)
88
+ .query(`
89
+ SELECT
90
+ t.TABLE_NAME, c.COLUMN_NAME, c.ORDINAL_POSITION, c.DATA_TYPE as COLUMN_TYPE,
91
+ c.IS_NULLABLE, c.COLUMN_DEFAULT, c.CHARACTER_MAXIMUM_LENGTH,
92
+ c.NUMERIC_PRECISION, c.NUMERIC_SCALE,
93
+ CAST(ep.value AS NVARCHAR(MAX)) AS COLUMN_COMMENT
94
+ FROM information_schema.TABLES t
95
+ JOIN information_schema.COLUMNS c ON t.TABLE_NAME = c.TABLE_NAME AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
96
+ LEFT JOIN sys.extended_properties ep ON ep.major_id = OBJECT_ID(t.TABLE_SCHEMA + '.' + t.TABLE_NAME)
97
+ AND ep.minor_id = c.ORDINAL_POSITION AND ep.name = 'MS_Description'
98
+ WHERE t.TABLE_SCHEMA = @schema AND t.TABLE_TYPE = 'BASE TABLE'
99
+ ORDER BY t.TABLE_NAME, c.ORDINAL_POSITION
100
+ `);
101
+ // 테이블 코멘트 가져오기
102
+ const tableComments = await pool.request()
103
+ .input('schema', sql.NVarChar, schema)
104
+ .query(`
105
+ SELECT
106
+ t.TABLE_NAME,
107
+ CAST(ep.value AS NVARCHAR(MAX)) AS TABLE_COMMENT
108
+ FROM information_schema.TABLES t
109
+ JOIN sys.extended_properties ep ON ep.major_id = OBJECT_ID(t.TABLE_SCHEMA + '.' + t.TABLE_NAME)
110
+ WHERE t.TABLE_SCHEMA = @schema AND ep.minor_id = 0 AND ep.name = 'MS_Description'
111
+ `);
112
+ const commentMap = new Map();
113
+ for (const tc of tableComments.recordset) {
114
+ commentMap.set(tc.TABLE_NAME, tc.TABLE_COMMENT);
115
+ }
116
+ const tableMap = new Map();
117
+ for (const col of result.recordset) {
118
+ if (!tableMap.has(col.TABLE_NAME)) {
119
+ tableMap.set(col.TABLE_NAME, {
120
+ table_name: col.TABLE_NAME,
121
+ table_comment: commentMap.get(col.TABLE_NAME) || null,
122
+ columns: [],
123
+ });
124
+ }
125
+ tableMap.get(col.TABLE_NAME).columns.push(col);
126
+ }
127
+ return Array.from(tableMap.values());
128
+ }
129
+ async getPrimaryKeys(pool, schema) {
130
+ const result = await pool.request()
131
+ .input('schema', sql.NVarChar, schema)
132
+ .query(`
133
+ SELECT c.TABLE_NAME, c.COLUMN_NAME
134
+ FROM information_schema.KEY_COLUMN_USAGE c
135
+ JOIN information_schema.TABLE_CONSTRAINTS t ON c.CONSTRAINT_NAME = t.CONSTRAINT_NAME
136
+ WHERE t.CONSTRAINT_TYPE = 'PRIMARY KEY' AND t.TABLE_SCHEMA = @schema
137
+ `);
138
+ return result.recordset;
139
+ }
140
+ async getForeignKeys(pool, schema) {
141
+ const result = await pool.request()
142
+ .input('schema', sql.NVarChar, schema)
143
+ .query(`
144
+ SELECT
145
+ fk.name AS CONSTRAINT_NAME,
146
+ tp.name AS source_table,
147
+ cp.name AS source_column,
148
+ tr.name AS target_table,
149
+ cr.name AS target_column,
150
+ fk.delete_referential_action_desc AS DELETE_RULE,
151
+ fk.update_referential_action_desc AS UPDATE_RULE
152
+ FROM sys.foreign_keys fk
153
+ INNER JOIN sys.tables tp ON fk.parent_object_id = tp.object_id
154
+ INNER JOIN sys.columns cp ON fk.parent_object_id = cp.object_id
155
+ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id AND cp.column_id = fkc.parent_column_id
156
+ INNER JOIN sys.tables tr ON fk.referenced_object_id = tr.object_id
157
+ INNER JOIN sys.columns cr ON fk.referenced_object_id = cr.object_id AND cr.column_id = fkc.referenced_column_id
158
+ INNER JOIN sys.schemas s ON tp.schema_id = s.schema_id
159
+ WHERE s.name = @schema
160
+ `);
161
+ return result.recordset.map((r) => {
162
+ const mapRule = (rule) => {
163
+ if (rule === 'NO_ACTION')
164
+ return 'NO ACTION';
165
+ if (rule === 'CASCADE')
166
+ return 'CASCADE';
167
+ if (rule === 'SET_NULL')
168
+ return 'SET NULL';
169
+ if (rule === 'SET_DEFAULT')
170
+ return 'SET DEFAULT';
171
+ return undefined;
172
+ };
173
+ return {
174
+ name: r.CONSTRAINT_NAME,
175
+ sourceTable: r.source_table,
176
+ sourceSchema: schema,
177
+ sourceColumn: r.source_column,
178
+ targetTable: r.target_table,
179
+ targetSchema: schema,
180
+ targetColumn: r.target_column,
181
+ onDelete: mapRule(r.DELETE_RULE),
182
+ onUpdate: mapRule(r.UPDATE_RULE),
183
+ };
184
+ });
185
+ }
186
+ async getIndexes(pool, schema) {
187
+ const result = await pool.request()
188
+ .input('schema', sql.NVarChar, schema)
189
+ .query(`
190
+ SELECT
191
+ t.name AS TABLE_NAME,
192
+ i.name AS INDEX_NAME,
193
+ c.name AS COLUMN_NAME,
194
+ i.is_unique AS UNIQUE_INDEX
195
+ FROM sys.indexes i
196
+ INNER JOIN sys.tables t ON i.object_id = t.object_id
197
+ INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
198
+ INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
199
+ INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
200
+ WHERE s.name = @schema AND i.is_primary_key = 0 AND i.type > 0
201
+ ORDER BY t.name, i.name, ic.key_ordinal
202
+ `);
203
+ return result.recordset;
204
+ }
205
+ buildPKMap(pks) {
206
+ const map = new Map();
207
+ for (const pk of pks) {
208
+ if (!map.has(pk.TABLE_NAME))
209
+ map.set(pk.TABLE_NAME, new Set());
210
+ map.get(pk.TABLE_NAME).add(pk.COLUMN_NAME);
211
+ }
212
+ return map;
213
+ }
214
+ buildIndexMap(indexes) {
215
+ const map = new Map();
216
+ for (const idx of indexes) {
217
+ const key = `${idx.TABLE_NAME}.${idx.INDEX_NAME}`;
218
+ if (!map.has(idx.TABLE_NAME))
219
+ map.set(idx.TABLE_NAME, []);
220
+ let indexObj = map.get(idx.TABLE_NAME).find(i => i.name === idx.INDEX_NAME);
221
+ if (!indexObj) {
222
+ indexObj = {
223
+ name: idx.INDEX_NAME,
224
+ columns: [],
225
+ unique: idx.UNIQUE_INDEX === true || idx.UNIQUE_INDEX === 1,
226
+ };
227
+ map.get(idx.TABLE_NAME).push(indexObj);
228
+ }
229
+ indexObj.columns.push(idx.COLUMN_NAME);
230
+ }
231
+ return map;
232
+ }
233
+ }
234
+ //# sourceMappingURL=mssql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mssql.js","sourceRoot":"","sources":["../../src/extractors/mssql.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
- import type { SchemaExtractor, ConnectionConfig, ExtractedSchema } from '../types.js';
1
+ import type { SchemaExtractor, ConnectionConfig, ExtractedSchema, ExtractProgressCallback } from '../types.js';
2
2
  export declare class MySQLExtractor implements SchemaExtractor {
3
3
  testConnection(config: ConnectionConfig): Promise<string>;
4
- extract(config: ConnectionConfig): Promise<ExtractedSchema>;
4
+ /** 선택 가능한 스키마(=데이터베이스) 목록. MySQL은 schema=database. */
5
+ listSchemas(config: ConnectionConfig): Promise<string[]>;
6
+ /** 특정 database의 테이블명 목록. MySQL은 schema=database. */
7
+ listTables(config: ConnectionConfig): Promise<string[]>;
8
+ extract(config: ConnectionConfig, onProgress?: ExtractProgressCallback): Promise<ExtractedSchema>;
5
9
  private createConnection;
6
10
  private getVersion;
7
11
  private getTables;
@@ -1 +1 @@
1
- {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/extractors/mysql.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EAChB,eAAe,EAKlB,MAAM,aAAa,CAAC;AAErB,qBAAa,cAAe,YAAW,eAAe;IAC5C,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzD,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;YAkDnD,gBAAgB;YAYhB,UAAU;YAKV,SAAS;YAwCT,cAAc;YAUd,cAAc;YA+Bd,UAAU;IA2BxB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;CAYxB"}
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/extractors/mysql.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EAChB,eAAe,EAKf,uBAAuB,EAC1B,MAAM,aAAa,CAAC;AAErB,qBAAa,cAAe,YAAW,eAAe;IAC5C,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAU/D,sDAAsD;IAChD,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAe9D,oDAAoD;IAC9C,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBvD,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC;YAsEzF,gBAAgB;YAYhB,UAAU;YAKV,SAAS;YAwCT,cAAc;YAUd,cAAc;YA+Bd,UAAU;IA2BxB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;CAYxB"}
@@ -15,17 +15,64 @@ export class MySQLExtractor {
15
15
  await conn.end();
16
16
  }
17
17
  }
18
- async extract(config) {
18
+ /** 선택 가능한 스키마(=데이터베이스) 목록. MySQL은 schema=database. */
19
+ async listSchemas(config) {
20
+ const conn = await this.createConnection(config);
21
+ try {
22
+ const [rows] = await conn.query(`
23
+ SELECT schema_name
24
+ FROM information_schema.schemata
25
+ WHERE schema_name NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
26
+ ORDER BY schema_name
27
+ `);
28
+ return rows.map(r => r.schema_name ?? r.SCHEMA_NAME);
29
+ }
30
+ finally {
31
+ await conn.end();
32
+ }
33
+ }
34
+ /** 특정 database의 테이블명 목록. MySQL은 schema=database. */
35
+ async listTables(config) {
36
+ const conn = await this.createConnection(config);
37
+ const db = config.schema || config.database;
38
+ try {
39
+ const [rows] = await conn.query(`
40
+ SELECT table_name
41
+ FROM information_schema.tables
42
+ WHERE table_schema = ? AND table_type = 'BASE TABLE'
43
+ ORDER BY table_name
44
+ `, [db]);
45
+ return rows.map(r => r.table_name ?? r.TABLE_NAME);
46
+ }
47
+ finally {
48
+ await conn.end();
49
+ }
50
+ }
51
+ async extract(config, onProgress) {
19
52
  const conn = await this.createConnection(config);
20
53
  const schema = config.database; // MySQL에서 schema = database
21
54
  try {
22
- const [version, tables, pks, fks, indexes] = await Promise.all([
23
- this.getVersion(conn),
24
- this.getTables(conn, schema),
25
- this.getPrimaryKeys(conn, schema),
26
- this.getForeignKeys(conn, schema),
27
- this.getIndexes(conn, schema),
28
- ]);
55
+ onProgress?.(`Connecting to MySQL at ${config.host}...`);
56
+ onProgress?.(`Fetching server version...`);
57
+ const version = await this.getVersion(conn);
58
+ onProgress?.(`Fetching tables and columns from schema '${schema}'...`);
59
+ let tables = await this.getTables(conn, schema);
60
+ if (config.tables && config.tables.length > 0) {
61
+ const wanted = new Set(config.tables);
62
+ tables = tables.filter((t) => wanted.has(t.table_name));
63
+ }
64
+ onProgress?.(`Found ${tables.length} tables.`);
65
+ onProgress?.(`Fetching primary keys...`);
66
+ const pks = await this.getPrimaryKeys(conn, schema);
67
+ onProgress?.(`Fetching foreign keys...`);
68
+ let fks = await this.getForeignKeys(conn, schema);
69
+ if (config.tables && config.tables.length > 0) {
70
+ const wanted = new Set(config.tables);
71
+ fks = fks.filter((fk) => wanted.has(fk.sourceTable) && wanted.has(fk.targetTable));
72
+ }
73
+ onProgress?.(`Fetching indexes...`);
74
+ const indexes = await this.getIndexes(conn, schema);
75
+ onProgress?.(`Building relationships and formatting output...`);
29
76
  const pkMap = this.buildPKMap(pks);
30
77
  const indexMap = this.buildIndexMap(indexes);
31
78
  const extractedTables = tables.map((t) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/extractors/mysql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/extractors/mysql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { SchemaExtractor, ConnectionConfig, ExtractedSchema, ExtractProgressCallback } from '../types.js';
2
+ export declare class OracleExtractor implements SchemaExtractor {
3
+ testConnection(config: ConnectionConfig): Promise<string>;
4
+ extract(config: ConnectionConfig, onProgress?: ExtractProgressCallback): Promise<ExtractedSchema>;
5
+ private createConnection;
6
+ private getTables;
7
+ private getPrimaryKeys;
8
+ private getForeignKeys;
9
+ private getIndexes;
10
+ private buildPKMap;
11
+ private buildIndexMap;
12
+ }
13
+ //# sourceMappingURL=oracle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../../src/extractors/oracle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EAChB,eAAe,EAKf,uBAAuB,EAC1B,MAAM,aAAa,CAAC;AAErB,qBAAa,eAAgB,YAAW,eAAe;IAC7C,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IASzD,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC;YA+DzF,gBAAgB;YAQhB,SAAS;YAwCT,cAAc;YAYd,cAAc;YA+Bd,UAAU;IAYxB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;CAkBxB"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Oracle 스키마 추출기
3
+ */
4
+ import oracledb from 'oracledb';
5
+ export class OracleExtractor {
6
+ async testConnection(config) {
7
+ const conn = await this.createConnection(config);
8
+ try {
9
+ return `Oracle ${conn.oracleServerVersionString}`;
10
+ }
11
+ finally {
12
+ await conn.close();
13
+ }
14
+ }
15
+ async extract(config, onProgress) {
16
+ oracledb.outFormat = oracledb.OUT_FORMAT_OBJECT;
17
+ const conn = await this.createConnection(config);
18
+ const schema = (config.schema || config.user).toUpperCase();
19
+ try {
20
+ onProgress?.(`Connecting to Oracle at ${config.host}...`);
21
+ onProgress?.(`Fetching server version...`);
22
+ const version = `Oracle ${conn.oracleServerVersionString}`;
23
+ onProgress?.(`Fetching tables and columns from schema '${schema}'...`);
24
+ const tables = await this.getTables(conn, schema);
25
+ onProgress?.(`Found ${tables.length} tables.`);
26
+ onProgress?.(`Fetching primary keys...`);
27
+ const pks = await this.getPrimaryKeys(conn, schema);
28
+ onProgress?.(`Fetching foreign keys...`);
29
+ const fks = await this.getForeignKeys(conn, schema);
30
+ onProgress?.(`Fetching indexes...`);
31
+ const indexes = await this.getIndexes(conn, schema);
32
+ onProgress?.(`Building relationships and formatting output...`);
33
+ const pkMap = this.buildPKMap(pks);
34
+ const indexMap = this.buildIndexMap(indexes);
35
+ const extractedTables = tables.map((t) => ({
36
+ name: t.TABLE_NAME,
37
+ schema: schema,
38
+ comment: t.TABLE_COMMENT || undefined,
39
+ columns: t.columns.map((c) => ({
40
+ name: c.COLUMN_NAME,
41
+ type: c.COLUMN_TYPE,
42
+ nullable: c.IS_NULLABLE === 'Y',
43
+ isPK: pkMap.get(t.TABLE_NAME)?.has(c.COLUMN_NAME) ?? false,
44
+ defaultValue: c.COLUMN_DEFAULT ? c.COLUMN_DEFAULT.trim() : undefined,
45
+ comment: c.COLUMN_COMMENT || undefined,
46
+ ordinalPosition: c.ORDINAL_POSITION,
47
+ maxLength: c.CHARACTER_MAXIMUM_LENGTH || undefined,
48
+ numericPrecision: c.NUMERIC_PRECISION || undefined,
49
+ numericScale: c.NUMERIC_SCALE || undefined,
50
+ })),
51
+ indexes: indexMap.get(t.TABLE_NAME) || [],
52
+ }));
53
+ return {
54
+ dbmsType: 'oracle',
55
+ dbmsVersion: version,
56
+ extractedAt: new Date().toISOString(),
57
+ schemaName: schema,
58
+ tables: extractedTables,
59
+ foreignKeys: fks,
60
+ };
61
+ }
62
+ finally {
63
+ await conn.close();
64
+ }
65
+ }
66
+ // ─── Private ─────────────────────────────────────────
67
+ async createConnection(config) {
68
+ return oracledb.getConnection({
69
+ user: config.user,
70
+ password: config.password,
71
+ connectString: `${config.host}:${config.port}/${config.database}`,
72
+ });
73
+ }
74
+ async getTables(conn, schema) {
75
+ const result = await conn.execute(`
76
+ SELECT
77
+ t.TABLE_NAME, c.COLUMN_NAME, c.COLUMN_ID AS ORDINAL_POSITION, c.DATA_TYPE AS COLUMN_TYPE,
78
+ c.NULLABLE AS IS_NULLABLE, c.DATA_DEFAULT AS COLUMN_DEFAULT, c.DATA_LENGTH AS CHARACTER_MAXIMUM_LENGTH,
79
+ c.DATA_PRECISION AS NUMERIC_PRECISION, c.DATA_SCALE AS NUMERIC_SCALE,
80
+ cm.COMMENTS AS COLUMN_COMMENT
81
+ FROM ALL_TABLES t
82
+ JOIN ALL_TAB_COLUMNS c ON t.TABLE_NAME = c.TABLE_NAME AND t.OWNER = c.OWNER
83
+ LEFT JOIN ALL_COL_COMMENTS cm ON t.TABLE_NAME = cm.TABLE_NAME AND c.COLUMN_NAME = cm.COLUMN_NAME AND t.OWNER = cm.OWNER
84
+ WHERE t.OWNER = :schema
85
+ ORDER BY t.TABLE_NAME, c.COLUMN_ID
86
+ `, [schema]);
87
+ const tableComments = await conn.execute(`
88
+ SELECT TABLE_NAME, COMMENTS AS TABLE_COMMENT
89
+ FROM ALL_TAB_COMMENTS
90
+ WHERE OWNER = :schema AND TABLE_TYPE = 'TABLE'
91
+ `, [schema]);
92
+ const commentMap = new Map();
93
+ for (const tc of tableComments.rows || []) {
94
+ if (tc.TABLE_COMMENT)
95
+ commentMap.set(tc.TABLE_NAME, tc.TABLE_COMMENT);
96
+ }
97
+ const tableMap = new Map();
98
+ for (const col of result.rows || []) {
99
+ if (!tableMap.has(col.TABLE_NAME)) {
100
+ tableMap.set(col.TABLE_NAME, {
101
+ TABLE_NAME: col.TABLE_NAME,
102
+ TABLE_COMMENT: commentMap.get(col.TABLE_NAME) || null,
103
+ columns: [],
104
+ });
105
+ }
106
+ tableMap.get(col.TABLE_NAME).columns.push(col);
107
+ }
108
+ return Array.from(tableMap.values());
109
+ }
110
+ async getPrimaryKeys(conn, schema) {
111
+ const result = await conn.execute(`
112
+ SELECT
113
+ c.TABLE_NAME, c.COLUMN_NAME
114
+ FROM ALL_CONSTRAINTS pk
115
+ JOIN ALL_CONS_COLUMNS c ON pk.CONSTRAINT_NAME = c.CONSTRAINT_NAME AND pk.OWNER = c.OWNER
116
+ WHERE pk.CONSTRAINT_TYPE = 'P' AND pk.OWNER = :schema
117
+ ORDER BY c.TABLE_NAME, c.POSITION
118
+ `, [schema]);
119
+ return result.rows || [];
120
+ }
121
+ async getForeignKeys(conn, schema) {
122
+ const result = await conn.execute(`
123
+ SELECT
124
+ fk.CONSTRAINT_NAME,
125
+ fk.TABLE_NAME AS SOURCE_TABLE,
126
+ c1.COLUMN_NAME AS SOURCE_COLUMN,
127
+ pk.TABLE_NAME AS TARGET_TABLE,
128
+ c2.COLUMN_NAME AS TARGET_COLUMN,
129
+ fk.DELETE_RULE
130
+ FROM ALL_CONSTRAINTS fk
131
+ JOIN ALL_CONSTRAINTS pk ON fk.R_CONSTRAINT_NAME = pk.CONSTRAINT_NAME AND fk.OWNER = pk.OWNER
132
+ JOIN ALL_CONS_COLUMNS c1 ON fk.CONSTRAINT_NAME = c1.CONSTRAINT_NAME AND fk.OWNER = c1.OWNER
133
+ JOIN ALL_CONS_COLUMNS c2 ON pk.CONSTRAINT_NAME = c2.CONSTRAINT_NAME AND pk.OWNER = c2.OWNER AND c1.POSITION = c2.POSITION
134
+ WHERE fk.CONSTRAINT_TYPE = 'R' AND fk.OWNER = :schema
135
+ `, [schema]);
136
+ const rows = result.rows || [];
137
+ return rows.map((r) => {
138
+ return {
139
+ name: r.CONSTRAINT_NAME,
140
+ sourceTable: r.SOURCE_TABLE,
141
+ sourceSchema: schema,
142
+ sourceColumn: r.SOURCE_COLUMN,
143
+ targetTable: r.TARGET_TABLE,
144
+ targetSchema: schema,
145
+ targetColumn: r.TARGET_COLUMN,
146
+ onDelete: r.DELETE_RULE === 'CASCADE' ? 'CASCADE' : (r.DELETE_RULE === 'SET NULL' ? 'SET NULL' : undefined),
147
+ };
148
+ });
149
+ }
150
+ async getIndexes(conn, schema) {
151
+ const result = await conn.execute(`
152
+ SELECT
153
+ i.TABLE_NAME, i.INDEX_NAME, c.COLUMN_NAME, i.UNIQUENESS
154
+ FROM ALL_INDEXES i
155
+ JOIN ALL_IND_COLUMNS c ON i.INDEX_NAME = c.INDEX_NAME AND i.TABLE_OWNER = c.TABLE_OWNER
156
+ WHERE i.TABLE_OWNER = :schema AND i.INDEX_TYPE != 'LOB'
157
+ ORDER BY i.TABLE_NAME, i.INDEX_NAME, c.COLUMN_POSITION
158
+ `, [schema]);
159
+ return result.rows || [];
160
+ }
161
+ buildPKMap(pks) {
162
+ const map = new Map();
163
+ for (const pk of pks) {
164
+ if (!map.has(pk.TABLE_NAME))
165
+ map.set(pk.TABLE_NAME, new Set());
166
+ map.get(pk.TABLE_NAME).add(pk.COLUMN_NAME);
167
+ }
168
+ return map;
169
+ }
170
+ buildIndexMap(indexes) {
171
+ const map = new Map();
172
+ for (const idx of indexes) {
173
+ if (!map.has(idx.TABLE_NAME))
174
+ map.set(idx.TABLE_NAME, []);
175
+ let indexObj = map.get(idx.TABLE_NAME).find(i => i.name === idx.INDEX_NAME);
176
+ if (!indexObj) {
177
+ indexObj = {
178
+ name: idx.INDEX_NAME,
179
+ columns: [],
180
+ unique: idx.UNIQUENESS === 'UNIQUE',
181
+ };
182
+ map.get(idx.TABLE_NAME).push(indexObj);
183
+ }
184
+ indexObj.columns.push(idx.COLUMN_NAME);
185
+ }
186
+ return map;
187
+ }
188
+ }
189
+ //# sourceMappingURL=oracle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../../src/extractors/oracle.ts"],"names":[],"mappings":"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"}