@duckcodeailabs/dql-connectors 1.6.18 → 1.6.19
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/query-executor.d.ts.map +1 -1
- package/dist/query-executor.js +4 -3
- package/dist/query-executor.js.map +1 -1
- package/dist/sql-params.d.ts +13 -0
- package/dist/sql-params.d.ts.map +1 -1
- package/dist/sql-params.js +109 -0
- package/dist/sql-params.js.map +1 -1
- package/package.json +1 -1
- 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,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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/drivers/postgresql.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { PostgreSQLConnector } from './postgresql.js';
|
|
2
|
-
import type { ConnectionConfig } from '../connector.js';
|
|
3
|
-
export declare class RedshiftConnector extends PostgreSQLConnector {
|
|
4
|
-
readonly driverName = "redshift";
|
|
5
|
-
connect(config: ConnectionConfig): Promise<void>;
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=redshift.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redshift.d.ts","sourceRoot":"","sources":["../../src/drivers/redshift.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,qBAAa,iBAAkB,SAAQ,mBAAmB;IACxD,QAAQ,CAAC,UAAU,cAAc;IAE3B,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAOvD"}
|
package/dist/drivers/redshift.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { PostgreSQLConnector } from './postgresql.js';
|
|
2
|
-
export class RedshiftConnector extends PostgreSQLConnector {
|
|
3
|
-
driverName = 'redshift';
|
|
4
|
-
async connect(config) {
|
|
5
|
-
await super.connect({
|
|
6
|
-
...config,
|
|
7
|
-
driver: 'redshift',
|
|
8
|
-
port: config.port ?? 5439,
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=redshift.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redshift.js","sourceRoot":"","sources":["../../src/drivers/redshift.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IAC/C,UAAU,GAAG,UAAU,CAAC;IAEjC,KAAK,CAAC,OAAO,CAAC,MAAwB;QACpC,MAAM,KAAK,CAAC,OAAO,CAAC;YAClB,GAAG,MAAM;YACT,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;SAC1B,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/drivers/sqlite.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 SQLiteConnector implements DatabaseConnector {
|
|
4
|
-
readonly driverName = "sqlite";
|
|
5
|
-
private db;
|
|
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=sqlite.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/drivers/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AAUvE,qBAAa,eAAgB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,UAAU,YAAY;IAC/B,OAAO,CAAC,EAAE,CAAkC;IAEtC,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAwC9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAUxB,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"}
|
package/dist/drivers/sqlite.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';
|
|
2
|
-
const require = createRequire(import.meta.url);
|
|
3
|
-
let databaseCtor = null;
|
|
4
|
-
function loadDatabase() {
|
|
5
|
-
databaseCtor ??= require('better-sqlite3');
|
|
6
|
-
return databaseCtor;
|
|
7
|
-
}
|
|
8
|
-
export class SQLiteConnector {
|
|
9
|
-
driverName = 'sqlite';
|
|
10
|
-
db = null;
|
|
11
|
-
async connect(config) {
|
|
12
|
-
const filepath = config.filepath ?? config.database ?? ':memory:';
|
|
13
|
-
const Database = loadDatabase();
|
|
14
|
-
this.db = new Database(filepath);
|
|
15
|
-
this.db.pragma('journal_mode = WAL');
|
|
16
|
-
}
|
|
17
|
-
async execute(sql, params) {
|
|
18
|
-
if (!this.db) {
|
|
19
|
-
throw new Error('SQLite connector not connected. Call connect() first.');
|
|
20
|
-
}
|
|
21
|
-
const startTime = performance.now();
|
|
22
|
-
const stmt = this.db.prepare(sql);
|
|
23
|
-
if (stmt.reader) {
|
|
24
|
-
const rows = (params ? stmt.all(...params) : stmt.all());
|
|
25
|
-
const executionTimeMs = performance.now() - startTime;
|
|
26
|
-
const columns = rows.length > 0
|
|
27
|
-
? Object.keys(rows[0]).map((name) => ({
|
|
28
|
-
name,
|
|
29
|
-
type: inferType(rows[0][name]),
|
|
30
|
-
driverType: 'unknown',
|
|
31
|
-
}))
|
|
32
|
-
: [];
|
|
33
|
-
return {
|
|
34
|
-
columns,
|
|
35
|
-
rows,
|
|
36
|
-
rowCount: rows.length,
|
|
37
|
-
executionTimeMs,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
const result = params ? stmt.run(...params) : stmt.run();
|
|
41
|
-
const executionTimeMs = performance.now() - startTime;
|
|
42
|
-
return {
|
|
43
|
-
columns: [],
|
|
44
|
-
rows: [],
|
|
45
|
-
rowCount: result.changes,
|
|
46
|
-
executionTimeMs,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
async disconnect() {
|
|
50
|
-
if (this.db) {
|
|
51
|
-
this.db.close();
|
|
52
|
-
this.db = null;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
async ping() {
|
|
56
|
-
if (!this.db)
|
|
57
|
-
return false;
|
|
58
|
-
try {
|
|
59
|
-
this.db.prepare('SELECT 1').get();
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
async listTables() {
|
|
67
|
-
const result = await this.execute(`SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%' ORDER BY name`);
|
|
68
|
-
return result.rows.map((row) => ({
|
|
69
|
-
schema: 'main',
|
|
70
|
-
name: String(row['name'] ?? ''),
|
|
71
|
-
type: String(row['type'] ?? '') === 'table' ? 'BASE TABLE' : 'VIEW',
|
|
72
|
-
}));
|
|
73
|
-
}
|
|
74
|
-
async listColumns(schema, table) {
|
|
75
|
-
const tables = await this.listTables();
|
|
76
|
-
const filtered = table ? tables.filter((t) => t.name === table) : tables;
|
|
77
|
-
const columns = [];
|
|
78
|
-
for (const t of filtered) {
|
|
79
|
-
const result = await this.execute(`PRAGMA table_info("${t.name.replace(/"/g, '""')}")`);
|
|
80
|
-
for (const row of result.rows) {
|
|
81
|
-
columns.push({
|
|
82
|
-
schema: 'main',
|
|
83
|
-
table: t.name,
|
|
84
|
-
name: String(row['name'] ?? ''),
|
|
85
|
-
dataType: String(row['type'] ?? 'TEXT'),
|
|
86
|
-
ordinalPosition: Number(row['cid'] ?? 0) + 1,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return columns;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
function inferType(value) {
|
|
94
|
-
if (value === null)
|
|
95
|
-
return 'null';
|
|
96
|
-
if (typeof value === 'number')
|
|
97
|
-
return 'number';
|
|
98
|
-
if (typeof value === 'boolean')
|
|
99
|
-
return 'boolean';
|
|
100
|
-
if (typeof value === 'string')
|
|
101
|
-
return 'string';
|
|
102
|
-
return 'unknown';
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=sqlite.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/drivers/sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/drivers/trino.d.ts
DELETED
|
@@ -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 TrinoConnector implements DatabaseConnector {
|
|
4
|
-
readonly driverName = "trino";
|
|
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=trino.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trino.d.ts","sourceRoot":"","sources":["../../src/drivers/trino.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;AASnF,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,UAAU,WAAW;IAC9B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,OAAO,CAA8B;IAEvC,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;IA6D9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IASxB,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAelC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAqB1E"}
|
package/dist/drivers/trino.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
export class TrinoConnector {
|
|
2
|
-
driverName = 'trino';
|
|
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 ?? 8080;
|
|
9
|
-
this.endpoint = `${protocol}://${host}:${port}`;
|
|
10
|
-
this.headers = {
|
|
11
|
-
'X-Trino-User': config.username ?? 'dql',
|
|
12
|
-
'X-Trino-Catalog': config.catalog ?? config.database ?? 'system',
|
|
13
|
-
'X-Trino-Schema': config.schema ?? 'default',
|
|
14
|
-
'Content-Type': 'text/plain; charset=utf-8',
|
|
15
|
-
};
|
|
16
|
-
if (config.username && config.password) {
|
|
17
|
-
const token = Buffer.from(`${config.username}:${config.password}`).toString('base64');
|
|
18
|
-
this.headers.Authorization = `Basic ${token}`;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
async execute(sql, params) {
|
|
22
|
-
if (!this.endpoint) {
|
|
23
|
-
throw new Error('Trino connector not connected. Call connect() first.');
|
|
24
|
-
}
|
|
25
|
-
if (params && params.length > 0) {
|
|
26
|
-
throw new Error('Trino connector does not yet support positional parameters.');
|
|
27
|
-
}
|
|
28
|
-
const startTime = performance.now();
|
|
29
|
-
const initialResponse = await fetch(`${this.endpoint}/v1/statement`, {
|
|
30
|
-
method: 'POST',
|
|
31
|
-
headers: this.headers,
|
|
32
|
-
body: sql,
|
|
33
|
-
});
|
|
34
|
-
if (!initialResponse.ok) {
|
|
35
|
-
throw new Error(`Trino query failed: ${await initialResponse.text()}`);
|
|
36
|
-
}
|
|
37
|
-
const rows = [];
|
|
38
|
-
let columns = [];
|
|
39
|
-
let payload = await initialResponse.json();
|
|
40
|
-
while (true) {
|
|
41
|
-
if (payload.error?.message) {
|
|
42
|
-
throw new Error(`Trino query failed: ${payload.error.message}`);
|
|
43
|
-
}
|
|
44
|
-
if (payload.columns && columns.length === 0) {
|
|
45
|
-
columns = payload.columns.map((column) => ({
|
|
46
|
-
name: column.name,
|
|
47
|
-
type: mapTrinoType(column.type),
|
|
48
|
-
driverType: column.type,
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
if (payload.data && columns.length > 0) {
|
|
52
|
-
for (const row of payload.data) {
|
|
53
|
-
rows.push(Object.fromEntries(columns.map((column, index) => [column.name, row[index]])));
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
if (!payload.nextUri) {
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
const nextResponse = await fetch(payload.nextUri, { headers: this.headers });
|
|
60
|
-
if (!nextResponse.ok) {
|
|
61
|
-
throw new Error(`Trino pagination failed: ${await nextResponse.text()}`);
|
|
62
|
-
}
|
|
63
|
-
payload = await nextResponse.json();
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
columns,
|
|
67
|
-
rows,
|
|
68
|
-
rowCount: rows.length,
|
|
69
|
-
executionTimeMs: performance.now() - startTime,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
async disconnect() {
|
|
73
|
-
this.endpoint = null;
|
|
74
|
-
this.headers = {};
|
|
75
|
-
}
|
|
76
|
-
async ping() {
|
|
77
|
-
try {
|
|
78
|
-
await this.execute('SELECT 1 AS ok');
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
catch {
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
async listTables() {
|
|
86
|
-
const catalog = this.headers['X-Trino-Catalog'] ?? 'system';
|
|
87
|
-
const result = await this.execute(`SELECT table_schema, table_name, table_type
|
|
88
|
-
FROM ${catalog}.information_schema.tables
|
|
89
|
-
WHERE table_schema NOT IN ('information_schema')
|
|
90
|
-
ORDER BY table_schema, table_name`);
|
|
91
|
-
return result.rows.map((row) => ({
|
|
92
|
-
schema: String(row['table_schema'] ?? ''),
|
|
93
|
-
name: String(row['table_name'] ?? ''),
|
|
94
|
-
type: String(row['table_type'] ?? ''),
|
|
95
|
-
}));
|
|
96
|
-
}
|
|
97
|
-
async listColumns(schema, table) {
|
|
98
|
-
const catalog = this.headers['X-Trino-Catalog'] ?? 'system';
|
|
99
|
-
let sql = `SELECT table_schema, table_name, column_name, data_type, ordinal_position
|
|
100
|
-
FROM ${catalog}.information_schema.columns
|
|
101
|
-
WHERE table_schema NOT IN ('information_schema')`;
|
|
102
|
-
if (schema) {
|
|
103
|
-
sql += ` AND table_schema = '${schema.replace(/'/g, "''")}'`;
|
|
104
|
-
}
|
|
105
|
-
if (table) {
|
|
106
|
-
sql += ` AND table_name = '${table.replace(/'/g, "''")}'`;
|
|
107
|
-
}
|
|
108
|
-
sql += ` ORDER BY table_schema, table_name, ordinal_position`;
|
|
109
|
-
const result = await this.execute(sql);
|
|
110
|
-
return result.rows.map((row) => ({
|
|
111
|
-
schema: String(row['table_schema'] ?? ''),
|
|
112
|
-
table: String(row['table_name'] ?? ''),
|
|
113
|
-
name: String(row['column_name'] ?? ''),
|
|
114
|
-
dataType: String(row['data_type'] ?? ''),
|
|
115
|
-
ordinalPosition: Number(row['ordinal_position'] ?? 0),
|
|
116
|
-
}));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
function mapTrinoType(driverType) {
|
|
120
|
-
const lower = driverType.toLowerCase();
|
|
121
|
-
if (lower.includes('int') || lower.includes('double') || lower.includes('real') || lower.includes('decimal'))
|
|
122
|
-
return 'number';
|
|
123
|
-
if (lower === 'date')
|
|
124
|
-
return 'date';
|
|
125
|
-
if (lower.includes('timestamp'))
|
|
126
|
-
return 'datetime';
|
|
127
|
-
if (lower === 'boolean')
|
|
128
|
-
return 'boolean';
|
|
129
|
-
if (lower.includes('char') || lower.includes('varchar'))
|
|
130
|
-
return 'string';
|
|
131
|
-
return 'unknown';
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=trino.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trino.js","sourceRoot":"","sources":["../../src/drivers/trino.ts"],"names":[],"mappings":"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"}
|