@duckcodeailabs/dql-connectors 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/LICENSE +123 -0
  2. package/dist/connection-pool.d.ts +11 -0
  3. package/dist/connection-pool.d.ts.map +1 -0
  4. package/dist/connection-pool.js +99 -0
  5. package/dist/connection-pool.js.map +1 -0
  6. package/dist/connector.d.ts +26 -0
  7. package/dist/connector.d.ts.map +1 -0
  8. package/dist/connector.js +2 -0
  9. package/dist/connector.js.map +1 -0
  10. package/dist/drivers/bigquery.d.ts +11 -0
  11. package/dist/drivers/bigquery.d.ts.map +1 -0
  12. package/dist/drivers/bigquery.js +166 -0
  13. package/dist/drivers/bigquery.js.map +1 -0
  14. package/dist/drivers/duckdb.d.ts +12 -0
  15. package/dist/drivers/duckdb.d.ts.map +1 -0
  16. package/dist/drivers/duckdb.js +103 -0
  17. package/dist/drivers/duckdb.js.map +1 -0
  18. package/dist/drivers/file.d.ts +24 -0
  19. package/dist/drivers/file.d.ts.map +1 -0
  20. package/dist/drivers/file.js +38 -0
  21. package/dist/drivers/file.js.map +1 -0
  22. package/dist/drivers/mssql.d.ts +12 -0
  23. package/dist/drivers/mssql.d.ts.map +1 -0
  24. package/dist/drivers/mssql.js +132 -0
  25. package/dist/drivers/mssql.js.map +1 -0
  26. package/dist/drivers/mysql.d.ts +11 -0
  27. package/dist/drivers/mysql.d.ts.map +1 -0
  28. package/dist/drivers/mysql.js +102 -0
  29. package/dist/drivers/mysql.js.map +1 -0
  30. package/dist/drivers/postgresql.d.ts +11 -0
  31. package/dist/drivers/postgresql.d.ts.map +1 -0
  32. package/dist/drivers/postgresql.js +83 -0
  33. package/dist/drivers/postgresql.js.map +1 -0
  34. package/dist/drivers/snowflake.d.ts +14 -0
  35. package/dist/drivers/snowflake.d.ts.map +1 -0
  36. package/dist/drivers/snowflake.js +154 -0
  37. package/dist/drivers/snowflake.js.map +1 -0
  38. package/dist/drivers/sqlite.d.ts +11 -0
  39. package/dist/drivers/sqlite.d.ts.map +1 -0
  40. package/dist/drivers/sqlite.js +71 -0
  41. package/dist/drivers/sqlite.js.map +1 -0
  42. package/dist/index.d.ts +7 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +5 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/query-executor.d.ts +13 -0
  47. package/dist/query-executor.d.ts.map +1 -0
  48. package/dist/query-executor.js +24 -0
  49. package/dist/query-executor.js.map +1 -0
  50. package/dist/result-types.d.ts +14 -0
  51. package/dist/result-types.d.ts.map +1 -0
  52. package/dist/result-types.js +2 -0
  53. package/dist/result-types.js.map +1 -0
  54. package/dist/sql-params.d.ts +17 -0
  55. package/dist/sql-params.d.ts.map +1 -0
  56. package/dist/sql-params.js +89 -0
  57. package/dist/sql-params.js.map +1 -0
  58. package/package.json +48 -0
@@ -0,0 +1,38 @@
1
+ import { DuckDBConnector } from './duckdb.js';
2
+ /**
3
+ * FileConnector — uses DuckDB under the hood to query CSV, Parquet, JSON,
4
+ * and Excel files directly with SQL.
5
+ *
6
+ * Usage in dql.config.ts:
7
+ * { driver: 'file', filepath: ':memory:' }
8
+ *
9
+ * Then in .dql files:
10
+ * SELECT * FROM read_csv('./data/sales.csv')
11
+ * SELECT * FROM read_parquet('./data/events.parquet')
12
+ * SELECT * FROM read_json('./data/config.json')
13
+ */
14
+ export class FileConnector {
15
+ driverName = 'file';
16
+ duckdb;
17
+ constructor() {
18
+ this.duckdb = new DuckDBConnector();
19
+ }
20
+ async connect(config) {
21
+ // Use in-memory DuckDB by default for file queries
22
+ const duckdbConfig = {
23
+ driver: 'duckdb',
24
+ filepath: config.filepath ?? ':memory:',
25
+ };
26
+ await this.duckdb.connect(duckdbConfig);
27
+ }
28
+ async execute(sql, params) {
29
+ return this.duckdb.execute(sql, params);
30
+ }
31
+ async disconnect() {
32
+ return this.duckdb.disconnect();
33
+ }
34
+ async ping() {
35
+ return this.duckdb.ping();
36
+ }
37
+ }
38
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/drivers/file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,aAAa;IACf,UAAU,GAAG,MAAM,CAAC;IACrB,MAAM,CAAkB;IAEhC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAwB;QACpC,mDAAmD;QACnD,MAAM,YAAY,GAAqB;YACrC,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,UAAU;SACxC,CAAC;QACF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAkB;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { DatabaseConnector, ConnectionConfig } from '../connector.js';
2
+ import type { QueryResult } from '../result-types.js';
3
+ export declare class MSSQLConnector implements DatabaseConnector {
4
+ readonly driverName = "mssql";
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
+ }
12
+ //# sourceMappingURL=mssql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mssql.d.ts","sourceRoot":"","sources":["../../src/drivers/mssql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAA+B,MAAM,oBAAoB,CAAC;AAEnF,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,UAAU,WAAW;IAC9B,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;CAS/B"}
@@ -0,0 +1,132 @@
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
+ }
100
+ function mapMSSQLType(declaration) {
101
+ const lower = (declaration ?? '').toLowerCase();
102
+ if (['int', 'bigint', 'smallint', 'tinyint', 'float', 'real', 'decimal', 'numeric', 'money', 'smallmoney'].some((t) => lower.includes(t))) {
103
+ return 'number';
104
+ }
105
+ if (lower.includes('date') && !lower.includes('datetime')) {
106
+ return 'date';
107
+ }
108
+ if (['datetime', 'datetime2', 'datetimeoffset', 'smalldatetime', 'timestamp'].some((t) => lower.includes(t))) {
109
+ return 'datetime';
110
+ }
111
+ if (lower.includes('bit')) {
112
+ return 'boolean';
113
+ }
114
+ if (['varchar', 'nvarchar', 'char', 'nchar', 'text', 'ntext', 'xml'].some((t) => lower.includes(t))) {
115
+ return 'string';
116
+ }
117
+ return 'unknown';
118
+ }
119
+ function inferMSSQLType(value) {
120
+ if (value === null || value === undefined)
121
+ return 'null';
122
+ if (typeof value === 'number')
123
+ return 'number';
124
+ if (typeof value === 'boolean')
125
+ return 'boolean';
126
+ if (typeof value === 'string')
127
+ return 'string';
128
+ if (value instanceof Date)
129
+ return 'datetime';
130
+ return 'unknown';
131
+ }
132
+ //# sourceMappingURL=mssql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mssql.js","sourceRoot":"","sources":["../../src/drivers/mssql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { DatabaseConnector, ConnectionConfig } 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
+ }
11
+ //# sourceMappingURL=mysql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/drivers/mysql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,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;CAS/B"}
@@ -0,0 +1,102 @@
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
+ }
71
+ // MySQL column type constants
72
+ // See: https://dev.mysql.com/doc/dev/mysql-server/latest/field__types_8h.html
73
+ function mapMySQLType(typeId) {
74
+ switch (typeId) {
75
+ case 0: // DECIMAL
76
+ case 1: // TINY
77
+ case 2: // SHORT
78
+ case 3: // LONG
79
+ case 4: // FLOAT
80
+ case 5: // DOUBLE
81
+ case 8: // LONGLONG
82
+ case 9: // INT24
83
+ case 246: // NEWDECIMAL
84
+ return 'number';
85
+ case 10: // DATE
86
+ case 14: // NEWDATE
87
+ return 'date';
88
+ case 7: // TIMESTAMP
89
+ case 12: // DATETIME
90
+ return 'datetime';
91
+ case 16: // BIT
92
+ return 'boolean';
93
+ case 15: // VARCHAR
94
+ case 253: // VAR_STRING
95
+ case 254: // STRING
96
+ case 252: // BLOB (text types)
97
+ return 'string';
98
+ default:
99
+ return 'unknown';
100
+ }
101
+ }
102
+ //# sourceMappingURL=mysql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/drivers/mysql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { DatabaseConnector, ConnectionConfig } from '../connector.js';
2
+ import type { QueryResult } from '../result-types.js';
3
+ export declare class PostgreSQLConnector implements DatabaseConnector {
4
+ readonly driverName = "postgresql";
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
+ }
11
+ //# sourceMappingURL=postgresql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../src/drivers/postgresql.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAA+B,MAAM,oBAAoB,CAAC;AAEnF,qBAAa,mBAAoB,YAAW,iBAAiB;IAC3D,QAAQ,CAAC,UAAU,gBAAgB;IACnC,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;CAS/B"}
@@ -0,0 +1,83 @@
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
+ }
58
+ function mapPgType(oid) {
59
+ // Common PostgreSQL OIDs
60
+ switch (oid) {
61
+ case 16:
62
+ return 'boolean'; // bool
63
+ case 20:
64
+ case 21:
65
+ case 23:
66
+ case 700:
67
+ case 701:
68
+ case 1700:
69
+ return 'number'; // int8, int2, int4, float4, float8, numeric
70
+ case 1082:
71
+ return 'date'; // date
72
+ case 1114:
73
+ case 1184:
74
+ return 'datetime'; // timestamp, timestamptz
75
+ case 25:
76
+ case 1042:
77
+ case 1043:
78
+ return 'string'; // text, char, varchar
79
+ default:
80
+ return 'unknown';
81
+ }
82
+ }
83
+ //# sourceMappingURL=postgresql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/drivers/postgresql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { DatabaseConnector, ConnectionConfig } from '../connector.js';
2
+ import type { QueryResult } from '../result-types.js';
3
+ export declare class SnowflakeConnector implements DatabaseConnector {
4
+ readonly driverName = "snowflake";
5
+ private connection;
6
+ private sdk;
7
+ private warehouse;
8
+ connect(config: ConnectionConfig): Promise<void>;
9
+ private executeRaw;
10
+ execute(sql: string, params?: unknown[]): Promise<QueryResult>;
11
+ disconnect(): Promise<void>;
12
+ ping(): Promise<boolean>;
13
+ }
14
+ //# sourceMappingURL=snowflake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snowflake.d.ts","sourceRoot":"","sources":["../../src/drivers/snowflake.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAA+B,MAAM,oBAAoB,CAAC;AAEnF,qBAAa,kBAAmB,YAAW,iBAAiB;IAC1D,QAAQ,CAAC,UAAU,eAAe;IAClC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,SAAS,CAAc;IAEzB,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDtD,OAAO,CAAC,UAAU;IAWZ,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA8C9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;CAS/B"}
@@ -0,0 +1,154 @@
1
+ export class SnowflakeConnector {
2
+ driverName = 'snowflake';
3
+ connection = null;
4
+ sdk = null;
5
+ warehouse = '';
6
+ async connect(config) {
7
+ // Dynamic import to avoid requiring snowflake-sdk when not used
8
+ // snowflake-sdk is a CJS module, so the API lives on .default
9
+ const mod = await import('snowflake-sdk');
10
+ this.sdk = mod.default ?? mod;
11
+ this.warehouse = config.warehouse ?? '';
12
+ const connectionConfig = {
13
+ account: config.account ?? '',
14
+ username: config.username ?? '',
15
+ database: config.database,
16
+ warehouse: config.warehouse,
17
+ };
18
+ // Schema and role
19
+ if (config.schema)
20
+ connectionConfig.schema = config.schema;
21
+ if (config.role)
22
+ connectionConfig.role = config.role;
23
+ // Auth: private key (key-pair) or password
24
+ if (config.privateKey) {
25
+ connectionConfig.authenticator = 'SNOWFLAKE_JWT';
26
+ connectionConfig.privateKey = config.privateKey;
27
+ }
28
+ else {
29
+ connectionConfig.password = config.password ?? '';
30
+ connectionConfig.authenticator = 'SNOWFLAKE';
31
+ }
32
+ if (config.host) {
33
+ connectionConfig.host = config.host;
34
+ }
35
+ await new Promise((resolve, reject) => {
36
+ this.connection = this.sdk.createConnection(connectionConfig);
37
+ this.connection.connect((err) => {
38
+ if (err) {
39
+ reject(new Error(`Snowflake connection failed: ${err.message}`));
40
+ }
41
+ else {
42
+ resolve();
43
+ }
44
+ });
45
+ });
46
+ // Auto-resume warehouse if suspended (matching DuckCode-Modeling pattern)
47
+ if (this.warehouse) {
48
+ try {
49
+ await this.executeRaw(`ALTER WAREHOUSE IF EXISTS ${this.warehouse} RESUME IF SUSPENDED`);
50
+ }
51
+ catch (_) { /* ignore — permission denied or warehouse doesn't exist */ }
52
+ }
53
+ }
54
+ executeRaw(sql) {
55
+ return new Promise((resolve, reject) => {
56
+ this.connection.execute({
57
+ sqlText: sql,
58
+ complete: (err) => {
59
+ if (err)
60
+ reject(err);
61
+ else
62
+ resolve();
63
+ },
64
+ });
65
+ });
66
+ }
67
+ async execute(sql, params) {
68
+ if (!this.connection) {
69
+ throw new Error('Snowflake connector not connected. Call connect() first.');
70
+ }
71
+ const startTime = performance.now();
72
+ return new Promise((resolve, reject) => {
73
+ this.connection.execute({
74
+ sqlText: sql,
75
+ binds: params ?? [],
76
+ complete: (err, stmt, rows) => {
77
+ const executionTimeMs = performance.now() - startTime;
78
+ if (err) {
79
+ reject(new Error(`Snowflake query failed: ${err.message}`));
80
+ return;
81
+ }
82
+ if (!rows || rows.length === 0) {
83
+ resolve({
84
+ columns: [],
85
+ rows: [],
86
+ rowCount: 0,
87
+ executionTimeMs,
88
+ });
89
+ return;
90
+ }
91
+ const columns = stmt.getColumns().map((col) => ({
92
+ name: col.getName(),
93
+ type: mapSnowflakeType(col.getType()),
94
+ driverType: col.getType(),
95
+ }));
96
+ resolve({
97
+ columns,
98
+ rows: rows,
99
+ rowCount: rows.length,
100
+ executionTimeMs,
101
+ });
102
+ },
103
+ });
104
+ });
105
+ }
106
+ async disconnect() {
107
+ if (this.connection) {
108
+ return new Promise((resolve) => {
109
+ this.connection.destroy((err) => {
110
+ if (err) {
111
+ console.warn('Snowflake disconnect warning:', err.message);
112
+ }
113
+ this.connection = null;
114
+ resolve();
115
+ });
116
+ });
117
+ }
118
+ }
119
+ async ping() {
120
+ if (!this.connection)
121
+ return false;
122
+ try {
123
+ await this.execute('SELECT 1');
124
+ return true;
125
+ }
126
+ catch {
127
+ return false;
128
+ }
129
+ }
130
+ }
131
+ function mapSnowflakeType(sfType) {
132
+ const lower = (sfType ?? '').toLowerCase();
133
+ // Snowflake SDK internal types: fixed, real, text, boolean, date, timestamp_ltz/ntz/tz, variant, binary
134
+ if (['fixed', 'real', 'number', 'decimal', 'numeric', 'int', 'integer', 'bigint', 'smallint', 'tinyint', 'float', 'float4', 'float8', 'double', 'double precision'].includes(lower)) {
135
+ return 'number';
136
+ }
137
+ if (lower === 'date') {
138
+ return 'date';
139
+ }
140
+ if (['datetime', 'timestamp', 'timestamp_ltz', 'timestamp_ntz', 'timestamp_tz'].includes(lower)) {
141
+ return 'datetime';
142
+ }
143
+ if (lower === 'boolean') {
144
+ return 'boolean';
145
+ }
146
+ if (['text', 'varchar', 'char', 'character', 'string'].includes(lower)) {
147
+ return 'string';
148
+ }
149
+ if (['variant', 'object', 'array'].includes(lower)) {
150
+ return 'string';
151
+ }
152
+ return 'unknown';
153
+ }
154
+ //# sourceMappingURL=snowflake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snowflake.js","sourceRoot":"","sources":["../../src/drivers/snowflake.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { DatabaseConnector, ConnectionConfig } 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
+ }
11
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/drivers/sqlite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AAEvE,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;IAMhD,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;CAS/B"}