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.
Files changed (208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +860 -0
  3. package/dist/adapters/DatabaseAdapter.d.ts +141 -0
  4. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -0
  5. package/dist/adapters/DatabaseAdapter.js +131 -0
  6. package/dist/adapters/DatabaseAdapter.js.map +1 -0
  7. package/dist/adapters/sqlite/SchemaManager.d.ts +58 -0
  8. package/dist/adapters/sqlite/SchemaManager.d.ts.map +1 -0
  9. package/dist/adapters/sqlite/SchemaManager.js +187 -0
  10. package/dist/adapters/sqlite/SchemaManager.js.map +1 -0
  11. package/dist/adapters/sqlite/SqliteAdapter.d.ts +161 -0
  12. package/dist/adapters/sqlite/SqliteAdapter.d.ts.map +1 -0
  13. package/dist/adapters/sqlite/SqliteAdapter.js +741 -0
  14. package/dist/adapters/sqlite/SqliteAdapter.js.map +1 -0
  15. package/dist/adapters/sqlite/index.d.ts +9 -0
  16. package/dist/adapters/sqlite/index.d.ts.map +1 -0
  17. package/dist/adapters/sqlite/index.js +8 -0
  18. package/dist/adapters/sqlite/index.js.map +1 -0
  19. package/dist/adapters/sqlite/json-utils.d.ts +100 -0
  20. package/dist/adapters/sqlite/json-utils.d.ts.map +1 -0
  21. package/dist/adapters/sqlite/json-utils.js +274 -0
  22. package/dist/adapters/sqlite/json-utils.js.map +1 -0
  23. package/dist/adapters/sqlite/output-schemas.d.ts +1187 -0
  24. package/dist/adapters/sqlite/output-schemas.d.ts.map +1 -0
  25. package/dist/adapters/sqlite/output-schemas.js +1337 -0
  26. package/dist/adapters/sqlite/output-schemas.js.map +1 -0
  27. package/dist/adapters/sqlite/prompts.d.ts +13 -0
  28. package/dist/adapters/sqlite/prompts.d.ts.map +1 -0
  29. package/dist/adapters/sqlite/prompts.js +605 -0
  30. package/dist/adapters/sqlite/prompts.js.map +1 -0
  31. package/dist/adapters/sqlite/resources.d.ts +13 -0
  32. package/dist/adapters/sqlite/resources.d.ts.map +1 -0
  33. package/dist/adapters/sqlite/resources.js +251 -0
  34. package/dist/adapters/sqlite/resources.js.map +1 -0
  35. package/dist/adapters/sqlite/tools/admin.d.ts +14 -0
  36. package/dist/adapters/sqlite/tools/admin.d.ts.map +1 -0
  37. package/dist/adapters/sqlite/tools/admin.js +788 -0
  38. package/dist/adapters/sqlite/tools/admin.js.map +1 -0
  39. package/dist/adapters/sqlite/tools/core.d.ts +25 -0
  40. package/dist/adapters/sqlite/tools/core.d.ts.map +1 -0
  41. package/dist/adapters/sqlite/tools/core.js +359 -0
  42. package/dist/adapters/sqlite/tools/core.js.map +1 -0
  43. package/dist/adapters/sqlite/tools/fts.d.ts +13 -0
  44. package/dist/adapters/sqlite/tools/fts.d.ts.map +1 -0
  45. package/dist/adapters/sqlite/tools/fts.js +347 -0
  46. package/dist/adapters/sqlite/tools/fts.js.map +1 -0
  47. package/dist/adapters/sqlite/tools/geo.d.ts +14 -0
  48. package/dist/adapters/sqlite/tools/geo.d.ts.map +1 -0
  49. package/dist/adapters/sqlite/tools/geo.js +252 -0
  50. package/dist/adapters/sqlite/tools/geo.js.map +1 -0
  51. package/dist/adapters/sqlite/tools/index.d.ts +30 -0
  52. package/dist/adapters/sqlite/tools/index.d.ts.map +1 -0
  53. package/dist/adapters/sqlite/tools/index.js +61 -0
  54. package/dist/adapters/sqlite/tools/index.js.map +1 -0
  55. package/dist/adapters/sqlite/tools/json-helpers.d.ts +14 -0
  56. package/dist/adapters/sqlite/tools/json-helpers.d.ts.map +1 -0
  57. package/dist/adapters/sqlite/tools/json-helpers.js +477 -0
  58. package/dist/adapters/sqlite/tools/json-helpers.js.map +1 -0
  59. package/dist/adapters/sqlite/tools/json-operations.d.ts +14 -0
  60. package/dist/adapters/sqlite/tools/json-operations.d.ts.map +1 -0
  61. package/dist/adapters/sqlite/tools/json-operations.js +839 -0
  62. package/dist/adapters/sqlite/tools/json-operations.js.map +1 -0
  63. package/dist/adapters/sqlite/tools/stats.d.ts +15 -0
  64. package/dist/adapters/sqlite/tools/stats.d.ts.map +1 -0
  65. package/dist/adapters/sqlite/tools/stats.js +1219 -0
  66. package/dist/adapters/sqlite/tools/stats.js.map +1 -0
  67. package/dist/adapters/sqlite/tools/text.d.ts +14 -0
  68. package/dist/adapters/sqlite/tools/text.d.ts.map +1 -0
  69. package/dist/adapters/sqlite/tools/text.js +1141 -0
  70. package/dist/adapters/sqlite/tools/text.js.map +1 -0
  71. package/dist/adapters/sqlite/tools/vector.d.ts +14 -0
  72. package/dist/adapters/sqlite/tools/vector.d.ts.map +1 -0
  73. package/dist/adapters/sqlite/tools/vector.js +613 -0
  74. package/dist/adapters/sqlite/tools/vector.js.map +1 -0
  75. package/dist/adapters/sqlite/tools/virtual.d.ts +13 -0
  76. package/dist/adapters/sqlite/tools/virtual.d.ts.map +1 -0
  77. package/dist/adapters/sqlite/tools/virtual.js +930 -0
  78. package/dist/adapters/sqlite/tools/virtual.js.map +1 -0
  79. package/dist/adapters/sqlite/types.d.ts +207 -0
  80. package/dist/adapters/sqlite/types.d.ts.map +1 -0
  81. package/dist/adapters/sqlite/types.js +186 -0
  82. package/dist/adapters/sqlite/types.js.map +1 -0
  83. package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts +163 -0
  84. package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts.map +1 -0
  85. package/dist/adapters/sqlite-native/NativeSqliteAdapter.js +748 -0
  86. package/dist/adapters/sqlite-native/NativeSqliteAdapter.js.map +1 -0
  87. package/dist/adapters/sqlite-native/index.d.ts +11 -0
  88. package/dist/adapters/sqlite-native/index.d.ts.map +1 -0
  89. package/dist/adapters/sqlite-native/index.js +11 -0
  90. package/dist/adapters/sqlite-native/index.js.map +1 -0
  91. package/dist/adapters/sqlite-native/tools/spatialite.d.ts +19 -0
  92. package/dist/adapters/sqlite-native/tools/spatialite.d.ts.map +1 -0
  93. package/dist/adapters/sqlite-native/tools/spatialite.js +628 -0
  94. package/dist/adapters/sqlite-native/tools/spatialite.js.map +1 -0
  95. package/dist/adapters/sqlite-native/tools/transactions.d.ts +12 -0
  96. package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +1 -0
  97. package/dist/adapters/sqlite-native/tools/transactions.js +255 -0
  98. package/dist/adapters/sqlite-native/tools/transactions.js.map +1 -0
  99. package/dist/adapters/sqlite-native/tools/window.d.ts +12 -0
  100. package/dist/adapters/sqlite-native/tools/window.d.ts.map +1 -0
  101. package/dist/adapters/sqlite-native/tools/window.js +370 -0
  102. package/dist/adapters/sqlite-native/tools/window.js.map +1 -0
  103. package/dist/auth/AuthorizationServerDiscovery.d.ts +90 -0
  104. package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -0
  105. package/dist/auth/AuthorizationServerDiscovery.js +204 -0
  106. package/dist/auth/AuthorizationServerDiscovery.js.map +1 -0
  107. package/dist/auth/OAuthResourceServer.d.ts +65 -0
  108. package/dist/auth/OAuthResourceServer.d.ts.map +1 -0
  109. package/dist/auth/OAuthResourceServer.js +121 -0
  110. package/dist/auth/OAuthResourceServer.js.map +1 -0
  111. package/dist/auth/TokenValidator.d.ts +60 -0
  112. package/dist/auth/TokenValidator.d.ts.map +1 -0
  113. package/dist/auth/TokenValidator.js +235 -0
  114. package/dist/auth/TokenValidator.js.map +1 -0
  115. package/dist/auth/errors.d.ts +74 -0
  116. package/dist/auth/errors.d.ts.map +1 -0
  117. package/dist/auth/errors.js +133 -0
  118. package/dist/auth/errors.js.map +1 -0
  119. package/dist/auth/index.d.ts +13 -0
  120. package/dist/auth/index.d.ts.map +1 -0
  121. package/dist/auth/index.js +15 -0
  122. package/dist/auth/index.js.map +1 -0
  123. package/dist/auth/middleware.d.ts +81 -0
  124. package/dist/auth/middleware.d.ts.map +1 -0
  125. package/dist/auth/middleware.js +291 -0
  126. package/dist/auth/middleware.js.map +1 -0
  127. package/dist/auth/scopes.d.ts +136 -0
  128. package/dist/auth/scopes.d.ts.map +1 -0
  129. package/dist/auth/scopes.js +349 -0
  130. package/dist/auth/scopes.js.map +1 -0
  131. package/dist/auth/types.d.ts +257 -0
  132. package/dist/auth/types.d.ts.map +1 -0
  133. package/dist/auth/types.js +8 -0
  134. package/dist/auth/types.js.map +1 -0
  135. package/dist/cli.d.ts +8 -0
  136. package/dist/cli.d.ts.map +1 -0
  137. package/dist/cli.js +236 -0
  138. package/dist/cli.js.map +1 -0
  139. package/dist/constants/ServerInstructions.d.ts +45 -0
  140. package/dist/constants/ServerInstructions.d.ts.map +1 -0
  141. package/dist/constants/ServerInstructions.js +356 -0
  142. package/dist/constants/ServerInstructions.js.map +1 -0
  143. package/dist/filtering/ToolConstants.d.ts +34 -0
  144. package/dist/filtering/ToolConstants.d.ts.map +1 -0
  145. package/dist/filtering/ToolConstants.js +174 -0
  146. package/dist/filtering/ToolConstants.js.map +1 -0
  147. package/dist/filtering/ToolFilter.d.ts +82 -0
  148. package/dist/filtering/ToolFilter.d.ts.map +1 -0
  149. package/dist/filtering/ToolFilter.js +296 -0
  150. package/dist/filtering/ToolFilter.js.map +1 -0
  151. package/dist/index.d.ts +13 -0
  152. package/dist/index.d.ts.map +1 -0
  153. package/dist/index.js +17 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/server/McpServer.d.ts +61 -0
  156. package/dist/server/McpServer.d.ts.map +1 -0
  157. package/dist/server/McpServer.js +270 -0
  158. package/dist/server/McpServer.js.map +1 -0
  159. package/dist/transports/http.d.ts +134 -0
  160. package/dist/transports/http.d.ts.map +1 -0
  161. package/dist/transports/http.js +516 -0
  162. package/dist/transports/http.js.map +1 -0
  163. package/dist/transports/index.d.ts +5 -0
  164. package/dist/transports/index.d.ts.map +1 -0
  165. package/dist/transports/index.js +5 -0
  166. package/dist/transports/index.js.map +1 -0
  167. package/dist/types/index.d.ts +380 -0
  168. package/dist/types/index.d.ts.map +1 -0
  169. package/dist/types/index.js +68 -0
  170. package/dist/types/index.js.map +1 -0
  171. package/dist/utils/annotations.d.ts +44 -0
  172. package/dist/utils/annotations.d.ts.map +1 -0
  173. package/dist/utils/annotations.js +77 -0
  174. package/dist/utils/annotations.js.map +1 -0
  175. package/dist/utils/errors.d.ts +155 -0
  176. package/dist/utils/errors.d.ts.map +1 -0
  177. package/dist/utils/errors.js +329 -0
  178. package/dist/utils/errors.js.map +1 -0
  179. package/dist/utils/identifiers.d.ts +121 -0
  180. package/dist/utils/identifiers.d.ts.map +1 -0
  181. package/dist/utils/identifiers.js +319 -0
  182. package/dist/utils/identifiers.js.map +1 -0
  183. package/dist/utils/index.d.ts +7 -0
  184. package/dist/utils/index.d.ts.map +1 -0
  185. package/dist/utils/index.js +7 -0
  186. package/dist/utils/index.js.map +1 -0
  187. package/dist/utils/insightsManager.d.ts +39 -0
  188. package/dist/utils/insightsManager.d.ts.map +1 -0
  189. package/dist/utils/insightsManager.js +63 -0
  190. package/dist/utils/insightsManager.js.map +1 -0
  191. package/dist/utils/logger.d.ts +189 -0
  192. package/dist/utils/logger.d.ts.map +1 -0
  193. package/dist/utils/logger.js +394 -0
  194. package/dist/utils/logger.js.map +1 -0
  195. package/dist/utils/progress-utils.d.ts +54 -0
  196. package/dist/utils/progress-utils.d.ts.map +1 -0
  197. package/dist/utils/progress-utils.js +74 -0
  198. package/dist/utils/progress-utils.js.map +1 -0
  199. package/dist/utils/resourceAnnotations.d.ts +36 -0
  200. package/dist/utils/resourceAnnotations.d.ts.map +1 -0
  201. package/dist/utils/resourceAnnotations.js +57 -0
  202. package/dist/utils/resourceAnnotations.js.map +1 -0
  203. package/dist/utils/where-clause.d.ts +41 -0
  204. package/dist/utils/where-clause.d.ts.map +1 -0
  205. package/dist/utils/where-clause.js +116 -0
  206. package/dist/utils/where-clause.js.map +1 -0
  207. package/package.json +83 -0
  208. 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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"}