@askdb/studio 0.2.0-beta.35 → 0.2.0-beta.37
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 +12 -27
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +16 -7
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -0
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/index-xswUSrtO.js +100 -0
- package/dist/client/index.html +1 -1
- package/dist/execute-registry.d.ts +54 -0
- package/dist/execute-registry.d.ts.map +1 -1
- package/dist/execute-registry.js +237 -41
- package/dist/execute-registry.js.map +1 -1
- package/dist/introspection.d.ts +6 -6
- package/dist/introspection.d.ts.map +1 -1
- package/dist/introspection.js +15 -69
- package/dist/introspection.js.map +1 -1
- package/dist/package-manager.d.ts +31 -0
- package/dist/package-manager.d.ts.map +1 -0
- package/dist/package-manager.js +54 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/request-guard.d.ts +44 -0
- package/dist/request-guard.d.ts.map +1 -0
- package/dist/request-guard.js +170 -0
- package/dist/request-guard.js.map +1 -0
- package/dist/server.d.ts +13 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +450 -196
- package/dist/server.js.map +1 -1
- package/dist/setup.d.ts +4 -2
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +69 -85
- package/dist/setup.js.map +1 -1
- package/dist/shared/api.d.ts +25 -3
- package/dist/shared/api.d.ts.map +1 -1
- package/package.json +50 -43
- package/dist/client/assets/index-BvbATe8r.js +0 -101
package/dist/client/index.html
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>AskDB Studio</title>
|
|
7
7
|
<link rel="icon" type="image/png" media="(prefers-color-scheme: light)" href="/assets/brand/light-icon.png" />
|
|
8
8
|
<link rel="icon" type="image/png" media="(prefers-color-scheme: dark)" href="/assets/brand/dark-icon.png" />
|
|
9
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
+
<script type="module" crossorigin src="/assets/index-xswUSrtO.js"></script>
|
|
10
10
|
<link rel="stylesheet" crossorigin href="/assets/index-CULOwR3W.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
@@ -8,16 +8,41 @@
|
|
|
8
8
|
* Drivers are optional peers. The registry never imports a driver at module
|
|
9
9
|
* load time; every import lives inside an `executeXxx()` function so a missing
|
|
10
10
|
* package only fails when the user actually tries to execute a query.
|
|
11
|
+
*
|
|
12
|
+
* Safety model (every engine):
|
|
13
|
+
*
|
|
14
|
+
* 1. The server validates SQL with `@askdb/core`'s `validateSelectSql` before it
|
|
15
|
+
* reaches a runner ({@link validateExecuteSql}). Runners receive the
|
|
16
|
+
* normalized single statement (no trailing semicolon, no comments).
|
|
17
|
+
* 2. Each runner executes the SQL read-only: inside a read-only transaction
|
|
18
|
+
* (Postgres, MySQL/MariaDB), on a read-only file handle (SQLite), or inside
|
|
19
|
+
* an always-rolled-back transaction (SQL Server). Postgres, MySQL/MariaDB,
|
|
20
|
+
* and SQLite run a single statement; SQL Server runs the SQL as part of a
|
|
21
|
+
* batch, where a second statement without `;` isn't detected by step 1.
|
|
22
|
+
* Every engine except SQLite (whose queries can't be interrupted) enforces
|
|
23
|
+
* a statement timeout.
|
|
24
|
+
* 3. Each runner fetches at most `maxRows + 1` rows and reports `truncated`.
|
|
25
|
+
*
|
|
26
|
+
* None of this replaces a read-only database role — point Studio at one.
|
|
11
27
|
*/
|
|
28
|
+
import { type DialectSpec } from "@askdb/core";
|
|
12
29
|
import type { ExecuteResponse } from "./shared/api.js";
|
|
13
30
|
export type StudioExecuteProvider = "postgres" | "mysql" | "sqlite" | "sqlserver";
|
|
14
31
|
export type StudioExecuteInput = {
|
|
15
32
|
connectionString?: string;
|
|
16
33
|
file?: string;
|
|
34
|
+
/**
|
|
35
|
+
* A single SELECT that already passed {@link validateExecuteSql}. Runners
|
|
36
|
+
* wrap it (row cap, transaction) but never re-validate.
|
|
37
|
+
*/
|
|
17
38
|
sql: string;
|
|
18
39
|
params: unknown[];
|
|
19
40
|
/** Absolute path to the user's project root, used for driver resolution. */
|
|
20
41
|
projectRoot: string;
|
|
42
|
+
/** Per-query timeout in ms. Default {@link DEFAULT_EXECUTE_TIMEOUT_MS}. */
|
|
43
|
+
timeoutMs?: number;
|
|
44
|
+
/** Max rows returned. Default {@link DEFAULT_EXECUTE_MAX_ROWS}. */
|
|
45
|
+
maxRows?: number;
|
|
21
46
|
};
|
|
22
47
|
export type StudioDriverDefinition = {
|
|
23
48
|
provider: StudioExecuteProvider;
|
|
@@ -26,7 +51,36 @@ export type StudioDriverDefinition = {
|
|
|
26
51
|
installCommand: string;
|
|
27
52
|
execute(input: StudioExecuteInput): Promise<ExecuteResponse>;
|
|
28
53
|
};
|
|
54
|
+
export declare const DEFAULT_EXECUTE_TIMEOUT_MS = 30000;
|
|
55
|
+
export declare const DEFAULT_EXECUTE_MAX_ROWS = 500;
|
|
56
|
+
/**
|
|
57
|
+
* The dialect spec used to validate SQL for `provider`. A configured NL→SQL
|
|
58
|
+
* dialect override (`dialect` in `askdb.config.ts`) is honored when it belongs
|
|
59
|
+
* to the same engine family (e.g. `mariadb` on the `mysql` provider).
|
|
60
|
+
*/
|
|
61
|
+
export declare function executeDialectFor(provider: StudioExecuteProvider, dialectOverride?: string): DialectSpec;
|
|
62
|
+
/**
|
|
63
|
+
* Run `@askdb/core`'s read-only SELECT guardrail for the provider's dialect.
|
|
64
|
+
* Returns the single statement without its trailing `;`, so runners can wrap it
|
|
65
|
+
* in a row cap; throws `SqlValidationError`.
|
|
66
|
+
*/
|
|
67
|
+
export declare function validateExecuteSql(provider: StudioExecuteProvider, sql: string, dialectOverride?: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Wrap a validated single SELECT so the database returns at most `fetchLimit`
|
|
70
|
+
* rows. Used for engines with `LIMIT` (Postgres, MySQL). The newlines keep the
|
|
71
|
+
* wrapper intact even if the statement ends in something unexpected.
|
|
72
|
+
*/
|
|
73
|
+
export declare function wrapWithRowLimit(sql: string, fetchLimit: number): string;
|
|
74
|
+
/**
|
|
75
|
+
* SQL Server has no read-only transaction mode, so the statement runs inside a
|
|
76
|
+
* transaction that is always rolled back. `XACT_ABORT` rolls back on any error;
|
|
77
|
+
* `ROWCOUNT` caps the rows returned (SQL Server has no `LIMIT`, and wrapping in
|
|
78
|
+
* a derived table would reject unnamed columns such as `COUNT(*)`).
|
|
79
|
+
*/
|
|
80
|
+
export declare function buildSqlServerBatch(sql: string, fetchLimit: number): string;
|
|
29
81
|
export declare const EXECUTE_DRIVER_REGISTRY: Record<StudioExecuteProvider, StudioDriverDefinition>;
|
|
82
|
+
/** True when `value` is a registry key (own property — rejects `constructor`, `__proto__`, …). */
|
|
83
|
+
export declare function isStudioExecuteProvider(value: unknown): value is StudioExecuteProvider;
|
|
30
84
|
/**
|
|
31
85
|
* Check whether a driver package is resolvable from the user's project root.
|
|
32
86
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-registry.d.ts","sourceRoot":"","sources":["../src/execute-registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"execute-registry.d.ts","sourceRoot":"","sources":["../src/execute-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAUrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMvD,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAElF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,IAAI,GAAG,QAAQ,GAAG,gBAAgB,GAAG,OAAO,CAAC;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC9D,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAiB5C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,WAAW,CAOxG;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,qBAAqB,EAC/B,GAAG,EAAE,MAAM,EACX,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAMR;AAgBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAExE;AAyUD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAU3E;AA2DD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,qBAAqB,EAAE,sBAAsB,CA6BzF,CAAC;AAEF,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAEtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAanF"}
|
package/dist/execute-registry.js
CHANGED
|
@@ -8,96 +8,243 @@
|
|
|
8
8
|
* Drivers are optional peers. The registry never imports a driver at module
|
|
9
9
|
* load time; every import lives inside an `executeXxx()` function so a missing
|
|
10
10
|
* package only fails when the user actually tries to execute a query.
|
|
11
|
+
*
|
|
12
|
+
* Safety model (every engine):
|
|
13
|
+
*
|
|
14
|
+
* 1. The server validates SQL with `@askdb/core`'s `validateSelectSql` before it
|
|
15
|
+
* reaches a runner ({@link validateExecuteSql}). Runners receive the
|
|
16
|
+
* normalized single statement (no trailing semicolon, no comments).
|
|
17
|
+
* 2. Each runner executes the SQL read-only: inside a read-only transaction
|
|
18
|
+
* (Postgres, MySQL/MariaDB), on a read-only file handle (SQLite), or inside
|
|
19
|
+
* an always-rolled-back transaction (SQL Server). Postgres, MySQL/MariaDB,
|
|
20
|
+
* and SQLite run a single statement; SQL Server runs the SQL as part of a
|
|
21
|
+
* batch, where a second statement without `;` isn't detected by step 1.
|
|
22
|
+
* Every engine except SQLite (whose queries can't be interrupted) enforces
|
|
23
|
+
* a statement timeout.
|
|
24
|
+
* 3. Each runner fetches at most `maxRows + 1` rows and reports `truncated`.
|
|
25
|
+
*
|
|
26
|
+
* None of this replaces a read-only database role — point Studio at one.
|
|
11
27
|
*/
|
|
28
|
+
import { getDialectSpec, validateSelectSql, } from "@askdb/core";
|
|
12
29
|
import { loadPgDriver, isPgDriverInstalled } from "@askdb/postgres";
|
|
13
30
|
import { loadMysql2Driver, isMysql2DriverInstalled } from "@askdb/mysql";
|
|
14
31
|
import { loadBetterSqlite3Driver, isBetterSqlite3DriverInstalled } from "@askdb/sqlite";
|
|
15
32
|
import { loadMssqlDriver, isMssqlDriverInstalled, resolveConnectionInput, } from "@askdb/sqlserver";
|
|
33
|
+
export const DEFAULT_EXECUTE_TIMEOUT_MS = 30_000;
|
|
34
|
+
export const DEFAULT_EXECUTE_MAX_ROWS = 500;
|
|
35
|
+
/** Alias for the row-cap subquery wrapper. */
|
|
36
|
+
const ROW_LIMIT_ALIAS = "askdb_q";
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Validation
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
/** Built-in dialects each execute provider can run. The first is the default. */
|
|
41
|
+
const PROVIDER_DIALECTS = {
|
|
42
|
+
postgres: ["postgres", "cockroachdb"],
|
|
43
|
+
mysql: ["mysql", "mariadb"],
|
|
44
|
+
sqlite: ["sqlite"],
|
|
45
|
+
sqlserver: ["sqlserver"],
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* The dialect spec used to validate SQL for `provider`. A configured NL→SQL
|
|
49
|
+
* dialect override (`dialect` in `askdb.config.ts`) is honored when it belongs
|
|
50
|
+
* to the same engine family (e.g. `mariadb` on the `mysql` provider).
|
|
51
|
+
*/
|
|
52
|
+
export function executeDialectFor(provider, dialectOverride) {
|
|
53
|
+
const family = PROVIDER_DIALECTS[provider];
|
|
54
|
+
const id = dialectOverride && family.includes(dialectOverride)
|
|
55
|
+
? dialectOverride
|
|
56
|
+
: family[0];
|
|
57
|
+
return getDialectSpec(id);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Run `@askdb/core`'s read-only SELECT guardrail for the provider's dialect.
|
|
61
|
+
* Returns the single statement without its trailing `;`, so runners can wrap it
|
|
62
|
+
* in a row cap; throws `SqlValidationError`.
|
|
63
|
+
*/
|
|
64
|
+
export function validateExecuteSql(provider, sql, dialectOverride) {
|
|
65
|
+
// `validateSelectSql` keeps a trailing `;`; it is the only `;` left once the
|
|
66
|
+
// statement passes, so dropping it can't touch a string or identifier. Its
|
|
67
|
+
// result is trimmed, so the `;` is the last character. No `\s*;` pattern: it
|
|
68
|
+
// backtracks quadratically on a long whitespace run.
|
|
69
|
+
return validateSelectSql(executeDialectFor(provider, dialectOverride), sql).replace(/;$/, "").trimEnd();
|
|
70
|
+
}
|
|
16
71
|
// ---------------------------------------------------------------------------
|
|
17
72
|
// Normalization helpers
|
|
18
73
|
// ---------------------------------------------------------------------------
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
74
|
+
function resolveLimits(input) {
|
|
75
|
+
const timeoutMs = positiveInt(input.timeoutMs) ?? DEFAULT_EXECUTE_TIMEOUT_MS;
|
|
76
|
+
const maxRows = positiveInt(input.maxRows) ?? DEFAULT_EXECUTE_MAX_ROWS;
|
|
77
|
+
return { timeoutMs, maxRows, fetchLimit: maxRows + 1 };
|
|
78
|
+
}
|
|
79
|
+
function positiveInt(value) {
|
|
80
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : undefined;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Wrap a validated single SELECT so the database returns at most `fetchLimit`
|
|
84
|
+
* rows. Used for engines with `LIMIT` (Postgres, MySQL). The newlines keep the
|
|
85
|
+
* wrapper intact even if the statement ends in something unexpected.
|
|
86
|
+
*/
|
|
87
|
+
export function wrapWithRowLimit(sql, fetchLimit) {
|
|
88
|
+
return `SELECT * FROM (\n${sql}\n) AS ${ROW_LIMIT_ALIAS} LIMIT ${fetchLimit}`;
|
|
89
|
+
}
|
|
90
|
+
function buildOkResponse(columns, rows, maxRows, durationMs) {
|
|
91
|
+
const truncated = rows.length > maxRows;
|
|
92
|
+
const shown = truncated ? rows.slice(0, maxRows) : rows;
|
|
22
93
|
return {
|
|
23
94
|
ok: true,
|
|
24
95
|
columns,
|
|
25
|
-
rows:
|
|
26
|
-
rowCount,
|
|
96
|
+
rows: shown,
|
|
97
|
+
rowCount: shown.length,
|
|
27
98
|
durationMs,
|
|
28
99
|
truncated,
|
|
100
|
+
rowLimit: maxRows,
|
|
29
101
|
};
|
|
30
102
|
}
|
|
103
|
+
function toRowArray(row, columns) {
|
|
104
|
+
if (Array.isArray(row))
|
|
105
|
+
return row;
|
|
106
|
+
const record = (row ?? {});
|
|
107
|
+
return columns.map((c) => record[c]);
|
|
108
|
+
}
|
|
109
|
+
function errorResponse(err) {
|
|
110
|
+
return { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Race `promise` against a timer. On timeout, run `onTimeout` (cancel/destroy
|
|
114
|
+
* the connection) and reject. A client-side backstop for server-side timeouts.
|
|
115
|
+
*/
|
|
116
|
+
async function withTimeout(promise, ms, onTimeout) {
|
|
117
|
+
let timer;
|
|
118
|
+
const timeout = new Promise((_, reject) => {
|
|
119
|
+
timer = setTimeout(() => {
|
|
120
|
+
try {
|
|
121
|
+
onTimeout();
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// best effort
|
|
125
|
+
}
|
|
126
|
+
reject(new Error(`Query timed out after ${ms} ms.`));
|
|
127
|
+
}, ms);
|
|
128
|
+
});
|
|
129
|
+
try {
|
|
130
|
+
return await Promise.race([promise, timeout]);
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
clearTimeout(timer);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** Grace period before the client-side backstop fires after the server-side timeout. */
|
|
137
|
+
const CLIENT_TIMEOUT_GRACE_MS = 2_000;
|
|
31
138
|
async function executePostgres(input) {
|
|
32
139
|
const { connectionString, sql, params, projectRoot } = input;
|
|
140
|
+
const { timeoutMs, maxRows, fetchLimit } = resolveLimits(input);
|
|
33
141
|
if (!connectionString) {
|
|
34
|
-
return { ok: false, error: "No connection URL configured for Postgres execute. Set
|
|
142
|
+
return { ok: false, error: "No connection URL configured for Postgres execute. Set studio.execute.databaseUrl in askdb.config.ts." };
|
|
35
143
|
}
|
|
36
144
|
let pgMod;
|
|
37
145
|
try {
|
|
38
146
|
pgMod = await loadPgDriver({ resolveFrom: projectRoot });
|
|
39
147
|
}
|
|
40
148
|
catch (err) {
|
|
41
|
-
return
|
|
149
|
+
return errorResponse(err);
|
|
42
150
|
}
|
|
43
|
-
const client = new pgMod.Client({
|
|
151
|
+
const client = new pgMod.Client({
|
|
152
|
+
connectionString,
|
|
153
|
+
connectionTimeoutMillis: timeoutMs,
|
|
154
|
+
// Client-side backstop; the server-side statement_timeout below fires first.
|
|
155
|
+
query_timeout: timeoutMs + CLIENT_TIMEOUT_GRACE_MS,
|
|
156
|
+
});
|
|
44
157
|
try {
|
|
45
158
|
await client.connect();
|
|
46
159
|
}
|
|
47
160
|
catch (err) {
|
|
48
|
-
return
|
|
161
|
+
return errorResponse(err);
|
|
49
162
|
}
|
|
50
163
|
const startMs = Date.now();
|
|
51
164
|
try {
|
|
165
|
+
// Session default + explicit read-only transaction: even a statement that
|
|
166
|
+
// slipped past validation cannot write, and cannot COMMIT its way out
|
|
167
|
+
// (the extended protocol below runs exactly one statement).
|
|
168
|
+
await client.query("SET default_transaction_read_only = on");
|
|
52
169
|
await client.query("BEGIN READ ONLY");
|
|
53
|
-
|
|
54
|
-
await client.query(
|
|
170
|
+
await client.query(`SET LOCAL statement_timeout = ${timeoutMs}`);
|
|
171
|
+
const result = await client.query({
|
|
172
|
+
text: wrapWithRowLimit(sql, fetchLimit),
|
|
173
|
+
values: params,
|
|
174
|
+
queryMode: "extended",
|
|
175
|
+
name: "askdb_studio_execute",
|
|
176
|
+
rowMode: "array",
|
|
177
|
+
});
|
|
178
|
+
await client.query("ROLLBACK");
|
|
55
179
|
const durationMs = Date.now() - startMs;
|
|
56
180
|
const columns = result.fields.map((f) => f.name);
|
|
57
|
-
const rows = result.rows.map((r) =>
|
|
58
|
-
return buildOkResponse(columns, rows,
|
|
181
|
+
const rows = result.rows.map((r) => toRowArray(r, columns));
|
|
182
|
+
return buildOkResponse(columns, rows, maxRows, durationMs);
|
|
59
183
|
}
|
|
60
184
|
catch (err) {
|
|
61
185
|
await client.query("ROLLBACK").catch(() => { });
|
|
62
|
-
return
|
|
186
|
+
return errorResponse(err);
|
|
63
187
|
}
|
|
64
188
|
finally {
|
|
65
189
|
await client.end().catch(() => { });
|
|
66
190
|
}
|
|
67
191
|
}
|
|
192
|
+
/** MySQL uses `max_execution_time` (ms); MariaDB uses `max_statement_time` (seconds). */
|
|
193
|
+
async function applyMysqlTimeout(conn, timeoutMs) {
|
|
194
|
+
try {
|
|
195
|
+
await conn.query(`SET SESSION MAX_EXECUTION_TIME = ${timeoutMs}`);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// Not MySQL 5.7.8+ — try MariaDB.
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
await conn.query(`SET SESSION max_statement_time = ${Math.max(timeoutMs / 1000, 0.001)}`);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
// Neither variable exists; the client-side backstop still applies.
|
|
206
|
+
}
|
|
207
|
+
}
|
|
68
208
|
async function executeMySQL(input) {
|
|
69
209
|
const { connectionString, sql, params, projectRoot } = input;
|
|
210
|
+
const { timeoutMs, maxRows, fetchLimit } = resolveLimits(input);
|
|
70
211
|
if (!connectionString) {
|
|
71
|
-
return { ok: false, error: "No connection URL configured for MySQL execute. Set
|
|
212
|
+
return { ok: false, error: "No connection URL configured for MySQL execute. Set studio.execute.databaseUrl in askdb.config.ts." };
|
|
72
213
|
}
|
|
73
214
|
let mysql2Mod;
|
|
74
215
|
try {
|
|
75
216
|
mysql2Mod = await loadMysql2Driver({ resolveFrom: projectRoot });
|
|
76
217
|
}
|
|
77
218
|
catch (err) {
|
|
78
|
-
return
|
|
219
|
+
return errorResponse(err);
|
|
79
220
|
}
|
|
80
221
|
let conn;
|
|
81
222
|
try {
|
|
82
|
-
conn = await mysql2Mod.createConnection({
|
|
223
|
+
conn = await mysql2Mod.createConnection({
|
|
224
|
+
uri: connectionString,
|
|
225
|
+
multipleStatements: false,
|
|
226
|
+
connectTimeout: timeoutMs,
|
|
227
|
+
});
|
|
83
228
|
}
|
|
84
229
|
catch (err) {
|
|
85
|
-
return
|
|
230
|
+
return errorResponse(err);
|
|
86
231
|
}
|
|
87
232
|
const startMs = Date.now();
|
|
88
233
|
try {
|
|
234
|
+
await applyMysqlTimeout(conn, timeoutMs);
|
|
89
235
|
await conn.query("SET SESSION TRANSACTION READ ONLY");
|
|
90
|
-
await conn.query("START TRANSACTION");
|
|
91
|
-
|
|
236
|
+
await conn.query("START TRANSACTION READ ONLY");
|
|
237
|
+
// `execute` uses the binary prepared-statement protocol: one statement only.
|
|
238
|
+
const [rowsRaw, fields] = await withTimeout(conn.execute({ sql: wrapWithRowLimit(sql, fetchLimit), values: params, rowsAsArray: true }), timeoutMs + CLIENT_TIMEOUT_GRACE_MS, () => conn.destroy?.());
|
|
92
239
|
await conn.query("ROLLBACK");
|
|
93
240
|
const durationMs = Date.now() - startMs;
|
|
94
|
-
const columns = fields.map((f) => f.name);
|
|
95
|
-
const rows = rowsRaw.map((r) =>
|
|
96
|
-
return buildOkResponse(columns, rows,
|
|
241
|
+
const columns = (fields ?? []).map((f) => f.name);
|
|
242
|
+
const rows = (rowsRaw ?? []).map((r) => toRowArray(r, columns));
|
|
243
|
+
return buildOkResponse(columns, rows, maxRows, durationMs);
|
|
97
244
|
}
|
|
98
245
|
catch (err) {
|
|
99
246
|
await conn.query("ROLLBACK").catch(() => { });
|
|
100
|
-
return
|
|
247
|
+
return errorResponse(err);
|
|
101
248
|
}
|
|
102
249
|
finally {
|
|
103
250
|
await conn.end().catch(() => { });
|
|
@@ -105,8 +252,9 @@ async function executeMySQL(input) {
|
|
|
105
252
|
}
|
|
106
253
|
async function executeSQLite(input) {
|
|
107
254
|
const { file, sql, params, projectRoot } = input;
|
|
255
|
+
const { timeoutMs, maxRows, fetchLimit } = resolveLimits(input);
|
|
108
256
|
if (!file) {
|
|
109
|
-
return { ok: false, error: "No SQLite file path configured for execute. Set
|
|
257
|
+
return { ok: false, error: "No SQLite file path configured for execute. Set studio.execute.file in askdb.config.ts." };
|
|
110
258
|
}
|
|
111
259
|
let Sqlite3;
|
|
112
260
|
try {
|
|
@@ -114,20 +262,38 @@ async function executeSQLite(input) {
|
|
|
114
262
|
Sqlite3 = mod.default;
|
|
115
263
|
}
|
|
116
264
|
catch (err) {
|
|
117
|
-
return
|
|
265
|
+
return errorResponse(err);
|
|
118
266
|
}
|
|
119
267
|
const startMs = Date.now();
|
|
120
|
-
|
|
268
|
+
let db;
|
|
121
269
|
try {
|
|
270
|
+
// Read-only handle. `timeout` is only the busy (lock-wait) timeout —
|
|
271
|
+
// better-sqlite3 runs queries synchronously and cannot interrupt them.
|
|
272
|
+
db = new Sqlite3(file, { readonly: true, fileMustExist: true, timeout: timeoutMs });
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
return errorResponse(err);
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
// `prepare` rejects strings containing more than one statement.
|
|
122
279
|
const stmt = db.prepare(sql);
|
|
280
|
+
if (!stmt.reader) {
|
|
281
|
+
return { ok: false, error: "Only statements that return rows can be executed." };
|
|
282
|
+
}
|
|
283
|
+
stmt.raw(true);
|
|
123
284
|
const columns = stmt.columns().map((c) => c.name);
|
|
124
|
-
const
|
|
285
|
+
const rows = [];
|
|
286
|
+
// Stream rows and stop at the cap — never materialize the full result.
|
|
287
|
+
for (const row of stmt.iterate(...params)) {
|
|
288
|
+
rows.push(toRowArray(row, columns));
|
|
289
|
+
if (rows.length >= fetchLimit)
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
125
292
|
const durationMs = Date.now() - startMs;
|
|
126
|
-
|
|
127
|
-
return buildOkResponse(columns, rows, rows.length, durationMs);
|
|
293
|
+
return buildOkResponse(columns, rows, maxRows, durationMs);
|
|
128
294
|
}
|
|
129
295
|
catch (err) {
|
|
130
|
-
return
|
|
296
|
+
return errorResponse(err);
|
|
131
297
|
}
|
|
132
298
|
finally {
|
|
133
299
|
db.close();
|
|
@@ -151,24 +317,50 @@ function rewriteSqlServerParams(sql, params) {
|
|
|
151
317
|
.replace(/\?/g, () => `@p${idx++}`);
|
|
152
318
|
return { sql: rewritten, bindings };
|
|
153
319
|
}
|
|
320
|
+
/**
|
|
321
|
+
* SQL Server has no read-only transaction mode, so the statement runs inside a
|
|
322
|
+
* transaction that is always rolled back. `XACT_ABORT` rolls back on any error;
|
|
323
|
+
* `ROWCOUNT` caps the rows returned (SQL Server has no `LIMIT`, and wrapping in
|
|
324
|
+
* a derived table would reject unnamed columns such as `COUNT(*)`).
|
|
325
|
+
*/
|
|
326
|
+
export function buildSqlServerBatch(sql, fetchLimit) {
|
|
327
|
+
return [
|
|
328
|
+
"SET XACT_ABORT ON;",
|
|
329
|
+
`SET ROWCOUNT ${fetchLimit};`,
|
|
330
|
+
"BEGIN TRANSACTION;",
|
|
331
|
+
sql,
|
|
332
|
+
";",
|
|
333
|
+
"IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;",
|
|
334
|
+
"SET ROWCOUNT 0;",
|
|
335
|
+
].join("\n");
|
|
336
|
+
}
|
|
337
|
+
function recordsetColumns(recordset) {
|
|
338
|
+
if (recordset.columns) {
|
|
339
|
+
return Object.values(recordset.columns)
|
|
340
|
+
.sort((a, b) => a.index - b.index)
|
|
341
|
+
.map((c) => c.name);
|
|
342
|
+
}
|
|
343
|
+
return recordset.length > 0 ? Object.keys(recordset[0]) : [];
|
|
344
|
+
}
|
|
154
345
|
async function executeSQLServer(input) {
|
|
155
346
|
const { connectionString, sql, params, projectRoot } = input;
|
|
347
|
+
const { timeoutMs, maxRows, fetchLimit } = resolveLimits(input);
|
|
156
348
|
if (!connectionString) {
|
|
157
|
-
return { ok: false, error: "No connection URL configured for SQL Server execute. Set
|
|
349
|
+
return { ok: false, error: "No connection URL configured for SQL Server execute. Set studio.execute.databaseUrl in askdb.config.ts." };
|
|
158
350
|
}
|
|
159
351
|
let mssqlMod;
|
|
160
352
|
try {
|
|
161
353
|
mssqlMod = await loadMssqlDriver({ resolveFrom: projectRoot });
|
|
162
354
|
}
|
|
163
355
|
catch (err) {
|
|
164
|
-
return
|
|
356
|
+
return errorResponse(err);
|
|
165
357
|
}
|
|
166
358
|
let pool;
|
|
167
359
|
try {
|
|
168
360
|
pool = await new mssqlMod.ConnectionPool(resolveConnectionInput(connectionString)).connect();
|
|
169
361
|
}
|
|
170
362
|
catch (err) {
|
|
171
|
-
return
|
|
363
|
+
return errorResponse(err);
|
|
172
364
|
}
|
|
173
365
|
const startMs = Date.now();
|
|
174
366
|
try {
|
|
@@ -177,18 +369,18 @@ async function executeSQLServer(input) {
|
|
|
177
369
|
for (const [name, value] of Object.entries(bindings)) {
|
|
178
370
|
req.input(name, value);
|
|
179
371
|
}
|
|
180
|
-
const result = await req.query(rewrittenSql);
|
|
372
|
+
const result = await withTimeout(req.query(buildSqlServerBatch(rewrittenSql, fetchLimit)), timeoutMs, () => req.cancel?.());
|
|
181
373
|
const durationMs = Date.now() - startMs;
|
|
182
|
-
const
|
|
183
|
-
const columns =
|
|
184
|
-
const rows =
|
|
185
|
-
return buildOkResponse(columns, rows,
|
|
374
|
+
const recordset = result.recordset ?? result.recordsets?.[0] ?? [];
|
|
375
|
+
const columns = recordsetColumns(recordset);
|
|
376
|
+
const rows = recordset.map((r) => toRowArray(r, columns));
|
|
377
|
+
return buildOkResponse(columns, rows, maxRows, durationMs);
|
|
186
378
|
}
|
|
187
379
|
catch (err) {
|
|
188
|
-
return
|
|
380
|
+
return errorResponse(err);
|
|
189
381
|
}
|
|
190
382
|
finally {
|
|
191
|
-
await pool.close();
|
|
383
|
+
await pool.close().catch(() => { });
|
|
192
384
|
}
|
|
193
385
|
}
|
|
194
386
|
// ---------------------------------------------------------------------------
|
|
@@ -224,6 +416,10 @@ export const EXECUTE_DRIVER_REGISTRY = {
|
|
|
224
416
|
execute: executeSQLServer,
|
|
225
417
|
},
|
|
226
418
|
};
|
|
419
|
+
/** True when `value` is a registry key (own property — rejects `constructor`, `__proto__`, …). */
|
|
420
|
+
export function isStudioExecuteProvider(value) {
|
|
421
|
+
return typeof value === "string" && Object.hasOwn(EXECUTE_DRIVER_REGISTRY, value);
|
|
422
|
+
}
|
|
227
423
|
/**
|
|
228
424
|
* Check whether a driver package is resolvable from the user's project root.
|
|
229
425
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-registry.js","sourceRoot":"","sources":["../src/execute-registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"execute-registry.js","sourceRoot":"","sources":["../src/execute-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/introspection.d.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ConnectorProviderId } from "@askdb/introspect";
|
|
2
2
|
export type StudioIntrospectionPlan = {
|
|
3
3
|
ok: true;
|
|
4
|
-
engine:
|
|
4
|
+
engine: ConnectorProviderId;
|
|
5
5
|
sourceLabel: string;
|
|
6
6
|
} | {
|
|
7
7
|
ok: false;
|
|
8
|
-
engine:
|
|
8
|
+
engine: ConnectorProviderId | null;
|
|
9
9
|
error: string;
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
12
|
* Resolve what a server-side introspection run would do, from the runtime
|
|
13
|
-
* config alone
|
|
14
|
-
* `
|
|
13
|
+
* config alone: the config's provider, and the connection its adapter's
|
|
14
|
+
* `resolveConnection` hook resolves (the same registry call the CLI makes).
|
|
15
15
|
* Never includes credentials in `sourceLabel` — it is shown in the UI.
|
|
16
16
|
*/
|
|
17
17
|
export declare function resolveStudioIntrospectionPlan(): StudioIntrospectionPlan;
|
|
18
18
|
export type StudioIntrospectionRun = {
|
|
19
|
-
engine:
|
|
19
|
+
engine: ConnectorProviderId;
|
|
20
20
|
schemaId: string;
|
|
21
21
|
tables: number;
|
|
22
22
|
warnings: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introspection.d.ts","sourceRoot":"","sources":["../src/introspection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"introspection.d.ts","sourceRoot":"","sources":["../src/introspection.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAe3B,MAAM,MAAM,uBAAuB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE;;;;;GAKG;AACH,wBAAgB,8BAA8B,IAAI,uBAAuB,CASxE;AAaD,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAoClC"}
|