@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.
Files changed (48) hide show
  1. package/dist/query-executor.d.ts.map +1 -1
  2. package/dist/query-executor.js +4 -3
  3. package/dist/query-executor.js.map +1 -1
  4. package/dist/sql-params.d.ts +13 -0
  5. package/dist/sql-params.d.ts.map +1 -1
  6. package/dist/sql-params.js +109 -0
  7. package/dist/sql-params.js.map +1 -1
  8. package/package.json +1 -1
  9. package/dist/drivers/athena.d.ts +0 -17
  10. package/dist/drivers/athena.d.ts.map +0 -1
  11. package/dist/drivers/athena.js +0 -157
  12. package/dist/drivers/athena.js.map +0 -1
  13. package/dist/drivers/bigquery.d.ts +0 -14
  14. package/dist/drivers/bigquery.d.ts.map +0 -1
  15. package/dist/drivers/bigquery.js +0 -230
  16. package/dist/drivers/bigquery.js.map +0 -1
  17. package/dist/drivers/clickhouse.d.ts +0 -14
  18. package/dist/drivers/clickhouse.d.ts.map +0 -1
  19. package/dist/drivers/clickhouse.js +0 -103
  20. package/dist/drivers/clickhouse.js.map +0 -1
  21. package/dist/drivers/fabric.d.ts +0 -7
  22. package/dist/drivers/fabric.d.ts.map +0 -1
  23. package/dist/drivers/fabric.js +0 -12
  24. package/dist/drivers/fabric.js.map +0 -1
  25. package/dist/drivers/mssql.d.ts +0 -14
  26. package/dist/drivers/mssql.d.ts.map +0 -1
  27. package/dist/drivers/mssql.js +0 -164
  28. package/dist/drivers/mssql.js.map +0 -1
  29. package/dist/drivers/mysql.d.ts +0 -13
  30. package/dist/drivers/mysql.d.ts.map +0 -1
  31. package/dist/drivers/mysql.js +0 -136
  32. package/dist/drivers/mysql.js.map +0 -1
  33. package/dist/drivers/postgresql.d.ts +0 -13
  34. package/dist/drivers/postgresql.d.ts.map +0 -1
  35. package/dist/drivers/postgresql.js +0 -117
  36. package/dist/drivers/postgresql.js.map +0 -1
  37. package/dist/drivers/redshift.d.ts +0 -7
  38. package/dist/drivers/redshift.d.ts.map +0 -1
  39. package/dist/drivers/redshift.js +0 -12
  40. package/dist/drivers/redshift.js.map +0 -1
  41. package/dist/drivers/sqlite.d.ts +0 -13
  42. package/dist/drivers/sqlite.d.ts.map +0 -1
  43. package/dist/drivers/sqlite.js +0 -104
  44. package/dist/drivers/sqlite.js.map +0 -1
  45. package/dist/drivers/trino.d.ts +0 -14
  46. package/dist/drivers/trino.d.ts.map +0 -1
  47. package/dist/drivers/trino.js +0 -133
  48. package/dist/drivers/trino.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"query-executor.d.ts","sourceRoot":"","sources":["../src/query-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAA8C,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEhG,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAwB;gBAExB,IAAI,CAAC,EAAE,qBAAqB;IAIlC,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIlE,YAAY,CAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,WAAW,CAAC;IAKjB,iBAAiB,CACrB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,OAAO,EAAE,EACtB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,WAAW,CAAC;IASjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
1
+ {"version":3,"file":"query-executor.d.ts","sourceRoot":"","sources":["../src/query-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAqE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEvH,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAwB;gBAExB,IAAI,CAAC,EAAE,qBAAqB;IAIlC,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIlE,YAAY,CAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,WAAW,CAAC;IAMjB,iBAAiB,CACrB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,OAAO,EAAE,EACtB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,WAAW,CAAC;IASjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
@@ -1,5 +1,5 @@
1
1
  import { ConnectionPoolManager } from './connection-pool.js';
2
- import { buildParamValues, normalizeSQLPlaceholders } from './sql-params.js';
2
+ import { buildParamValues, expandArrayParameters, normalizeSQLPlaceholders } from './sql-params.js';
3
3
  export class QueryExecutor {
4
4
  pool;
5
5
  constructor(pool) {
@@ -9,8 +9,9 @@ export class QueryExecutor {
9
9
  return this.pool.getConnector(config);
10
10
  }
11
11
  async executeQuery(sql, params, variables, config) {
12
- const paramValues = buildParamValues(params ?? [], variables ?? {});
13
- return this.executePositional(sql, paramValues, config);
12
+ const expanded = expandArrayParameters(sql, params ?? [], variables ?? {});
13
+ const paramValues = buildParamValues(expanded.params, expanded.variables);
14
+ return this.executePositional(expanded.sql, paramValues, config);
14
15
  }
15
16
  async executePositional(sql, paramValues, config) {
16
17
  const connector = await this.pool.getConnector(config);
@@ -1 +1 @@
1
- {"version":3,"file":"query-executor.js","sourceRoot":"","sources":["../src/query-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAqB,MAAM,iBAAiB,CAAC;AAEhG,MAAM,OAAO,aAAa;IAChB,IAAI,CAAwB;IAEpC,YAAY,IAA4B;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,qBAAqB,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAwB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,GAAW,EACX,MAAsB,EACtB,SAAkC,EAClC,MAAwB;QAExB,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,GAAW,EACX,WAAsB,EACtB,MAAwB;QAExB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,OAAO,SAAS,CAAC,OAAO,CACtB,aAAa,EACb,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAChE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAClC,CAAC;CACF"}
1
+ {"version":3,"file":"query-executor.js","sourceRoot":"","sources":["../src/query-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,wBAAwB,EAAqB,MAAM,iBAAiB,CAAC;AAEvH,MAAM,OAAO,aAAa;IAChB,IAAI,CAAwB;IAEpC,YAAY,IAA4B;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,qBAAqB,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAwB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,GAAW,EACX,MAAsB,EACtB,SAAkC,EAClC,MAAwB;QAExB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,GAAW,EACX,WAAsB,EACtB,MAAwB;QAExB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,OAAO,SAAS,CAAC,OAAO,CACtB,aAAa,EACb,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAChE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAClC,CAAC;CACF"}
@@ -4,7 +4,20 @@ export type SQLParamSpec = {
4
4
  position: number;
5
5
  literalValue?: unknown;
6
6
  };
7
+ export interface ExpandedSQLParams {
8
+ sql: string;
9
+ params: SQLParamSpec[];
10
+ variables: Record<string, unknown>;
11
+ }
7
12
  export declare function buildParamValues(params: SQLParamSpec[], variables: Record<string, unknown>): unknown[];
13
+ /**
14
+ * Expand array-valued template variables into ordinary positional placeholders.
15
+ *
16
+ * DQL blocks keep one business parameter such as `${team_set}` so app filters
17
+ * and review metadata stay readable. At execution time, an array value is
18
+ * rewritten from `IN ($1)` to `IN ($1, $2, ...)` with one bind value per item.
19
+ */
20
+ export declare function expandArrayParameters(sql: string, params: SQLParamSpec[], variables: Record<string, unknown>): ExpandedSQLParams;
8
21
  /**
9
22
  * Normalize "$N" placeholders emitted by the compiler to the placeholder syntax
10
23
  * expected by each driver.
@@ -1 +1 @@
1
- {"version":3,"file":"sql-params.d.ts","sourceRoot":"","sources":["../src/sql-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtF,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,EAAE,CAaX;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GACjC,MAAM,CAqER"}
1
+ {"version":3,"file":"sql-params.d.ts","sourceRoot":"","sources":["../src/sql-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtF,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,EAAE,CAaX;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,iBAAiB,CA2CnB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GACjC,MAAM,CAqER"}
@@ -13,6 +13,53 @@ export function buildParamValues(params, variables) {
13
13
  return null;
14
14
  });
15
15
  }
16
+ /**
17
+ * Expand array-valued template variables into ordinary positional placeholders.
18
+ *
19
+ * DQL blocks keep one business parameter such as `${team_set}` so app filters
20
+ * and review metadata stay readable. At execution time, an array value is
21
+ * rewritten from `IN ($1)` to `IN ($1, $2, ...)` with one bind value per item.
22
+ */
23
+ export function expandArrayParameters(sql, params, variables) {
24
+ if (!params || params.length === 0)
25
+ return { sql, params: [], variables };
26
+ const sorted = [...params].sort((a, b) => a.position - b.position);
27
+ const replacements = new Map();
28
+ const expandedParams = [];
29
+ const expandedVariables = { ...(variables ?? {}) };
30
+ let nextPosition = 1;
31
+ for (const param of sorted) {
32
+ const value = Object.prototype.hasOwnProperty.call(expandedVariables, param.name)
33
+ ? expandedVariables[param.name]
34
+ : Object.prototype.hasOwnProperty.call(param, 'literalValue')
35
+ ? param.literalValue
36
+ : null;
37
+ if (Array.isArray(value)) {
38
+ const values = value.length > 0 ? value : [null];
39
+ const names = [];
40
+ for (let index = 0; index < values.length; index += 1) {
41
+ const name = `${param.name}_${param.position}_${index + 1}`;
42
+ names.push(name);
43
+ expandedVariables[name] = values[index];
44
+ expandedParams.push({ name, position: nextPosition });
45
+ nextPosition += 1;
46
+ }
47
+ replacements.set(param.position, names.map((name) => {
48
+ const spec = expandedParams.find((candidate) => candidate.name === name);
49
+ return `$${spec?.position ?? nextPosition}`;
50
+ }).join(', '));
51
+ continue;
52
+ }
53
+ replacements.set(param.position, `$${nextPosition}`);
54
+ expandedParams.push({ ...param, position: nextPosition });
55
+ nextPosition += 1;
56
+ }
57
+ return {
58
+ sql: rewritePositionalPlaceholders(sql, replacements),
59
+ params: expandedParams,
60
+ variables: expandedVariables,
61
+ };
62
+ }
16
63
  /**
17
64
  * Normalize "$N" placeholders emitted by the compiler to the placeholder syntax
18
65
  * expected by each driver.
@@ -86,4 +133,66 @@ export function normalizeSQLPlaceholders(sql, driver) {
86
133
  }
87
134
  return out;
88
135
  }
136
+ function rewritePositionalPlaceholders(sql, replacements) {
137
+ if (!sql || replacements.size === 0)
138
+ return sql;
139
+ let out = '';
140
+ let i = 0;
141
+ let inSingle = false;
142
+ let inDouble = false;
143
+ let inBacktick = false;
144
+ while (i < sql.length) {
145
+ const ch = sql[i];
146
+ if (ch === "'" && !inDouble && !inBacktick) {
147
+ out += ch;
148
+ if (inSingle && sql[i + 1] === "'") {
149
+ out += "'";
150
+ i += 2;
151
+ continue;
152
+ }
153
+ inSingle = !inSingle;
154
+ i += 1;
155
+ continue;
156
+ }
157
+ if (ch === '"' && !inSingle && !inBacktick) {
158
+ out += ch;
159
+ if (inDouble && sql[i + 1] === '"') {
160
+ out += '"';
161
+ i += 2;
162
+ continue;
163
+ }
164
+ inDouble = !inDouble;
165
+ i += 1;
166
+ continue;
167
+ }
168
+ if (ch === '`' && !inSingle && !inDouble) {
169
+ out += ch;
170
+ if (inBacktick && sql[i + 1] === '`') {
171
+ out += '`';
172
+ i += 2;
173
+ continue;
174
+ }
175
+ inBacktick = !inBacktick;
176
+ i += 1;
177
+ continue;
178
+ }
179
+ if (!inSingle && !inDouble && !inBacktick && ch === '$') {
180
+ let j = i + 1;
181
+ if (j < sql.length && sql[j] >= '0' && sql[j] <= '9') {
182
+ while (j < sql.length && sql[j] >= '0' && sql[j] <= '9')
183
+ j += 1;
184
+ const position = Number(sql.slice(i + 1, j));
185
+ const replacement = replacements.get(position);
186
+ if (replacement) {
187
+ out += replacement;
188
+ i = j;
189
+ continue;
190
+ }
191
+ }
192
+ }
193
+ out += ch;
194
+ i += 1;
195
+ }
196
+ return out;
197
+ }
89
198
  //# sourceMappingURL=sql-params.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sql-params.js","sourceRoot":"","sources":["../src/sql-params.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql-params.js","sourceRoot":"","sources":["../src/sql-params.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duckcodeailabs/dql-connectors",
3
- "version": "1.6.18",
3
+ "version": "1.6.19",
4
4
  "description": "DQL database connectors for local files, SQL warehouses, and lakehouse engines",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -1,17 +0,0 @@
1
- import type { DatabaseConnector, ConnectionConfig, TableInfo, ColumnInfo } from '../connector.js';
2
- import type { QueryResult } from '../result-types.js';
3
- export declare class AthenaConnector implements DatabaseConnector {
4
- readonly driverName = "athena";
5
- private client;
6
- private athenaModule;
7
- private database?;
8
- private outputLocation?;
9
- private workgroup?;
10
- connect(config: ConnectionConfig): Promise<void>;
11
- execute(sql: string, params?: unknown[]): Promise<QueryResult>;
12
- disconnect(): Promise<void>;
13
- ping(): Promise<boolean>;
14
- listTables(): Promise<TableInfo[]>;
15
- listColumns(schema?: string, table?: string): Promise<ColumnInfo[]>;
16
- }
17
- //# sourceMappingURL=athena.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"athena.d.ts","sourceRoot":"","sources":["../../src/drivers/athena.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,eAAgB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,UAAU,YAAY;IAC/B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,SAAS,CAAC,CAAS;IAErB,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA4E9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IASxB,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASlC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAuB1E"}
@@ -1,157 +0,0 @@
1
- export class AthenaConnector {
2
- driverName = 'athena';
3
- client = null;
4
- athenaModule = null;
5
- database;
6
- outputLocation;
7
- workgroup;
8
- async connect(config) {
9
- const moduleName = '@aws-sdk/client-athena';
10
- this.athenaModule = await import(moduleName);
11
- const clientConfig = { region: config.region ?? config.host ?? 'us-east-1' };
12
- if (config.accessKeyId && config.secretAccessKey) {
13
- clientConfig.credentials = {
14
- accessKeyId: config.accessKeyId,
15
- secretAccessKey: config.secretAccessKey,
16
- sessionToken: config.sessionToken,
17
- };
18
- }
19
- else if (config.profile) {
20
- const { fromIni } = await import('@aws-sdk/credential-provider-ini');
21
- clientConfig.credentials = fromIni({ profile: config.profile });
22
- }
23
- this.client = new this.athenaModule.AthenaClient(clientConfig);
24
- this.database = config.database;
25
- this.outputLocation = config.outputLocation ?? config.schema;
26
- this.workgroup = config.workgroup ?? config.warehouse;
27
- }
28
- async execute(sql, params) {
29
- if (!this.client || !this.athenaModule) {
30
- throw new Error('Athena connector not connected. Call connect() first.');
31
- }
32
- if (params && params.length > 0) {
33
- throw new Error('Athena connector does not yet support positional parameters.');
34
- }
35
- if (!this.outputLocation) {
36
- throw new Error('Athena connector requires outputLocation or schema to point to an S3 query-results path.');
37
- }
38
- const startTime = performance.now();
39
- const started = await this.client.send(new this.athenaModule.StartQueryExecutionCommand({
40
- QueryString: sql,
41
- QueryExecutionContext: this.database ? { Database: this.database } : undefined,
42
- ResultConfiguration: { OutputLocation: this.outputLocation },
43
- WorkGroup: this.workgroup,
44
- }));
45
- const queryExecutionId = started.QueryExecutionId;
46
- if (!queryExecutionId) {
47
- throw new Error('Athena did not return a query execution id.');
48
- }
49
- while (true) {
50
- const statusResult = await this.client.send(new this.athenaModule.GetQueryExecutionCommand({ QueryExecutionId: queryExecutionId }));
51
- const state = statusResult.QueryExecution?.Status?.State;
52
- if (state === 'SUCCEEDED') {
53
- break;
54
- }
55
- if (state === 'FAILED' || state === 'CANCELLED') {
56
- throw new Error(statusResult.QueryExecution?.Status?.StateChangeReason ?? `Athena query ${state?.toLowerCase()}.`);
57
- }
58
- await delay(500);
59
- }
60
- const rows = [];
61
- let columns = [];
62
- let nextToken;
63
- do {
64
- const resultPage = await this.client.send(new this.athenaModule.GetQueryResultsCommand({
65
- QueryExecutionId: queryExecutionId,
66
- NextToken: nextToken,
67
- }));
68
- const columnInfo = resultPage.ResultSet?.ResultSetMetadata?.ColumnInfo ?? [];
69
- if (columns.length === 0) {
70
- columns = columnInfo.map((column) => ({
71
- name: column.Name,
72
- type: mapAthenaType(column.Type),
73
- driverType: column.Type,
74
- }));
75
- }
76
- const pageRows = resultPage.ResultSet?.Rows ?? [];
77
- for (let index = 0; index < pageRows.length; index++) {
78
- const data = pageRows[index].Data ?? [];
79
- const record = Object.fromEntries(columns.map((column, columnIndex) => [column.name, data[columnIndex]?.VarCharValue ?? null]));
80
- const isHeaderRow = index === 0 && rows.length === 0 && columns.every((column) => String(record[column.name] ?? '') === column.name);
81
- if (!isHeaderRow) {
82
- rows.push(record);
83
- }
84
- }
85
- nextToken = resultPage.NextToken;
86
- } while (nextToken);
87
- return {
88
- columns,
89
- rows,
90
- rowCount: rows.length,
91
- executionTimeMs: performance.now() - startTime,
92
- };
93
- }
94
- async disconnect() {
95
- this.client = null;
96
- this.athenaModule = null;
97
- }
98
- async ping() {
99
- try {
100
- await this.execute('SELECT 1 AS ok');
101
- return true;
102
- }
103
- catch {
104
- return false;
105
- }
106
- }
107
- async listTables() {
108
- const db = this.database ?? 'default';
109
- const result = await this.execute(`SHOW TABLES IN \`${db}\``);
110
- return result.rows.map((row) => {
111
- const name = String(Object.values(row)[0] ?? '');
112
- return { schema: db, name, type: 'BASE TABLE' };
113
- });
114
- }
115
- async listColumns(schema, table) {
116
- const db = schema ?? this.database ?? 'default';
117
- const tables = table
118
- ? [{ schema: db, name: table, type: 'BASE TABLE' }]
119
- : await this.listTables();
120
- const columns = [];
121
- for (const t of tables) {
122
- try {
123
- const result = await this.execute(`DESCRIBE \`${db}\`.\`${t.name}\``);
124
- let pos = 1;
125
- for (const row of result.rows) {
126
- const colName = String(row['col_name'] ?? Object.values(row)[0] ?? '');
127
- const dataType = String(row['data_type'] ?? Object.values(row)[1] ?? '');
128
- if (colName && !colName.startsWith('#')) {
129
- columns.push({ schema: db, table: t.name, name: colName, dataType, ordinalPosition: pos++ });
130
- }
131
- }
132
- }
133
- catch {
134
- // table may not be describable — skip
135
- }
136
- }
137
- return columns;
138
- }
139
- }
140
- function mapAthenaType(driverType) {
141
- const lower = driverType.toLowerCase();
142
- if (lower.includes('int') || lower.includes('double') || lower.includes('real') || lower.includes('decimal'))
143
- return 'number';
144
- if (lower === 'date')
145
- return 'date';
146
- if (lower.includes('timestamp'))
147
- return 'datetime';
148
- if (lower === 'boolean')
149
- return 'boolean';
150
- if (lower.includes('char') || lower.includes('string') || lower.includes('varchar'))
151
- return 'string';
152
- return 'unknown';
153
- }
154
- function delay(ms) {
155
- return new Promise((resolve) => setTimeout(resolve, ms));
156
- }
157
- //# sourceMappingURL=athena.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"athena.js","sourceRoot":"","sources":["../../src/drivers/athena.ts"],"names":[],"mappings":"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"}
@@ -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 BigQueryConnector implements DatabaseConnector {
4
- readonly driverName = "bigquery";
5
- private client;
6
- private location;
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=bigquery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bigquery.d.ts","sourceRoot":"","sources":["../../src/drivers/bigquery.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,iBAAkB,YAAW,iBAAiB;IACzD,QAAQ,CAAC,UAAU,cAAc;IACjC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAQ;IAElB,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgChD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAiE9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAUxB,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAiBlC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CA4B1E"}
@@ -1,230 +0,0 @@
1
- export class BigQueryConnector {
2
- driverName = 'bigquery';
3
- client = null;
4
- location = 'US';
5
- async connect(config) {
6
- // Dynamic import to avoid requiring @google-cloud/bigquery when not used
7
- const { BigQuery } = await import('@google-cloud/bigquery');
8
- const options = {};
9
- if (config.projectId) {
10
- options.projectId = config.projectId;
11
- }
12
- if (config.keyFilename) {
13
- options.keyFilename = config.keyFilename;
14
- }
15
- if (config.serviceAccountJson) {
16
- try {
17
- options.credentials = JSON.parse(config.serviceAccountJson);
18
- }
19
- catch (error) {
20
- throw new Error(`BigQuery serviceAccountJson is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);
21
- }
22
- }
23
- else if (config.credentials) {
24
- options.credentials = config.credentials;
25
- }
26
- if (config.location) {
27
- this.location = config.location;
28
- }
29
- // Without explicit key material, BigQuery uses Application Default Credentials.
30
- this.client = new BigQuery(options);
31
- }
32
- async execute(sql, params) {
33
- if (!this.client) {
34
- throw new Error('BigQuery connector not connected. Call connect() first.');
35
- }
36
- const startTime = performance.now();
37
- let queryText = sql;
38
- const queryOptions = {
39
- query: queryText,
40
- location: this.location,
41
- };
42
- if (params && params.length > 0) {
43
- // Prefer named parameters for compatibility. Convert positional "?" into "@pN"
44
- // and pass { pN: value }.
45
- const named = {};
46
- let idx = 0;
47
- queryText = replacePositionalQuestionMarks(queryText, () => {
48
- idx++;
49
- return `@p${idx}`;
50
- });
51
- for (let i = 0; i < params.length; i++) {
52
- named[`p${i + 1}`] = params[i];
53
- }
54
- queryOptions.query = queryText;
55
- queryOptions.params = named;
56
- }
57
- const [rows] = await this.client.query(queryOptions);
58
- const executionTimeMs = performance.now() - startTime;
59
- if (!rows || rows.length === 0) {
60
- return {
61
- columns: [],
62
- rows: [],
63
- rowCount: 0,
64
- executionTimeMs,
65
- };
66
- }
67
- // Infer columns from first row
68
- const columns = Object.keys(rows[0]).map((name) => ({
69
- name,
70
- type: inferBigQueryType(rows[0][name]),
71
- driverType: 'bigquery',
72
- }));
73
- // BigQuery returns BigQueryDate, BigQueryTimestamp etc. — normalize to plain values
74
- const normalizedRows = rows.map((row) => {
75
- const normalized = {};
76
- for (const [key, value] of Object.entries(row)) {
77
- normalized[key] = normalizeBigQueryValue(value);
78
- }
79
- return normalized;
80
- });
81
- return {
82
- columns,
83
- rows: normalizedRows,
84
- rowCount: normalizedRows.length,
85
- executionTimeMs,
86
- };
87
- }
88
- async disconnect() {
89
- // BigQuery client doesn't maintain persistent connections
90
- this.client = null;
91
- }
92
- async ping() {
93
- if (!this.client)
94
- return false;
95
- try {
96
- await this.client.query({ query: 'SELECT 1' });
97
- return true;
98
- }
99
- catch {
100
- return false;
101
- }
102
- }
103
- async listTables() {
104
- if (!this.client)
105
- throw new Error('BigQuery connector not connected.');
106
- const [datasets] = await this.client.getDatasets();
107
- const tables = [];
108
- for (const ds of datasets ?? []) {
109
- const [dsTables] = await ds.getTables();
110
- for (const t of dsTables ?? []) {
111
- tables.push({
112
- schema: ds.id ?? '',
113
- name: t.id ?? '',
114
- type: (t.metadata?.type ?? 'TABLE') === 'VIEW' ? 'VIEW' : 'BASE TABLE',
115
- });
116
- }
117
- }
118
- return tables;
119
- }
120
- async listColumns(schema, table) {
121
- if (!this.client)
122
- throw new Error('BigQuery connector not connected.');
123
- const [datasets] = await this.client.getDatasets();
124
- const filtered = schema ? (datasets ?? []).filter((ds) => ds.id === schema) : (datasets ?? []);
125
- const columns = [];
126
- for (const ds of filtered) {
127
- let sql = `SELECT table_name, column_name, data_type, ordinal_position FROM \`${ds.id}\`.INFORMATION_SCHEMA.COLUMNS`;
128
- if (table) {
129
- sql += ` WHERE table_name = '${table.replace(/'/g, "''")}'`;
130
- }
131
- sql += ` ORDER BY table_name, ordinal_position`;
132
- try {
133
- const result = await this.execute(sql);
134
- for (const row of result.rows) {
135
- columns.push({
136
- schema: ds.id ?? '',
137
- table: String(row['table_name'] ?? ''),
138
- name: String(row['column_name'] ?? ''),
139
- dataType: String(row['data_type'] ?? ''),
140
- ordinalPosition: Number(row['ordinal_position'] ?? 0),
141
- });
142
- }
143
- }
144
- catch {
145
- // Dataset may not support INFORMATION_SCHEMA — skip
146
- }
147
- }
148
- return columns;
149
- }
150
- }
151
- function normalizeBigQueryValue(value) {
152
- if (value === null || value === undefined)
153
- return null;
154
- // BigQuery wraps dates/timestamps in special objects with a .value property
155
- if (typeof value === 'object' && value !== null && 'value' in value) {
156
- return value.value;
157
- }
158
- return value;
159
- }
160
- function inferBigQueryType(value) {
161
- if (value === null || value === undefined)
162
- return 'null';
163
- if (typeof value === 'number')
164
- return 'number';
165
- if (typeof value === 'boolean')
166
- return 'boolean';
167
- if (typeof value === 'string')
168
- return 'string';
169
- // BigQuery date/timestamp objects
170
- if (typeof value === 'object' && value !== null) {
171
- const constructor = value.constructor?.name ?? '';
172
- if (constructor.includes('Date') || constructor.includes('date'))
173
- return 'date';
174
- if (constructor.includes('Timestamp') || constructor.includes('timestamp'))
175
- return 'datetime';
176
- }
177
- return 'unknown';
178
- }
179
- function replacePositionalQuestionMarks(sql, replacer) {
180
- let out = '';
181
- let i = 0;
182
- let inSingle = false;
183
- let inDouble = false;
184
- let inBacktick = false;
185
- while (i < sql.length) {
186
- const ch = sql[i];
187
- if (ch === "'" && !inDouble && !inBacktick) {
188
- out += ch;
189
- if (inSingle && sql[i + 1] === "'") {
190
- out += "'";
191
- i += 2;
192
- continue;
193
- }
194
- inSingle = !inSingle;
195
- i += 1;
196
- continue;
197
- }
198
- if (ch === '"' && !inSingle && !inBacktick) {
199
- out += ch;
200
- if (inDouble && sql[i + 1] === '"') {
201
- out += '"';
202
- i += 2;
203
- continue;
204
- }
205
- inDouble = !inDouble;
206
- i += 1;
207
- continue;
208
- }
209
- if (ch === '`' && !inSingle && !inDouble) {
210
- out += ch;
211
- if (inBacktick && sql[i + 1] === '`') {
212
- out += '`';
213
- i += 2;
214
- continue;
215
- }
216
- inBacktick = !inBacktick;
217
- i += 1;
218
- continue;
219
- }
220
- if (!inSingle && !inDouble && !inBacktick && ch === '?') {
221
- out += replacer();
222
- i += 1;
223
- continue;
224
- }
225
- out += ch;
226
- i += 1;
227
- }
228
- return out;
229
- }
230
- //# sourceMappingURL=bigquery.js.map