mcp-server-db2i 2.0.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 (75) hide show
  1. package/README.md +11 -0
  2. package/dist/config.d.ts +104 -1
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +273 -5
  5. package/dist/config.js.map +1 -1
  6. package/dist/customTools/context.d.ts +27 -0
  7. package/dist/customTools/context.d.ts.map +1 -0
  8. package/dist/customTools/context.js +35 -0
  9. package/dist/customTools/context.js.map +1 -0
  10. package/dist/customTools/execute.d.ts +22 -0
  11. package/dist/customTools/execute.d.ts.map +1 -0
  12. package/dist/customTools/execute.js +134 -0
  13. package/dist/customTools/execute.js.map +1 -0
  14. package/dist/customTools/loader.d.ts +56 -0
  15. package/dist/customTools/loader.d.ts.map +1 -0
  16. package/dist/customTools/loader.js +213 -0
  17. package/dist/customTools/loader.js.map +1 -0
  18. package/dist/customTools/params.d.ts +23 -0
  19. package/dist/customTools/params.d.ts.map +1 -0
  20. package/dist/customTools/params.js +93 -0
  21. package/dist/customTools/params.js.map +1 -0
  22. package/dist/customTools/registry.d.ts +18 -0
  23. package/dist/customTools/registry.d.ts.map +1 -0
  24. package/dist/customTools/registry.js +23 -0
  25. package/dist/customTools/registry.js.map +1 -0
  26. package/dist/customTools/schema.d.ts +127 -0
  27. package/dist/customTools/schema.d.ts.map +1 -0
  28. package/dist/customTools/schema.js +193 -0
  29. package/dist/customTools/schema.js.map +1 -0
  30. package/dist/db/connection.d.ts +9 -0
  31. package/dist/db/connection.d.ts.map +1 -1
  32. package/dist/db/connection.js +91 -0
  33. package/dist/db/connection.js.map +1 -1
  34. package/dist/db/sqlServices.d.ts +65 -0
  35. package/dist/db/sqlServices.d.ts.map +1 -0
  36. package/dist/db/sqlServices.js +311 -0
  37. package/dist/db/sqlServices.js.map +1 -0
  38. package/dist/index.js +23 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/server.d.ts +1 -1
  41. package/dist/server.d.ts.map +1 -1
  42. package/dist/server.js +260 -104
  43. package/dist/server.js.map +1 -1
  44. package/dist/tools/metadata.d.ts +24 -12
  45. package/dist/tools/metadata.d.ts.map +1 -1
  46. package/dist/tools/metadata.js +43 -8
  47. package/dist/tools/metadata.js.map +1 -1
  48. package/dist/tools/query.d.ts +5 -0
  49. package/dist/tools/query.d.ts.map +1 -1
  50. package/dist/tools/query.js +50 -2
  51. package/dist/tools/query.js.map +1 -1
  52. package/dist/tools/sqlLimit.d.ts +5 -0
  53. package/dist/tools/sqlLimit.d.ts.map +1 -1
  54. package/dist/tools/sqlLimit.js +12 -0
  55. package/dist/tools/sqlLimit.js.map +1 -1
  56. package/dist/tools/sqlServices.d.ts +51 -0
  57. package/dist/tools/sqlServices.d.ts.map +1 -0
  58. package/dist/tools/sqlServices.js +122 -0
  59. package/dist/tools/sqlServices.js.map +1 -0
  60. package/dist/transports/http.d.ts.map +1 -1
  61. package/dist/transports/http.js +40 -1
  62. package/dist/transports/http.js.map +1 -1
  63. package/dist/utils/formatResult.d.ts +22 -0
  64. package/dist/utils/formatResult.d.ts.map +1 -0
  65. package/dist/utils/formatResult.js +66 -0
  66. package/dist/utils/formatResult.js.map +1 -0
  67. package/dist/utils/security/schemaAllowlist.d.ts +27 -0
  68. package/dist/utils/security/schemaAllowlist.d.ts.map +1 -0
  69. package/dist/utils/security/schemaAllowlist.js +156 -0
  70. package/dist/utils/security/schemaAllowlist.js.map +1 -0
  71. package/dist/utils/security/sqlSecurityValidator.d.ts +0 -4
  72. package/dist/utils/security/sqlSecurityValidator.d.ts.map +1 -1
  73. package/dist/utils/security/sqlSecurityValidator.js +134 -38
  74. package/dist/utils/security/sqlSecurityValidator.js.map +1 -1
  75. package/package.json +2 -1
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Process-wide custom tools, loaded once at startup.
3
+ */
4
+ const EMPTY = { tools: [], annotations: [] };
5
+ let current = EMPTY;
6
+ const parseCache = new Map();
7
+ export function cachedParse(toolName) {
8
+ return parseCache.get(toolName);
9
+ }
10
+ export function cacheParse(toolName, outcome) {
11
+ parseCache.set(toolName, outcome);
12
+ }
13
+ export function setCustomTools(loaded) {
14
+ current = loaded;
15
+ parseCache.clear();
16
+ }
17
+ export function getCustomTools() {
18
+ return current;
19
+ }
20
+ export function resetCustomTools() {
21
+ setCustomTools(EMPTY);
22
+ }
23
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/customTools/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,KAAK,GAAsB,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAEhE,IAAI,OAAO,GAAsB,KAAK,CAAC;AAMvC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEnD,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,OAAqB;IAChE,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAyB;IACtD,OAAO,GAAG,MAAM,CAAC;IACjB,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,cAAc,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * File format for business SQL tools and table annotations.
3
+ */
4
+ import { z } from 'zod';
5
+ export declare const parameterSchema: z.ZodObject<{
6
+ type: z.ZodEnum<{
7
+ string: "string";
8
+ number: "number";
9
+ boolean: "boolean";
10
+ integer: "integer";
11
+ date: "date";
12
+ enum: "enum";
13
+ }>;
14
+ required: z.ZodOptional<z.ZodBoolean>;
15
+ maxLength: z.ZodOptional<z.ZodNumber>;
16
+ description: z.ZodOptional<z.ZodString>;
17
+ enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ default: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
19
+ }, z.core.$strict>;
20
+ export type ParameterDef = z.infer<typeof parameterSchema>;
21
+ export declare const relationSchema: z.ZodObject<{
22
+ table: z.ZodString;
23
+ join: z.ZodRecord<z.ZodString, z.ZodString>;
24
+ cardinality: z.ZodOptional<z.ZodEnum<{
25
+ "one-to-one": "one-to-one";
26
+ "one-to-many": "one-to-many";
27
+ "many-to-one": "many-to-one";
28
+ "many-to-many": "many-to-many";
29
+ }>>;
30
+ description: z.ZodOptional<z.ZodString>;
31
+ }, z.core.$strict>;
32
+ export type RelationDef = z.infer<typeof relationSchema>;
33
+ export declare const annotationSchema: z.ZodObject<{
34
+ entity: z.ZodOptional<z.ZodString>;
35
+ description: z.ZodOptional<z.ZodString>;
36
+ columns: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
37
+ relations: z.ZodOptional<z.ZodArray<z.ZodObject<{
38
+ table: z.ZodString;
39
+ join: z.ZodRecord<z.ZodString, z.ZodString>;
40
+ cardinality: z.ZodOptional<z.ZodEnum<{
41
+ "one-to-one": "one-to-one";
42
+ "one-to-many": "one-to-many";
43
+ "many-to-one": "many-to-one";
44
+ "many-to-many": "many-to-many";
45
+ }>>;
46
+ description: z.ZodOptional<z.ZodString>;
47
+ }, z.core.$strict>>>;
48
+ }, z.core.$strict>;
49
+ export type AnnotationDef = z.infer<typeof annotationSchema>;
50
+ export declare const toolSchema: z.ZodObject<{
51
+ name: z.ZodString;
52
+ title: z.ZodString;
53
+ toolset: z.ZodOptional<z.ZodString>;
54
+ description: z.ZodString;
55
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
56
+ type: z.ZodEnum<{
57
+ string: "string";
58
+ number: "number";
59
+ boolean: "boolean";
60
+ integer: "integer";
61
+ date: "date";
62
+ enum: "enum";
63
+ }>;
64
+ required: z.ZodOptional<z.ZodBoolean>;
65
+ maxLength: z.ZodOptional<z.ZodNumber>;
66
+ description: z.ZodOptional<z.ZodString>;
67
+ enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
68
+ default: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
69
+ }, z.core.$strict>>>;
70
+ maxRows: z.ZodOptional<z.ZodNumber>;
71
+ sql: z.ZodString;
72
+ }, z.core.$strict>;
73
+ export type ToolDef = z.infer<typeof toolSchema>;
74
+ export declare const customToolsFileSchema: z.ZodObject<{
75
+ version: z.ZodLiteral<1>;
76
+ tools: z.ZodOptional<z.ZodArray<z.ZodObject<{
77
+ name: z.ZodString;
78
+ title: z.ZodString;
79
+ toolset: z.ZodOptional<z.ZodString>;
80
+ description: z.ZodString;
81
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
82
+ type: z.ZodEnum<{
83
+ string: "string";
84
+ number: "number";
85
+ boolean: "boolean";
86
+ integer: "integer";
87
+ date: "date";
88
+ enum: "enum";
89
+ }>;
90
+ required: z.ZodOptional<z.ZodBoolean>;
91
+ maxLength: z.ZodOptional<z.ZodNumber>;
92
+ description: z.ZodOptional<z.ZodString>;
93
+ enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
94
+ default: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
95
+ }, z.core.$strict>>>;
96
+ maxRows: z.ZodOptional<z.ZodNumber>;
97
+ sql: z.ZodString;
98
+ }, z.core.$strict>>>;
99
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
100
+ entity: z.ZodOptional<z.ZodString>;
101
+ description: z.ZodOptional<z.ZodString>;
102
+ columns: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
103
+ relations: z.ZodOptional<z.ZodArray<z.ZodObject<{
104
+ table: z.ZodString;
105
+ join: z.ZodRecord<z.ZodString, z.ZodString>;
106
+ cardinality: z.ZodOptional<z.ZodEnum<{
107
+ "one-to-one": "one-to-one";
108
+ "one-to-many": "one-to-many";
109
+ "many-to-one": "many-to-one";
110
+ "many-to-many": "many-to-many";
111
+ }>>;
112
+ description: z.ZodOptional<z.ZodString>;
113
+ }, z.core.$strict>>>;
114
+ }, z.core.$strict>>>;
115
+ }, z.core.$strict>;
116
+ export type CustomToolsFile = z.infer<typeof customToolsFileSchema>;
117
+ /**
118
+ * A default makes the argument optional. Otherwise it is required unless required is false.
119
+ * An omitted optional argument is bound as NULL.
120
+ */
121
+ export declare function parameterIsOptional(param: ParameterDef): boolean;
122
+ /**
123
+ * MCP input schema for one tool. Optional arguments accept null, which binds as NULL.
124
+ */
125
+ export declare function inputSchemaFor(parameters: Record<string, ParameterDef>): z.ZodObject;
126
+ export declare function formatSchemaIssues(error: z.ZodError): string;
127
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/customTools/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;kBAyF1B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE3D,eAAO,MAAM,cAAc;;;;;;;;;;kBAazB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEzD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;kBAQ3B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE7D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;kBAWrB,CAAC;AAEH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEjD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgBhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAKhE;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,SAAS,CA6BpF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAO5D"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * File format for business SQL tools and table annotations.
3
+ */
4
+ import { z } from 'zod';
5
+ const TOOL_NAME = /^[a-z][a-z0-9_]{0,63}$/;
6
+ const PARAM_NAME = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/;
7
+ const SQL_NAME = /^[A-Za-z_@#$][A-Za-z0-9_@#$]{0,127}$/;
8
+ const TABLE_REF = /^[A-Za-z_@#$][A-Za-z0-9_@#$]{0,127}\.[A-Za-z_@#$][A-Za-z0-9_@#$]{0,127}$/;
9
+ const DATE_TEXT = /^\d{4}-\d{2}-\d{2}$/;
10
+ export const parameterSchema = z.strictObject({
11
+ type: z.enum(['string', 'integer', 'number', 'boolean', 'date', 'enum']),
12
+ required: z.boolean().optional(),
13
+ maxLength: z.number().int().positive().optional(),
14
+ description: z.string().min(1).optional(),
15
+ enum: z.array(z.string().min(1)).min(1).optional(),
16
+ default: z.union([z.string(), z.number(), z.boolean()]).optional(),
17
+ }).superRefine((param, ctx) => {
18
+ const allowsEnum = param.type === 'string' || param.type === 'enum';
19
+ if (param.type === 'enum' && !param.enum) {
20
+ ctx.addIssue({
21
+ code: 'custom',
22
+ message: 'enum parameters need a list of values',
23
+ path: ['enum'],
24
+ });
25
+ }
26
+ if (param.enum && !allowsEnum) {
27
+ ctx.addIssue({
28
+ code: 'custom',
29
+ message: 'enum is only valid for string and enum parameters',
30
+ path: ['enum'],
31
+ });
32
+ }
33
+ if (param.maxLength !== undefined && param.type !== 'string') {
34
+ ctx.addIssue({
35
+ code: 'custom',
36
+ message: 'maxLength is only valid for string parameters',
37
+ path: ['maxLength'],
38
+ });
39
+ }
40
+ if (param.default === undefined) {
41
+ return;
42
+ }
43
+ if (param.enum && (typeof param.default !== 'string' || !param.enum.includes(param.default))) {
44
+ ctx.addIssue({
45
+ code: 'custom',
46
+ message: 'default must be one of the enum values',
47
+ path: ['default'],
48
+ });
49
+ }
50
+ if ((param.type === 'string' || param.type === 'enum') && typeof param.default !== 'string') {
51
+ ctx.addIssue({
52
+ code: 'custom',
53
+ message: 'default must be a string',
54
+ path: ['default'],
55
+ });
56
+ }
57
+ if (param.type === 'integer' && (typeof param.default !== 'number' || !Number.isInteger(param.default))) {
58
+ ctx.addIssue({
59
+ code: 'custom',
60
+ message: 'default must be an integer',
61
+ path: ['default'],
62
+ });
63
+ }
64
+ if (param.type === 'number' && typeof param.default !== 'number') {
65
+ ctx.addIssue({
66
+ code: 'custom',
67
+ message: 'default must be a number',
68
+ path: ['default'],
69
+ });
70
+ }
71
+ if (param.type === 'boolean' && typeof param.default !== 'boolean') {
72
+ ctx.addIssue({
73
+ code: 'custom',
74
+ message: 'default must be a boolean',
75
+ path: ['default'],
76
+ });
77
+ }
78
+ if (param.type === 'date' && (typeof param.default !== 'string' || !DATE_TEXT.test(param.default))) {
79
+ ctx.addIssue({
80
+ code: 'custom',
81
+ message: 'default must be a date as YYYY-MM-DD',
82
+ path: ['default'],
83
+ });
84
+ }
85
+ if (param.type === 'string' &&
86
+ typeof param.default === 'string' &&
87
+ param.maxLength !== undefined &&
88
+ param.default.length > param.maxLength) {
89
+ ctx.addIssue({
90
+ code: 'custom',
91
+ message: 'default is longer than maxLength',
92
+ path: ['default'],
93
+ });
94
+ }
95
+ });
96
+ export const relationSchema = z.strictObject({
97
+ table: z.string().regex(TABLE_REF, 'Relation table must be SCHEMA.TABLE'),
98
+ join: z.record(z.string().regex(SQL_NAME, 'Join column must be an unquoted SQL name'), z.string().regex(SQL_NAME, 'Join column must be an unquoted SQL name')),
99
+ cardinality: z.enum(['one-to-one', 'one-to-many', 'many-to-one', 'many-to-many']).optional(),
100
+ description: z.string().min(1).optional(),
101
+ }).superRefine((relation, ctx) => {
102
+ if (Object.keys(relation.join).length === 0) {
103
+ ctx.addIssue({
104
+ code: 'custom',
105
+ message: 'join needs at least one column pair',
106
+ path: ['join'],
107
+ });
108
+ }
109
+ });
110
+ export const annotationSchema = z.strictObject({
111
+ entity: z.string().regex(TOOL_NAME, 'Entity name must be snake_case').optional(),
112
+ description: z.string().min(1).optional(),
113
+ columns: z.record(z.string().regex(SQL_NAME, 'Column name must be an unquoted SQL name'), z.string().min(1)).optional(),
114
+ relations: z.array(relationSchema).optional(),
115
+ });
116
+ export const toolSchema = z.strictObject({
117
+ name: z.string().regex(TOOL_NAME, 'Tool name must be snake_case'),
118
+ title: z.string().min(1),
119
+ toolset: z.string().regex(TOOL_NAME, 'Toolset must be snake_case').optional(),
120
+ description: z.string().min(1),
121
+ parameters: z.record(z.string().regex(PARAM_NAME, 'Parameter name must use letters, digits, and underscores'), parameterSchema).optional(),
122
+ maxRows: z.number().int().positive().optional(),
123
+ sql: z.string().min(1),
124
+ });
125
+ export const customToolsFileSchema = z.strictObject({
126
+ version: z.literal(1),
127
+ tools: z.array(toolSchema).optional(),
128
+ annotations: z.record(z.string().regex(TABLE_REF, 'Annotation key must be SCHEMA.TABLE'), annotationSchema).optional(),
129
+ }).superRefine((file, ctx) => {
130
+ const toolCount = file.tools?.length ?? 0;
131
+ const annotationCount = file.annotations ? Object.keys(file.annotations).length : 0;
132
+ if (toolCount === 0 && annotationCount === 0) {
133
+ ctx.addIssue({
134
+ code: 'custom',
135
+ message: 'Add at least one tool or annotation',
136
+ });
137
+ }
138
+ });
139
+ /**
140
+ * A default makes the argument optional. Otherwise it is required unless required is false.
141
+ * An omitted optional argument is bound as NULL.
142
+ */
143
+ export function parameterIsOptional(param) {
144
+ if (param.default !== undefined) {
145
+ return true;
146
+ }
147
+ return param.required === false;
148
+ }
149
+ const DATE_PARAM = z.string().regex(DATE_TEXT, 'Expected a date as YYYY-MM-DD');
150
+ /**
151
+ * MCP input schema for one tool. Optional arguments accept null, which binds as NULL.
152
+ */
153
+ export function inputSchemaFor(parameters) {
154
+ const shape = {};
155
+ for (const [name, param] of Object.entries(parameters)) {
156
+ let field;
157
+ if ((param.type === 'string' || param.type === 'enum') && param.enum && param.enum.length > 0) {
158
+ field = z.enum(param.enum);
159
+ }
160
+ else if (param.type === 'string' || param.type === 'enum') {
161
+ field = param.maxLength ? z.string().max(param.maxLength) : z.string();
162
+ }
163
+ else if (param.type === 'integer') {
164
+ field = z.number().int();
165
+ }
166
+ else if (param.type === 'number') {
167
+ field = z.number();
168
+ }
169
+ else if (param.type === 'boolean') {
170
+ field = z.boolean();
171
+ }
172
+ else {
173
+ field = DATE_PARAM;
174
+ }
175
+ if (param.description) {
176
+ field = field.describe(param.description);
177
+ }
178
+ if (parameterIsOptional(param)) {
179
+ field = field.nullish();
180
+ }
181
+ shape[name] = field;
182
+ }
183
+ return z.object(shape);
184
+ }
185
+ export function formatSchemaIssues(error) {
186
+ return error.issues
187
+ .map((issue) => {
188
+ const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : '';
189
+ return `${path}${issue.message}`;
190
+ })
191
+ .join('; ');
192
+ }
193
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/customTools/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAC3C,MAAM,UAAU,GAAG,+BAA+B,CAAC;AACnD,MAAM,QAAQ,GAAG,sCAAsC,CAAC;AACxD,MAAM,SAAS,GAAG,0EAA0E,CAAC;AAC7F,MAAM,SAAS,GAAG,qBAAqB,CAAC;AAExC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,YAAY,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;CACnE,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;IACpE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACzC,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,uCAAuC;YAChD,IAAI,EAAE,CAAC,MAAM,CAAC;SACf,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,mDAAmD;YAC5D,IAAI,EAAE,CAAC,MAAM,CAAC;SACf,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7D,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,+CAA+C;YACxD,IAAI,EAAE,CAAC,WAAW,CAAC;SACpB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC7F,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,wCAAwC;YACjD,IAAI,EAAE,CAAC,SAAS,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5F,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,0BAA0B;YACnC,IAAI,EAAE,CAAC,SAAS,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACxG,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,4BAA4B;YACrC,IAAI,EAAE,CAAC,SAAS,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjE,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,0BAA0B;YACnC,IAAI,EAAE,CAAC,SAAS,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnE,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,2BAA2B;YACpC,IAAI,EAAE,CAAC,SAAS,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACnG,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,sCAAsC;YAC/C,IAAI,EAAE,CAAC,SAAS,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;IACD,IACE,KAAK,CAAC,IAAI,KAAK,QAAQ;QACvB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,EACtC,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,kCAAkC;YAC3C,IAAI,EAAE,CAAC,SAAS,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,qCAAqC,CAAC;IACzE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,0CAA0C,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC;IAC9J,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;IAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,qCAAqC;YAC9C,IAAI,EAAE,CAAC,MAAM,CAAC;SACf,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,gCAAgC,CAAC,CAAC,QAAQ,EAAE;IAChF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,CACf,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,0CAA0C,CAAC,EACtE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAClB,CAAC,QAAQ,EAAE;IACZ,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,8BAA8B,CAAC;IACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC,QAAQ,EAAE;IAC7E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,CAClB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0DAA0D,CAAC,EACxF,eAAe,CAChB,CAAC,QAAQ,EAAE;IACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC/C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACvB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;IACrC,WAAW,EAAE,CAAC,CAAC,MAAM,CACnB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,qCAAqC,CAAC,EAClE,gBAAgB,CACjB,CAAC,QAAQ,EAAE;CACb,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,IAAI,SAAS,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,qCAAqC;SAC/C,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAIH;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAmB;IACrD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;AAEhF;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAwC;IACrE,MAAM,KAAK,GAA8B,EAAE,CAAC;IAE5C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACvD,IAAI,KAAgB,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9F,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAA6B,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5D,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACzE,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACrB,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,UAAU,CAAC;QACrB,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,OAAO,KAAK,CAAC,MAAM;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -58,6 +58,15 @@ export declare function closeGlobalPool(): Promise<void>;
58
58
  * @param sessionId - Optional session ID for HTTP transport
59
59
  */
60
60
  export declare function executeQuery(sql: string, params?: unknown[], sessionId?: string): Promise<QueryResult>;
61
+ /**
62
+ * Run a statement on the procedure pool and return its result set.
63
+ * Used for QSYS2.GENERATE_SQL, which a read-only connection rejects.
64
+ *
65
+ * @param sql - Statement to execute. Callers must not pass user SQL text.
66
+ * @param params - Statement parameters
67
+ * @param sessionId - Optional session ID for HTTP transport
68
+ */
69
+ export declare function executeProcedure(sql: string, params?: unknown[], sessionId?: string): Promise<QueryResult>;
61
70
  /**
62
71
  * Test the global database connection (for stdio transport)
63
72
  */
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC;CACH;AAQD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAUvD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkBjF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBvE;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc1D;AAED;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAoDD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAgBtB;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAUvD;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU/E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC;CACH;AAeD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAWvD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAmBjF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBvE;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc1D;AAED;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBrD;AAsGD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAgBtB;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAiBtB;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAUvD;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU/E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
@@ -11,14 +11,21 @@ import { createChildLogger } from '../utils/logger.js';
11
11
  const log = createChildLogger({ component: 'database' });
12
12
  // Global pool for stdio transport (backwards compatible)
13
13
  let globalPool = null;
14
+ let globalConfig = null;
14
15
  // Session pools for HTTP transport (keyed by session/token ID)
15
16
  const sessionPools = new Map();
17
+ const sessionConfigs = new Map();
18
+ // QSYS2.GENERATE_SQL is rejected on a read-only connection, so DDL generation
19
+ // uses a second pool that omits JDBC `access`. That pool runs only the CALL.
20
+ let globalProcedurePool = null;
21
+ const sessionProcedurePools = new Map();
16
22
  /**
17
23
  * Initialize the global connection pool (for stdio transport)
18
24
  *
19
25
  * Safe to call multiple times - will skip if pool already exists.
20
26
  */
21
27
  export function initializePool(config) {
28
+ globalConfig = config;
22
29
  if (globalPool) {
23
30
  log.debug({ hostname: config.hostname }, 'Global pool already exists, skipping initialization');
24
31
  return;
@@ -35,6 +42,7 @@ export function initializePool(config) {
35
42
  * @param config - DB2i configuration for this session
36
43
  */
37
44
  export function initializeSessionPool(sessionId, config) {
45
+ sessionConfigs.set(sessionId, config);
38
46
  // Don't recreate if already exists
39
47
  if (sessionPools.has(sessionId)) {
40
48
  log.debug({ sessionId: sessionId.substring(0, 8) }, 'Session pool already exists');
@@ -53,6 +61,8 @@ export function initializeSessionPool(sessionId, config) {
53
61
  * @returns Promise that resolves when the pool is closed
54
62
  */
55
63
  export async function closeSessionPool(sessionId) {
64
+ await closeNamedPool(sessionProcedurePools, sessionId, 'Session procedure pool');
65
+ sessionConfigs.delete(sessionId);
56
66
  const sessionPool = sessionPools.get(sessionId);
57
67
  if (sessionPool) {
58
68
  try {
@@ -88,6 +98,19 @@ export async function closeAllSessionPools() {
88
98
  * @returns Promise that resolves when the pool is closed
89
99
  */
90
100
  export async function closeGlobalPool() {
101
+ if (globalProcedurePool) {
102
+ try {
103
+ await globalProcedurePool.close();
104
+ log.info('Procedure connection pool closed');
105
+ }
106
+ catch (err) {
107
+ log.warn({ err }, 'Error closing procedure connection pool');
108
+ }
109
+ finally {
110
+ globalProcedurePool = null;
111
+ }
112
+ }
113
+ globalConfig = null;
91
114
  if (globalPool) {
92
115
  try {
93
116
  await globalPool.close();
@@ -130,6 +153,51 @@ function getPool(sessionId) {
130
153
  }
131
154
  return getGlobalPool();
132
155
  }
156
+ async function closeNamedPool(pools, key, label) {
157
+ const current = pools.get(key);
158
+ if (!current) {
159
+ return;
160
+ }
161
+ try {
162
+ await current.close();
163
+ log.info({ sessionId: key.substring(0, 8) }, `${label} closed`);
164
+ }
165
+ catch (err) {
166
+ log.warn({ err, sessionId: key.substring(0, 8) }, `Error closing ${label}`);
167
+ }
168
+ finally {
169
+ pools.delete(key);
170
+ }
171
+ }
172
+ /**
173
+ * Pool for QSYS2.GENERATE_SQL. Created on first use from the same credentials
174
+ * as the query pool, without JDBC read-only access.
175
+ */
176
+ function getProcedurePool(sessionId) {
177
+ if (sessionId) {
178
+ const existing = sessionProcedurePools.get(sessionId);
179
+ if (existing) {
180
+ return existing;
181
+ }
182
+ const config = sessionConfigs.get(sessionId);
183
+ if (!config) {
184
+ throw new Error(`Session pool not found for session: ${sessionId.substring(0, 8)}...`);
185
+ }
186
+ const created = pool(buildConnectionConfig(config, { readOnly: false }));
187
+ sessionProcedurePools.set(sessionId, created);
188
+ log.info({ sessionId: sessionId.substring(0, 8) }, 'Session procedure pool created');
189
+ return created;
190
+ }
191
+ if (globalProcedurePool) {
192
+ return globalProcedurePool;
193
+ }
194
+ if (!globalConfig) {
195
+ throw new Error('Global connection pool not initialized. Call initializePool first.');
196
+ }
197
+ globalProcedurePool = pool(buildConnectionConfig(globalConfig, { readOnly: false }));
198
+ log.info('Procedure connection pool created');
199
+ return globalProcedurePool;
200
+ }
133
201
  /**
134
202
  * Convert unknown params to Param type, filtering out undefined
135
203
  */
@@ -172,6 +240,29 @@ export async function executeQuery(sql, params = [], sessionId) {
172
240
  throw new Error(`Database query failed: ${message}`);
173
241
  }
174
242
  }
243
+ /**
244
+ * Run a statement on the procedure pool and return its result set.
245
+ * Used for QSYS2.GENERATE_SQL, which a read-only connection rejects.
246
+ *
247
+ * @param sql - Statement to execute. Callers must not pass user SQL text.
248
+ * @param params - Statement parameters
249
+ * @param sessionId - Optional session ID for HTTP transport
250
+ */
251
+ export async function executeProcedure(sql, params = [], sessionId) {
252
+ const db = getProcedurePool(sessionId);
253
+ try {
254
+ log.debug({ sql: sql.substring(0, 200), paramCount: params.length, sessionId: sessionId?.substring(0, 8) }, 'Executing procedure');
255
+ const results = await db.query(sql, toParams(params));
256
+ const rows = results;
257
+ log.debug({ rowCount: rows.length }, 'Procedure completed');
258
+ return { rows };
259
+ }
260
+ catch (error) {
261
+ const message = error instanceof Error ? error.message : 'Unknown database error';
262
+ log.debug({ err: error, sql: sql.substring(0, 200) }, 'Procedure call failed');
263
+ throw new Error(`Database query failed: ${message}`);
264
+ }
265
+ }
175
266
  /**
176
267
  * Test the global database connection (for stdio transport)
177
268
  */
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * IBM i SQL services used by validate_query, get_object_ddl, and get_related_objects.
3
+ *
4
+ * PARSE_STATEMENT and RELATED_OBJECTS run on the read-only query pool.
5
+ * GENERATE_SQL runs on the procedure pool because a read-only connection rejects it.
6
+ */
7
+ export declare const SQL_OBJECT_TYPES: readonly ["TABLE", "VIEW", "INDEX", "ALIAS", "TRIGGER", "FUNCTION", "PROCEDURE", "SEQUENCE"];
8
+ export type SqlObjectType = (typeof SQL_OBJECT_TYPES)[number];
9
+ export interface ParsedName {
10
+ nameType: string;
11
+ schema: string | null;
12
+ name: string | null;
13
+ columnName: string | null;
14
+ statementType: string | null;
15
+ }
16
+ export interface RelatedObject {
17
+ sql_object_type: string;
18
+ schema_name: string | null;
19
+ sql_name: string | null;
20
+ library_name: string | null;
21
+ system_name: string | null;
22
+ object_text: string | null;
23
+ }
24
+ export interface StatementInspection {
25
+ /** False when PARSE_STATEMENT returned no rows. */
26
+ parsed: boolean;
27
+ statementType: string | null;
28
+ missingTables: string[];
29
+ missingColumns: string[];
30
+ missingRoutines: string[];
31
+ violations: string[];
32
+ }
33
+ export interface InspectOptions {
34
+ sessionId?: string;
35
+ /** Schema unqualified names resolve to. */
36
+ defaultSchema?: string;
37
+ /** Uppercased allowlist. Unset means no restriction. */
38
+ allowedSchemas?: string[];
39
+ }
40
+ export declare function clearRoutineCache(): void;
41
+ /**
42
+ * True when the failure is QSYS2.PARSE_STATEMENT missing (SQL0204), rather than
43
+ * a statement that parsed to no rows.
44
+ */
45
+ export declare function isParseStatementMissing(error: unknown): boolean;
46
+ /**
47
+ * Reject names that are not safe to embed in the GENERATE_SQL call.
48
+ * The procedure's named arguments are literals, not parameter markers.
49
+ */
50
+ export declare function requireSqlName(value: string, label: string): string;
51
+ export declare function parseStatement(sql: string, sessionId?: string): Promise<ParsedName[]>;
52
+ export declare function hasRoutine(schema: string, name: string, sessionId?: string): Promise<boolean>;
53
+ /**
54
+ * Parse a statement and check the names it uses against the catalog.
55
+ * Does not run the statement. Throws when PARSE_STATEMENT itself is missing.
56
+ */
57
+ export declare function inspectStatement(sql: string, options?: InspectOptions): Promise<StatementInspection>;
58
+ export declare function generateObjectDdl(input: {
59
+ schema: string;
60
+ objectName: string;
61
+ objectType: string;
62
+ sessionId?: string;
63
+ }): Promise<string>;
64
+ export declare function listRelatedObjects(schema: string, table: string, sessionId?: string): Promise<RelatedObject[]>;
65
+ //# sourceMappingURL=sqlServices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlServices.d.ts","sourceRoot":"","sources":["../../src/db/sqlServices.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,gBAAgB,8FASnB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAY9D,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAeD,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAkBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAS3F;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBnG;AAkCD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA4K9G;AA2BD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBlB;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAgB1B"}