@querypanel/node-sdk 1.0.8 → 1.0.10
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/README.md +174 -0
- package/dist/cjs/adapters/clickhouse.d.ts +36 -0
- package/dist/cjs/adapters/clickhouse.d.ts.map +1 -0
- package/dist/cjs/adapters/clickhouse.js +259 -0
- package/dist/cjs/adapters/clickhouse.js.map +1 -0
- package/dist/cjs/adapters/introspection.spec.d.ts +2 -0
- package/dist/cjs/adapters/introspection.spec.d.ts.map +1 -0
- package/dist/cjs/adapters/introspection.spec.js +201 -0
- package/dist/cjs/adapters/introspection.spec.js.map +1 -0
- package/dist/cjs/adapters/postgres.d.ts +35 -0
- package/dist/cjs/adapters/postgres.d.ts.map +1 -0
- package/dist/cjs/adapters/postgres.js +407 -0
- package/dist/cjs/adapters/postgres.js.map +1 -0
- package/dist/cjs/adapters/types.d.ts +36 -0
- package/dist/cjs/adapters/types.d.ts.map +1 -0
- package/dist/cjs/adapters/types.js +3 -0
- package/dist/cjs/adapters/types.js.map +1 -0
- package/dist/cjs/anonymize.spec.d.ts +2 -0
- package/dist/cjs/anonymize.spec.d.ts.map +1 -0
- package/dist/cjs/anonymize.spec.js +80 -0
- package/dist/cjs/anonymize.spec.js.map +1 -0
- package/dist/cjs/clickhouseClient.spec.d.ts +2 -0
- package/dist/cjs/clickhouseClient.spec.d.ts.map +1 -0
- package/dist/cjs/clickhouseClient.spec.js +286 -0
- package/dist/cjs/clickhouseClient.spec.js.map +1 -0
- package/dist/cjs/index.d.ts +101 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +321 -53
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.test.js +52 -7
- package/dist/cjs/index.test.js.map +1 -1
- package/dist/cjs/multidb.spec.d.ts +2 -0
- package/dist/cjs/multidb.spec.d.ts.map +1 -0
- package/dist/cjs/multidb.spec.js +76 -0
- package/dist/cjs/multidb.spec.js.map +1 -0
- package/dist/esm/adapters/clickhouse.d.ts +36 -0
- package/dist/esm/adapters/clickhouse.d.ts.map +1 -0
- package/dist/esm/adapters/clickhouse.js +255 -0
- package/dist/esm/adapters/clickhouse.js.map +1 -0
- package/dist/esm/adapters/introspection.spec.d.ts +2 -0
- package/dist/esm/adapters/introspection.spec.d.ts.map +1 -0
- package/dist/esm/adapters/introspection.spec.js +199 -0
- package/dist/esm/adapters/introspection.spec.js.map +1 -0
- package/dist/esm/adapters/postgres.d.ts +35 -0
- package/dist/esm/adapters/postgres.d.ts.map +1 -0
- package/dist/esm/adapters/postgres.js +403 -0
- package/dist/esm/adapters/postgres.js.map +1 -0
- package/dist/esm/adapters/types.d.ts +36 -0
- package/dist/esm/adapters/types.d.ts.map +1 -0
- package/dist/esm/adapters/types.js +2 -0
- package/dist/esm/adapters/types.js.map +1 -0
- package/dist/esm/anonymize.spec.d.ts +2 -0
- package/dist/esm/anonymize.spec.d.ts.map +1 -0
- package/dist/esm/anonymize.spec.js +78 -0
- package/dist/esm/anonymize.spec.js.map +1 -0
- package/dist/esm/clickhouseClient.spec.d.ts +2 -0
- package/dist/esm/clickhouseClient.spec.d.ts.map +1 -0
- package/dist/esm/clickhouseClient.spec.js +281 -0
- package/dist/esm/clickhouseClient.spec.js.map +1 -0
- package/dist/esm/index.d.ts +101 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +320 -53
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.test.js +52 -7
- package/dist/esm/index.test.js.map +1 -1
- package/dist/esm/multidb.spec.d.ts +2 -0
- package/dist/esm/multidb.spec.d.ts.map +1 -0
- package/dist/esm/multidb.spec.js +74 -0
- package/dist/esm/multidb.spec.js.map +1 -0
- package/package.json +5 -2
package/README.md
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# QueryPanel Node SDK
|
|
2
|
+
|
|
3
|
+
A lightweight Node.js client for QueryPanel's NL-to-SQL APIs. The SDK manages JWT auth, exposes helper methods for common endpoints, and provides database adapters with execution, validation, and schema introspection utilities for ClickHouse and Postgres.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @querypanel/node-sdk @clickhouse/client
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
- Requires **Node 18+**.
|
|
12
|
+
- `@clickhouse/client` is a peer dependency for ClickHouse integrations.
|
|
13
|
+
|
|
14
|
+
## Quick start
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import { QueryPanelSdkAPI } from "@querypanel/node-sdk";
|
|
18
|
+
import { createClient } from "@clickhouse/client";
|
|
19
|
+
|
|
20
|
+
const qp = new QueryPanelSdkAPI(
|
|
21
|
+
process.env.QUERYPANEL_URL!,
|
|
22
|
+
process.env.QUERYPANEL_SERVICE_TOKEN!,
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
// Attach a ClickHouse database (use the SDK-supplied adapter)
|
|
26
|
+
const clickhouse = createClient({
|
|
27
|
+
url: process.env.CLICKHOUSE_URL!,
|
|
28
|
+
username: process.env.CLICKHOUSE_USER,
|
|
29
|
+
password: process.env.CLICKHOUSE_PASSWORD,
|
|
30
|
+
database: "analytics",
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
qp.attachClickhouse(
|
|
34
|
+
"analytics",
|
|
35
|
+
(params) => clickhouse.query(params),
|
|
36
|
+
{ database: "analytics" },
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
// Ask a question
|
|
40
|
+
const response = await qp.ask("Top countries by revenue", { tenantId: "tenant_123" });
|
|
41
|
+
console.log(response.sql);
|
|
42
|
+
console.table(response.rows);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Authentication modes
|
|
46
|
+
|
|
47
|
+
The constructor accepts either an already-signed JWT or a private key/organization pair for on-the-fly token generation:
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
// Mode 1: pass a pre-signed JWT for legacy integrations
|
|
51
|
+
const qpLegacy = new QueryPanelSdkAPI(baseUrl, signedJwt);
|
|
52
|
+
|
|
53
|
+
// Mode 2: provide an RSA private key and organization ID (recommended)
|
|
54
|
+
const qp = new QueryPanelSdkAPI(baseUrl, privateKeyPem, organizationId);
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Working with databases
|
|
58
|
+
|
|
59
|
+
Adapters mediate between the SDK and your data sources. Two helpers are bundled:
|
|
60
|
+
|
|
61
|
+
### ClickHouse
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
import {
|
|
65
|
+
ClickHouseAdapter,
|
|
66
|
+
type ClickHouseClientFn,
|
|
67
|
+
} from "@querypanel/node-sdk";
|
|
68
|
+
import { createClient } from "@clickhouse/client";
|
|
69
|
+
|
|
70
|
+
const clickhouseClient = createClient({ url: "https://ch.example.com", database: "analytics" });
|
|
71
|
+
const clickhouseFn: ClickHouseClientFn = (params) => clickhouseClient.query(params);
|
|
72
|
+
const clickhouseAdapter = new ClickHouseAdapter(clickhouseFn, { database: "analytics" });
|
|
73
|
+
|
|
74
|
+
// Optional introspection before attaching
|
|
75
|
+
const schema = await clickhouseAdapter.introspect();
|
|
76
|
+
console.log(schema.tables.map((t) => t.name));
|
|
77
|
+
|
|
78
|
+
qp.attachDatabase("analytics", clickhouseAdapter);
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Postgres
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
import { Pool } from "pg";
|
|
85
|
+
import {
|
|
86
|
+
PostgresAdapter,
|
|
87
|
+
type PostgresClientFn,
|
|
88
|
+
} from "@querypanel/node-sdk";
|
|
89
|
+
|
|
90
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
91
|
+
const pgFn: PostgresClientFn = async (sql) => {
|
|
92
|
+
const client = await pool.connect();
|
|
93
|
+
try {
|
|
94
|
+
const result = await client.query(sql);
|
|
95
|
+
return {
|
|
96
|
+
rows: result.rows,
|
|
97
|
+
fields: result.fields.map((f) => ({ name: f.name })),
|
|
98
|
+
};
|
|
99
|
+
} finally {
|
|
100
|
+
client.release();
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const pgAdapter = new PostgresAdapter(pgFn, {
|
|
105
|
+
database: "app",
|
|
106
|
+
defaultSchema: "public",
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
await pgAdapter.introspect({ tables: ["public.users"] });
|
|
110
|
+
qp.attachDatabase("app", pgAdapter);
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Adapters expose three core methods:
|
|
114
|
+
|
|
115
|
+
- `execute(sql)` – runs the query and returns `{ fields, rows }`.
|
|
116
|
+
- `validate(sql)` – runs an `EXPLAIN` to verify syntax before execution.
|
|
117
|
+
- `introspect(options?)` – returns structured schema metadata (`SchemaIntrospection`).
|
|
118
|
+
|
|
119
|
+
## SDK helpers
|
|
120
|
+
|
|
121
|
+
Once at least one adapter is attached you can call:
|
|
122
|
+
|
|
123
|
+
- `ask(question, options)` – generate SQL, validate it, execute through the adapter, and retrieve a matching Vega-Lite chart spec.
|
|
124
|
+
- `train(payload, { userId, scopes })` – submit training data (DDL, examples, business doc).
|
|
125
|
+
- `stats({ tenantId, userId, scopes })` – fetch ingestion statistics.
|
|
126
|
+
- Chart helpers: `listCharts`, `getChart`, `createChart`, `updateChart`, `deleteChart`, `listActiveCharts`, `getActiveChart`, `createActiveChart`, `updateActiveChart`, `deleteActiveChart`.
|
|
127
|
+
|
|
128
|
+
Every SDK call automatically attaches the correct authentication headers and forwards optional `tenantId`, `userId`, and `scopes` when provided.
|
|
129
|
+
|
|
130
|
+
## Multi-database support
|
|
131
|
+
|
|
132
|
+
The SDK keeps a registry of adapters. The first attached database becomes the default, but you can switch per request:
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
qp.attachPostgres("users", pgFn, { database: "users" });
|
|
136
|
+
qp.attachClickhouse("analytics", clickhouseFn);
|
|
137
|
+
|
|
138
|
+
await qp.ask("Top spenders", {
|
|
139
|
+
tenantId: "tenant_123",
|
|
140
|
+
database: "analytics", // override default database for this request
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
The `available_databases` array is forwarded to the `/v2/generate-sql` endpoint so the service can pick the right dialect when it suggests queries.
|
|
145
|
+
|
|
146
|
+
## Schema introspection
|
|
147
|
+
|
|
148
|
+
Both adapters can produce consistent metadata that matches `node-sdk/src/schema/types.ts`:
|
|
149
|
+
|
|
150
|
+
```ts
|
|
151
|
+
const snapshot = await pgAdapter.introspect({ tables: ["public.orders"] });
|
|
152
|
+
for (const table of snapshot.tables) {
|
|
153
|
+
console.log(table.name, table.columns.length);
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Use introspection to feed the training endpoint or to drive documentation for the AI planner.
|
|
158
|
+
|
|
159
|
+
## Testing and building
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# run unit tests
|
|
163
|
+
npm --prefix node-sdk test
|
|
164
|
+
|
|
165
|
+
# build CommonJS and ESM artifacts
|
|
166
|
+
npm --prefix node-sdk run build
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Additional resources
|
|
170
|
+
|
|
171
|
+
- `SDK-API.md` – REST endpoint reference used by the SDK.
|
|
172
|
+
- `MULTI_DATABASE.md` – notes on attaching multiple adapters.
|
|
173
|
+
|
|
174
|
+
If you hit an integration bug or need support for an additional database engine, open an issue or reach out to the QueryPanel team.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ClickHouseSettings, QueryParams, Row } from "@clickhouse/client";
|
|
2
|
+
import type { IntrospectOptions, SchemaIntrospection } from "../schema/types.js";
|
|
3
|
+
import type { DatabaseAdapter, DatabaseExecutionResult } from "./types.js";
|
|
4
|
+
export interface ClickHouseAdapterOptions {
|
|
5
|
+
/** Optional logical database name used in introspection metadata. */
|
|
6
|
+
database?: string;
|
|
7
|
+
/** Override the default response format used for query execution. */
|
|
8
|
+
defaultFormat?: QueryParams["format"];
|
|
9
|
+
/**
|
|
10
|
+
* Optional database kind label. Defaults to "clickhouse" but allows
|
|
11
|
+
* sub-classing/custom branding if needed.
|
|
12
|
+
*/
|
|
13
|
+
kind?: SchemaIntrospection["db"]["kind"];
|
|
14
|
+
}
|
|
15
|
+
export type ClickHouseQueryResult = {
|
|
16
|
+
json: () => Promise<unknown>;
|
|
17
|
+
};
|
|
18
|
+
export type ClickHouseClientFn = (params: QueryParams & {
|
|
19
|
+
query_params?: Record<string, unknown>;
|
|
20
|
+
clickhouse_settings?: ClickHouseSettings;
|
|
21
|
+
}) => Promise<ClickHouseQueryResult | Array<Record<string, unknown>> | Row[]>;
|
|
22
|
+
export declare class ClickHouseAdapter implements DatabaseAdapter {
|
|
23
|
+
private readonly clientFn;
|
|
24
|
+
private readonly databaseName;
|
|
25
|
+
private readonly defaultFormat;
|
|
26
|
+
private readonly kind;
|
|
27
|
+
constructor(clientFn: ClickHouseClientFn, options?: ClickHouseAdapterOptions);
|
|
28
|
+
execute(sql: string, params?: Record<string, string | number | boolean | string[] | number[]>): Promise<DatabaseExecutionResult>;
|
|
29
|
+
validate(sql: string): Promise<void>;
|
|
30
|
+
getDialect(): "clickhouse";
|
|
31
|
+
introspect(options?: IntrospectOptions): Promise<SchemaIntrospection>;
|
|
32
|
+
close(): Promise<void>;
|
|
33
|
+
private query;
|
|
34
|
+
private extractRows;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=clickhouse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../../src/adapters/clickhouse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,GAAG,EACJ,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,KAAK,EAEV,iBAAiB,EACjB,mBAAmB,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,wBAAwB;IACvC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,aAAa,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC;;;OAGG;IACH,IAAI,CAAC,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,MAAM,qBAAqB,GAAG;IAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAAG,CAC/B,MAAM,EAAE,WAAW,GAAG;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;CAC1C,KACE,OAAO,CAAC,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;AAkC7E,qBAAa,iBAAkB,YAAW,eAAe;IAMrD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoC;gBAGtC,QAAQ,EAAE,kBAAkB,EAC7C,OAAO,GAAE,wBAA6B;IAOlC,OAAO,CACX,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GACvE,OAAO,CAAC,uBAAuB,CAAC;IAa7B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,UAAU,IACD,YAAY;IAGf,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyGrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,KAAK;YA4BL,WAAW;CAc1B"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClickHouseAdapter = void 0;
|
|
4
|
+
const clickhouse_js_1 = require("../utils/clickhouse.js");
|
|
5
|
+
class ClickHouseAdapter {
|
|
6
|
+
constructor(clientFn, options = {}) {
|
|
7
|
+
this.clientFn = clientFn;
|
|
8
|
+
this.databaseName = options.database ?? "default";
|
|
9
|
+
this.defaultFormat = options.defaultFormat ?? "JSONEachRow";
|
|
10
|
+
this.kind = options.kind ?? "clickhouse";
|
|
11
|
+
}
|
|
12
|
+
async execute(sql, params) {
|
|
13
|
+
const queryOptions = {
|
|
14
|
+
format: this.defaultFormat,
|
|
15
|
+
};
|
|
16
|
+
if (params) {
|
|
17
|
+
queryOptions.params = params;
|
|
18
|
+
}
|
|
19
|
+
const rows = await this.query(sql, queryOptions);
|
|
20
|
+
const fields = rows.length > 0 ? Object.keys(rows[0] ?? {}) : [];
|
|
21
|
+
return { fields, rows };
|
|
22
|
+
}
|
|
23
|
+
async validate(sql) {
|
|
24
|
+
await this.query(`EXPLAIN ${sql}`, { format: this.defaultFormat });
|
|
25
|
+
}
|
|
26
|
+
getDialect() {
|
|
27
|
+
return "clickhouse";
|
|
28
|
+
}
|
|
29
|
+
async introspect(options) {
|
|
30
|
+
const allowTables = normalizeTableFilter(options?.tables);
|
|
31
|
+
const hasFilter = allowTables.length > 0;
|
|
32
|
+
const queryParams = {
|
|
33
|
+
db: this.databaseName,
|
|
34
|
+
};
|
|
35
|
+
if (hasFilter) {
|
|
36
|
+
queryParams.tables = allowTables;
|
|
37
|
+
}
|
|
38
|
+
const filterClause = hasFilter ? " AND name IN {tables:Array(String)}" : "";
|
|
39
|
+
const tables = await this.query(`SELECT name, engine, comment, total_rows, total_bytes, is_view, primary_key, sorting_key
|
|
40
|
+
FROM system.tables
|
|
41
|
+
WHERE database = {db:String}${filterClause}
|
|
42
|
+
ORDER BY name`, { params: queryParams });
|
|
43
|
+
const columnFilterClause = hasFilter
|
|
44
|
+
? " AND table IN {tables:Array(String)}"
|
|
45
|
+
: "";
|
|
46
|
+
const columns = await this.query(`SELECT table, name, type, position, default_kind, default_expression, comment,
|
|
47
|
+
codec_expression, ttl_expression, is_in_primary_key,
|
|
48
|
+
data_compressed_bytes, data_uncompressed_bytes
|
|
49
|
+
FROM system.columns
|
|
50
|
+
WHERE database = {db:String}${columnFilterClause}
|
|
51
|
+
ORDER BY table, position`, { params: queryParams });
|
|
52
|
+
const columnsByTable = new Map();
|
|
53
|
+
for (const rawColumn of columns) {
|
|
54
|
+
const list = columnsByTable.get(rawColumn.table) ?? [];
|
|
55
|
+
list.push(transformColumnRow(rawColumn));
|
|
56
|
+
columnsByTable.set(rawColumn.table, list);
|
|
57
|
+
}
|
|
58
|
+
const tableSchemas = tables.map((table) => {
|
|
59
|
+
const tableColumns = columnsByTable.get(table.name) ?? [];
|
|
60
|
+
const primaryKeyColumns = (0, clickhouse_js_1.parseKeyExpression)(table.primary_key);
|
|
61
|
+
const totalRows = toNumber(table.total_rows);
|
|
62
|
+
const totalBytes = toNumber(table.total_bytes);
|
|
63
|
+
for (const column of tableColumns) {
|
|
64
|
+
column.isPrimaryKey =
|
|
65
|
+
column.isPrimaryKey || primaryKeyColumns.includes(column.name);
|
|
66
|
+
}
|
|
67
|
+
const indexes = primaryKeyColumns.length
|
|
68
|
+
? [
|
|
69
|
+
{
|
|
70
|
+
name: "primary_key",
|
|
71
|
+
columns: primaryKeyColumns,
|
|
72
|
+
unique: true,
|
|
73
|
+
type: "PRIMARY KEY",
|
|
74
|
+
...(table.primary_key ? { definition: table.primary_key } : {}),
|
|
75
|
+
},
|
|
76
|
+
]
|
|
77
|
+
: [];
|
|
78
|
+
const constraints = primaryKeyColumns.length
|
|
79
|
+
? [
|
|
80
|
+
{
|
|
81
|
+
name: "primary_key",
|
|
82
|
+
type: "PRIMARY KEY",
|
|
83
|
+
columns: primaryKeyColumns,
|
|
84
|
+
},
|
|
85
|
+
]
|
|
86
|
+
: [];
|
|
87
|
+
const base = {
|
|
88
|
+
name: table.name,
|
|
89
|
+
schema: this.databaseName,
|
|
90
|
+
type: asTableType(table.is_view),
|
|
91
|
+
engine: table.engine,
|
|
92
|
+
columns: tableColumns,
|
|
93
|
+
indexes,
|
|
94
|
+
constraints,
|
|
95
|
+
};
|
|
96
|
+
const comment = sanitize(table.comment);
|
|
97
|
+
if (comment !== undefined) {
|
|
98
|
+
base.comment = comment;
|
|
99
|
+
}
|
|
100
|
+
const statistics = buildTableStatistics(totalRows, totalBytes);
|
|
101
|
+
if (statistics) {
|
|
102
|
+
base.statistics = statistics;
|
|
103
|
+
}
|
|
104
|
+
return base;
|
|
105
|
+
});
|
|
106
|
+
return {
|
|
107
|
+
db: {
|
|
108
|
+
kind: this.kind,
|
|
109
|
+
name: this.databaseName,
|
|
110
|
+
},
|
|
111
|
+
tables: tableSchemas,
|
|
112
|
+
introspectedAt: new Date().toISOString(),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
async close() {
|
|
116
|
+
// No-op: lifecycle of the underlying client is controlled by the caller.
|
|
117
|
+
}
|
|
118
|
+
async query(sql, options) {
|
|
119
|
+
const params = {
|
|
120
|
+
query: sql,
|
|
121
|
+
};
|
|
122
|
+
const format = options?.format ?? this.defaultFormat;
|
|
123
|
+
if (format !== undefined) {
|
|
124
|
+
params.format = format;
|
|
125
|
+
}
|
|
126
|
+
if (options?.params) {
|
|
127
|
+
params.query_params = options.params;
|
|
128
|
+
}
|
|
129
|
+
if (options?.settings) {
|
|
130
|
+
params.clickhouse_settings = options.settings;
|
|
131
|
+
}
|
|
132
|
+
const result = await this.clientFn(params);
|
|
133
|
+
return this.extractRows(result);
|
|
134
|
+
}
|
|
135
|
+
async extractRows(result) {
|
|
136
|
+
if (Array.isArray(result)) {
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
if (result && typeof result.json === "function") {
|
|
140
|
+
const payload = await result.json();
|
|
141
|
+
return normalizePayload(payload);
|
|
142
|
+
}
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.ClickHouseAdapter = ClickHouseAdapter;
|
|
147
|
+
function normalizePayload(payload) {
|
|
148
|
+
if (Array.isArray(payload)) {
|
|
149
|
+
return payload;
|
|
150
|
+
}
|
|
151
|
+
if (payload && typeof payload === "object") {
|
|
152
|
+
const maybeData = payload.data;
|
|
153
|
+
if (Array.isArray(maybeData)) {
|
|
154
|
+
return maybeData;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
function normalizeTableFilter(tables) {
|
|
160
|
+
if (!tables?.length)
|
|
161
|
+
return [];
|
|
162
|
+
const seen = new Set();
|
|
163
|
+
const normalized = [];
|
|
164
|
+
for (const table of tables) {
|
|
165
|
+
if (!table)
|
|
166
|
+
continue;
|
|
167
|
+
const trimmed = table.trim();
|
|
168
|
+
if (!trimmed)
|
|
169
|
+
continue;
|
|
170
|
+
const parts = trimmed.split(".");
|
|
171
|
+
const tableName = parts[parts.length - 1];
|
|
172
|
+
if (!tableName || seen.has(tableName))
|
|
173
|
+
continue;
|
|
174
|
+
seen.add(tableName);
|
|
175
|
+
normalized.push(tableName);
|
|
176
|
+
}
|
|
177
|
+
return normalized;
|
|
178
|
+
}
|
|
179
|
+
function transformColumnRow(row) {
|
|
180
|
+
const nullable = (0, clickhouse_js_1.isNullableType)(row.type);
|
|
181
|
+
const unwrappedType = (0, clickhouse_js_1.unwrapTypeModifiers)(row.type);
|
|
182
|
+
const { precision, scale } = (0, clickhouse_js_1.extractPrecisionScale)(row.type);
|
|
183
|
+
const maxLength = (0, clickhouse_js_1.extractFixedStringLength)(row.type);
|
|
184
|
+
const compressedBytes = toNumber(row.data_compressed_bytes);
|
|
185
|
+
const uncompressedBytes = toNumber(row.data_uncompressed_bytes);
|
|
186
|
+
const column = {
|
|
187
|
+
name: row.name,
|
|
188
|
+
type: unwrappedType,
|
|
189
|
+
rawType: row.type,
|
|
190
|
+
nullable,
|
|
191
|
+
isPrimaryKey: Boolean(toNumber(row.is_in_primary_key)),
|
|
192
|
+
isForeignKey: false,
|
|
193
|
+
};
|
|
194
|
+
const defaultKind = sanitize(row.default_kind);
|
|
195
|
+
if (defaultKind !== undefined)
|
|
196
|
+
column.defaultKind = defaultKind;
|
|
197
|
+
const defaultExpression = sanitize(row.default_expression);
|
|
198
|
+
if (defaultExpression !== undefined) {
|
|
199
|
+
column.defaultExpression = defaultExpression;
|
|
200
|
+
}
|
|
201
|
+
const comment = sanitize(row.comment);
|
|
202
|
+
if (comment !== undefined)
|
|
203
|
+
column.comment = comment;
|
|
204
|
+
const codec = sanitize(row.codec_expression);
|
|
205
|
+
if (codec !== undefined)
|
|
206
|
+
column.codec = codec;
|
|
207
|
+
const ttlExpression = sanitize(row.ttl_expression);
|
|
208
|
+
if (ttlExpression !== undefined)
|
|
209
|
+
column.ttlExpression = ttlExpression;
|
|
210
|
+
if (maxLength !== undefined)
|
|
211
|
+
column.maxLength = maxLength;
|
|
212
|
+
if (precision !== undefined)
|
|
213
|
+
column.precision = precision;
|
|
214
|
+
if (scale !== undefined)
|
|
215
|
+
column.scale = scale;
|
|
216
|
+
if (compressedBytes !== undefined || uncompressedBytes !== undefined) {
|
|
217
|
+
column.statistics = {};
|
|
218
|
+
if (compressedBytes !== undefined)
|
|
219
|
+
column.statistics.compressedBytes = compressedBytes;
|
|
220
|
+
if (uncompressedBytes !== undefined)
|
|
221
|
+
column.statistics.uncompressedBytes = uncompressedBytes;
|
|
222
|
+
}
|
|
223
|
+
return column;
|
|
224
|
+
}
|
|
225
|
+
function asTableType(isView) {
|
|
226
|
+
if (typeof isView === "number") {
|
|
227
|
+
return isView > 0 ? "view" : "table";
|
|
228
|
+
}
|
|
229
|
+
if (typeof isView === "string") {
|
|
230
|
+
const normalized = isView.toLowerCase();
|
|
231
|
+
return normalized === "1" || normalized === "true" ? "view" : "table";
|
|
232
|
+
}
|
|
233
|
+
return "table";
|
|
234
|
+
}
|
|
235
|
+
function buildTableStatistics(totalRows, totalBytes) {
|
|
236
|
+
if (totalRows === undefined && totalBytes === undefined)
|
|
237
|
+
return undefined;
|
|
238
|
+
const stats = {};
|
|
239
|
+
if (totalRows !== undefined)
|
|
240
|
+
stats.totalRows = totalRows;
|
|
241
|
+
if (totalBytes !== undefined)
|
|
242
|
+
stats.totalBytes = totalBytes;
|
|
243
|
+
return stats;
|
|
244
|
+
}
|
|
245
|
+
function sanitize(value) {
|
|
246
|
+
if (value === null || value === undefined)
|
|
247
|
+
return undefined;
|
|
248
|
+
const trimmed = String(value).trim();
|
|
249
|
+
return trimmed.length ? trimmed : undefined;
|
|
250
|
+
}
|
|
251
|
+
function toNumber(value) {
|
|
252
|
+
if (value === null || value === undefined)
|
|
253
|
+
return undefined;
|
|
254
|
+
if (typeof value === "number")
|
|
255
|
+
return value;
|
|
256
|
+
const parsed = Number.parseFloat(String(value));
|
|
257
|
+
return Number.isNaN(parsed) ? undefined : parsed;
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=clickhouse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../../src/adapters/clickhouse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspection.spec.d.ts","sourceRoot":"","sources":["../../../src/adapters/introspection.spec.ts"],"names":[],"mappings":""}
|