db-mcp 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.
- package/LICENSE +21 -0
- package/README.md +860 -0
- package/dist/adapters/DatabaseAdapter.d.ts +141 -0
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -0
- package/dist/adapters/DatabaseAdapter.js +131 -0
- package/dist/adapters/DatabaseAdapter.js.map +1 -0
- package/dist/adapters/sqlite/SchemaManager.d.ts +58 -0
- package/dist/adapters/sqlite/SchemaManager.d.ts.map +1 -0
- package/dist/adapters/sqlite/SchemaManager.js +187 -0
- package/dist/adapters/sqlite/SchemaManager.js.map +1 -0
- package/dist/adapters/sqlite/SqliteAdapter.d.ts +161 -0
- package/dist/adapters/sqlite/SqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/sqlite/SqliteAdapter.js +741 -0
- package/dist/adapters/sqlite/SqliteAdapter.js.map +1 -0
- package/dist/adapters/sqlite/index.d.ts +9 -0
- package/dist/adapters/sqlite/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/index.js +8 -0
- package/dist/adapters/sqlite/index.js.map +1 -0
- package/dist/adapters/sqlite/json-utils.d.ts +100 -0
- package/dist/adapters/sqlite/json-utils.d.ts.map +1 -0
- package/dist/adapters/sqlite/json-utils.js +274 -0
- package/dist/adapters/sqlite/json-utils.js.map +1 -0
- package/dist/adapters/sqlite/output-schemas.d.ts +1187 -0
- package/dist/adapters/sqlite/output-schemas.d.ts.map +1 -0
- package/dist/adapters/sqlite/output-schemas.js +1337 -0
- package/dist/adapters/sqlite/output-schemas.js.map +1 -0
- package/dist/adapters/sqlite/prompts.d.ts +13 -0
- package/dist/adapters/sqlite/prompts.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts.js +605 -0
- package/dist/adapters/sqlite/prompts.js.map +1 -0
- package/dist/adapters/sqlite/resources.d.ts +13 -0
- package/dist/adapters/sqlite/resources.d.ts.map +1 -0
- package/dist/adapters/sqlite/resources.js +251 -0
- package/dist/adapters/sqlite/resources.js.map +1 -0
- package/dist/adapters/sqlite/tools/admin.d.ts +14 -0
- package/dist/adapters/sqlite/tools/admin.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin.js +788 -0
- package/dist/adapters/sqlite/tools/admin.js.map +1 -0
- package/dist/adapters/sqlite/tools/core.d.ts +25 -0
- package/dist/adapters/sqlite/tools/core.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core.js +359 -0
- package/dist/adapters/sqlite/tools/core.js.map +1 -0
- package/dist/adapters/sqlite/tools/fts.d.ts +13 -0
- package/dist/adapters/sqlite/tools/fts.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/fts.js +347 -0
- package/dist/adapters/sqlite/tools/fts.js.map +1 -0
- package/dist/adapters/sqlite/tools/geo.d.ts +14 -0
- package/dist/adapters/sqlite/tools/geo.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/geo.js +252 -0
- package/dist/adapters/sqlite/tools/geo.js.map +1 -0
- package/dist/adapters/sqlite/tools/index.d.ts +30 -0
- package/dist/adapters/sqlite/tools/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/index.js +61 -0
- package/dist/adapters/sqlite/tools/index.js.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers.d.ts +14 -0
- package/dist/adapters/sqlite/tools/json-helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers.js +477 -0
- package/dist/adapters/sqlite/tools/json-helpers.js.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations.d.ts +14 -0
- package/dist/adapters/sqlite/tools/json-operations.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations.js +839 -0
- package/dist/adapters/sqlite/tools/json-operations.js.map +1 -0
- package/dist/adapters/sqlite/tools/stats.d.ts +15 -0
- package/dist/adapters/sqlite/tools/stats.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats.js +1219 -0
- package/dist/adapters/sqlite/tools/stats.js.map +1 -0
- package/dist/adapters/sqlite/tools/text.d.ts +14 -0
- package/dist/adapters/sqlite/tools/text.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text.js +1141 -0
- package/dist/adapters/sqlite/tools/text.js.map +1 -0
- package/dist/adapters/sqlite/tools/vector.d.ts +14 -0
- package/dist/adapters/sqlite/tools/vector.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector.js +613 -0
- package/dist/adapters/sqlite/tools/vector.js.map +1 -0
- package/dist/adapters/sqlite/tools/virtual.d.ts +13 -0
- package/dist/adapters/sqlite/tools/virtual.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual.js +930 -0
- package/dist/adapters/sqlite/tools/virtual.js.map +1 -0
- package/dist/adapters/sqlite/types.d.ts +207 -0
- package/dist/adapters/sqlite/types.d.ts.map +1 -0
- package/dist/adapters/sqlite/types.js +186 -0
- package/dist/adapters/sqlite/types.js.map +1 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts +163 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.js +748 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.js.map +1 -0
- package/dist/adapters/sqlite-native/index.d.ts +11 -0
- package/dist/adapters/sqlite-native/index.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/index.js +11 -0
- package/dist/adapters/sqlite-native/index.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite.d.ts +19 -0
- package/dist/adapters/sqlite-native/tools/spatialite.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite.js +628 -0
- package/dist/adapters/sqlite-native/tools/spatialite.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts +12 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/transactions.js +255 -0
- package/dist/adapters/sqlite-native/tools/transactions.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts +12 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/window.js +370 -0
- package/dist/adapters/sqlite-native/tools/window.js.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts +90 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.js +204 -0
- package/dist/auth/AuthorizationServerDiscovery.js.map +1 -0
- package/dist/auth/OAuthResourceServer.d.ts +65 -0
- package/dist/auth/OAuthResourceServer.d.ts.map +1 -0
- package/dist/auth/OAuthResourceServer.js +121 -0
- package/dist/auth/OAuthResourceServer.js.map +1 -0
- package/dist/auth/TokenValidator.d.ts +60 -0
- package/dist/auth/TokenValidator.d.ts.map +1 -0
- package/dist/auth/TokenValidator.js +235 -0
- package/dist/auth/TokenValidator.js.map +1 -0
- package/dist/auth/errors.d.ts +74 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +133 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/index.d.ts +13 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +15 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +81 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +291 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/scopes.d.ts +136 -0
- package/dist/auth/scopes.d.ts.map +1 -0
- package/dist/auth/scopes.js +349 -0
- package/dist/auth/scopes.js.map +1 -0
- package/dist/auth/types.d.ts +257 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +8 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +236 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants/ServerInstructions.d.ts +45 -0
- package/dist/constants/ServerInstructions.d.ts.map +1 -0
- package/dist/constants/ServerInstructions.js +356 -0
- package/dist/constants/ServerInstructions.js.map +1 -0
- package/dist/filtering/ToolConstants.d.ts +34 -0
- package/dist/filtering/ToolConstants.d.ts.map +1 -0
- package/dist/filtering/ToolConstants.js +174 -0
- package/dist/filtering/ToolConstants.js.map +1 -0
- package/dist/filtering/ToolFilter.d.ts +82 -0
- package/dist/filtering/ToolFilter.d.ts.map +1 -0
- package/dist/filtering/ToolFilter.js +296 -0
- package/dist/filtering/ToolFilter.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/server/McpServer.d.ts +61 -0
- package/dist/server/McpServer.d.ts.map +1 -0
- package/dist/server/McpServer.js +270 -0
- package/dist/server/McpServer.js.map +1 -0
- package/dist/transports/http.d.ts +134 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +516 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +5 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +5 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/types/index.d.ts +380 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +68 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/annotations.d.ts +44 -0
- package/dist/utils/annotations.d.ts.map +1 -0
- package/dist/utils/annotations.js +77 -0
- package/dist/utils/annotations.js.map +1 -0
- package/dist/utils/errors.d.ts +155 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +329 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/identifiers.d.ts +121 -0
- package/dist/utils/identifiers.d.ts.map +1 -0
- package/dist/utils/identifiers.js +319 -0
- package/dist/utils/identifiers.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/insightsManager.d.ts +39 -0
- package/dist/utils/insightsManager.d.ts.map +1 -0
- package/dist/utils/insightsManager.js +63 -0
- package/dist/utils/insightsManager.js.map +1 -0
- package/dist/utils/logger.d.ts +189 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +394 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/progress-utils.d.ts +54 -0
- package/dist/utils/progress-utils.d.ts.map +1 -0
- package/dist/utils/progress-utils.js +74 -0
- package/dist/utils/progress-utils.js.map +1 -0
- package/dist/utils/resourceAnnotations.d.ts +36 -0
- package/dist/utils/resourceAnnotations.d.ts.map +1 -0
- package/dist/utils/resourceAnnotations.js +57 -0
- package/dist/utils/resourceAnnotations.js.map +1 -0
- package/dist/utils/where-clause.d.ts +41 -0
- package/dist/utils/where-clause.d.ts.map +1 -0
- package/dist/utils/where-clause.js +116 -0
- package/dist/utils/where-clause.js.map +1 -0
- package/package.json +83 -0
- package/server.json +53 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction Tools for Native SQLite Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides transaction control tools for complex multi-statement operations.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
// Schemas
|
|
8
|
+
const BeginTransactionSchema = z.object({
|
|
9
|
+
mode: z
|
|
10
|
+
.enum(["deferred", "immediate", "exclusive"])
|
|
11
|
+
.optional()
|
|
12
|
+
.default("deferred")
|
|
13
|
+
.describe("Transaction mode: deferred waits for first write, immediate acquires lock immediately, exclusive blocks all access"),
|
|
14
|
+
});
|
|
15
|
+
const SavepointSchema = z.object({
|
|
16
|
+
name: z.string().describe("Savepoint name"),
|
|
17
|
+
});
|
|
18
|
+
const ExecuteInTransactionSchema = z.object({
|
|
19
|
+
statements: z
|
|
20
|
+
.array(z.string())
|
|
21
|
+
.describe("Array of SQL statements to execute in order"),
|
|
22
|
+
rollbackOnError: z
|
|
23
|
+
.boolean()
|
|
24
|
+
.optional()
|
|
25
|
+
.default(true)
|
|
26
|
+
.describe("If true, rollback all changes when any statement fails"),
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Get all transaction tools
|
|
30
|
+
*/
|
|
31
|
+
export function getTransactionTools(adapter) {
|
|
32
|
+
return [
|
|
33
|
+
createBeginTransactionTool(adapter),
|
|
34
|
+
createCommitTransactionTool(adapter),
|
|
35
|
+
createRollbackTransactionTool(adapter),
|
|
36
|
+
createSavepointTool(adapter),
|
|
37
|
+
createReleaseSavepointTool(adapter),
|
|
38
|
+
createRollbackToSavepointTool(adapter),
|
|
39
|
+
createExecuteInTransactionTool(adapter),
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Begin transaction
|
|
44
|
+
*/
|
|
45
|
+
function createBeginTransactionTool(adapter) {
|
|
46
|
+
return {
|
|
47
|
+
name: "sqlite_transaction_begin",
|
|
48
|
+
description: "Begin a new transaction. Use immediate or exclusive mode for write-heavy operations.",
|
|
49
|
+
group: "admin",
|
|
50
|
+
inputSchema: BeginTransactionSchema,
|
|
51
|
+
requiredScopes: ["write"],
|
|
52
|
+
handler: async (params, _context) => {
|
|
53
|
+
const input = BeginTransactionSchema.parse(params);
|
|
54
|
+
const mode = input.mode.toUpperCase();
|
|
55
|
+
await adapter.executeWriteQuery(`BEGIN ${mode} TRANSACTION`);
|
|
56
|
+
return {
|
|
57
|
+
success: true,
|
|
58
|
+
message: `Transaction started (${input.mode} mode)`,
|
|
59
|
+
mode: input.mode,
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Commit transaction
|
|
66
|
+
*/
|
|
67
|
+
function createCommitTransactionTool(adapter) {
|
|
68
|
+
return {
|
|
69
|
+
name: "sqlite_transaction_commit",
|
|
70
|
+
description: "Commit the current transaction, making all changes permanent.",
|
|
71
|
+
group: "admin",
|
|
72
|
+
inputSchema: z.object({}),
|
|
73
|
+
requiredScopes: ["write"],
|
|
74
|
+
handler: (_params, _context) => {
|
|
75
|
+
adapter.commitTransaction();
|
|
76
|
+
return Promise.resolve({
|
|
77
|
+
success: true,
|
|
78
|
+
message: "Transaction committed",
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Rollback transaction
|
|
85
|
+
*/
|
|
86
|
+
function createRollbackTransactionTool(adapter) {
|
|
87
|
+
return {
|
|
88
|
+
name: "sqlite_transaction_rollback",
|
|
89
|
+
description: "Rollback the current transaction, discarding all changes.",
|
|
90
|
+
group: "admin",
|
|
91
|
+
inputSchema: z.object({}),
|
|
92
|
+
requiredScopes: ["write"],
|
|
93
|
+
handler: (_params, _context) => {
|
|
94
|
+
adapter.rollbackTransaction();
|
|
95
|
+
return Promise.resolve({
|
|
96
|
+
success: true,
|
|
97
|
+
message: "Transaction rolled back",
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Create savepoint
|
|
104
|
+
*/
|
|
105
|
+
function createSavepointTool(adapter) {
|
|
106
|
+
return {
|
|
107
|
+
name: "sqlite_transaction_savepoint",
|
|
108
|
+
description: "Create a savepoint within the current transaction for partial rollback.",
|
|
109
|
+
group: "admin",
|
|
110
|
+
inputSchema: SavepointSchema,
|
|
111
|
+
requiredScopes: ["write"],
|
|
112
|
+
handler: (params, _context) => {
|
|
113
|
+
const input = SavepointSchema.parse(params);
|
|
114
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.name)) {
|
|
115
|
+
throw new Error("Invalid savepoint name");
|
|
116
|
+
}
|
|
117
|
+
adapter.savepoint(input.name);
|
|
118
|
+
return Promise.resolve({
|
|
119
|
+
success: true,
|
|
120
|
+
message: `Savepoint '${input.name}' created`,
|
|
121
|
+
savepoint: input.name,
|
|
122
|
+
});
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Release savepoint
|
|
128
|
+
*/
|
|
129
|
+
function createReleaseSavepointTool(adapter) {
|
|
130
|
+
return {
|
|
131
|
+
name: "sqlite_transaction_release",
|
|
132
|
+
description: "Release a savepoint, keeping the changes made since it was created.",
|
|
133
|
+
group: "admin",
|
|
134
|
+
inputSchema: SavepointSchema,
|
|
135
|
+
requiredScopes: ["write"],
|
|
136
|
+
handler: (params, _context) => {
|
|
137
|
+
const input = SavepointSchema.parse(params);
|
|
138
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.name)) {
|
|
139
|
+
throw new Error("Invalid savepoint name");
|
|
140
|
+
}
|
|
141
|
+
adapter.releaseSavepoint(input.name);
|
|
142
|
+
return Promise.resolve({
|
|
143
|
+
success: true,
|
|
144
|
+
message: `Savepoint '${input.name}' released`,
|
|
145
|
+
savepoint: input.name,
|
|
146
|
+
});
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Rollback to savepoint
|
|
152
|
+
*/
|
|
153
|
+
function createRollbackToSavepointTool(adapter) {
|
|
154
|
+
return {
|
|
155
|
+
name: "sqlite_transaction_rollback_to",
|
|
156
|
+
description: "Rollback to a savepoint, discarding changes made after it was created.",
|
|
157
|
+
group: "admin",
|
|
158
|
+
inputSchema: SavepointSchema,
|
|
159
|
+
requiredScopes: ["write"],
|
|
160
|
+
handler: (params, _context) => {
|
|
161
|
+
const input = SavepointSchema.parse(params);
|
|
162
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.name)) {
|
|
163
|
+
throw new Error("Invalid savepoint name");
|
|
164
|
+
}
|
|
165
|
+
adapter.rollbackToSavepoint(input.name);
|
|
166
|
+
return Promise.resolve({
|
|
167
|
+
success: true,
|
|
168
|
+
message: `Rolled back to savepoint '${input.name}'`,
|
|
169
|
+
savepoint: input.name,
|
|
170
|
+
});
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Execute multiple statements in a transaction
|
|
176
|
+
*/
|
|
177
|
+
function createExecuteInTransactionTool(adapter) {
|
|
178
|
+
return {
|
|
179
|
+
name: "sqlite_transaction_execute",
|
|
180
|
+
description: "Execute multiple SQL statements in a single transaction. Automatically commits on success or rolls back on error.",
|
|
181
|
+
group: "admin",
|
|
182
|
+
inputSchema: ExecuteInTransactionSchema,
|
|
183
|
+
requiredScopes: ["write"],
|
|
184
|
+
handler: async (params, _context) => {
|
|
185
|
+
const input = ExecuteInTransactionSchema.parse(params);
|
|
186
|
+
const results = [];
|
|
187
|
+
let success = true;
|
|
188
|
+
try {
|
|
189
|
+
adapter.beginTransaction();
|
|
190
|
+
for (const statement of input.statements) {
|
|
191
|
+
try {
|
|
192
|
+
// Detect SELECT statements to return row data
|
|
193
|
+
const isSelect = statement
|
|
194
|
+
.trim()
|
|
195
|
+
.toUpperCase()
|
|
196
|
+
.startsWith("SELECT");
|
|
197
|
+
if (isSelect) {
|
|
198
|
+
const result = await adapter.executeReadQuery(statement);
|
|
199
|
+
const rowCount = result.rows?.length ?? 0;
|
|
200
|
+
const statementResult = {
|
|
201
|
+
statement: statement.substring(0, 100) +
|
|
202
|
+
(statement.length > 100 ? "..." : ""),
|
|
203
|
+
rowCount,
|
|
204
|
+
};
|
|
205
|
+
if (result.rows) {
|
|
206
|
+
statementResult.rows = result.rows;
|
|
207
|
+
}
|
|
208
|
+
results.push(statementResult);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
const result = await adapter.executeWriteQuery(statement);
|
|
212
|
+
results.push({
|
|
213
|
+
statement: statement.substring(0, 100) +
|
|
214
|
+
(statement.length > 100 ? "..." : ""),
|
|
215
|
+
rowsAffected: result.rowsAffected ?? 0,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
221
|
+
results.push({
|
|
222
|
+
statement: statement.substring(0, 100) +
|
|
223
|
+
(statement.length > 100 ? "..." : ""),
|
|
224
|
+
error: message,
|
|
225
|
+
});
|
|
226
|
+
if (input.rollbackOnError) {
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
229
|
+
success = false;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
adapter.commitTransaction();
|
|
233
|
+
return {
|
|
234
|
+
success,
|
|
235
|
+
message: success
|
|
236
|
+
? "Transaction completed successfully"
|
|
237
|
+
: "Transaction completed with errors",
|
|
238
|
+
statementsExecuted: input.statements.length,
|
|
239
|
+
results,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
adapter.rollbackTransaction();
|
|
244
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
245
|
+
return {
|
|
246
|
+
success: false,
|
|
247
|
+
message: `Transaction rolled back: ${message}`,
|
|
248
|
+
statementsExecuted: results.length,
|
|
249
|
+
results,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=transactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../../../src/adapters/sqlite-native/tools/transactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Window Function Tools for Native SQLite Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides window function tools for analytics and ranking operations.
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolDefinition } from "../../../types/index.js";
|
|
7
|
+
import type { NativeSqliteAdapter } from "../NativeSqliteAdapter.js";
|
|
8
|
+
/**
|
|
9
|
+
* Get all window function tools
|
|
10
|
+
*/
|
|
11
|
+
export declare function getWindowTools(adapter: NativeSqliteAdapter): ToolDefinition[];
|
|
12
|
+
//# sourceMappingURL=window.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../../src/adapters/sqlite-native/tools/window.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AA+GrE;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,EAAE,CAS7E"}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Window Function Tools for Native SQLite Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides window function tools for analytics and ranking operations.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { validateWhereClause } from "../../../utils/index.js";
|
|
8
|
+
// Schemas
|
|
9
|
+
const RowNumberSchema = z.object({
|
|
10
|
+
table: z.string().describe("Table name"),
|
|
11
|
+
orderBy: z.string().describe("Column(s) to order by"),
|
|
12
|
+
partitionBy: z.string().optional().describe("Column(s) to partition by"),
|
|
13
|
+
selectColumns: z
|
|
14
|
+
.array(z.string())
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Columns to include in result"),
|
|
17
|
+
whereClause: z.string().optional().describe("Optional WHERE clause"),
|
|
18
|
+
limit: z.number().optional().default(100).describe("Maximum rows to return"),
|
|
19
|
+
});
|
|
20
|
+
const RankSchema = z.object({
|
|
21
|
+
table: z.string().describe("Table name"),
|
|
22
|
+
orderBy: z.string().describe("Column(s) to order by (determines rank)"),
|
|
23
|
+
partitionBy: z.string().optional().describe("Column(s) to partition by"),
|
|
24
|
+
selectColumns: z
|
|
25
|
+
.array(z.string())
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("Columns to include in result"),
|
|
28
|
+
rankType: z
|
|
29
|
+
.enum(["rank", "dense_rank", "percent_rank"])
|
|
30
|
+
.optional()
|
|
31
|
+
.default("rank")
|
|
32
|
+
.describe("Rank function type"),
|
|
33
|
+
whereClause: z.string().optional().describe("Optional WHERE clause"),
|
|
34
|
+
limit: z.number().optional().default(100).describe("Maximum rows to return"),
|
|
35
|
+
});
|
|
36
|
+
const LagLeadSchema = z.object({
|
|
37
|
+
table: z.string().describe("Table name"),
|
|
38
|
+
column: z.string().describe("Column to get lag/lead value from"),
|
|
39
|
+
orderBy: z.string().describe("Column(s) to order by"),
|
|
40
|
+
direction: z
|
|
41
|
+
.enum(["lag", "lead"])
|
|
42
|
+
.describe("LAG (previous) or LEAD (next) row"),
|
|
43
|
+
offset: z
|
|
44
|
+
.number()
|
|
45
|
+
.optional()
|
|
46
|
+
.default(1)
|
|
47
|
+
.describe("Number of rows to look back/ahead"),
|
|
48
|
+
defaultValue: z
|
|
49
|
+
.string()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Default value if no row exists"),
|
|
52
|
+
partitionBy: z.string().optional().describe("Column(s) to partition by"),
|
|
53
|
+
selectColumns: z
|
|
54
|
+
.array(z.string())
|
|
55
|
+
.optional()
|
|
56
|
+
.describe("Columns to include in result"),
|
|
57
|
+
whereClause: z.string().optional().describe("Optional WHERE clause"),
|
|
58
|
+
limit: z.number().optional().default(100).describe("Maximum rows to return"),
|
|
59
|
+
});
|
|
60
|
+
const RunningTotalSchema = z.object({
|
|
61
|
+
table: z.string().describe("Table name"),
|
|
62
|
+
valueColumn: z.string().describe("Column to sum"),
|
|
63
|
+
orderBy: z.string().describe("Column(s) to order by"),
|
|
64
|
+
partitionBy: z
|
|
65
|
+
.string()
|
|
66
|
+
.optional()
|
|
67
|
+
.describe("Reset running total for each partition"),
|
|
68
|
+
selectColumns: z
|
|
69
|
+
.array(z.string())
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Columns to include in result"),
|
|
72
|
+
whereClause: z.string().optional().describe("Optional WHERE clause"),
|
|
73
|
+
limit: z.number().optional().default(100).describe("Maximum rows to return"),
|
|
74
|
+
});
|
|
75
|
+
const MovingAverageSchema = z.object({
|
|
76
|
+
table: z.string().describe("Table name"),
|
|
77
|
+
valueColumn: z.string().describe("Column to average"),
|
|
78
|
+
orderBy: z.string().describe("Column(s) to order by"),
|
|
79
|
+
windowSize: z.number().describe("Number of rows in the moving window"),
|
|
80
|
+
partitionBy: z.string().optional().describe("Column(s) to partition by"),
|
|
81
|
+
selectColumns: z
|
|
82
|
+
.array(z.string())
|
|
83
|
+
.optional()
|
|
84
|
+
.describe("Columns to include in result"),
|
|
85
|
+
whereClause: z.string().optional().describe("Optional WHERE clause"),
|
|
86
|
+
limit: z.number().optional().default(100).describe("Maximum rows to return"),
|
|
87
|
+
});
|
|
88
|
+
const NtileSchema = z.object({
|
|
89
|
+
table: z.string().describe("Table name"),
|
|
90
|
+
orderBy: z.string().describe("Column(s) to order by"),
|
|
91
|
+
buckets: z.number().describe("Number of buckets (e.g., 4 for quartiles)"),
|
|
92
|
+
partitionBy: z.string().optional().describe("Column(s) to partition by"),
|
|
93
|
+
selectColumns: z
|
|
94
|
+
.array(z.string())
|
|
95
|
+
.optional()
|
|
96
|
+
.describe("Columns to include in result"),
|
|
97
|
+
whereClause: z.string().optional().describe("Optional WHERE clause"),
|
|
98
|
+
limit: z.number().optional().default(100).describe("Maximum rows to return"),
|
|
99
|
+
});
|
|
100
|
+
/**
|
|
101
|
+
* Helper to format column selection
|
|
102
|
+
*/
|
|
103
|
+
function formatColumns(selectColumns) {
|
|
104
|
+
if (selectColumns === undefined || selectColumns.length === 0) {
|
|
105
|
+
return "*";
|
|
106
|
+
}
|
|
107
|
+
return selectColumns.map((c) => `"${c}"`).join(", ");
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get all window function tools
|
|
111
|
+
*/
|
|
112
|
+
export function getWindowTools(adapter) {
|
|
113
|
+
return [
|
|
114
|
+
createRowNumberTool(adapter),
|
|
115
|
+
createRankTool(adapter),
|
|
116
|
+
createLagLeadTool(adapter),
|
|
117
|
+
createRunningTotalTool(adapter),
|
|
118
|
+
createMovingAverageTool(adapter),
|
|
119
|
+
createNtileTool(adapter),
|
|
120
|
+
];
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* ROW_NUMBER window function
|
|
124
|
+
*/
|
|
125
|
+
function createRowNumberTool(adapter) {
|
|
126
|
+
return {
|
|
127
|
+
name: "sqlite_window_row_number",
|
|
128
|
+
description: "Assign sequential row numbers based on ordering. Useful for pagination and ranking.",
|
|
129
|
+
group: "stats",
|
|
130
|
+
inputSchema: RowNumberSchema,
|
|
131
|
+
requiredScopes: ["read"],
|
|
132
|
+
handler: async (params, _context) => {
|
|
133
|
+
const input = RowNumberSchema.parse(params);
|
|
134
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.table)) {
|
|
135
|
+
throw new Error("Invalid table name");
|
|
136
|
+
}
|
|
137
|
+
const columns = formatColumns(input.selectColumns);
|
|
138
|
+
const partition = input.partitionBy
|
|
139
|
+
? `PARTITION BY ${input.partitionBy}`
|
|
140
|
+
: "";
|
|
141
|
+
let sql = `
|
|
142
|
+
SELECT ${columns},
|
|
143
|
+
ROW_NUMBER() OVER (${partition} ORDER BY ${input.orderBy}) as row_num
|
|
144
|
+
FROM "${input.table}"
|
|
145
|
+
`;
|
|
146
|
+
if (input.whereClause) {
|
|
147
|
+
validateWhereClause(input.whereClause);
|
|
148
|
+
sql += ` WHERE ${input.whereClause}`;
|
|
149
|
+
}
|
|
150
|
+
sql += ` LIMIT ${input.limit}`;
|
|
151
|
+
const result = await adapter.executeReadQuery(sql);
|
|
152
|
+
return {
|
|
153
|
+
success: true,
|
|
154
|
+
rowCount: result.rows?.length ?? 0,
|
|
155
|
+
rows: result.rows,
|
|
156
|
+
};
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* RANK/DENSE_RANK/PERCENT_RANK window functions
|
|
162
|
+
*/
|
|
163
|
+
function createRankTool(adapter) {
|
|
164
|
+
return {
|
|
165
|
+
name: "sqlite_window_rank",
|
|
166
|
+
description: "Calculate rank of rows. RANK leaves gaps after ties, DENSE_RANK does not, PERCENT_RANK gives 0-1 range.",
|
|
167
|
+
group: "stats",
|
|
168
|
+
inputSchema: RankSchema,
|
|
169
|
+
requiredScopes: ["read"],
|
|
170
|
+
handler: async (params, _context) => {
|
|
171
|
+
const input = RankSchema.parse(params);
|
|
172
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.table)) {
|
|
173
|
+
throw new Error("Invalid table name");
|
|
174
|
+
}
|
|
175
|
+
const columns = formatColumns(input.selectColumns);
|
|
176
|
+
const partition = input.partitionBy
|
|
177
|
+
? `PARTITION BY ${input.partitionBy}`
|
|
178
|
+
: "";
|
|
179
|
+
const rankFunc = input.rankType.toUpperCase();
|
|
180
|
+
let sql = `
|
|
181
|
+
SELECT ${columns},
|
|
182
|
+
${rankFunc}() OVER (${partition} ORDER BY ${input.orderBy}) as rank_value
|
|
183
|
+
FROM "${input.table}"
|
|
184
|
+
`;
|
|
185
|
+
if (input.whereClause) {
|
|
186
|
+
validateWhereClause(input.whereClause);
|
|
187
|
+
sql += ` WHERE ${input.whereClause}`;
|
|
188
|
+
}
|
|
189
|
+
sql += ` LIMIT ${input.limit}`;
|
|
190
|
+
const result = await adapter.executeReadQuery(sql);
|
|
191
|
+
return {
|
|
192
|
+
success: true,
|
|
193
|
+
rankType: input.rankType,
|
|
194
|
+
rowCount: result.rows?.length ?? 0,
|
|
195
|
+
rows: result.rows,
|
|
196
|
+
};
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* LAG/LEAD window functions
|
|
202
|
+
*/
|
|
203
|
+
function createLagLeadTool(adapter) {
|
|
204
|
+
return {
|
|
205
|
+
name: "sqlite_window_lag_lead",
|
|
206
|
+
description: "Access previous (LAG) or next (LEAD) row values. Useful for comparing consecutive rows.",
|
|
207
|
+
group: "stats",
|
|
208
|
+
inputSchema: LagLeadSchema,
|
|
209
|
+
requiredScopes: ["read"],
|
|
210
|
+
handler: async (params, _context) => {
|
|
211
|
+
const input = LagLeadSchema.parse(params);
|
|
212
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.table)) {
|
|
213
|
+
throw new Error("Invalid table name");
|
|
214
|
+
}
|
|
215
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.column)) {
|
|
216
|
+
throw new Error("Invalid column name");
|
|
217
|
+
}
|
|
218
|
+
const columns = formatColumns(input.selectColumns);
|
|
219
|
+
const partition = input.partitionBy
|
|
220
|
+
? `PARTITION BY ${input.partitionBy}`
|
|
221
|
+
: "";
|
|
222
|
+
const func = input.direction.toUpperCase();
|
|
223
|
+
const defaultVal = input.defaultValue !== undefined ? `, ${input.defaultValue}` : "";
|
|
224
|
+
let sql = `
|
|
225
|
+
SELECT ${columns},
|
|
226
|
+
${func}("${input.column}", ${input.offset}${defaultVal}) OVER (${partition} ORDER BY ${input.orderBy}) as ${input.direction}_value
|
|
227
|
+
FROM "${input.table}"
|
|
228
|
+
`;
|
|
229
|
+
if (input.whereClause) {
|
|
230
|
+
validateWhereClause(input.whereClause);
|
|
231
|
+
sql += ` WHERE ${input.whereClause}`;
|
|
232
|
+
}
|
|
233
|
+
sql += ` LIMIT ${input.limit}`;
|
|
234
|
+
const result = await adapter.executeReadQuery(sql);
|
|
235
|
+
return {
|
|
236
|
+
success: true,
|
|
237
|
+
direction: input.direction,
|
|
238
|
+
offset: input.offset,
|
|
239
|
+
rowCount: result.rows?.length ?? 0,
|
|
240
|
+
rows: result.rows,
|
|
241
|
+
};
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Running total (cumulative SUM)
|
|
247
|
+
*/
|
|
248
|
+
function createRunningTotalTool(adapter) {
|
|
249
|
+
return {
|
|
250
|
+
name: "sqlite_window_running_total",
|
|
251
|
+
description: "Calculate running (cumulative) total. Useful for balance tracking, cumulative metrics.",
|
|
252
|
+
group: "stats",
|
|
253
|
+
inputSchema: RunningTotalSchema,
|
|
254
|
+
requiredScopes: ["read"],
|
|
255
|
+
handler: async (params, _context) => {
|
|
256
|
+
const input = RunningTotalSchema.parse(params);
|
|
257
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.table)) {
|
|
258
|
+
throw new Error("Invalid table name");
|
|
259
|
+
}
|
|
260
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.valueColumn)) {
|
|
261
|
+
throw new Error("Invalid column name");
|
|
262
|
+
}
|
|
263
|
+
const columns = formatColumns(input.selectColumns);
|
|
264
|
+
const partition = input.partitionBy
|
|
265
|
+
? `PARTITION BY ${input.partitionBy}`
|
|
266
|
+
: "";
|
|
267
|
+
let sql = `
|
|
268
|
+
SELECT ${columns},
|
|
269
|
+
SUM("${input.valueColumn}") OVER (${partition} ORDER BY ${input.orderBy} ROWS UNBOUNDED PRECEDING) as running_total
|
|
270
|
+
FROM "${input.table}"
|
|
271
|
+
`;
|
|
272
|
+
if (input.whereClause) {
|
|
273
|
+
validateWhereClause(input.whereClause);
|
|
274
|
+
sql += ` WHERE ${input.whereClause}`;
|
|
275
|
+
}
|
|
276
|
+
sql += ` LIMIT ${input.limit}`;
|
|
277
|
+
const result = await adapter.executeReadQuery(sql);
|
|
278
|
+
return {
|
|
279
|
+
success: true,
|
|
280
|
+
valueColumn: input.valueColumn,
|
|
281
|
+
rowCount: result.rows?.length ?? 0,
|
|
282
|
+
rows: result.rows,
|
|
283
|
+
};
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Moving average
|
|
289
|
+
*/
|
|
290
|
+
function createMovingAverageTool(adapter) {
|
|
291
|
+
return {
|
|
292
|
+
name: "sqlite_window_moving_avg",
|
|
293
|
+
description: "Calculate moving (rolling) average. Useful for smoothing time series data.",
|
|
294
|
+
group: "stats",
|
|
295
|
+
inputSchema: MovingAverageSchema,
|
|
296
|
+
requiredScopes: ["read"],
|
|
297
|
+
handler: async (params, _context) => {
|
|
298
|
+
const input = MovingAverageSchema.parse(params);
|
|
299
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.table)) {
|
|
300
|
+
throw new Error("Invalid table name");
|
|
301
|
+
}
|
|
302
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.valueColumn)) {
|
|
303
|
+
throw new Error("Invalid column name");
|
|
304
|
+
}
|
|
305
|
+
const columns = formatColumns(input.selectColumns);
|
|
306
|
+
const partition = input.partitionBy
|
|
307
|
+
? `PARTITION BY ${input.partitionBy}`
|
|
308
|
+
: "";
|
|
309
|
+
const preceding = input.windowSize - 1;
|
|
310
|
+
let sql = `
|
|
311
|
+
SELECT ${columns},
|
|
312
|
+
AVG("${input.valueColumn}") OVER (${partition} ORDER BY ${input.orderBy} ROWS BETWEEN ${preceding} PRECEDING AND CURRENT ROW) as moving_avg
|
|
313
|
+
FROM "${input.table}"
|
|
314
|
+
`;
|
|
315
|
+
if (input.whereClause) {
|
|
316
|
+
validateWhereClause(input.whereClause);
|
|
317
|
+
sql += ` WHERE ${input.whereClause}`;
|
|
318
|
+
}
|
|
319
|
+
sql += ` LIMIT ${input.limit}`;
|
|
320
|
+
const result = await adapter.executeReadQuery(sql);
|
|
321
|
+
return {
|
|
322
|
+
success: true,
|
|
323
|
+
valueColumn: input.valueColumn,
|
|
324
|
+
windowSize: input.windowSize,
|
|
325
|
+
rowCount: result.rows?.length ?? 0,
|
|
326
|
+
rows: result.rows,
|
|
327
|
+
};
|
|
328
|
+
},
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* NTILE (divide into buckets/quantiles)
|
|
333
|
+
*/
|
|
334
|
+
function createNtileTool(adapter) {
|
|
335
|
+
return {
|
|
336
|
+
name: "sqlite_window_ntile",
|
|
337
|
+
description: "Divide rows into N buckets. E.g., 4 buckets = quartiles, 10 = deciles, 100 = percentiles.",
|
|
338
|
+
group: "stats",
|
|
339
|
+
inputSchema: NtileSchema,
|
|
340
|
+
requiredScopes: ["read"],
|
|
341
|
+
handler: async (params, _context) => {
|
|
342
|
+
const input = NtileSchema.parse(params);
|
|
343
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.table)) {
|
|
344
|
+
throw new Error("Invalid table name");
|
|
345
|
+
}
|
|
346
|
+
const columns = formatColumns(input.selectColumns);
|
|
347
|
+
const partition = input.partitionBy
|
|
348
|
+
? `PARTITION BY ${input.partitionBy}`
|
|
349
|
+
: "";
|
|
350
|
+
let sql = `
|
|
351
|
+
SELECT ${columns},
|
|
352
|
+
NTILE(${input.buckets}) OVER (${partition} ORDER BY ${input.orderBy}) as bucket
|
|
353
|
+
FROM "${input.table}"
|
|
354
|
+
`;
|
|
355
|
+
if (input.whereClause) {
|
|
356
|
+
validateWhereClause(input.whereClause);
|
|
357
|
+
sql += ` WHERE ${input.whereClause}`;
|
|
358
|
+
}
|
|
359
|
+
sql += ` LIMIT ${input.limit}`;
|
|
360
|
+
const result = await adapter.executeReadQuery(sql);
|
|
361
|
+
return {
|
|
362
|
+
success: true,
|
|
363
|
+
buckets: input.buckets,
|
|
364
|
+
rowCount: result.rows?.length ?? 0,
|
|
365
|
+
rows: result.rows,
|
|
366
|
+
};
|
|
367
|
+
},
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window.js","sourceRoot":"","sources":["../../../../src/adapters/sqlite-native/tools/window.ts"],"names":[],"mappings":"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"}
|