@uql/core 3.8.2 → 3.8.3

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 (36) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/README.md +1 -0
  3. package/dist/migrate/builder/migrationBuilder.d.ts.map +1 -1
  4. package/dist/migrate/builder/migrationBuilder.js +7 -1
  5. package/dist/migrate/builder/migrationBuilder.js.map +1 -1
  6. package/dist/migrate/codegen/entityCodeGenerator.d.ts.map +1 -1
  7. package/dist/migrate/codegen/entityCodeGenerator.js +12 -8
  8. package/dist/migrate/codegen/entityCodeGenerator.js.map +1 -1
  9. package/dist/migrate/introspection/abstractSqlSchemaIntrospector.d.ts +77 -0
  10. package/dist/migrate/introspection/abstractSqlSchemaIntrospector.d.ts.map +1 -0
  11. package/dist/migrate/introspection/abstractSqlSchemaIntrospector.js +156 -0
  12. package/dist/migrate/introspection/abstractSqlSchemaIntrospector.js.map +1 -0
  13. package/dist/migrate/introspection/index.d.ts +1 -0
  14. package/dist/migrate/introspection/index.d.ts.map +1 -1
  15. package/dist/migrate/introspection/index.js +1 -0
  16. package/dist/migrate/introspection/index.js.map +1 -1
  17. package/dist/migrate/introspection/mysqlIntrospector.d.ts +16 -15
  18. package/dist/migrate/introspection/mysqlIntrospector.d.ts.map +1 -1
  19. package/dist/migrate/introspection/mysqlIntrospector.js +65 -122
  20. package/dist/migrate/introspection/mysqlIntrospector.js.map +1 -1
  21. package/dist/migrate/introspection/postgresIntrospector.d.ts +16 -14
  22. package/dist/migrate/introspection/postgresIntrospector.d.ts.map +1 -1
  23. package/dist/migrate/introspection/postgresIntrospector.js +68 -117
  24. package/dist/migrate/introspection/postgresIntrospector.js.map +1 -1
  25. package/dist/migrate/introspection/sqliteIntrospector.d.ts +20 -14
  26. package/dist/migrate/introspection/sqliteIntrospector.d.ts.map +1 -1
  27. package/dist/migrate/introspection/sqliteIntrospector.js +79 -116
  28. package/dist/migrate/introspection/sqliteIntrospector.js.map +1 -1
  29. package/dist/migrate/schemaGenerator.d.ts +1 -13
  30. package/dist/migrate/schemaGenerator.d.ts.map +1 -1
  31. package/dist/migrate/schemaGenerator.js +9 -72
  32. package/dist/migrate/schemaGenerator.js.map +1 -1
  33. package/dist/schema/schemaASTBuilder.d.ts.map +1 -1
  34. package/dist/schema/schemaASTBuilder.js +31 -0
  35. package/dist/schema/schemaASTBuilder.js.map +1 -1
  36. package/package.json +2 -3
@@ -1,86 +1,40 @@
1
- import { isSqlQuerier } from '../../type/index.js';
2
- import { BaseSqlIntrospector } from './baseSqlIntrospector.js';
1
+ import { AbstractSqlSchemaIntrospector } from './abstractSqlSchemaIntrospector.js';
3
2
  /**
4
3
  * MySQL/MariaDB schema introspector.
5
4
  * Works with both MySQL and MariaDB as they share the same information_schema structure.
6
5
  */
7
- export class MysqlSchemaIntrospector extends BaseSqlIntrospector {
6
+ export class MysqlSchemaIntrospector extends AbstractSqlSchemaIntrospector {
8
7
  pool;
9
8
  constructor(pool) {
10
9
  super('mysql');
11
10
  this.pool = pool;
12
11
  }
13
- async getTableSchema(tableName) {
14
- const querier = await this.getQuerier();
15
- try {
16
- const exists = await this.tableExistsInternal(querier, tableName);
17
- if (!exists) {
18
- return undefined;
19
- }
20
- const [columns, indexes, foreignKeys, primaryKey] = await Promise.all([
21
- this.getColumns(querier, tableName),
22
- this.getIndexes(querier, tableName),
23
- this.getForeignKeys(querier, tableName),
24
- this.getPrimaryKey(querier, tableName),
25
- ]);
26
- return {
27
- name: tableName,
28
- columns,
29
- primaryKey,
30
- indexes,
31
- foreignKeys,
32
- };
33
- }
34
- finally {
35
- await querier.release();
36
- }
37
- }
38
- async getTableNames() {
39
- const querier = await this.getQuerier();
40
- try {
41
- const sql = `
42
- SELECT TABLE_NAME as table_name
43
- FROM information_schema.TABLES
44
- WHERE TABLE_SCHEMA = DATABASE()
45
- AND TABLE_TYPE = 'BASE TABLE'
46
- ORDER BY TABLE_NAME
47
- `;
48
- const results = await querier.all(sql);
49
- return results.map((r) => r.table_name);
50
- }
51
- finally {
52
- await querier.release();
53
- }
54
- }
55
- async tableExists(tableName) {
56
- const querier = await this.getQuerier();
57
- try {
58
- return this.tableExistsInternal(querier, tableName);
59
- }
60
- finally {
61
- await querier.release();
62
- }
12
+ // ============================================================================
13
+ // SQL Queries (dialect-specific)
14
+ // ============================================================================
15
+ getTableNamesQuery() {
16
+ return /*sql*/ `
17
+ SELECT TABLE_NAME as table_name
18
+ FROM information_schema.TABLES
19
+ WHERE TABLE_SCHEMA = DATABASE()
20
+ AND TABLE_TYPE = 'BASE TABLE'
21
+ ORDER BY TABLE_NAME
22
+ `;
63
23
  }
64
- async tableExistsInternal(querier, tableName) {
65
- const sql = `
24
+ tableExistsQuery() {
25
+ return /*sql*/ `
66
26
  SELECT COUNT(*) as count
67
27
  FROM information_schema.TABLES
68
28
  WHERE TABLE_SCHEMA = DATABASE()
69
29
  AND TABLE_NAME = ?
70
30
  `;
71
- const results = await querier.all(sql, [tableName]);
72
- return (results[0]?.count ?? 0) > 0;
73
31
  }
74
- async getQuerier() {
75
- const querier = await this.pool.getQuerier();
76
- if (!isSqlQuerier(querier)) {
77
- await querier.release();
78
- throw new Error('MysqlSchemaIntrospector requires a SQL-based querier');
79
- }
80
- return querier;
32
+ parseTableExistsResult(results) {
33
+ const count = results[0]?.count;
34
+ return (typeof count === 'number' || typeof count === 'bigint' ? Number(count) : 0) > 0;
81
35
  }
82
- async getColumns(querier, tableName) {
83
- const sql = `
36
+ getColumnsQuery(_tableName) {
37
+ return /*sql*/ `
84
38
  SELECT
85
39
  COLUMN_NAME as column_name,
86
40
  DATA_TYPE as data_type,
@@ -98,29 +52,9 @@ export class MysqlSchemaIntrospector extends BaseSqlIntrospector {
98
52
  AND TABLE_NAME = ?
99
53
  ORDER BY ORDINAL_POSITION
100
54
  `;
101
- const results = await querier.all(sql, [tableName]);
102
- return results.map((row) => ({
103
- name: row.column_name,
104
- type: (row.column_type || '').toUpperCase(),
105
- nullable: row.is_nullable === 'YES',
106
- defaultValue: this.parseDefaultValue(row.column_default),
107
- isPrimaryKey: row.column_key === 'PRI',
108
- isAutoIncrement: (row.extra || '').toLowerCase().includes('auto_increment'),
109
- isUnique: row.column_key === 'UNI',
110
- length: this.toNumber(row.character_maximum_length),
111
- precision: this.toNumber(row.numeric_precision),
112
- scale: this.toNumber(row.numeric_scale),
113
- comment: row.column_comment || undefined,
114
- }));
115
- }
116
- toNumber(value) {
117
- if (value == null) {
118
- return undefined;
119
- }
120
- return Number(value);
121
55
  }
122
- async getIndexes(querier, tableName) {
123
- const sql = `
56
+ getIndexesQuery(_tableName) {
57
+ return /*sql*/ `
124
58
  SELECT
125
59
  INDEX_NAME as index_name,
126
60
  GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) as columns,
@@ -132,15 +66,9 @@ export class MysqlSchemaIntrospector extends BaseSqlIntrospector {
132
66
  GROUP BY INDEX_NAME, NON_UNIQUE
133
67
  ORDER BY INDEX_NAME
134
68
  `;
135
- const results = await querier.all(sql, [tableName]);
136
- return results.map((row) => ({
137
- name: row.index_name,
138
- columns: (row.columns || '').split(','),
139
- unique: Boolean(row.is_unique),
140
- }));
141
69
  }
142
- async getForeignKeys(querier, tableName) {
143
- const sql = `
70
+ getForeignKeysQuery(_tableName) {
71
+ return /*sql*/ `
144
72
  SELECT
145
73
  kcu.CONSTRAINT_NAME as constraint_name,
146
74
  GROUP_CONCAT(kcu.COLUMN_NAME ORDER BY kcu.ORDINAL_POSITION) as columns,
@@ -158,7 +86,46 @@ export class MysqlSchemaIntrospector extends BaseSqlIntrospector {
158
86
  GROUP BY kcu.CONSTRAINT_NAME, kcu.REFERENCED_TABLE_NAME, rc.DELETE_RULE, rc.UPDATE_RULE
159
87
  ORDER BY kcu.CONSTRAINT_NAME
160
88
  `;
161
- const results = await querier.all(sql, [tableName]);
89
+ }
90
+ getPrimaryKeyQuery(_tableName) {
91
+ return /*sql*/ `
92
+ SELECT COLUMN_NAME as column_name
93
+ FROM information_schema.KEY_COLUMN_USAGE
94
+ WHERE TABLE_SCHEMA = DATABASE()
95
+ AND TABLE_NAME = ?
96
+ AND CONSTRAINT_NAME = 'PRIMARY'
97
+ ORDER BY ORDINAL_POSITION
98
+ `;
99
+ }
100
+ // ============================================================================
101
+ // Row Mapping (dialect-specific)
102
+ // ============================================================================
103
+ mapTableNameRow(row) {
104
+ return row.table_name;
105
+ }
106
+ async mapColumnsResult(_querier, _tableName, results) {
107
+ return results.map((row) => ({
108
+ name: row.column_name,
109
+ type: (row.column_type || '').toUpperCase(),
110
+ nullable: row.is_nullable === 'YES',
111
+ defaultValue: this.parseDefaultValue(row.column_default),
112
+ isPrimaryKey: row.column_key === 'PRI',
113
+ isAutoIncrement: (row.extra || '').toLowerCase().includes('auto_increment'),
114
+ isUnique: row.column_key === 'UNI',
115
+ length: this.toNumber(row.character_maximum_length),
116
+ precision: this.toNumber(row.numeric_precision),
117
+ scale: this.toNumber(row.numeric_scale),
118
+ comment: row.column_comment || undefined,
119
+ }));
120
+ }
121
+ async mapIndexesResult(_querier, _tableName, results) {
122
+ return results.map((row) => ({
123
+ name: row.index_name,
124
+ columns: (row.columns || '').split(','),
125
+ unique: Boolean(row.is_unique),
126
+ }));
127
+ }
128
+ async mapForeignKeysResult(_querier, _tableName, results) {
162
129
  return results.map((row) => ({
163
130
  name: row.constraint_name,
164
131
  columns: (row.columns || '').split(','),
@@ -168,16 +135,7 @@ export class MysqlSchemaIntrospector extends BaseSqlIntrospector {
168
135
  onUpdate: this.normalizeReferentialAction(row.update_rule),
169
136
  }));
170
137
  }
171
- async getPrimaryKey(querier, tableName) {
172
- const sql = `
173
- SELECT COLUMN_NAME as column_name
174
- FROM information_schema.KEY_COLUMN_USAGE
175
- WHERE TABLE_SCHEMA = DATABASE()
176
- AND TABLE_NAME = ?
177
- AND CONSTRAINT_NAME = 'PRIMARY'
178
- ORDER BY ORDINAL_POSITION
179
- `;
180
- const results = await querier.all(sql, [tableName]);
138
+ mapPrimaryKeyResult(results) {
181
139
  if (results.length === 0) {
182
140
  return undefined;
183
141
  }
@@ -187,7 +145,6 @@ export class MysqlSchemaIntrospector extends BaseSqlIntrospector {
187
145
  if (defaultValue === null) {
188
146
  return undefined;
189
147
  }
190
- // Check for common patterns
191
148
  if (defaultValue === 'NULL') {
192
149
  return null;
193
150
  }
@@ -206,20 +163,6 @@ export class MysqlSchemaIntrospector extends BaseSqlIntrospector {
206
163
  }
207
164
  return defaultValue;
208
165
  }
209
- normalizeReferentialAction(action) {
210
- switch (action.toUpperCase()) {
211
- case 'CASCADE':
212
- return 'CASCADE';
213
- case 'SET NULL':
214
- return 'SET NULL';
215
- case 'RESTRICT':
216
- return 'RESTRICT';
217
- case 'NO ACTION':
218
- return 'NO ACTION';
219
- default:
220
- return undefined;
221
- }
222
- }
223
166
  }
224
167
  /**
225
168
  * Alias for MysqlSchemaIntrospector.
@@ -1 +1 @@
1
- {"version":3,"file":"mysqlIntrospector.js","sourceRoot":"","sources":["../../../src/migrate/introspection/mysqlIntrospector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mysqlIntrospector.js","sourceRoot":"","sources":["../../../src/migrate/introspection/mysqlIntrospector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,6BAA6B;IACrD,IAAI,CAAc;IAErC,YAAY,IAAiB;QAC3B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,+EAA+E;IAC/E,iCAAiC;IACjC,+EAA+E;IAErE,kBAAkB;QAC1B,OAAO,OAAO,CAAC;;;;;;KAMd,CAAC;IACJ,CAAC;IAES,gBAAgB;QACxB,OAAO,OAAO,CAAC;;;;;KAKd,CAAC;IACJ,CAAC;IAES,sBAAsB,CAAC,OAAkC;QACjE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;QAChC,OAAO,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1F,CAAC;IAES,eAAe,CAAC,UAAkB;QAC1C,OAAO,OAAO,CAAC;;;;;;;;;;;;;;;;;KAiBd,CAAC;IACJ,CAAC;IAES,eAAe,CAAC,UAAkB;QAC1C,OAAO,OAAO,CAAC;;;;;;;;;;;KAWd,CAAC;IACJ,CAAC;IAES,mBAAmB,CAAC,UAAkB;QAC9C,OAAO,OAAO,CAAC;;;;;;;;;;;;;;;;;KAiBd,CAAC;IACJ,CAAC;IAES,kBAAkB,CAAC,UAAkB;QAC7C,OAAO,OAAO,CAAC;;;;;;;KAOd,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,iCAAiC;IACjC,+EAA+E;IAErE,eAAe,CAAC,GAA4B;QACpD,OAAO,GAAG,CAAC,UAAoB,CAAC;IAClC,CAAC;IAES,KAAK,CAAC,gBAAgB,CAC9B,QAAoB,EACpB,UAAkB,EAClB,OAAkC;QAElC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI,EAAE,GAAG,CAAC,WAAqB;YAC/B,IAAI,EAAE,CAAE,GAAG,CAAC,WAAsB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;YACvD,QAAQ,EAAE,GAAG,CAAC,WAAW,KAAK,KAAK;YACnC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAA+B,CAAC;YACzE,YAAY,EAAE,GAAG,CAAC,UAAU,KAAK,KAAK;YACtC,eAAe,EAAE,CAAE,GAAG,CAAC,KAAgB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACvF,QAAQ,EAAE,GAAG,CAAC,UAAU,KAAK,KAAK;YAClC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,wBAAkD,CAAC;YAC7E,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAA2C,CAAC;YACzE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAuC,CAAC;YACjE,OAAO,EAAG,GAAG,CAAC,cAAyB,IAAI,SAAS;SACrD,CAAC,CAAC,CAAC;IACN,CAAC;IAES,KAAK,CAAC,gBAAgB,CAC9B,QAAoB,EACpB,UAAkB,EAClB,OAAkC;QAElC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI,EAAE,GAAG,CAAC,UAAoB;YAC9B,OAAO,EAAE,CAAE,GAAG,CAAC,OAAkB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YACnD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;SAC/B,CAAC,CAAC,CAAC;IACN,CAAC;IAES,KAAK,CAAC,oBAAoB,CAClC,QAAoB,EACpB,UAAkB,EAClB,OAAkC;QAElC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI,EAAE,GAAG,CAAC,eAAyB;YACnC,OAAO,EAAE,CAAE,GAAG,CAAC,OAAkB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YACnD,eAAe,EAAE,GAAG,CAAC,gBAA0B;YAC/C,iBAAiB,EAAE,CAAE,GAAG,CAAC,kBAA6B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YACxE,QAAQ,EAAE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,WAAqB,CAAC;YACpE,QAAQ,EAAE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,WAAqB,CAAC;SACrE,CAAC,CAAC,CAAC;IACN,CAAC;IAES,mBAAmB,CAAC,OAAkC;QAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAqB,CAAC,CAAC;IACrD,CAAC;IAES,iBAAiB,CAAC,YAA2B;QACrD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,gGAAgG;QAChG,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,mBAAmB,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,qBAAqB,EAAE,CAAC;YAC/G,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,uBAAuB,CAAC"}
@@ -1,23 +1,25 @@
1
- import type { ColumnSchema, ForeignKeySchema, IndexSchema, QuerierPool, SchemaIntrospector, SqlQuerier, TableSchema } from '../../type/index.js';
2
- import { BaseSqlIntrospector } from './baseSqlIntrospector.js';
1
+ import type { ColumnSchema, ForeignKeySchema, IndexSchema, QuerierPool, SqlQuerier } from '../../type/index.js';
2
+ import { AbstractSqlSchemaIntrospector } from './abstractSqlSchemaIntrospector.js';
3
3
  /**
4
4
  * PostgreSQL schema introspector
5
5
  */
6
- export declare class PostgresSchemaIntrospector extends BaseSqlIntrospector implements SchemaIntrospector {
7
- private readonly pool;
6
+ export declare class PostgresSchemaIntrospector extends AbstractSqlSchemaIntrospector {
7
+ protected readonly pool: QuerierPool;
8
8
  constructor(pool: QuerierPool);
9
- getTableSchema(tableName: string): Promise<TableSchema | undefined>;
10
- getTableNames(): Promise<string[]>;
11
- tableExists(tableName: string): Promise<boolean>;
12
- protected tableExistsInternal(querier: SqlQuerier, tableName: string): Promise<boolean>;
13
- protected getQuerier(): Promise<SqlQuerier>;
14
- protected getColumns(querier: SqlQuerier, tableName: string): Promise<ColumnSchema[]>;
15
- protected getIndexes(querier: SqlQuerier, tableName: string): Promise<IndexSchema[]>;
16
- protected getForeignKeys(querier: SqlQuerier, tableName: string): Promise<ForeignKeySchema[]>;
17
- protected getPrimaryKey(querier: SqlQuerier, tableName: string): Promise<string[] | undefined>;
9
+ protected getTableNamesQuery(): string;
10
+ protected tableExistsQuery(): string;
11
+ protected parseTableExistsResult(results: Record<string, unknown>[]): boolean;
12
+ protected getColumnsQuery(_tableName: string): string;
13
+ protected getIndexesQuery(_tableName: string): string;
14
+ protected getForeignKeysQuery(_tableName: string): string;
15
+ protected getPrimaryKeyQuery(_tableName: string): string;
16
+ protected mapTableNameRow(row: Record<string, unknown>): string;
17
+ protected mapColumnsResult(_querier: SqlQuerier, _tableName: string, results: Record<string, unknown>[]): Promise<ColumnSchema[]>;
18
+ protected mapIndexesResult(_querier: SqlQuerier, _tableName: string, results: Record<string, unknown>[]): Promise<IndexSchema[]>;
19
+ protected mapForeignKeysResult(_querier: SqlQuerier, _tableName: string, results: Record<string, unknown>[]): Promise<ForeignKeySchema[]>;
20
+ protected mapPrimaryKeyResult(results: Record<string, unknown>[]): string[] | undefined;
18
21
  protected normalizeType(dataType: string, udtName: string): string;
19
22
  protected parseDefaultValue(defaultValue: string | null): unknown;
20
23
  protected isAutoIncrement(defaultValue: string | null, isIdentity: string): boolean;
21
- protected normalizeReferentialAction(action: string): 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION' | undefined;
22
24
  }
23
25
  //# sourceMappingURL=postgresIntrospector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"postgresIntrospector.d.ts","sourceRoot":"","sources":["../../../src/migrate/introspection/postgresIntrospector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,mBAAoB,YAAW,kBAAkB;IACnF,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,WAAW;IAIxC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IA4BnE,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAmBlC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cAUtC,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cAa7E,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;cAWjC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;cA0E3E,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;cAgC1E,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;cA6CnF,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;IAsBpG,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAWlE,SAAS,CAAC,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IA6BjE,SAAS,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAYnF,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS;CAcpH"}
1
+ {"version":3,"file":"postgresIntrospector.d.ts","sourceRoot":"","sources":["../../../src/migrate/introspection/postgresIntrospector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChH,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,6BAA6B;IAC3E,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;gBAEzB,IAAI,EAAE,WAAW;IAS7B,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAUtC,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAUpC,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO;IAI7E,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IA4CrD,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAoBrD,SAAS,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IA2BzD,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAkBxD,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;cAI/C,gBAAgB,CAC9B,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC;cAgBV,gBAAgB,CAC9B,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC,OAAO,CAAC,WAAW,EAAE,CAAC;cAQT,oBAAoB,CAClC,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAW9B,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS;IAWvF,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAWlE,SAAS,CAAC,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IA4BjE,SAAS,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;CAWpF"}
@@ -1,86 +1,39 @@
1
- import { isSqlQuerier } from '../../type/index.js';
2
- import { BaseSqlIntrospector } from './baseSqlIntrospector.js';
1
+ import { AbstractSqlSchemaIntrospector } from './abstractSqlSchemaIntrospector.js';
3
2
  /**
4
3
  * PostgreSQL schema introspector
5
4
  */
6
- export class PostgresSchemaIntrospector extends BaseSqlIntrospector {
5
+ export class PostgresSchemaIntrospector extends AbstractSqlSchemaIntrospector {
7
6
  pool;
8
7
  constructor(pool) {
9
8
  super('postgres');
10
9
  this.pool = pool;
11
10
  }
12
- async getTableSchema(tableName) {
13
- const querier = await this.getQuerier();
14
- try {
15
- const exists = await this.tableExistsInternal(querier, tableName);
16
- if (!exists) {
17
- return undefined;
18
- }
19
- const [columns, indexes, foreignKeys, primaryKey] = await Promise.all([
20
- this.getColumns(querier, tableName),
21
- this.getIndexes(querier, tableName),
22
- this.getForeignKeys(querier, tableName),
23
- this.getPrimaryKey(querier, tableName),
24
- ]);
25
- return {
26
- name: tableName,
27
- columns,
28
- primaryKey,
29
- indexes,
30
- foreignKeys,
31
- };
32
- }
33
- finally {
34
- await querier.release();
35
- }
36
- }
37
- async getTableNames() {
38
- const querier = await this.getQuerier();
39
- try {
40
- const sql = `
41
- SELECT table_name
42
- FROM information_schema.tables
43
- WHERE table_schema = 'public'
44
- AND table_type = 'BASE TABLE'
45
- ORDER BY table_name
46
- `;
47
- const results = await querier.all(sql);
48
- return results.map((r) => r.table_name);
49
- }
50
- finally {
51
- await querier.release();
52
- }
53
- }
54
- async tableExists(tableName) {
55
- const querier = await this.getQuerier();
56
- try {
57
- return this.tableExistsInternal(querier, tableName);
58
- }
59
- finally {
60
- await querier.release();
61
- }
11
+ // ============================================================================
12
+ // SQL Queries (dialect-specific)
13
+ // ============================================================================
14
+ getTableNamesQuery() {
15
+ return /*sql*/ `
16
+ SELECT table_name
17
+ FROM information_schema.tables
18
+ WHERE table_schema = 'public'
19
+ AND table_type = 'BASE TABLE'
20
+ ORDER BY table_name
21
+ `;
62
22
  }
63
- async tableExistsInternal(querier, tableName) {
64
- const sql = `
23
+ tableExistsQuery() {
24
+ return /*sql*/ `
65
25
  SELECT EXISTS (
66
26
  SELECT FROM information_schema.tables
67
27
  WHERE table_schema = 'public'
68
28
  AND table_name = $1
69
29
  ) AS exists
70
30
  `;
71
- const results = await querier.all(sql, [tableName]);
72
- return results[0]?.exists ?? false;
73
31
  }
74
- async getQuerier() {
75
- const querier = await this.pool.getQuerier();
76
- if (!isSqlQuerier(querier)) {
77
- await querier.release();
78
- throw new Error('PostgresSchemaIntrospector requires a SQL-based querier');
79
- }
80
- return querier;
32
+ parseTableExistsResult(results) {
33
+ return results[0]?.exists ?? false;
81
34
  }
82
- async getColumns(querier, tableName) {
83
- const sql = /*sql*/ `
35
+ getColumnsQuery(_tableName) {
36
+ return /*sql*/ `
84
37
  SELECT
85
38
  c.column_name,
86
39
  c.data_type,
@@ -121,23 +74,9 @@ export class PostgresSchemaIntrospector extends BaseSqlIntrospector {
121
74
  AND c.table_name = $1
122
75
  ORDER BY c.ordinal_position
123
76
  `;
124
- const results = await querier.all(sql, [tableName]);
125
- return results.map((row) => ({
126
- name: row.column_name,
127
- type: this.normalizeType(row.data_type, row.udt_name),
128
- nullable: row.is_nullable === 'YES',
129
- defaultValue: this.parseDefaultValue(row.column_default),
130
- isPrimaryKey: row.is_primary_key,
131
- isAutoIncrement: this.isAutoIncrement(row.column_default, row.is_identity),
132
- isUnique: row.is_unique,
133
- length: row.character_maximum_length ?? undefined,
134
- precision: row.numeric_precision ?? undefined,
135
- scale: row.numeric_scale ?? undefined,
136
- comment: row.column_comment ?? undefined,
137
- }));
138
77
  }
139
- async getIndexes(querier, tableName) {
140
- const sql = /*sql*/ `
78
+ getIndexesQuery(_tableName) {
79
+ return /*sql*/ `
141
80
  SELECT
142
81
  i.relname AS index_name,
143
82
  array_to_json(array_agg(a.attname ORDER BY k.n)) AS columns,
@@ -154,15 +93,9 @@ export class PostgresSchemaIntrospector extends BaseSqlIntrospector {
154
93
  GROUP BY i.relname, ix.indisunique
155
94
  ORDER BY i.relname
156
95
  `;
157
- const results = await querier.all(sql, [tableName]);
158
- return results.map((row) => ({
159
- name: row.index_name,
160
- columns: row.columns,
161
- unique: row.is_unique,
162
- }));
163
96
  }
164
- async getForeignKeys(querier, tableName) {
165
- const sql = /*sql*/ `
97
+ getForeignKeysQuery(_tableName) {
98
+ return /*sql*/ `
166
99
  SELECT
167
100
  tc.constraint_name,
168
101
  array_to_json(array_agg(kcu.column_name ORDER BY kcu.ordinal_position)) AS columns,
@@ -186,18 +119,9 @@ export class PostgresSchemaIntrospector extends BaseSqlIntrospector {
186
119
  GROUP BY tc.constraint_name, ccu.table_name, rc.delete_rule, rc.update_rule
187
120
  ORDER BY tc.constraint_name
188
121
  `;
189
- const results = await querier.all(sql, [tableName]);
190
- return results.map((row) => ({
191
- name: row.constraint_name,
192
- columns: row.columns,
193
- referencedTable: row.referenced_table,
194
- referencedColumns: row.referenced_columns,
195
- onDelete: this.normalizeReferentialAction(row.delete_rule),
196
- onUpdate: this.normalizeReferentialAction(row.update_rule),
197
- }));
198
122
  }
199
- async getPrimaryKey(querier, tableName) {
200
- const sql = /*sql*/ `
123
+ getPrimaryKeyQuery(_tableName) {
124
+ return /*sql*/ `
201
125
  SELECT kcu.column_name
202
126
  FROM information_schema.table_constraints tc
203
127
  JOIN information_schema.key_column_usage kcu
@@ -208,12 +132,54 @@ export class PostgresSchemaIntrospector extends BaseSqlIntrospector {
208
132
  AND tc.table_schema = 'public'
209
133
  ORDER BY kcu.ordinal_position
210
134
  `;
211
- const results = await querier.all(sql, [tableName]);
135
+ }
136
+ // ============================================================================
137
+ // Row Mapping (dialect-specific)
138
+ // ============================================================================
139
+ mapTableNameRow(row) {
140
+ return row.table_name;
141
+ }
142
+ async mapColumnsResult(_querier, _tableName, results) {
143
+ return results.map((row) => ({
144
+ name: row.column_name,
145
+ type: this.normalizeType(row.data_type, row.udt_name),
146
+ nullable: row.is_nullable === 'YES',
147
+ defaultValue: this.parseDefaultValue(row.column_default),
148
+ isPrimaryKey: row.is_primary_key,
149
+ isAutoIncrement: this.isAutoIncrement(row.column_default, row.is_identity),
150
+ isUnique: row.is_unique,
151
+ length: row.character_maximum_length ?? undefined,
152
+ precision: row.numeric_precision ?? undefined,
153
+ scale: row.numeric_scale ?? undefined,
154
+ comment: row.column_comment ?? undefined,
155
+ }));
156
+ }
157
+ async mapIndexesResult(_querier, _tableName, results) {
158
+ return results.map((row) => ({
159
+ name: row.index_name,
160
+ columns: row.columns,
161
+ unique: row.is_unique,
162
+ }));
163
+ }
164
+ async mapForeignKeysResult(_querier, _tableName, results) {
165
+ return results.map((row) => ({
166
+ name: row.constraint_name,
167
+ columns: row.columns,
168
+ referencedTable: row.referenced_table,
169
+ referencedColumns: row.referenced_columns,
170
+ onDelete: this.normalizeReferentialAction(row.delete_rule),
171
+ onUpdate: this.normalizeReferentialAction(row.update_rule),
172
+ }));
173
+ }
174
+ mapPrimaryKeyResult(results) {
212
175
  if (results.length === 0) {
213
176
  return undefined;
214
177
  }
215
178
  return results.map((r) => r.column_name);
216
179
  }
180
+ // ============================================================================
181
+ // PostgreSQL-specific helpers
182
+ // ============================================================================
217
183
  normalizeType(dataType, udtName) {
218
184
  // Handle user-defined types and arrays
219
185
  if (dataType === 'USER-DEFINED') {
@@ -230,7 +196,6 @@ export class PostgresSchemaIntrospector extends BaseSqlIntrospector {
230
196
  }
231
197
  // Remove type casting (e.g., ::text, ::character varying, ::text[])
232
198
  const cleaned = defaultValue.replace(/::[a-z_]+(\s+[a-z_]+)?(\[\])?/gi, '').trim();
233
- // Check for common patterns
234
199
  if (cleaned.startsWith("'") && cleaned.endsWith("'")) {
235
200
  return cleaned.slice(1, -1);
236
201
  }
@@ -260,19 +225,5 @@ export class PostgresSchemaIntrospector extends BaseSqlIntrospector {
260
225
  }
261
226
  return false;
262
227
  }
263
- normalizeReferentialAction(action) {
264
- switch (action.toUpperCase()) {
265
- case 'CASCADE':
266
- return 'CASCADE';
267
- case 'SET NULL':
268
- return 'SET NULL';
269
- case 'RESTRICT':
270
- return 'RESTRICT';
271
- case 'NO ACTION':
272
- return 'NO ACTION';
273
- default:
274
- return undefined;
275
- }
276
- }
277
228
  }
278
229
  //# sourceMappingURL=postgresIntrospector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"postgresIntrospector.js","sourceRoot":"","sources":["../../../src/migrate/introspection/postgresIntrospector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postgresIntrospector.js","sourceRoot":"","sources":["../../../src/migrate/introspection/postgresIntrospector.ts"],"names":[],"mappings":"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"}