@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.
@@ -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-BvbATe8r.js"></script>
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;;;;;;;;;;GAUG;AAWH,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,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;CACrB,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;AA0PF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,qBAAqB,EAAE,sBAAsB,CA6BzF,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAanF"}
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"}
@@ -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
- const MAX_ROWS = 500;
20
- function buildOkResponse(columns, rows, rowCount, durationMs) {
21
- const truncated = rows.length > MAX_ROWS;
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: rows.slice(0, MAX_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 ASKDB_STUDIO_DATABASE_URL or introspection.providerConfig.postgres.databaseUrl." };
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 { ok: false, error: err instanceof Error ? err.message : String(err) };
149
+ return errorResponse(err);
42
150
  }
43
- const client = new pgMod.Client({ connectionString });
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 { ok: false, error: err instanceof Error ? err.message : String(err) };
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
- const result = await client.query({ text: sql, values: params });
54
- await client.query("COMMIT");
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) => columns.map((c) => r[c]));
58
- return buildOkResponse(columns, rows, result.rowCount ?? rows.length, durationMs);
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 { ok: false, error: err instanceof Error ? err.message : String(err) };
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 ASKDB_STUDIO_DATABASE_URL or introspection.providerConfig.mysql.databaseUrl." };
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 { ok: false, error: err instanceof Error ? err.message : String(err) };
219
+ return errorResponse(err);
79
220
  }
80
221
  let conn;
81
222
  try {
82
- conn = await mysql2Mod.createConnection({ uri: connectionString });
223
+ conn = await mysql2Mod.createConnection({
224
+ uri: connectionString,
225
+ multipleStatements: false,
226
+ connectTimeout: timeoutMs,
227
+ });
83
228
  }
84
229
  catch (err) {
85
- return { ok: false, error: err instanceof Error ? err.message : String(err) };
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
- const [rowsRaw, fields] = await conn.execute(sql, params);
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) => columns.map((c) => r[c]));
96
- return buildOkResponse(columns, rows, rows.length, durationMs);
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 { ok: false, error: err instanceof Error ? err.message : String(err) };
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 ASKDB_STUDIO_SQLITE_FILE or introspection.providerConfig.sqlite.file." };
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 { ok: false, error: err instanceof Error ? err.message : String(err) };
265
+ return errorResponse(err);
118
266
  }
119
267
  const startMs = Date.now();
120
- const db = new Sqlite3(file, { readonly: true, fileMustExist: true });
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 rowsRaw = stmt.all(...params);
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
- const rows = rowsRaw.map((r) => columns.map((c) => r[c]));
127
- return buildOkResponse(columns, rows, rows.length, durationMs);
293
+ return buildOkResponse(columns, rows, maxRows, durationMs);
128
294
  }
129
295
  catch (err) {
130
- return { ok: false, error: err instanceof Error ? err.message : String(err) };
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 ASKDB_STUDIO_DATABASE_URL or introspection.providerConfig.sqlserver.databaseUrl." };
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 { ok: false, error: err instanceof Error ? err.message : String(err) };
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 { ok: false, error: err instanceof Error ? err.message : String(err) };
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 rowsRaw = result.recordset ?? [];
183
- const columns = rowsRaw.length > 0 ? Object.keys(rowsRaw[0]) : [];
184
- const rows = rowsRaw.map((r) => columns.map((c) => r[c]));
185
- return buildOkResponse(columns, rows, rows.length, durationMs);
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 { ok: false, error: err instanceof Error ? err.message : String(err) };
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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"}
@@ -1,22 +1,22 @@
1
- import { type ConnectorProvider } from "@askdb/connectors";
1
+ import { type ConnectorProviderId } from "@askdb/introspect";
2
2
  export type StudioIntrospectionPlan = {
3
3
  ok: true;
4
- engine: ConnectorProvider;
4
+ engine: ConnectorProviderId;
5
5
  sourceLabel: string;
6
6
  } | {
7
7
  ok: false;
8
- engine: ConnectorProvider | null;
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. Mirrors the CLI's flag-free resolution in
14
- * `apps/cli/src/introspect.ts` (config provider + per-engine connection).
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: ConnectorProvider;
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":"AAOA,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAe3B,MAAM,MAAM,uBAAuB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,8BAA8B,IAAI,uBAAuB,CASxE;AA4ED,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,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,CAkClC"}
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"}