@pilat/mcp-datalink 1.0.1

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 (95) hide show
  1. package/README.md +442 -0
  2. package/databases.example.json +18 -0
  3. package/dist/__integration__/global-setup.d.ts +8 -0
  4. package/dist/__integration__/global-setup.d.ts.map +1 -0
  5. package/dist/__integration__/global-setup.js +34 -0
  6. package/dist/__integration__/global-setup.js.map +1 -0
  7. package/dist/__integration__/global-teardown.d.ts +8 -0
  8. package/dist/__integration__/global-teardown.d.ts.map +1 -0
  9. package/dist/__integration__/global-teardown.js +17 -0
  10. package/dist/__integration__/global-teardown.js.map +1 -0
  11. package/dist/__integration__/helpers.d.ts +58 -0
  12. package/dist/__integration__/helpers.d.ts.map +1 -0
  13. package/dist/__integration__/helpers.js +568 -0
  14. package/dist/__integration__/helpers.js.map +1 -0
  15. package/dist/__integration__/setup.d.ts +79 -0
  16. package/dist/__integration__/setup.d.ts.map +1 -0
  17. package/dist/__integration__/setup.js +230 -0
  18. package/dist/__integration__/setup.js.map +1 -0
  19. package/dist/adapters/factory.d.ts +40 -0
  20. package/dist/adapters/factory.d.ts.map +1 -0
  21. package/dist/adapters/factory.js +114 -0
  22. package/dist/adapters/factory.js.map +1 -0
  23. package/dist/adapters/index.d.ts +31 -0
  24. package/dist/adapters/index.d.ts.map +1 -0
  25. package/dist/adapters/index.js +34 -0
  26. package/dist/adapters/index.js.map +1 -0
  27. package/dist/adapters/mysql/adapter.d.ts +61 -0
  28. package/dist/adapters/mysql/adapter.d.ts.map +1 -0
  29. package/dist/adapters/mysql/adapter.js +567 -0
  30. package/dist/adapters/mysql/adapter.js.map +1 -0
  31. package/dist/adapters/postgresql/adapter.d.ts +52 -0
  32. package/dist/adapters/postgresql/adapter.d.ts.map +1 -0
  33. package/dist/adapters/postgresql/adapter.js +429 -0
  34. package/dist/adapters/postgresql/adapter.js.map +1 -0
  35. package/dist/adapters/sqlite/adapter.d.ts +56 -0
  36. package/dist/adapters/sqlite/adapter.d.ts.map +1 -0
  37. package/dist/adapters/sqlite/adapter.js +582 -0
  38. package/dist/adapters/sqlite/adapter.js.map +1 -0
  39. package/dist/adapters/types.d.ts +155 -0
  40. package/dist/adapters/types.d.ts.map +1 -0
  41. package/dist/adapters/types.js +7 -0
  42. package/dist/adapters/types.js.map +1 -0
  43. package/dist/config/loader.d.ts +11 -0
  44. package/dist/config/loader.d.ts.map +1 -0
  45. package/dist/config/loader.js +127 -0
  46. package/dist/config/loader.js.map +1 -0
  47. package/dist/index.d.ts +8 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +38 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/server.d.ts +21 -0
  52. package/dist/server.d.ts.map +1 -0
  53. package/dist/server.js +191 -0
  54. package/dist/server.js.map +1 -0
  55. package/dist/tools/describe-table.d.ts +11 -0
  56. package/dist/tools/describe-table.d.ts.map +1 -0
  57. package/dist/tools/describe-table.js +23 -0
  58. package/dist/tools/describe-table.js.map +1 -0
  59. package/dist/tools/execute.d.ts +22 -0
  60. package/dist/tools/execute.d.ts.map +1 -0
  61. package/dist/tools/execute.js +48 -0
  62. package/dist/tools/execute.js.map +1 -0
  63. package/dist/tools/explain.d.ts +25 -0
  64. package/dist/tools/explain.d.ts.map +1 -0
  65. package/dist/tools/explain.js +81 -0
  66. package/dist/tools/explain.js.map +1 -0
  67. package/dist/tools/list-databases.d.ts +18 -0
  68. package/dist/tools/list-databases.d.ts.map +1 -0
  69. package/dist/tools/list-databases.js +17 -0
  70. package/dist/tools/list-databases.js.map +1 -0
  71. package/dist/tools/list-tables.d.ts +22 -0
  72. package/dist/tools/list-tables.d.ts.map +1 -0
  73. package/dist/tools/list-tables.js +43 -0
  74. package/dist/tools/list-tables.js.map +1 -0
  75. package/dist/tools/query.d.ts +25 -0
  76. package/dist/tools/query.d.ts.map +1 -0
  77. package/dist/tools/query.js +109 -0
  78. package/dist/tools/query.js.map +1 -0
  79. package/dist/types.d.ts +93 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +5 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/utils/errors.d.ts +22 -0
  84. package/dist/utils/errors.d.ts.map +1 -0
  85. package/dist/utils/errors.js +41 -0
  86. package/dist/utils/errors.js.map +1 -0
  87. package/dist/utils/formatter.d.ts +13 -0
  88. package/dist/utils/formatter.d.ts.map +1 -0
  89. package/dist/utils/formatter.js +56 -0
  90. package/dist/utils/formatter.js.map +1 -0
  91. package/dist/utils/truncate.d.ts +37 -0
  92. package/dist/utils/truncate.d.ts.map +1 -0
  93. package/dist/utils/truncate.js +91 -0
  94. package/dist/utils/truncate.js.map +1 -0
  95. package/package.json +65 -0
@@ -0,0 +1,429 @@
1
+ /**
2
+ * PostgreSQL Database Adapter
3
+ *
4
+ * Implements DatabaseAdapter interface for PostgreSQL databases.
5
+ * Uses node-postgres (pg) driver with per-request connection recycling.
6
+ */
7
+ import pg from 'pg';
8
+ import { parse, toSql } from 'pgsql-ast-parser';
9
+ import { DbMcpError, ErrorCode } from '../../utils/errors.js';
10
+ // ─────────────────────────────────────────────────────────────────────────────
11
+ // SQL Dialect helpers (formerly in dialect.ts)
12
+ // ─────────────────────────────────────────────────────────────────────────────
13
+ /**
14
+ * Prefixes that indicate dangerous SQL operations
15
+ * pgsql-ast-parser returns types like "drop table", "alter table", etc.
16
+ */
17
+ const DANGEROUS_PREFIXES = [
18
+ 'drop',
19
+ 'truncate',
20
+ 'alter',
21
+ 'create',
22
+ 'grant',
23
+ 'revoke',
24
+ ];
25
+ /**
26
+ * Maps pgsql-ast-parser statement types to our QueryType
27
+ */
28
+ function getQueryType(statement) {
29
+ switch (statement.type) {
30
+ case 'select':
31
+ return 'select';
32
+ case 'insert':
33
+ return 'insert';
34
+ case 'update':
35
+ return 'update';
36
+ case 'delete':
37
+ return 'delete';
38
+ default:
39
+ return 'other';
40
+ }
41
+ }
42
+ /**
43
+ * Check if a statement type is dangerous
44
+ * Handles compound types from pgsql-ast-parser like "drop table", "alter table"
45
+ */
46
+ function checkDangerous(statement) {
47
+ const stmtType = statement.type.toLowerCase();
48
+ for (const prefix of DANGEROUS_PREFIXES) {
49
+ if (stmtType === prefix || stmtType.startsWith(prefix + ' ')) {
50
+ const operation = prefix.toUpperCase();
51
+ return {
52
+ isDangerous: true,
53
+ reason: operation + ' statements are not allowed',
54
+ };
55
+ }
56
+ }
57
+ return { isDangerous: false };
58
+ }
59
+ /**
60
+ * Type guard to check if a statement is a SelectFromStatement
61
+ */
62
+ function isSelectFromStatement(statement) {
63
+ return statement.type === 'select' && 'columns' in statement;
64
+ }
65
+ /**
66
+ * Check if a SELECT statement has a LIMIT clause
67
+ */
68
+ function hasLimitClause(statement) {
69
+ if (!isSelectFromStatement(statement)) {
70
+ return false;
71
+ }
72
+ return statement.limit !== undefined && statement.limit !== null;
73
+ }
74
+ /**
75
+ * PostgreSQL database adapter
76
+ *
77
+ * Creates new connections for each request to prevent session state attacks.
78
+ */
79
+ export class PostgreSqlAdapter {
80
+ type = 'postgresql';
81
+ connectionUrl;
82
+ timeout;
83
+ constructor(config) {
84
+ this.connectionUrl = config.database.url;
85
+ this.timeout = config.defaults.timeout;
86
+ }
87
+ /**
88
+ * Get the default schema name for PostgreSQL
89
+ */
90
+ getDefaultSchema() {
91
+ return 'public';
92
+ }
93
+ // ─────────────────────────────────────────────────────────────────────────────
94
+ // SQL Dialect methods
95
+ // ─────────────────────────────────────────────────────────────────────────────
96
+ /**
97
+ * Parse and validate a SQL query
98
+ */
99
+ parseQuery(sql) {
100
+ let statements;
101
+ try {
102
+ statements = parse(sql);
103
+ }
104
+ catch (error) {
105
+ const message = error instanceof Error ? error.message : 'Unknown parse error';
106
+ throw new DbMcpError(ErrorCode.INVALID_SQL, 'Failed to parse SQL: ' + message, { sql });
107
+ }
108
+ // Filter out empty statements (trailing semicolons create these)
109
+ const nonEmptyStatements = statements.filter((stmt) => stmt.type !== 'empty' && stmt.type !== undefined);
110
+ if (nonEmptyStatements.length === 0) {
111
+ throw new DbMcpError(ErrorCode.INVALID_SQL, 'No valid SQL statement found', { sql });
112
+ }
113
+ if (nonEmptyStatements.length > 1) {
114
+ throw new DbMcpError(ErrorCode.MULTI_STATEMENT, 'Multiple SQL statements are not allowed. Please provide a single statement.', { sql, statementCount: nonEmptyStatements.length });
115
+ }
116
+ const statement = nonEmptyStatements[0];
117
+ const queryType = getQueryType(statement);
118
+ const { isDangerous, reason } = checkDangerous(statement);
119
+ return {
120
+ type: queryType,
121
+ hasLimit: hasLimitClause(statement),
122
+ isDangerous,
123
+ dangerousReason: reason,
124
+ sql,
125
+ };
126
+ }
127
+ /**
128
+ * Inject a LIMIT clause into a SELECT query if it doesn't have one
129
+ */
130
+ injectLimit(sql, limit) {
131
+ let statements;
132
+ try {
133
+ statements = parse(sql);
134
+ }
135
+ catch {
136
+ return sql;
137
+ }
138
+ const nonEmptyStatements = statements.filter((stmt) => stmt.type !== 'empty' && stmt.type !== undefined);
139
+ if (nonEmptyStatements.length !== 1) {
140
+ return sql;
141
+ }
142
+ const statement = nonEmptyStatements[0];
143
+ if (!isSelectFromStatement(statement)) {
144
+ return sql;
145
+ }
146
+ if (statement.limit !== undefined && statement.limit !== null) {
147
+ return sql;
148
+ }
149
+ statement.limit = {
150
+ limit: { type: 'integer', value: limit },
151
+ };
152
+ return toSql.statement(statement);
153
+ }
154
+ /**
155
+ * Validate that a SQL query is appropriate for a specific tool
156
+ */
157
+ validateQueryForTool(sql, tool) {
158
+ const parsed = this.parseQuery(sql);
159
+ if (tool === 'query') {
160
+ if (parsed.type !== 'select') {
161
+ throw new DbMcpError(ErrorCode.QUERY_BLOCKED, 'The query tool only accepts SELECT statements. Use the execute tool for ' +
162
+ parsed.type.toUpperCase() +
163
+ ' statements.', { sql, queryType: parsed.type, tool });
164
+ }
165
+ }
166
+ else if (tool === 'execute') {
167
+ if (parsed.type === 'select') {
168
+ throw new DbMcpError(ErrorCode.QUERY_BLOCKED, 'The execute tool does not accept SELECT statements. Use the query tool instead.', { sql, queryType: parsed.type, tool });
169
+ }
170
+ if (parsed.isDangerous) {
171
+ throw new DbMcpError(ErrorCode.QUERY_BLOCKED, parsed.dangerousReason ?? 'This operation is not allowed', { sql, queryType: parsed.type, tool });
172
+ }
173
+ const allowedTypes = ['insert', 'update', 'delete'];
174
+ if (!allowedTypes.includes(parsed.type)) {
175
+ throw new DbMcpError(ErrorCode.QUERY_BLOCKED, 'The execute tool only accepts INSERT, UPDATE, or DELETE statements.', { sql, queryType: parsed.type, tool });
176
+ }
177
+ }
178
+ }
179
+ /**
180
+ * Get the EXPLAIN prefix for PostgreSQL
181
+ */
182
+ getExplainPrefix(analyze) {
183
+ return analyze ? 'EXPLAIN ANALYZE ' : 'EXPLAIN ';
184
+ }
185
+ /**
186
+ * Convert placeholders - no-op for PostgreSQL (already uses $1, $2, $3)
187
+ */
188
+ convertPlaceholders(sql) {
189
+ return sql;
190
+ }
191
+ /**
192
+ * Execute a function with a managed PostgreSQL connection
193
+ */
194
+ async withConnection(fn) {
195
+ const client = new pg.Client({
196
+ connectionString: this.connectionUrl,
197
+ });
198
+ try {
199
+ // Connect to database
200
+ try {
201
+ await client.connect();
202
+ }
203
+ catch (error) {
204
+ throw new DbMcpError(ErrorCode.CONNECTION_FAILED, 'Failed to connect to PostgreSQL database', {
205
+ cause: error instanceof Error ? error.message : String(error),
206
+ });
207
+ }
208
+ // SET command doesn't support parameterized queries, so validate timeout first
209
+ if (!Number.isInteger(this.timeout) || this.timeout < 0) {
210
+ throw new DbMcpError(ErrorCode.CONNECTION_FAILED, `Invalid timeout value: ${this.timeout}`);
211
+ }
212
+ await client.query(`SET statement_timeout = ${this.timeout}`);
213
+ // Create connection wrapper and execute user function
214
+ const connection = new PostgreSqlConnection(client);
215
+ return await fn(connection);
216
+ }
217
+ finally {
218
+ await client.end();
219
+ }
220
+ }
221
+ /**
222
+ * Clean up resources (no persistent resources in this adapter)
223
+ */
224
+ async dispose() {
225
+ // No persistent resources to clean up
226
+ // Each connection is created and destroyed per request
227
+ }
228
+ }
229
+ /**
230
+ * PostgreSQL connection wrapper
231
+ *
232
+ * Provides AdapterConnection interface over pg.Client.
233
+ * Handles PostgreSQL-specific query execution and metadata retrieval.
234
+ */
235
+ class PostgreSqlConnection {
236
+ client;
237
+ constructor(client) {
238
+ this.client = client;
239
+ }
240
+ /**
241
+ * Execute a parameterized query
242
+ *
243
+ * SECURITY: All user SQL MUST go through this method with parameters.
244
+ * Uses pg's parameterized query support ($1, $2, etc.)
245
+ */
246
+ async query(sql, params) {
247
+ const result = await this.client.query({
248
+ text: sql,
249
+ values: params ?? [],
250
+ rowMode: 'array',
251
+ });
252
+ return {
253
+ fields: result.fields.map((f) => ({ name: f.name })),
254
+ rows: result.rows,
255
+ rowCount: result.rowCount ?? 0,
256
+ };
257
+ }
258
+ /**
259
+ * Execute a raw SQL statement (for BEGIN, COMMIT, ROLLBACK)
260
+ */
261
+ async execute(sql) {
262
+ await this.client.query(sql);
263
+ }
264
+ /**
265
+ * List tables in a PostgreSQL schema
266
+ *
267
+ * Uses information_schema and pg_class for table metadata.
268
+ * Note: maxTables is accepted for interface compatibility but filtering
269
+ * is done at the caller level to report accurate totalAvailable count.
270
+ */
271
+ async listTables(schema, _maxTables) {
272
+ const sql = `
273
+ SELECT
274
+ t.table_name as name,
275
+ t.table_schema as schema,
276
+ CASE WHEN t.table_type = 'BASE TABLE' THEN 'table' ELSE 'view' END as type,
277
+ c.reltuples::bigint as rows_estimate
278
+ FROM information_schema.tables t
279
+ LEFT JOIN pg_class c ON c.relname = t.table_name
280
+ AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = t.table_schema)
281
+ WHERE t.table_schema = $1
282
+ ORDER BY t.table_name
283
+ `;
284
+ const result = await this.client.query(sql, [schema]);
285
+ const tables = result.rows.map((row) => ({
286
+ name: row.name,
287
+ schema: row.schema,
288
+ type: row.type,
289
+ rows_estimate: row.rows_estimate !== null ? Number(row.rows_estimate) : null,
290
+ }));
291
+ return {
292
+ tables,
293
+ totalAvailable: tables.length,
294
+ };
295
+ }
296
+ /**
297
+ * Describe a PostgreSQL table
298
+ *
299
+ * Retrieves columns, indexes, and foreign keys from information_schema and pg_* catalogs.
300
+ */
301
+ async describeTable(table, schema, limits) {
302
+ // Query 1: Get columns
303
+ const columnsQuery = `
304
+ SELECT
305
+ column_name as name,
306
+ data_type || COALESCE('(' || character_maximum_length || ')', '') as type,
307
+ is_nullable = 'YES' as nullable,
308
+ column_default as default
309
+ FROM information_schema.columns
310
+ WHERE table_schema = $1 AND table_name = $2
311
+ ORDER BY ordinal_position
312
+ `;
313
+ // Query 2: Get primary key columns
314
+ const primaryKeyQuery = `
315
+ SELECT a.attname as column_name
316
+ FROM pg_index i
317
+ JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
318
+ WHERE i.indrelid = ($1 || '.' || $2)::regclass AND i.indisprimary
319
+ `;
320
+ // Query 3: Get indexes
321
+ const indexesQuery = `
322
+ SELECT
323
+ indexname as name,
324
+ indexdef
325
+ FROM pg_indexes
326
+ WHERE schemaname = $1 AND tablename = $2
327
+ `;
328
+ // Query 4: Get foreign keys
329
+ const foreignKeysQuery = `
330
+ SELECT
331
+ kcu.column_name as column,
332
+ ccu.table_name as ref_table,
333
+ ccu.column_name as ref_column
334
+ FROM information_schema.table_constraints tc
335
+ JOIN information_schema.key_column_usage kcu
336
+ ON tc.constraint_name = kcu.constraint_name
337
+ AND tc.table_schema = kcu.table_schema
338
+ JOIN information_schema.constraint_column_usage ccu
339
+ ON tc.constraint_name = ccu.constraint_name
340
+ AND tc.table_schema = ccu.table_schema
341
+ WHERE tc.constraint_type = 'FOREIGN KEY'
342
+ AND tc.table_schema = $1
343
+ AND tc.table_name = $2
344
+ `;
345
+ // Execute all queries in parallel
346
+ const [columnsResult, primaryKeyResult, indexesResult, foreignKeysResult] = await Promise.all([
347
+ this.client.query(columnsQuery, [schema, table]),
348
+ this.client.query(primaryKeyQuery, [schema, table]),
349
+ this.client.query(indexesQuery, [schema, table]),
350
+ this.client.query(foreignKeysQuery, [schema, table]),
351
+ ]);
352
+ // Build set of primary key columns for quick lookup
353
+ const primaryKeyColumns = new Set(primaryKeyResult.rows.map((row) => row.column_name));
354
+ // Build columns array with primaryKey flag
355
+ const allColumns = columnsResult.rows.map((row) => ({
356
+ name: row.name,
357
+ type: row.type,
358
+ nullable: row.nullable,
359
+ default: row.default,
360
+ primaryKey: primaryKeyColumns.has(row.name),
361
+ }));
362
+ // Build indexes array
363
+ const allIndexes = indexesResult.rows.map((row) => {
364
+ const { columns, unique } = parseIndexDef(row.indexdef);
365
+ // An index is primary if all its columns are in the primary key
366
+ const primary = columns.length > 0 &&
367
+ columns.every((col) => primaryKeyColumns.has(col)) &&
368
+ columns.length === primaryKeyColumns.size;
369
+ return {
370
+ name: row.name,
371
+ columns,
372
+ unique,
373
+ primary,
374
+ };
375
+ });
376
+ // Build foreign keys array
377
+ const foreignKeys = foreignKeysResult.rows.map((row) => ({
378
+ column: row.column,
379
+ references: {
380
+ table: row.ref_table,
381
+ column: row.ref_column,
382
+ },
383
+ }));
384
+ // Apply limits and track truncation
385
+ let truncated = false;
386
+ const truncationReasons = [];
387
+ const columns = allColumns.length > limits.maxColumns
388
+ ? ((truncated = true),
389
+ truncationReasons.push(`columns (${allColumns.length} > ${limits.maxColumns})`),
390
+ allColumns.slice(0, limits.maxColumns))
391
+ : allColumns;
392
+ const indexes = allIndexes.length > limits.maxIndexes
393
+ ? ((truncated = true),
394
+ truncationReasons.push(`indexes (${allIndexes.length} > ${limits.maxIndexes})`),
395
+ allIndexes.slice(0, limits.maxIndexes))
396
+ : allIndexes;
397
+ return {
398
+ table,
399
+ schema,
400
+ columns,
401
+ indexes,
402
+ foreignKeys,
403
+ truncated,
404
+ ...(truncated && { truncationReason: truncationReasons.join(', ') }),
405
+ };
406
+ }
407
+ }
408
+ /**
409
+ * Parse index definition to extract columns and unique flag
410
+ *
411
+ * Example indexdef:
412
+ * `CREATE UNIQUE INDEX users_email_idx ON public.users USING btree (email)`
413
+ * `CREATE INDEX users_name_idx ON public.users USING btree (first_name, last_name)`
414
+ */
415
+ function parseIndexDef(indexdef) {
416
+ const unique = indexdef.toUpperCase().includes('UNIQUE');
417
+ // Extract columns from parentheses after USING method (btree, hash, etc.)
418
+ const columnsMatch = indexdef.match(/\(([^)]+)\)\s*$/);
419
+ if (!columnsMatch) {
420
+ return { columns: [], unique };
421
+ }
422
+ // Split by comma and clean up column names (remove ASC/DESC, NULLS FIRST/LAST, etc.)
423
+ const columns = columnsMatch[1]
424
+ .split(',')
425
+ .map((col) => col.trim().split(/\s+/)[0])
426
+ .filter(Boolean);
427
+ return { columns, unique };
428
+ }
429
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/postgresql/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * SQLite Database Adapter
3
+ *
4
+ * Implements DatabaseAdapter interface for SQLite databases.
5
+ * Uses better-sqlite3 library for synchronous database access.
6
+ */
7
+ import type { DatabaseAdapter, AdapterConnection, AdapterConfig } from '../types.js';
8
+ import type { ParsedQuery } from '../../types.js';
9
+ /**
10
+ * SQLite database adapter
11
+ *
12
+ * Creates new database handles for each request.
13
+ *
14
+ * Note: better-sqlite3 is synchronous, but we wrap in async for interface
15
+ * compatibility with other adapters.
16
+ */
17
+ export declare class SqliteAdapter implements DatabaseAdapter {
18
+ readonly type: "sqlite";
19
+ private readonly dbPath;
20
+ private readonly timeout;
21
+ private readonly readonly;
22
+ constructor(config: AdapterConfig);
23
+ /**
24
+ * Get the default schema name for SQLite
25
+ */
26
+ getDefaultSchema(): string;
27
+ /**
28
+ * Parse and validate a SQLite SQL query
29
+ */
30
+ parseQuery(sql: string): ParsedQuery;
31
+ /**
32
+ * Inject a LIMIT clause into a SELECT query if it doesn't have one
33
+ */
34
+ injectLimit(sql: string, limit: number): string;
35
+ /**
36
+ * Validate that a SQL query is appropriate for a specific tool
37
+ */
38
+ validateQueryForTool(sql: string, tool: 'query' | 'execute'): void;
39
+ /**
40
+ * Get the EXPLAIN prefix for SQLite
41
+ */
42
+ getExplainPrefix(_analyze: boolean): string;
43
+ /**
44
+ * Convert $1, $2 style placeholders to ? style for SQLite
45
+ */
46
+ convertPlaceholders(sql: string): string;
47
+ /**
48
+ * Execute a function with a managed SQLite connection
49
+ */
50
+ withConnection<T>(fn: (conn: AdapterConnection) => Promise<T>): Promise<T>;
51
+ /**
52
+ * Clean up resources (no persistent resources in this adapter)
53
+ */
54
+ dispose(): Promise<void>;
55
+ }
56
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/sqlite/adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EAEjB,aAAa,EAEd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,WAAW,EAOZ,MAAM,gBAAgB,CAAC;AAsRxB;;;;;;;GAOG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAElC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEvB,MAAM,EAAE,aAAa;IAOjC;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAQ1B;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;IAgCpC;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ/C;;OAEG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAyClE;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM;IAI3C;;OAEG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IA+CxC;;OAEG;IACG,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBhF;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}