@duckcodeailabs/dql-connectors 1.6.12 → 1.6.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/connection-pool.d.ts.map +1 -1
- package/dist/connection-pool.js +32 -31
- package/dist/connection-pool.js.map +1 -1
- package/dist/connector.d.ts +32 -1
- package/dist/connector.d.ts.map +1 -1
- package/dist/drivers/databricks.d.ts +6 -0
- package/dist/drivers/databricks.d.ts.map +1 -1
- package/dist/drivers/databricks.js +98 -6
- package/dist/drivers/databricks.js.map +1 -1
- package/dist/drivers/duckdb.d.ts.map +1 -1
- package/dist/drivers/duckdb.js +2 -2
- package/dist/drivers/duckdb.js.map +1 -1
- package/dist/drivers/snowflake.d.ts +1 -0
- package/dist/drivers/snowflake.d.ts.map +1 -1
- package/dist/drivers/snowflake.js +89 -5
- package/dist/drivers/snowflake.js.map +1 -1
- package/dist/index.d.ts +1 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -10
- package/dist/index.js.map +1 -1
- package/dist/optional-dependency.d.ts +9 -0
- package/dist/optional-dependency.d.ts.map +1 -0
- package/dist/optional-dependency.js +36 -0
- package/dist/optional-dependency.js.map +1 -0
- package/package.json +1 -15
- package/dist/drivers/athena.d.ts +0 -17
- package/dist/drivers/athena.d.ts.map +0 -1
- package/dist/drivers/athena.js +0 -157
- package/dist/drivers/athena.js.map +0 -1
- package/dist/drivers/bigquery.d.ts +0 -14
- package/dist/drivers/bigquery.d.ts.map +0 -1
- package/dist/drivers/bigquery.js +0 -230
- package/dist/drivers/bigquery.js.map +0 -1
- package/dist/drivers/clickhouse.d.ts +0 -14
- package/dist/drivers/clickhouse.d.ts.map +0 -1
- package/dist/drivers/clickhouse.js +0 -103
- package/dist/drivers/clickhouse.js.map +0 -1
- package/dist/drivers/fabric.d.ts +0 -7
- package/dist/drivers/fabric.d.ts.map +0 -1
- package/dist/drivers/fabric.js +0 -12
- package/dist/drivers/fabric.js.map +0 -1
- package/dist/drivers/mssql.d.ts +0 -14
- package/dist/drivers/mssql.d.ts.map +0 -1
- package/dist/drivers/mssql.js +0 -164
- package/dist/drivers/mssql.js.map +0 -1
- package/dist/drivers/mysql.d.ts +0 -13
- package/dist/drivers/mysql.d.ts.map +0 -1
- package/dist/drivers/mysql.js +0 -136
- package/dist/drivers/mysql.js.map +0 -1
- package/dist/drivers/postgresql.d.ts +0 -13
- package/dist/drivers/postgresql.d.ts.map +0 -1
- package/dist/drivers/postgresql.js +0 -117
- package/dist/drivers/postgresql.js.map +0 -1
- package/dist/drivers/redshift.d.ts +0 -7
- package/dist/drivers/redshift.d.ts.map +0 -1
- package/dist/drivers/redshift.js +0 -12
- package/dist/drivers/redshift.js.map +0 -1
- package/dist/drivers/sqlite.d.ts +0 -13
- package/dist/drivers/sqlite.d.ts.map +0 -1
- package/dist/drivers/sqlite.js +0 -104
- package/dist/drivers/sqlite.js.map +0 -1
- package/dist/drivers/trino.d.ts +0 -14
- package/dist/drivers/trino.d.ts.map +0 -1
- package/dist/drivers/trino.js +0 -133
- package/dist/drivers/trino.js.map +0 -1
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { DatabaseConnector, ConnectionConfig, TableInfo, ColumnInfo } from '../connector.js';
|
|
2
|
-
import type { QueryResult } from '../result-types.js';
|
|
3
|
-
export declare class ClickHouseConnector implements DatabaseConnector {
|
|
4
|
-
readonly driverName = "clickhouse";
|
|
5
|
-
private endpoint;
|
|
6
|
-
private headers;
|
|
7
|
-
connect(config: ConnectionConfig): Promise<void>;
|
|
8
|
-
execute(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
9
|
-
disconnect(): Promise<void>;
|
|
10
|
-
ping(): Promise<boolean>;
|
|
11
|
-
listTables(): Promise<TableInfo[]>;
|
|
12
|
-
listColumns(schema?: string, table?: string): Promise<ColumnInfo[]>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=clickhouse.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../src/drivers/clickhouse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAA+B,MAAM,oBAAoB,CAAC;AAEnF,qBAAa,mBAAoB,YAAW,iBAAiB;IAC3D,QAAQ,CAAC,UAAU,gBAAgB;IACnC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,OAAO,CAA8B;IAEvC,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAehD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAoC9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IASxB,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAWlC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAkB1E"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
export class ClickHouseConnector {
|
|
2
|
-
driverName = 'clickhouse';
|
|
3
|
-
endpoint = null;
|
|
4
|
-
headers = {};
|
|
5
|
-
async connect(config) {
|
|
6
|
-
const protocol = config.ssl === false ? 'http' : 'https';
|
|
7
|
-
const host = config.host ?? 'localhost';
|
|
8
|
-
const port = config.port ?? (config.ssl === false ? 8123 : 8443);
|
|
9
|
-
this.endpoint = `${protocol}://${host}:${port}`;
|
|
10
|
-
this.headers = {
|
|
11
|
-
'Content-Type': 'text/plain; charset=utf-8',
|
|
12
|
-
};
|
|
13
|
-
if (config.username || config.password) {
|
|
14
|
-
const token = Buffer.from(`${config.username ?? 'default'}:${config.password ?? ''}`).toString('base64');
|
|
15
|
-
this.headers.Authorization = `Basic ${token}`;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
async execute(sql, params) {
|
|
19
|
-
if (!this.endpoint) {
|
|
20
|
-
throw new Error('ClickHouse connector not connected. Call connect() first.');
|
|
21
|
-
}
|
|
22
|
-
if (params && params.length > 0) {
|
|
23
|
-
throw new Error('ClickHouse connector does not yet support positional parameters.');
|
|
24
|
-
}
|
|
25
|
-
const startTime = performance.now();
|
|
26
|
-
const response = await fetch(this.endpoint, {
|
|
27
|
-
method: 'POST',
|
|
28
|
-
headers: this.headers,
|
|
29
|
-
body: `${sql.trim().replace(/;$/, '')} FORMAT JSON`,
|
|
30
|
-
});
|
|
31
|
-
if (!response.ok) {
|
|
32
|
-
throw new Error(`ClickHouse query failed: ${await response.text()}`);
|
|
33
|
-
}
|
|
34
|
-
const payload = await response.json();
|
|
35
|
-
const executionTimeMs = performance.now() - startTime;
|
|
36
|
-
const rows = payload.data ?? [];
|
|
37
|
-
const columns = (payload.meta ?? []).map((column) => ({
|
|
38
|
-
name: column.name,
|
|
39
|
-
type: mapColumnType(column.type),
|
|
40
|
-
driverType: column.type,
|
|
41
|
-
}));
|
|
42
|
-
return {
|
|
43
|
-
columns,
|
|
44
|
-
rows,
|
|
45
|
-
rowCount: payload.rows ?? rows.length,
|
|
46
|
-
executionTimeMs,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
async disconnect() {
|
|
50
|
-
this.endpoint = null;
|
|
51
|
-
this.headers = {};
|
|
52
|
-
}
|
|
53
|
-
async ping() {
|
|
54
|
-
try {
|
|
55
|
-
await this.execute('SELECT 1 AS ok');
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async listTables() {
|
|
63
|
-
const result = await this.execute(`SELECT database, name, engine FROM system.tables WHERE database NOT IN ('system', 'information_schema', 'INFORMATION_SCHEMA') ORDER BY database, name`);
|
|
64
|
-
return result.rows.map((row) => ({
|
|
65
|
-
schema: String(row['database'] ?? ''),
|
|
66
|
-
name: String(row['name'] ?? ''),
|
|
67
|
-
type: String(row['engine'] ?? '') === 'View' ? 'VIEW' : 'BASE TABLE',
|
|
68
|
-
}));
|
|
69
|
-
}
|
|
70
|
-
async listColumns(schema, table) {
|
|
71
|
-
let sql = `SELECT database, table, name, type, position FROM system.columns WHERE database NOT IN ('system', 'information_schema', 'INFORMATION_SCHEMA')`;
|
|
72
|
-
if (schema) {
|
|
73
|
-
sql += ` AND database = '${schema.replace(/'/g, "''")}'`;
|
|
74
|
-
}
|
|
75
|
-
if (table) {
|
|
76
|
-
sql += ` AND table = '${table.replace(/'/g, "''")}'`;
|
|
77
|
-
}
|
|
78
|
-
sql += ` ORDER BY database, table, position`;
|
|
79
|
-
const result = await this.execute(sql);
|
|
80
|
-
return result.rows.map((row) => ({
|
|
81
|
-
schema: String(row['database'] ?? ''),
|
|
82
|
-
table: String(row['table'] ?? ''),
|
|
83
|
-
name: String(row['name'] ?? ''),
|
|
84
|
-
dataType: String(row['type'] ?? ''),
|
|
85
|
-
ordinalPosition: Number(row['position'] ?? 0),
|
|
86
|
-
}));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
function mapColumnType(driverType) {
|
|
90
|
-
const lower = driverType.toLowerCase();
|
|
91
|
-
if (lower.includes('int') || lower.includes('float') || lower.includes('decimal'))
|
|
92
|
-
return 'number';
|
|
93
|
-
if (lower.includes('date') && !lower.includes('datetime'))
|
|
94
|
-
return 'date';
|
|
95
|
-
if (lower.includes('datetime') || lower.includes('timestamp'))
|
|
96
|
-
return 'datetime';
|
|
97
|
-
if (lower.includes('bool'))
|
|
98
|
-
return 'boolean';
|
|
99
|
-
if (lower.includes('string') || lower.includes('uuid'))
|
|
100
|
-
return 'string';
|
|
101
|
-
return 'unknown';
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=clickhouse.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../src/drivers/clickhouse.ts"],"names":[],"mappings":"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"}
|
package/dist/drivers/fabric.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { MSSQLConnector } from './mssql.js';
|
|
2
|
-
import type { ConnectionConfig } from '../connector.js';
|
|
3
|
-
export declare class FabricConnector extends MSSQLConnector {
|
|
4
|
-
readonly driverName = "fabric";
|
|
5
|
-
connect(config: ConnectionConfig): Promise<void>;
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=fabric.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fabric.d.ts","sourceRoot":"","sources":["../../src/drivers/fabric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,qBAAa,eAAgB,SAAQ,cAAc;IACjD,QAAQ,CAAC,UAAU,YAAY;IAEzB,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAOvD"}
|
package/dist/drivers/fabric.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { MSSQLConnector } from './mssql.js';
|
|
2
|
-
export class FabricConnector extends MSSQLConnector {
|
|
3
|
-
driverName = 'fabric';
|
|
4
|
-
async connect(config) {
|
|
5
|
-
await super.connect({
|
|
6
|
-
...config,
|
|
7
|
-
driver: 'fabric',
|
|
8
|
-
port: config.port ?? 1433,
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=fabric.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fabric.js","sourceRoot":"","sources":["../../src/drivers/fabric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACxC,UAAU,GAAG,QAAQ,CAAC;IAE/B,KAAK,CAAC,OAAO,CAAC,MAAwB;QACpC,MAAM,KAAK,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;SAC1B,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/drivers/mssql.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { DatabaseConnector, ConnectionConfig, DriverName, TableInfo, ColumnInfo } from '../connector.js';
|
|
2
|
-
import type { QueryResult } from '../result-types.js';
|
|
3
|
-
export declare class MSSQLConnector implements DatabaseConnector {
|
|
4
|
-
readonly driverName: DriverName;
|
|
5
|
-
private pool;
|
|
6
|
-
private sql;
|
|
7
|
-
connect(config: ConnectionConfig): Promise<void>;
|
|
8
|
-
execute(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
9
|
-
disconnect(): Promise<void>;
|
|
10
|
-
ping(): Promise<boolean>;
|
|
11
|
-
listTables(): Promise<TableInfo[]>;
|
|
12
|
-
listColumns(schema?: string, table?: string): Promise<ColumnInfo[]>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=mssql.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mssql.d.ts","sourceRoot":"","sources":["../../src/drivers/mssql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9G,OAAO,KAAK,EAAE,WAAW,EAA+B,MAAM,oBAAoB,CAAC;AAEnF,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAW;IAC1C,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,GAAG,CAAa;IAElB,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BhD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA2D9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAUxB,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAclC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAqB1E"}
|
package/dist/drivers/mssql.js
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
export class MSSQLConnector {
|
|
2
|
-
driverName = 'mssql';
|
|
3
|
-
pool = null;
|
|
4
|
-
sql = null;
|
|
5
|
-
async connect(config) {
|
|
6
|
-
// Dynamic import to avoid requiring tedious/mssql when not used
|
|
7
|
-
this.sql = await import('mssql');
|
|
8
|
-
const mssqlConfig = {
|
|
9
|
-
server: config.host ?? 'localhost',
|
|
10
|
-
port: config.port ?? 1433,
|
|
11
|
-
database: config.database,
|
|
12
|
-
user: config.username,
|
|
13
|
-
password: config.password,
|
|
14
|
-
options: {
|
|
15
|
-
encrypt: config.ssl !== false,
|
|
16
|
-
trustServerCertificate: true,
|
|
17
|
-
},
|
|
18
|
-
pool: {
|
|
19
|
-
max: 10,
|
|
20
|
-
min: 0,
|
|
21
|
-
idleTimeoutMillis: 30000,
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
if (config.connectionString) {
|
|
25
|
-
this.pool = await this.sql.connect(config.connectionString);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
this.pool = await this.sql.connect(mssqlConfig);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
async execute(sql, params) {
|
|
32
|
-
if (!this.pool) {
|
|
33
|
-
throw new Error('MSSQL connector not connected. Call connect() first.');
|
|
34
|
-
}
|
|
35
|
-
const startTime = performance.now();
|
|
36
|
-
const request = this.pool.request();
|
|
37
|
-
// Bind positional parameters as @p1, @p2, etc.
|
|
38
|
-
if (params && params.length > 0) {
|
|
39
|
-
for (let i = 0; i < params.length; i++) {
|
|
40
|
-
request.input(`p${i + 1}`, params[i]);
|
|
41
|
-
}
|
|
42
|
-
// Replace $N placeholders with @pN for MSSQL syntax
|
|
43
|
-
sql = sql.replace(/\$(\d+)/g, (_match, num) => `@p${num}`);
|
|
44
|
-
}
|
|
45
|
-
const result = await request.query(sql);
|
|
46
|
-
const executionTimeMs = performance.now() - startTime;
|
|
47
|
-
const recordset = result.recordset;
|
|
48
|
-
if (!recordset || recordset.length === 0) {
|
|
49
|
-
return {
|
|
50
|
-
columns: [],
|
|
51
|
-
rows: [],
|
|
52
|
-
rowCount: result.rowsAffected?.[0] ?? 0,
|
|
53
|
-
executionTimeMs,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
// Extract column metadata from recordset.columns
|
|
57
|
-
const columns = Object.keys(recordset.columns ?? {}).map((name) => {
|
|
58
|
-
const col = recordset.columns[name];
|
|
59
|
-
return {
|
|
60
|
-
name,
|
|
61
|
-
type: mapMSSQLType(col?.type?.declaration ?? ''),
|
|
62
|
-
driverType: col?.type?.declaration ?? 'unknown',
|
|
63
|
-
};
|
|
64
|
-
});
|
|
65
|
-
// If columns metadata is empty, infer from first row
|
|
66
|
-
if (columns.length === 0 && recordset.length > 0) {
|
|
67
|
-
for (const key of Object.keys(recordset[0])) {
|
|
68
|
-
columns.push({
|
|
69
|
-
name: key,
|
|
70
|
-
type: inferMSSQLType(recordset[0][key]),
|
|
71
|
-
driverType: 'inferred',
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
columns,
|
|
77
|
-
rows: recordset,
|
|
78
|
-
rowCount: recordset.length,
|
|
79
|
-
executionTimeMs,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
async disconnect() {
|
|
83
|
-
if (this.pool) {
|
|
84
|
-
await this.pool.close();
|
|
85
|
-
this.pool = null;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
async ping() {
|
|
89
|
-
if (!this.pool)
|
|
90
|
-
return false;
|
|
91
|
-
try {
|
|
92
|
-
await this.pool.request().query('SELECT 1');
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
async listTables() {
|
|
100
|
-
const result = await this.execute(`SELECT TABLE_SCHEMA AS table_schema, TABLE_NAME AS table_name, TABLE_TYPE AS table_type
|
|
101
|
-
FROM INFORMATION_SCHEMA.TABLES
|
|
102
|
-
WHERE TABLE_SCHEMA NOT IN ('INFORMATION_SCHEMA', 'sys')
|
|
103
|
-
ORDER BY TABLE_SCHEMA, TABLE_NAME`);
|
|
104
|
-
return result.rows.map((row) => ({
|
|
105
|
-
schema: String(row['table_schema'] ?? ''),
|
|
106
|
-
name: String(row['table_name'] ?? ''),
|
|
107
|
-
type: String(row['table_type'] ?? ''),
|
|
108
|
-
}));
|
|
109
|
-
}
|
|
110
|
-
async listColumns(schema, table) {
|
|
111
|
-
let sql = `SELECT TABLE_SCHEMA AS table_schema, TABLE_NAME AS table_name,
|
|
112
|
-
COLUMN_NAME AS column_name, DATA_TYPE AS data_type, ORDINAL_POSITION AS ordinal_position
|
|
113
|
-
FROM INFORMATION_SCHEMA.COLUMNS
|
|
114
|
-
WHERE TABLE_SCHEMA NOT IN ('INFORMATION_SCHEMA', 'sys')`;
|
|
115
|
-
if (schema) {
|
|
116
|
-
sql += ` AND TABLE_SCHEMA = '${schema.replace(/'/g, "''")}'`;
|
|
117
|
-
}
|
|
118
|
-
if (table) {
|
|
119
|
-
sql += ` AND TABLE_NAME = '${table.replace(/'/g, "''")}'`;
|
|
120
|
-
}
|
|
121
|
-
sql += ` ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION`;
|
|
122
|
-
const result = await this.execute(sql);
|
|
123
|
-
return result.rows.map((row) => ({
|
|
124
|
-
schema: String(row['table_schema'] ?? ''),
|
|
125
|
-
table: String(row['table_name'] ?? ''),
|
|
126
|
-
name: String(row['column_name'] ?? ''),
|
|
127
|
-
dataType: String(row['data_type'] ?? ''),
|
|
128
|
-
ordinalPosition: Number(row['ordinal_position'] ?? 0),
|
|
129
|
-
}));
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
function mapMSSQLType(declaration) {
|
|
133
|
-
const lower = (declaration ?? '').toLowerCase();
|
|
134
|
-
if (['int', 'bigint', 'smallint', 'tinyint', 'float', 'real', 'decimal', 'numeric', 'money', 'smallmoney'].some((t) => lower.includes(t))) {
|
|
135
|
-
return 'number';
|
|
136
|
-
}
|
|
137
|
-
if (lower.includes('date') && !lower.includes('datetime')) {
|
|
138
|
-
return 'date';
|
|
139
|
-
}
|
|
140
|
-
if (['datetime', 'datetime2', 'datetimeoffset', 'smalldatetime', 'timestamp'].some((t) => lower.includes(t))) {
|
|
141
|
-
return 'datetime';
|
|
142
|
-
}
|
|
143
|
-
if (lower.includes('bit')) {
|
|
144
|
-
return 'boolean';
|
|
145
|
-
}
|
|
146
|
-
if (['varchar', 'nvarchar', 'char', 'nchar', 'text', 'ntext', 'xml'].some((t) => lower.includes(t))) {
|
|
147
|
-
return 'string';
|
|
148
|
-
}
|
|
149
|
-
return 'unknown';
|
|
150
|
-
}
|
|
151
|
-
function inferMSSQLType(value) {
|
|
152
|
-
if (value === null || value === undefined)
|
|
153
|
-
return 'null';
|
|
154
|
-
if (typeof value === 'number')
|
|
155
|
-
return 'number';
|
|
156
|
-
if (typeof value === 'boolean')
|
|
157
|
-
return 'boolean';
|
|
158
|
-
if (typeof value === 'string')
|
|
159
|
-
return 'string';
|
|
160
|
-
if (value instanceof Date)
|
|
161
|
-
return 'datetime';
|
|
162
|
-
return 'unknown';
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=mssql.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mssql.js","sourceRoot":"","sources":["../../src/drivers/mssql.ts"],"names":[],"mappings":"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"}
|
package/dist/drivers/mysql.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { DatabaseConnector, ConnectionConfig, TableInfo, ColumnInfo } from '../connector.js';
|
|
2
|
-
import type { QueryResult } from '../result-types.js';
|
|
3
|
-
export declare class MySQLConnector implements DatabaseConnector {
|
|
4
|
-
readonly driverName = "mysql";
|
|
5
|
-
private pool;
|
|
6
|
-
connect(config: ConnectionConfig): Promise<void>;
|
|
7
|
-
execute(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
8
|
-
disconnect(): Promise<void>;
|
|
9
|
-
ping(): Promise<boolean>;
|
|
10
|
-
listTables(): Promise<TableInfo[]>;
|
|
11
|
-
listColumns(schema?: string, table?: string): Promise<ColumnInfo[]>;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=mysql.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/drivers/mysql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAA+B,MAAM,oBAAoB,CAAC;AAEnF,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,UAAU,WAAW;IAC9B,OAAO,CAAC,IAAI,CAAa;IAEnB,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BhD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAiC9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAUxB,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAclC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAuB1E"}
|
package/dist/drivers/mysql.js
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
export class MySQLConnector {
|
|
2
|
-
driverName = 'mysql';
|
|
3
|
-
pool = null;
|
|
4
|
-
async connect(config) {
|
|
5
|
-
// Dynamic import to avoid requiring mysql2 when not used
|
|
6
|
-
const mysql = await import('mysql2/promise');
|
|
7
|
-
const poolConfig = {
|
|
8
|
-
host: config.host ?? 'localhost',
|
|
9
|
-
port: config.port ?? 3306,
|
|
10
|
-
database: config.database,
|
|
11
|
-
user: config.username,
|
|
12
|
-
password: config.password,
|
|
13
|
-
waitForConnections: true,
|
|
14
|
-
connectionLimit: 10,
|
|
15
|
-
queueLimit: 0,
|
|
16
|
-
};
|
|
17
|
-
if (config.connectionString) {
|
|
18
|
-
poolConfig.uri = config.connectionString;
|
|
19
|
-
}
|
|
20
|
-
if (config.ssl) {
|
|
21
|
-
poolConfig.ssl = { rejectUnauthorized: false };
|
|
22
|
-
}
|
|
23
|
-
this.pool = mysql.createPool(poolConfig);
|
|
24
|
-
}
|
|
25
|
-
async execute(sql, params) {
|
|
26
|
-
if (!this.pool) {
|
|
27
|
-
throw new Error('MySQL connector not connected. Call connect() first.');
|
|
28
|
-
}
|
|
29
|
-
const startTime = performance.now();
|
|
30
|
-
const [rows, fields] = await this.pool.execute(sql, params);
|
|
31
|
-
const executionTimeMs = performance.now() - startTime;
|
|
32
|
-
if (!Array.isArray(rows)) {
|
|
33
|
-
// Non-SELECT statement (INSERT, UPDATE, DELETE)
|
|
34
|
-
return {
|
|
35
|
-
columns: [],
|
|
36
|
-
rows: [],
|
|
37
|
-
rowCount: rows.affectedRows ?? 0,
|
|
38
|
-
executionTimeMs,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
const columns = (fields ?? []).map((field) => ({
|
|
42
|
-
name: field.name,
|
|
43
|
-
type: mapMySQLType(field.columnType),
|
|
44
|
-
driverType: String(field.columnType),
|
|
45
|
-
}));
|
|
46
|
-
return {
|
|
47
|
-
columns,
|
|
48
|
-
rows: rows,
|
|
49
|
-
rowCount: rows.length,
|
|
50
|
-
executionTimeMs,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
async disconnect() {
|
|
54
|
-
if (this.pool) {
|
|
55
|
-
await this.pool.end();
|
|
56
|
-
this.pool = null;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
async ping() {
|
|
60
|
-
if (!this.pool)
|
|
61
|
-
return false;
|
|
62
|
-
try {
|
|
63
|
-
await this.pool.execute('SELECT 1');
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
return false;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
async listTables() {
|
|
71
|
-
const result = await this.execute(`SELECT table_schema, table_name, table_type
|
|
72
|
-
FROM information_schema.tables
|
|
73
|
-
WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
|
|
74
|
-
ORDER BY table_schema, table_name`);
|
|
75
|
-
return result.rows.map((row) => ({
|
|
76
|
-
schema: String(row['TABLE_SCHEMA'] ?? row['table_schema'] ?? ''),
|
|
77
|
-
name: String(row['TABLE_NAME'] ?? row['table_name'] ?? ''),
|
|
78
|
-
type: String(row['TABLE_TYPE'] ?? row['table_type'] ?? ''),
|
|
79
|
-
}));
|
|
80
|
-
}
|
|
81
|
-
async listColumns(schema, table) {
|
|
82
|
-
let sql = `SELECT table_schema, table_name, column_name, data_type, ordinal_position
|
|
83
|
-
FROM information_schema.columns
|
|
84
|
-
WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')`;
|
|
85
|
-
const params = [];
|
|
86
|
-
if (schema) {
|
|
87
|
-
params.push(schema);
|
|
88
|
-
sql += ` AND table_schema = ?`;
|
|
89
|
-
}
|
|
90
|
-
if (table) {
|
|
91
|
-
params.push(table);
|
|
92
|
-
sql += ` AND table_name = ?`;
|
|
93
|
-
}
|
|
94
|
-
sql += ` ORDER BY table_schema, table_name, ordinal_position`;
|
|
95
|
-
const result = await this.execute(sql, params);
|
|
96
|
-
return result.rows.map((row) => ({
|
|
97
|
-
schema: String(row['TABLE_SCHEMA'] ?? row['table_schema'] ?? ''),
|
|
98
|
-
table: String(row['TABLE_NAME'] ?? row['table_name'] ?? ''),
|
|
99
|
-
name: String(row['COLUMN_NAME'] ?? row['column_name'] ?? ''),
|
|
100
|
-
dataType: String(row['DATA_TYPE'] ?? row['data_type'] ?? ''),
|
|
101
|
-
ordinalPosition: Number(row['ORDINAL_POSITION'] ?? row['ordinal_position'] ?? 0),
|
|
102
|
-
}));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// MySQL column type constants
|
|
106
|
-
// See: https://dev.mysql.com/doc/dev/mysql-server/latest/field__types_8h.html
|
|
107
|
-
function mapMySQLType(typeId) {
|
|
108
|
-
switch (typeId) {
|
|
109
|
-
case 0: // DECIMAL
|
|
110
|
-
case 1: // TINY
|
|
111
|
-
case 2: // SHORT
|
|
112
|
-
case 3: // LONG
|
|
113
|
-
case 4: // FLOAT
|
|
114
|
-
case 5: // DOUBLE
|
|
115
|
-
case 8: // LONGLONG
|
|
116
|
-
case 9: // INT24
|
|
117
|
-
case 246: // NEWDECIMAL
|
|
118
|
-
return 'number';
|
|
119
|
-
case 10: // DATE
|
|
120
|
-
case 14: // NEWDATE
|
|
121
|
-
return 'date';
|
|
122
|
-
case 7: // TIMESTAMP
|
|
123
|
-
case 12: // DATETIME
|
|
124
|
-
return 'datetime';
|
|
125
|
-
case 16: // BIT
|
|
126
|
-
return 'boolean';
|
|
127
|
-
case 15: // VARCHAR
|
|
128
|
-
case 253: // VAR_STRING
|
|
129
|
-
case 254: // STRING
|
|
130
|
-
case 252: // BLOB (text types)
|
|
131
|
-
return 'string';
|
|
132
|
-
default:
|
|
133
|
-
return 'unknown';
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
//# sourceMappingURL=mysql.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/drivers/mysql.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { DatabaseConnector, ConnectionConfig, DriverName, TableInfo, ColumnInfo } from '../connector.js';
|
|
2
|
-
import type { QueryResult } from '../result-types.js';
|
|
3
|
-
export declare class PostgreSQLConnector implements DatabaseConnector {
|
|
4
|
-
readonly driverName: DriverName;
|
|
5
|
-
private pool;
|
|
6
|
-
connect(config: ConnectionConfig): Promise<void>;
|
|
7
|
-
execute(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
8
|
-
disconnect(): Promise<void>;
|
|
9
|
-
ping(): Promise<boolean>;
|
|
10
|
-
listTables(): Promise<TableInfo[]>;
|
|
11
|
-
listColumns(schema?: string, table?: string): Promise<ColumnInfo[]>;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=postgresql.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../src/drivers/postgresql.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9G,OAAO,KAAK,EAAE,WAAW,EAA+B,MAAM,oBAAoB,CAAC;AAEnF,qBAAa,mBAAoB,YAAW,iBAAiB;IAC3D,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAgB;IAC/C,OAAO,CAAC,IAAI,CAAwB;IAE9B,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAyB9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAUxB,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAclC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAuB1E"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import pg from 'pg';
|
|
2
|
-
export class PostgreSQLConnector {
|
|
3
|
-
driverName = 'postgresql';
|
|
4
|
-
pool = null;
|
|
5
|
-
async connect(config) {
|
|
6
|
-
const poolConfig = config.connectionString
|
|
7
|
-
? { connectionString: config.connectionString }
|
|
8
|
-
: {
|
|
9
|
-
host: config.host ?? 'localhost',
|
|
10
|
-
port: config.port ?? 5432,
|
|
11
|
-
database: config.database,
|
|
12
|
-
user: config.username,
|
|
13
|
-
password: config.password,
|
|
14
|
-
ssl: config.ssl ? { rejectUnauthorized: false } : undefined,
|
|
15
|
-
};
|
|
16
|
-
poolConfig.max = 10;
|
|
17
|
-
poolConfig.idleTimeoutMillis = 30000;
|
|
18
|
-
this.pool = new pg.Pool(poolConfig);
|
|
19
|
-
}
|
|
20
|
-
async execute(sql, params) {
|
|
21
|
-
if (!this.pool) {
|
|
22
|
-
throw new Error('PostgreSQL connector not connected. Call connect() first.');
|
|
23
|
-
}
|
|
24
|
-
const startTime = performance.now();
|
|
25
|
-
const result = await this.pool.query(sql, params);
|
|
26
|
-
const executionTimeMs = performance.now() - startTime;
|
|
27
|
-
const columns = (result.fields ?? []).map((field) => ({
|
|
28
|
-
name: field.name,
|
|
29
|
-
type: mapPgType(field.dataTypeID),
|
|
30
|
-
driverType: String(field.dataTypeID),
|
|
31
|
-
}));
|
|
32
|
-
const rows = result.rows ?? [];
|
|
33
|
-
return {
|
|
34
|
-
columns,
|
|
35
|
-
rows,
|
|
36
|
-
rowCount: rows.length,
|
|
37
|
-
executionTimeMs,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
async disconnect() {
|
|
41
|
-
if (this.pool) {
|
|
42
|
-
await this.pool.end();
|
|
43
|
-
this.pool = null;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
async ping() {
|
|
47
|
-
if (!this.pool)
|
|
48
|
-
return false;
|
|
49
|
-
try {
|
|
50
|
-
await this.pool.query('SELECT 1');
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
async listTables() {
|
|
58
|
-
const result = await this.execute(`SELECT table_schema, table_name, table_type
|
|
59
|
-
FROM information_schema.tables
|
|
60
|
-
WHERE table_schema NOT IN ('information_schema', 'pg_catalog')
|
|
61
|
-
ORDER BY table_schema, table_name`);
|
|
62
|
-
return result.rows.map((row) => ({
|
|
63
|
-
schema: String(row['table_schema'] ?? ''),
|
|
64
|
-
name: String(row['table_name'] ?? ''),
|
|
65
|
-
type: String(row['table_type'] ?? ''),
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
async listColumns(schema, table) {
|
|
69
|
-
let sql = `SELECT table_schema, table_name, column_name, data_type, ordinal_position
|
|
70
|
-
FROM information_schema.columns
|
|
71
|
-
WHERE table_schema NOT IN ('information_schema', 'pg_catalog')`;
|
|
72
|
-
const params = [];
|
|
73
|
-
if (schema) {
|
|
74
|
-
params.push(schema);
|
|
75
|
-
sql += ` AND table_schema = $${params.length}`;
|
|
76
|
-
}
|
|
77
|
-
if (table) {
|
|
78
|
-
params.push(table);
|
|
79
|
-
sql += ` AND table_name = $${params.length}`;
|
|
80
|
-
}
|
|
81
|
-
sql += ` ORDER BY table_schema, table_name, ordinal_position`;
|
|
82
|
-
const result = await this.execute(sql, params);
|
|
83
|
-
return result.rows.map((row) => ({
|
|
84
|
-
schema: String(row['table_schema'] ?? ''),
|
|
85
|
-
table: String(row['table_name'] ?? ''),
|
|
86
|
-
name: String(row['column_name'] ?? ''),
|
|
87
|
-
dataType: String(row['data_type'] ?? ''),
|
|
88
|
-
ordinalPosition: Number(row['ordinal_position'] ?? 0),
|
|
89
|
-
}));
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
function mapPgType(oid) {
|
|
93
|
-
// Common PostgreSQL OIDs
|
|
94
|
-
switch (oid) {
|
|
95
|
-
case 16:
|
|
96
|
-
return 'boolean'; // bool
|
|
97
|
-
case 20:
|
|
98
|
-
case 21:
|
|
99
|
-
case 23:
|
|
100
|
-
case 700:
|
|
101
|
-
case 701:
|
|
102
|
-
case 1700:
|
|
103
|
-
return 'number'; // int8, int2, int4, float4, float8, numeric
|
|
104
|
-
case 1082:
|
|
105
|
-
return 'date'; // date
|
|
106
|
-
case 1114:
|
|
107
|
-
case 1184:
|
|
108
|
-
return 'datetime'; // timestamp, timestamptz
|
|
109
|
-
case 25:
|
|
110
|
-
case 1042:
|
|
111
|
-
case 1043:
|
|
112
|
-
return 'string'; // text, char, varchar
|
|
113
|
-
default:
|
|
114
|
-
return 'unknown';
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=postgresql.js.map
|