@tejasanik/postgres-mcp-server 2.1.0 → 2.2.0

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 (96) hide show
  1. package/README.md +186 -10
  2. package/dist/db-manager/index.d.ts +7 -0
  3. package/dist/db-manager/index.d.ts.map +1 -0
  4. package/dist/db-manager/index.js +7 -0
  5. package/dist/db-manager/index.js.map +1 -0
  6. package/dist/db-manager/validation.d.ts +35 -0
  7. package/dist/db-manager/validation.d.ts.map +1 -0
  8. package/dist/db-manager/validation.js +54 -0
  9. package/dist/db-manager/validation.js.map +1 -0
  10. package/dist/db-manager.d.ts +175 -5
  11. package/dist/db-manager.d.ts.map +1 -1
  12. package/dist/db-manager.js +589 -26
  13. package/dist/db-manager.js.map +1 -1
  14. package/dist/index.js +141 -11
  15. package/dist/index.js.map +1 -1
  16. package/dist/tools/analysis-tools.d.ts.map +1 -1
  17. package/dist/tools/analysis-tools.js +53 -49
  18. package/dist/tools/analysis-tools.js.map +1 -1
  19. package/dist/tools/schema-tools.d.ts +40 -1
  20. package/dist/tools/schema-tools.d.ts.map +1 -1
  21. package/dist/tools/schema-tools.js +174 -92
  22. package/dist/tools/schema-tools.js.map +1 -1
  23. package/dist/tools/server-tools.d.ts +1 -0
  24. package/dist/tools/server-tools.d.ts.map +1 -1
  25. package/dist/tools/server-tools.js +10 -6
  26. package/dist/tools/server-tools.js.map +1 -1
  27. package/dist/tools/sql/utils/connection-utils.d.ts +79 -0
  28. package/dist/tools/sql/utils/connection-utils.d.ts.map +1 -0
  29. package/dist/tools/sql/utils/connection-utils.js +129 -0
  30. package/dist/tools/sql/utils/connection-utils.js.map +1 -0
  31. package/dist/tools/sql/utils/constants.d.ts +55 -0
  32. package/dist/tools/sql/utils/constants.d.ts.map +1 -0
  33. package/dist/tools/sql/utils/constants.js +55 -0
  34. package/dist/tools/sql/utils/constants.js.map +1 -0
  35. package/dist/tools/sql/utils/dry-run-utils.d.ts +31 -0
  36. package/dist/tools/sql/utils/dry-run-utils.d.ts.map +1 -0
  37. package/dist/tools/sql/utils/dry-run-utils.js +173 -0
  38. package/dist/tools/sql/utils/dry-run-utils.js.map +1 -0
  39. package/dist/tools/sql/utils/file-handler.d.ts +57 -0
  40. package/dist/tools/sql/utils/file-handler.d.ts.map +1 -0
  41. package/dist/tools/sql/utils/file-handler.js +150 -0
  42. package/dist/tools/sql/utils/file-handler.js.map +1 -0
  43. package/dist/tools/sql/utils/index.d.ts +12 -0
  44. package/dist/tools/sql/utils/index.d.ts.map +1 -0
  45. package/dist/tools/sql/utils/index.js +12 -0
  46. package/dist/tools/sql/utils/index.js.map +1 -0
  47. package/dist/tools/sql/utils/result-formatter.d.ts +94 -0
  48. package/dist/tools/sql/utils/result-formatter.d.ts.map +1 -0
  49. package/dist/tools/sql/utils/result-formatter.js +154 -0
  50. package/dist/tools/sql/utils/result-formatter.js.map +1 -0
  51. package/dist/tools/sql/utils/sql-parser.d.ts +125 -0
  52. package/dist/tools/sql/utils/sql-parser.d.ts.map +1 -0
  53. package/dist/tools/sql/utils/sql-parser.js +468 -0
  54. package/dist/tools/sql/utils/sql-parser.js.map +1 -0
  55. package/dist/tools/sql-tools.d.ts +21 -0
  56. package/dist/tools/sql-tools.d.ts.map +1 -1
  57. package/dist/tools/sql-tools.js +383 -532
  58. package/dist/tools/sql-tools.js.map +1 -1
  59. package/dist/types.d.ts +38 -0
  60. package/dist/types.d.ts.map +1 -1
  61. package/dist/utils/retry.d.ts +1 -1
  62. package/dist/utils/retry.d.ts.map +1 -1
  63. package/dist/utils/retry.js.map +1 -1
  64. package/dist/utils/validation.d.ts +45 -9
  65. package/dist/utils/validation.d.ts.map +1 -1
  66. package/dist/utils/validation.js +335 -72
  67. package/dist/utils/validation.js.map +1 -1
  68. package/package.json +9 -2
  69. package/dist/__tests__/analysis-tools.test.d.ts +0 -2
  70. package/dist/__tests__/analysis-tools.test.d.ts.map +0 -1
  71. package/dist/__tests__/analysis-tools.test.js +0 -294
  72. package/dist/__tests__/analysis-tools.test.js.map +0 -1
  73. package/dist/__tests__/db-manager.test.d.ts +0 -2
  74. package/dist/__tests__/db-manager.test.d.ts.map +0 -1
  75. package/dist/__tests__/db-manager.test.js +0 -410
  76. package/dist/__tests__/db-manager.test.js.map +0 -1
  77. package/dist/__tests__/mcp-server.test.d.ts +0 -13
  78. package/dist/__tests__/mcp-server.test.d.ts.map +0 -1
  79. package/dist/__tests__/mcp-server.test.js +0 -146
  80. package/dist/__tests__/mcp-server.test.js.map +0 -1
  81. package/dist/__tests__/schema-tools.test.d.ts +0 -2
  82. package/dist/__tests__/schema-tools.test.d.ts.map +0 -1
  83. package/dist/__tests__/schema-tools.test.js +0 -171
  84. package/dist/__tests__/schema-tools.test.js.map +0 -1
  85. package/dist/__tests__/server-tools.test.d.ts +0 -2
  86. package/dist/__tests__/server-tools.test.d.ts.map +0 -1
  87. package/dist/__tests__/server-tools.test.js +0 -113
  88. package/dist/__tests__/server-tools.test.js.map +0 -1
  89. package/dist/__tests__/sql-tools.test.d.ts +0 -2
  90. package/dist/__tests__/sql-tools.test.d.ts.map +0 -1
  91. package/dist/__tests__/sql-tools.test.js +0 -1912
  92. package/dist/__tests__/sql-tools.test.js.map +0 -1
  93. package/dist/__tests__/validation.test.d.ts +0 -2
  94. package/dist/__tests__/validation.test.d.ts.map +0 -1
  95. package/dist/__tests__/validation.test.js +0 -203
  96. package/dist/__tests__/validation.test.js.map +0 -1
@@ -0,0 +1,468 @@
1
+ /**
2
+ * SQL Parser Utilities
3
+ *
4
+ * Functions for parsing, analyzing, and splitting SQL statements.
5
+ * Handles PostgreSQL-specific syntax including:
6
+ * - Dollar-quoted strings ($$ or $tag$)
7
+ * - Nested block comments
8
+ * - Single and double-quoted strings with escape handling
9
+ */
10
+ /** Common SQL statement types for detection */
11
+ const STATEMENT_TYPES = [
12
+ 'SELECT', 'INSERT', 'UPDATE', 'DELETE', 'CREATE', 'ALTER', 'DROP',
13
+ 'TRUNCATE', 'GRANT', 'REVOKE', 'BEGIN', 'COMMIT', 'ROLLBACK',
14
+ 'SET', 'SHOW', 'EXPLAIN', 'ANALYZE', 'VACUUM', 'REINDEX',
15
+ 'COMMENT', 'WITH', 'DO', 'CALL', 'EXECUTE', 'MERGE', 'COPY',
16
+ ];
17
+ /** SQL keywords to skip when extracting table names */
18
+ const SQL_KEYWORDS_TO_SKIP = new Set([
19
+ 'SELECT', 'WHERE', 'SET', 'VALUES', 'AND', 'OR', 'NOT', 'NULL',
20
+ 'TRUE', 'FALSE', 'AS', 'ON', 'USING', 'NATURAL', 'CROSS',
21
+ 'INNER', 'LEFT', 'RIGHT', 'FULL', 'OUTER', 'LATERAL',
22
+ ]);
23
+ /**
24
+ * Strips a leading line comment from SQL and returns the remaining string.
25
+ * Returns null if no line comment is present.
26
+ */
27
+ function stripLineComment(sql) {
28
+ if (!sql.startsWith('--')) {
29
+ return null;
30
+ }
31
+ const newlineIndex = sql.indexOf('\n');
32
+ if (newlineIndex === -1) {
33
+ return ''; // Entire string is a line comment
34
+ }
35
+ return sql.substring(newlineIndex + 1).trim();
36
+ }
37
+ /**
38
+ * Finds the end position of a nested block comment starting at position 2.
39
+ * Returns the position after the closing comment, or -1 if unclosed.
40
+ */
41
+ function findBlockCommentEnd(sql) {
42
+ let depth = 1;
43
+ let i = 2;
44
+ while (i < sql.length && depth > 0) {
45
+ if (sql[i] === '/' && sql[i + 1] === '*') {
46
+ depth++;
47
+ i += 2;
48
+ }
49
+ else if (sql[i] === '*' && sql[i + 1] === '/') {
50
+ depth--;
51
+ i += 2;
52
+ }
53
+ else {
54
+ i++;
55
+ }
56
+ }
57
+ return depth > 0 ? -1 : i;
58
+ }
59
+ /**
60
+ * Checks if character at position matches any statement type prefix.
61
+ */
62
+ function matchesStatementType(trimmed, type) {
63
+ return (trimmed.startsWith(type + ' ') ||
64
+ trimmed.startsWith(type + '\n') ||
65
+ trimmed.startsWith(type + '\t') ||
66
+ trimmed === type);
67
+ }
68
+ /**
69
+ * Strips leading line comments and block comments from SQL.
70
+ * Properly handles nested block comments (PostgreSQL supports nesting).
71
+ * Returns empty string if the entire content is just comments.
72
+ *
73
+ * IMPORTANT: This function only strips LEADING comments. Line numbers
74
+ * in the remaining SQL are NOT affected - they still correspond to
75
+ * the original file positions.
76
+ *
77
+ * @param sql - The SQL string to process
78
+ * @returns The SQL with leading comments stripped
79
+ */
80
+ export function stripLeadingComments(sql) {
81
+ let result = sql.trim();
82
+ while (result.length > 0) {
83
+ // Try stripping leading line comment
84
+ const afterLineComment = stripLineComment(result);
85
+ if (afterLineComment !== null) {
86
+ if (afterLineComment === '')
87
+ return '';
88
+ result = afterLineComment;
89
+ continue;
90
+ }
91
+ // Try stripping leading block comment
92
+ if (result.startsWith('/*')) {
93
+ const endPos = findBlockCommentEnd(result);
94
+ if (endPos === -1) {
95
+ return ''; // Unclosed nested block comment
96
+ }
97
+ result = result.substring(endPos).trim();
98
+ continue;
99
+ }
100
+ // No more leading comments
101
+ break;
102
+ }
103
+ return result;
104
+ }
105
+ /**
106
+ * Detect the type of SQL statement (SELECT, INSERT, UPDATE, DELETE, CREATE, etc.)
107
+ *
108
+ * @param sql - The SQL statement to analyze
109
+ * @returns The detected statement type
110
+ */
111
+ export function detectStatementType(sql) {
112
+ const trimmed = stripLeadingComments(sql).toUpperCase();
113
+ for (const type of STATEMENT_TYPES) {
114
+ if (matchesStatementType(trimmed, type)) {
115
+ // Special case for WITH - check if it's a CTE followed by SELECT/INSERT/UPDATE/DELETE
116
+ if (type === 'WITH') {
117
+ return detectWithCteType(trimmed);
118
+ }
119
+ return type;
120
+ }
121
+ }
122
+ return 'UNKNOWN';
123
+ }
124
+ /**
125
+ * Detects the type of WITH CTE statement.
126
+ */
127
+ function detectWithCteType(trimmed) {
128
+ if (trimmed.includes('SELECT'))
129
+ return 'WITH SELECT';
130
+ if (trimmed.includes('INSERT'))
131
+ return 'WITH INSERT';
132
+ if (trimmed.includes('UPDATE'))
133
+ return 'WITH UPDATE';
134
+ if (trimmed.includes('DELETE'))
135
+ return 'WITH DELETE';
136
+ return 'WITH';
137
+ }
138
+ /**
139
+ * Split SQL content into individual statements with line number tracking.
140
+ * Handles PostgreSQL-specific syntax including:
141
+ * - Single and double-quoted strings with escape handling
142
+ * - Dollar-quoted strings ($$ or $tag$)
143
+ * - Line comments (--)
144
+ * - Nested block comments (PostgreSQL supports nested comments)
145
+ *
146
+ * Line numbers in the returned statements correspond to actual file positions.
147
+ * Comments are NOT excluded from line counting - all newlines are counted.
148
+ *
149
+ * @param sql - The SQL content to split
150
+ * @returns Array of parsed statements with accurate line numbers
151
+ */
152
+ export function splitSqlStatementsWithLineNumbers(sql) {
153
+ const result = splitSqlStatementsWithWarnings(sql);
154
+ return result.statements;
155
+ }
156
+ /**
157
+ * Split SQL content into individual statements with line number tracking
158
+ * and collect any warnings about parsing issues.
159
+ *
160
+ * @param sql - The SQL content to split
161
+ * @returns Object with statements and any parsing warnings
162
+ */
163
+ export function splitSqlStatementsWithWarnings(sql) {
164
+ const statements = [];
165
+ const warnings = [];
166
+ let current = '';
167
+ let currentLineNumber = 1;
168
+ let statementStartLine = 1;
169
+ let hasStatementContent = false; // Track if we've seen actual SQL content (not just comments)
170
+ let inString = false;
171
+ let stringChar = '';
172
+ let stringStartLine = 0;
173
+ let stringStartPos = 0;
174
+ let inLineComment = false;
175
+ let blockCommentDepth = 0;
176
+ let blockCommentStartLine = 0;
177
+ let blockCommentStartPos = 0;
178
+ let i = 0;
179
+ while (i < sql.length) {
180
+ const char = sql[i];
181
+ const nextChar = sql[i + 1] || '';
182
+ // Track line numbers (ALL newlines count, including in comments)
183
+ if (char === '\n') {
184
+ currentLineNumber++;
185
+ }
186
+ // Check if we're starting actual SQL content (not in comment, not whitespace)
187
+ // This determines the accurate line number for the statement
188
+ const inComment = inLineComment || blockCommentDepth > 0;
189
+ if (!hasStatementContent && !inComment && char.trim() !== '') {
190
+ // Check if this is starting a new comment - if so, don't set statement start yet
191
+ const isStartingLineComment = char === '-' && nextChar === '-';
192
+ const isStartingBlockComment = char === '/' && nextChar === '*';
193
+ if (!isStartingLineComment && !isStartingBlockComment) {
194
+ hasStatementContent = true;
195
+ statementStartLine = currentLineNumber;
196
+ }
197
+ }
198
+ // Handle line comments
199
+ if (!inString && blockCommentDepth === 0 && char === '-' && nextChar === '-') {
200
+ inLineComment = true;
201
+ current += char;
202
+ i++;
203
+ continue;
204
+ }
205
+ if (inLineComment && (char === '\n' || char === '\r')) {
206
+ inLineComment = false;
207
+ current += char;
208
+ i++;
209
+ continue;
210
+ }
211
+ // Handle nested block comments
212
+ if (!inString && !inLineComment && char === '/' && nextChar === '*') {
213
+ if (blockCommentDepth === 0) {
214
+ blockCommentStartLine = currentLineNumber;
215
+ blockCommentStartPos = i;
216
+ }
217
+ blockCommentDepth++;
218
+ current += char + nextChar;
219
+ i += 2;
220
+ continue;
221
+ }
222
+ if (blockCommentDepth > 0 && char === '*' && nextChar === '/') {
223
+ blockCommentDepth--;
224
+ current += char + nextChar;
225
+ i += 2;
226
+ continue;
227
+ }
228
+ // Handle string literals
229
+ if (!inLineComment && blockCommentDepth === 0 && (char === "'" || char === '"')) {
230
+ if (!inString) {
231
+ inString = true;
232
+ stringChar = char;
233
+ stringStartLine = currentLineNumber;
234
+ stringStartPos = i;
235
+ }
236
+ else if (char === stringChar) {
237
+ if (nextChar === stringChar) {
238
+ current += char + nextChar;
239
+ i += 2;
240
+ continue;
241
+ }
242
+ inString = false;
243
+ stringChar = '';
244
+ }
245
+ }
246
+ // Handle dollar-quoted strings (PostgreSQL specific)
247
+ if (!inString && !inLineComment && blockCommentDepth === 0 && char === '$') {
248
+ const dollarMatch = /^(\$\w*\$)/.exec(sql.slice(i));
249
+ if (dollarMatch) {
250
+ const dollarTag = dollarMatch[1];
251
+ const searchStart = i + dollarTag.length;
252
+ const endIndex = sql.indexOf(dollarTag, searchStart);
253
+ if (endIndex !== -1) {
254
+ const dollarContent = sql.slice(i, endIndex + dollarTag.length);
255
+ // Count newlines in dollar-quoted content for accurate line tracking
256
+ const newlines = (dollarContent.match(/\n/g) || []).length;
257
+ currentLineNumber += newlines;
258
+ current += dollarContent;
259
+ i = endIndex + dollarTag.length;
260
+ continue;
261
+ }
262
+ else {
263
+ // Unclosed dollar-quote - add warning and consume to end
264
+ warnings.push({
265
+ type: 'unclosed_dollar_quote',
266
+ message: `Unclosed dollar-quote ${dollarTag} starting at line ${currentLineNumber}`,
267
+ lineNumber: currentLineNumber,
268
+ position: i,
269
+ tag: dollarTag,
270
+ });
271
+ // Consume everything to the end as part of this statement
272
+ const remainder = sql.slice(i);
273
+ const newlines = (remainder.match(/\n/g) || []).length;
274
+ currentLineNumber += newlines;
275
+ current += remainder;
276
+ i = sql.length;
277
+ continue;
278
+ }
279
+ }
280
+ }
281
+ // Handle statement separator
282
+ if (!inString && !inLineComment && blockCommentDepth === 0 && char === ';') {
283
+ current += char;
284
+ const trimmed = current.trim();
285
+ if (trimmed) {
286
+ statements.push({ sql: trimmed, lineNumber: statementStartLine });
287
+ }
288
+ current = '';
289
+ hasStatementContent = false; // Reset for next statement
290
+ i++;
291
+ continue;
292
+ }
293
+ current += char;
294
+ i++;
295
+ }
296
+ // Check for unclosed constructs at end of input
297
+ if (blockCommentDepth > 0) {
298
+ warnings.push({
299
+ type: 'unclosed_block_comment',
300
+ message: `Unclosed block comment starting at line ${blockCommentStartLine}`,
301
+ lineNumber: blockCommentStartLine,
302
+ position: blockCommentStartPos,
303
+ });
304
+ }
305
+ if (inString) {
306
+ warnings.push({
307
+ type: 'unclosed_string',
308
+ message: `Unclosed string literal starting at line ${stringStartLine}`,
309
+ lineNumber: stringStartLine,
310
+ position: stringStartPos,
311
+ });
312
+ }
313
+ // Add remaining content if any
314
+ const trimmed = current.trim();
315
+ if (trimmed) {
316
+ statements.push({ sql: trimmed, lineNumber: statementStartLine });
317
+ }
318
+ return { statements, warnings };
319
+ }
320
+ /**
321
+ * Extracts table names from a SQL query.
322
+ * Handles common patterns:
323
+ * - FROM, JOIN, INTO, UPDATE, DELETE FROM
324
+ * - MERGE INTO/USING
325
+ * - COPY (table) FROM/TO
326
+ * - LATERAL subquery references
327
+ * - USING clause in JOINs
328
+ *
329
+ * @param sql - The SQL query to analyze
330
+ * @returns Array of unique table references
331
+ */
332
+ export function extractTablesFromSql(sql) {
333
+ const tables = [];
334
+ const seen = new Set();
335
+ // Normalize SQL: remove comments and extra whitespace
336
+ const normalized = sql
337
+ .replace(/--[^\n]*/g, '') // Remove line comments
338
+ .replace(/\/\*[\s\S]*?\*\//g, '') // Remove block comments
339
+ .replace(/\s+/g, ' ') // Normalize whitespace
340
+ .trim();
341
+ // Pattern for SQL identifier: optional quotes, word chars, optional schema.table
342
+ const identPattern = '(["`]?\\w+["`]?(?:\\.\\s*["`]?\\w+["`]?)?)';
343
+ // Patterns to find table references
344
+ const patterns = [
345
+ // Standard patterns
346
+ new RegExp(`\\bFROM\\s+${identPattern}`, 'gi'),
347
+ new RegExp(`\\bJOIN\\s+${identPattern}`, 'gi'),
348
+ new RegExp(`\\bINTO\\s+${identPattern}`, 'gi'),
349
+ new RegExp(`\\bUPDATE\\s+${identPattern}`, 'gi'),
350
+ new RegExp(`\\bDELETE\\s+FROM\\s+${identPattern}`, 'gi'),
351
+ // MERGE statement patterns
352
+ new RegExp(`\\bMERGE\\s+INTO\\s+${identPattern}`, 'gi'),
353
+ new RegExp(`\\bUSING\\s+${identPattern}`, 'gi'),
354
+ // COPY statement pattern
355
+ new RegExp(`\\bCOPY\\s+${identPattern}`, 'gi'),
356
+ // TABLE keyword (for COPY TABLE, etc.)
357
+ new RegExp(`\\bTABLE\\s+${identPattern}`, 'gi'),
358
+ ];
359
+ for (const pattern of patterns) {
360
+ let match;
361
+ while ((match = pattern.exec(normalized)) !== null) {
362
+ const tableRef = match[1].replace(/["`]/g, '').trim();
363
+ // Skip common SQL keywords that might be matched
364
+ if (SQL_KEYWORDS_TO_SKIP.has(tableRef.toUpperCase())) {
365
+ continue;
366
+ }
367
+ // Skip if it looks like a function call (ends with parenthesis nearby)
368
+ const afterMatch = normalized.slice(match.index + match[0].length).trim();
369
+ if (afterMatch.startsWith('(')) {
370
+ continue;
371
+ }
372
+ let schema = 'public';
373
+ let table = tableRef;
374
+ if (tableRef.includes('.')) {
375
+ const parts = tableRef.split('.');
376
+ schema = parts[0].trim();
377
+ table = parts[1].trim();
378
+ }
379
+ const key = `${schema}.${table}`.toLowerCase();
380
+ if (!seen.has(key)) {
381
+ seen.add(key);
382
+ tables.push({ schema, table });
383
+ }
384
+ }
385
+ }
386
+ return tables;
387
+ }
388
+ /**
389
+ * Filter parsed statements to only executable ones (non-empty, non-comment).
390
+ *
391
+ * @param statements - Array of parsed statements
392
+ * @returns Filtered array of executable statements
393
+ */
394
+ export function filterExecutableStatements(statements) {
395
+ return statements.filter((stmt) => {
396
+ const trimmed = stmt.sql.trim();
397
+ if (!trimmed)
398
+ return false;
399
+ const withoutComments = stripLeadingComments(trimmed);
400
+ return withoutComments.length > 0;
401
+ });
402
+ }
403
+ /**
404
+ * Normalize SQL by removing comments and extra whitespace.
405
+ * Properly handles nested block comments.
406
+ *
407
+ * @param sql - The SQL to normalize
408
+ * @returns Normalized SQL string
409
+ */
410
+ export function normalizeSql(sql) {
411
+ // Remove nested block comments
412
+ let result = sql;
413
+ let prevLength = -1;
414
+ // Keep removing until no more changes (handles nested comments)
415
+ while (result.length !== prevLength) {
416
+ prevLength = result.length;
417
+ // Remove innermost comments first
418
+ result = result.replace(/\/\*[^/*]*\*\//g, '');
419
+ }
420
+ return result
421
+ .replace(/--[^\n]*/g, '') // Remove line comments
422
+ .replace(/\s+/g, ' ') // Normalize whitespace
423
+ .trim();
424
+ }
425
+ /**
426
+ * Checks if SQL content is empty after preprocessing (removing comments/whitespace).
427
+ *
428
+ * @param sql - The SQL to check
429
+ * @returns true if SQL is effectively empty, false otherwise
430
+ */
431
+ export function isEmptyAfterPreprocessing(sql) {
432
+ const stripped = stripLeadingComments(sql);
433
+ return stripped.trim().length === 0;
434
+ }
435
+ /**
436
+ * Detects potential schema change statements in SQL.
437
+ * Useful for warning about schema changes during multi-statement execution.
438
+ *
439
+ * @param sql - The SQL statement to check
440
+ * @returns Object with detected schema changes
441
+ */
442
+ export function detectSchemaChanges(sql) {
443
+ const normalized = normalizeSql(sql).toUpperCase();
444
+ // Check for SET search_path
445
+ const searchPathRegex = /SET\s+(?:LOCAL\s+)?SEARCH_PATH\s*(?:TO|=)\s*(\w+)/;
446
+ const searchPathMatch = searchPathRegex.exec(normalized);
447
+ if (searchPathMatch) {
448
+ return {
449
+ hasSchemaChange: true,
450
+ changeType: 'search_path',
451
+ newSchema: searchPathMatch[1].toLowerCase(),
452
+ };
453
+ }
454
+ // Check for CREATE SCHEMA
455
+ if (/CREATE\s+SCHEMA\b/.test(normalized)) {
456
+ return { hasSchemaChange: true, changeType: 'schema_create' };
457
+ }
458
+ // Check for DROP SCHEMA
459
+ if (/DROP\s+SCHEMA\b/.test(normalized)) {
460
+ return { hasSchemaChange: true, changeType: 'schema_drop' };
461
+ }
462
+ // Check for ALTER SCHEMA
463
+ if (/ALTER\s+SCHEMA\b/.test(normalized)) {
464
+ return { hasSchemaChange: true, changeType: 'schema_alter' };
465
+ }
466
+ return { hasSchemaChange: false };
467
+ }
468
+ //# sourceMappingURL=sql-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-parser.js","sourceRoot":"","sources":["../../../../src/tools/sql/utils/sql-parser.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,9 @@ export declare function executeSql(args: {
8
8
  includeSchemaHint?: boolean;
9
9
  allowMultipleStatements?: boolean;
10
10
  transactionId?: string;
11
+ server?: string;
12
+ database?: string;
13
+ schema?: string;
11
14
  }): Promise<ExecuteSqlResult | ExecuteSqlMultiResult>;
12
15
  export declare function explainQuery(args: {
13
16
  sql: string;
@@ -19,6 +22,9 @@ export declare function explainQuery(args: {
19
22
  columns: string[];
20
23
  indexType?: string;
21
24
  }>;
25
+ server?: string;
26
+ database?: string;
27
+ schema?: string;
22
28
  }): Promise<QueryPlan>;
23
29
  /**
24
30
  * Individual statement error when stopOnError is false
@@ -85,6 +91,9 @@ export declare function executeSqlFile(args: {
85
91
  stripAsRegex?: boolean;
86
92
  /** If true, only parse and validate the file without executing (default: false) */
87
93
  validateOnly?: boolean;
94
+ server?: string;
95
+ database?: string;
96
+ schema?: string;
88
97
  }): Promise<ExecuteSqlFileResult>;
89
98
  /**
90
99
  * Preview a SQL file without executing.
@@ -120,6 +129,9 @@ export declare function dryRunSqlFile(args: {
120
129
  maxStatements?: number;
121
130
  /** Stop on first error (default: false - continues to show all errors) */
122
131
  stopOnError?: boolean;
132
+ server?: string;
133
+ database?: string;
134
+ schema?: string;
123
135
  }): Promise<SqlFileDryRunResult>;
124
136
  /**
125
137
  * Preview the effect of a mutation (INSERT/UPDATE/DELETE) without executing it.
@@ -128,6 +140,9 @@ export declare function dryRunSqlFile(args: {
128
140
  export declare function mutationPreview(args: {
129
141
  sql: string;
130
142
  sampleSize?: number;
143
+ server?: string;
144
+ database?: string;
145
+ schema?: string;
131
146
  }): Promise<MutationPreviewResult>;
132
147
  /**
133
148
  * Execute a mutation (INSERT/UPDATE/DELETE) in dry-run mode.
@@ -142,6 +157,9 @@ export declare function mutationPreview(args: {
142
157
  export declare function mutationDryRun(args: {
143
158
  sql: string;
144
159
  sampleSize?: number;
160
+ server?: string;
161
+ database?: string;
162
+ schema?: string;
145
163
  }): Promise<MutationDryRunResult>;
146
164
  /**
147
165
  * Execute multiple SQL queries in parallel.
@@ -150,6 +168,9 @@ export declare function mutationDryRun(args: {
150
168
  export declare function batchExecute(args: {
151
169
  queries: BatchQuery[];
152
170
  stopOnError?: boolean;
171
+ server?: string;
172
+ database?: string;
173
+ schema?: string;
153
174
  }): Promise<BatchExecuteResult>;
154
175
  /**
155
176
  * Begin a new transaction. Returns a transactionId to use with subsequent queries.
@@ -1 +1 @@
1
- {"version":3,"file":"sql-tools.d.ts","sourceRoot":"","sources":["../../src/tools/sql-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql-tools.d.ts","sourceRoot":"","sources":["../../src/tools/sql-tools.ts"],"names":[],"mappings":"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"}