@reasoningco/infer 0.1.0 → 0.1.2
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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +20 -0
- package/dist/llm.js.map +1 -1
- package/dist/query-validator.d.ts.map +1 -1
- package/dist/query-validator.js +144 -8
- package/dist/query-validator.js.map +1 -1
- package/dist/schemas.d.ts +153 -24
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +16 -4
- package/dist/schemas.js.map +1 -1
- package/dist/sql-builder.d.ts.map +1 -1
- package/dist/sql-builder.js +108 -7
- package/dist/sql-builder.js.map +1 -1
- package/dist/sql-validator.d.ts.map +1 -1
- package/dist/sql-validator.js +8 -1
- package/dist/sql-validator.js.map +1 -1
- package/dist/types.d.ts +35 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/schemas.d.ts
CHANGED
|
@@ -6,11 +6,11 @@ export declare const FilterSchema: z.ZodObject<{
|
|
|
6
6
|
}, "strip", z.ZodTypeAny, {
|
|
7
7
|
value: string | number | boolean | (string | number)[];
|
|
8
8
|
field: string;
|
|
9
|
-
op: "=" | "
|
|
9
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
10
10
|
}, {
|
|
11
11
|
value: string | number | boolean | (string | number)[];
|
|
12
12
|
field: string;
|
|
13
|
-
op: "=" | "
|
|
13
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
14
14
|
}>;
|
|
15
15
|
export declare const EntityFilterSchema: z.ZodObject<{
|
|
16
16
|
resolver: z.ZodString;
|
|
@@ -25,6 +25,45 @@ export declare const EntityFilterSchema: z.ZodObject<{
|
|
|
25
25
|
resolver: string;
|
|
26
26
|
outputColumn: string;
|
|
27
27
|
}>;
|
|
28
|
+
export declare const ExistsFilterSchema: z.ZodObject<{
|
|
29
|
+
mode: z.ZodEnum<["exists", "not_exists"]>;
|
|
30
|
+
dataset: z.ZodString;
|
|
31
|
+
joinColumn: z.ZodString;
|
|
32
|
+
foreignColumn: z.ZodString;
|
|
33
|
+
filters: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
34
|
+
field: z.ZodString;
|
|
35
|
+
op: z.ZodEnum<["=", "!=", ">", "<", ">=", "<=", "in", "not_in", "like", "ilike", "is_null", "is_not_null"]>;
|
|
36
|
+
value: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">]>;
|
|
37
|
+
}, "strip", z.ZodTypeAny, {
|
|
38
|
+
value: string | number | boolean | (string | number)[];
|
|
39
|
+
field: string;
|
|
40
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
41
|
+
}, {
|
|
42
|
+
value: string | number | boolean | (string | number)[];
|
|
43
|
+
field: string;
|
|
44
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
45
|
+
}>, "many">>>;
|
|
46
|
+
}, "strip", z.ZodTypeAny, {
|
|
47
|
+
mode: "not_exists" | "exists";
|
|
48
|
+
dataset: string;
|
|
49
|
+
joinColumn: string;
|
|
50
|
+
foreignColumn: string;
|
|
51
|
+
filters: {
|
|
52
|
+
value: string | number | boolean | (string | number)[];
|
|
53
|
+
field: string;
|
|
54
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
55
|
+
}[];
|
|
56
|
+
}, {
|
|
57
|
+
mode: "not_exists" | "exists";
|
|
58
|
+
dataset: string;
|
|
59
|
+
joinColumn: string;
|
|
60
|
+
foreignColumn: string;
|
|
61
|
+
filters?: {
|
|
62
|
+
value: string | number | boolean | (string | number)[];
|
|
63
|
+
field: string;
|
|
64
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
65
|
+
}[] | undefined;
|
|
66
|
+
}>;
|
|
28
67
|
export declare const DateRangeSchema: z.ZodObject<{
|
|
29
68
|
mode: z.ZodEnum<["relative", "explicit", "latest", "none"]>;
|
|
30
69
|
phrase: z.ZodOptional<z.ZodString>;
|
|
@@ -56,7 +95,8 @@ export declare const SmartQueryPlanSchema: z.ZodObject<{
|
|
|
56
95
|
select: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
57
96
|
metrics: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
58
97
|
groupBy: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
59
|
-
timeBucket: z.ZodOptional<z.ZodEnum<["hour", "day", "week", "month", "quarter", "year"]
|
|
98
|
+
timeBucket: z.ZodEffects<z.ZodOptional<z.ZodEnum<["hour", "day", "week", "month", "quarter", "year"]>>, "month" | "day" | "week" | "quarter" | "year" | "hour" | undefined, unknown>;
|
|
99
|
+
extractBucket: z.ZodEffects<z.ZodOptional<z.ZodEnum<["hour_of_day", "day_of_week", "month_of_year", "quarter", "year", "week"]>>, "week" | "quarter" | "year" | "hour_of_day" | "day_of_week" | "month_of_year" | undefined, unknown>;
|
|
60
100
|
filters: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
61
101
|
field: z.ZodString;
|
|
62
102
|
op: z.ZodEnum<["=", "!=", ">", "<", ">=", "<=", "in", "not_in", "like", "ilike", "is_null", "is_not_null"]>;
|
|
@@ -64,12 +104,78 @@ export declare const SmartQueryPlanSchema: z.ZodObject<{
|
|
|
64
104
|
}, "strip", z.ZodTypeAny, {
|
|
65
105
|
value: string | number | boolean | (string | number)[];
|
|
66
106
|
field: string;
|
|
67
|
-
op: "=" | "
|
|
107
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
68
108
|
}, {
|
|
69
109
|
value: string | number | boolean | (string | number)[];
|
|
70
110
|
field: string;
|
|
71
|
-
op: "=" | "
|
|
111
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
72
112
|
}>, "many">>>;
|
|
113
|
+
having: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
114
|
+
field: z.ZodString;
|
|
115
|
+
op: z.ZodEnum<["=", "!=", ">", "<", ">=", "<=", "in", "not_in", "like", "ilike", "is_null", "is_not_null"]>;
|
|
116
|
+
value: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">]>;
|
|
117
|
+
}, "strip", z.ZodTypeAny, {
|
|
118
|
+
value: string | number | boolean | (string | number)[];
|
|
119
|
+
field: string;
|
|
120
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
121
|
+
}, {
|
|
122
|
+
value: string | number | boolean | (string | number)[];
|
|
123
|
+
field: string;
|
|
124
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
125
|
+
}>, "many">>>, {
|
|
126
|
+
value: string | number | boolean | (string | number)[];
|
|
127
|
+
field: string;
|
|
128
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
129
|
+
}[], unknown>;
|
|
130
|
+
existsFilters: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
131
|
+
mode: z.ZodEnum<["exists", "not_exists"]>;
|
|
132
|
+
dataset: z.ZodString;
|
|
133
|
+
joinColumn: z.ZodString;
|
|
134
|
+
foreignColumn: z.ZodString;
|
|
135
|
+
filters: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
136
|
+
field: z.ZodString;
|
|
137
|
+
op: z.ZodEnum<["=", "!=", ">", "<", ">=", "<=", "in", "not_in", "like", "ilike", "is_null", "is_not_null"]>;
|
|
138
|
+
value: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">]>;
|
|
139
|
+
}, "strip", z.ZodTypeAny, {
|
|
140
|
+
value: string | number | boolean | (string | number)[];
|
|
141
|
+
field: string;
|
|
142
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
143
|
+
}, {
|
|
144
|
+
value: string | number | boolean | (string | number)[];
|
|
145
|
+
field: string;
|
|
146
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
147
|
+
}>, "many">>>;
|
|
148
|
+
}, "strip", z.ZodTypeAny, {
|
|
149
|
+
mode: "not_exists" | "exists";
|
|
150
|
+
dataset: string;
|
|
151
|
+
joinColumn: string;
|
|
152
|
+
foreignColumn: string;
|
|
153
|
+
filters: {
|
|
154
|
+
value: string | number | boolean | (string | number)[];
|
|
155
|
+
field: string;
|
|
156
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
157
|
+
}[];
|
|
158
|
+
}, {
|
|
159
|
+
mode: "not_exists" | "exists";
|
|
160
|
+
dataset: string;
|
|
161
|
+
joinColumn: string;
|
|
162
|
+
foreignColumn: string;
|
|
163
|
+
filters?: {
|
|
164
|
+
value: string | number | boolean | (string | number)[];
|
|
165
|
+
field: string;
|
|
166
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
167
|
+
}[] | undefined;
|
|
168
|
+
}>, "many">>>, {
|
|
169
|
+
mode: "not_exists" | "exists";
|
|
170
|
+
dataset: string;
|
|
171
|
+
joinColumn: string;
|
|
172
|
+
foreignColumn: string;
|
|
173
|
+
filters: {
|
|
174
|
+
value: string | number | boolean | (string | number)[];
|
|
175
|
+
field: string;
|
|
176
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
177
|
+
}[];
|
|
178
|
+
}[], unknown>;
|
|
73
179
|
entityFilters: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
74
180
|
resolver: z.ZodString;
|
|
75
181
|
input: z.ZodString;
|
|
@@ -83,7 +189,7 @@ export declare const SmartQueryPlanSchema: z.ZodObject<{
|
|
|
83
189
|
resolver: string;
|
|
84
190
|
outputColumn: string;
|
|
85
191
|
}>, "many">>>;
|
|
86
|
-
dateRange: z.ZodOptional<z.ZodObject<{
|
|
192
|
+
dateRange: z.ZodEffects<z.ZodOptional<z.ZodObject<{
|
|
87
193
|
mode: z.ZodEnum<["relative", "explicit", "latest", "none"]>;
|
|
88
194
|
phrase: z.ZodOptional<z.ZodString>;
|
|
89
195
|
startDate: z.ZodOptional<z.ZodString>;
|
|
@@ -98,7 +204,12 @@ export declare const SmartQueryPlanSchema: z.ZodObject<{
|
|
|
98
204
|
startDate?: string | undefined;
|
|
99
205
|
endDate?: string | undefined;
|
|
100
206
|
phrase?: string | undefined;
|
|
101
|
-
}
|
|
207
|
+
}>>, {
|
|
208
|
+
mode: "relative" | "latest" | "none" | "explicit";
|
|
209
|
+
startDate?: string | undefined;
|
|
210
|
+
endDate?: string | undefined;
|
|
211
|
+
phrase?: string | undefined;
|
|
212
|
+
} | undefined, unknown>;
|
|
102
213
|
orderBy: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
103
214
|
field: z.ZodString;
|
|
104
215
|
dir: z.ZodDefault<z.ZodEnum<["asc", "desc"]>>;
|
|
@@ -109,17 +220,34 @@ export declare const SmartQueryPlanSchema: z.ZodObject<{
|
|
|
109
220
|
field: string;
|
|
110
221
|
dir?: "desc" | "asc" | undefined;
|
|
111
222
|
}>, "many">>>;
|
|
112
|
-
limit: z.ZodOptional<z.ZodNumber>;
|
|
113
|
-
answerMode: z.ZodDefault<z.ZodOptional<z.ZodEnum<["rows", "aggregate_table", "scalar"]
|
|
223
|
+
limit: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
|
|
224
|
+
answerMode: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodEnum<["rows", "aggregate_table", "scalar"]>>>, "aggregate_table" | "rows" | "scalar", unknown>;
|
|
225
|
+
compareMode: z.ZodEffects<z.ZodOptional<z.ZodEnum<["previous_period", "year_over_year"]>>, "previous_period" | "year_over_year" | undefined, unknown>;
|
|
114
226
|
}, "strip", z.ZodTypeAny, {
|
|
115
227
|
select: string[];
|
|
228
|
+
having: {
|
|
229
|
+
value: string | number | boolean | (string | number)[];
|
|
230
|
+
field: string;
|
|
231
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
232
|
+
}[];
|
|
116
233
|
dataset: string;
|
|
117
|
-
metrics: string[];
|
|
118
|
-
groupBy: string[];
|
|
119
234
|
filters: {
|
|
120
235
|
value: string | number | boolean | (string | number)[];
|
|
121
236
|
field: string;
|
|
122
|
-
op: "=" | "
|
|
237
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
238
|
+
}[];
|
|
239
|
+
metrics: string[];
|
|
240
|
+
groupBy: string[];
|
|
241
|
+
existsFilters: {
|
|
242
|
+
mode: "not_exists" | "exists";
|
|
243
|
+
dataset: string;
|
|
244
|
+
joinColumn: string;
|
|
245
|
+
foreignColumn: string;
|
|
246
|
+
filters: {
|
|
247
|
+
value: string | number | boolean | (string | number)[];
|
|
248
|
+
field: string;
|
|
249
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
250
|
+
}[];
|
|
123
251
|
}[];
|
|
124
252
|
entityFilters: {
|
|
125
253
|
input: string;
|
|
@@ -132,6 +260,7 @@ export declare const SmartQueryPlanSchema: z.ZodObject<{
|
|
|
132
260
|
}[];
|
|
133
261
|
answerMode: "aggregate_table" | "rows" | "scalar";
|
|
134
262
|
timeBucket?: "month" | "day" | "week" | "quarter" | "year" | "hour" | undefined;
|
|
263
|
+
extractBucket?: "week" | "quarter" | "year" | "hour_of_day" | "day_of_week" | "month_of_year" | undefined;
|
|
135
264
|
dateRange?: {
|
|
136
265
|
mode: "relative" | "latest" | "none" | "explicit";
|
|
137
266
|
startDate?: string | undefined;
|
|
@@ -139,34 +268,34 @@ export declare const SmartQueryPlanSchema: z.ZodObject<{
|
|
|
139
268
|
phrase?: string | undefined;
|
|
140
269
|
} | undefined;
|
|
141
270
|
limit?: number | undefined;
|
|
271
|
+
compareMode?: "previous_period" | "year_over_year" | undefined;
|
|
142
272
|
}, {
|
|
143
273
|
dataset: string;
|
|
144
274
|
select?: string[] | undefined;
|
|
145
|
-
|
|
146
|
-
groupBy?: string[] | undefined;
|
|
147
|
-
timeBucket?: "month" | "day" | "week" | "quarter" | "year" | "hour" | undefined;
|
|
275
|
+
having?: unknown;
|
|
148
276
|
filters?: {
|
|
149
277
|
value: string | number | boolean | (string | number)[];
|
|
150
278
|
field: string;
|
|
151
|
-
op: "=" | "
|
|
279
|
+
op: "=" | ">" | "!=" | "<" | ">=" | "<=" | "in" | "not_in" | "like" | "ilike" | "is_null" | "is_not_null";
|
|
152
280
|
}[] | undefined;
|
|
281
|
+
metrics?: string[] | undefined;
|
|
282
|
+
groupBy?: string[] | undefined;
|
|
283
|
+
timeBucket?: unknown;
|
|
284
|
+
extractBucket?: unknown;
|
|
285
|
+
existsFilters?: unknown;
|
|
153
286
|
entityFilters?: {
|
|
154
287
|
input: string;
|
|
155
288
|
resolver: string;
|
|
156
289
|
outputColumn: string;
|
|
157
290
|
}[] | undefined;
|
|
158
|
-
dateRange?:
|
|
159
|
-
mode: "relative" | "latest" | "none" | "explicit";
|
|
160
|
-
startDate?: string | undefined;
|
|
161
|
-
endDate?: string | undefined;
|
|
162
|
-
phrase?: string | undefined;
|
|
163
|
-
} | undefined;
|
|
291
|
+
dateRange?: unknown;
|
|
164
292
|
orderBy?: {
|
|
165
293
|
field: string;
|
|
166
294
|
dir?: "desc" | "asc" | undefined;
|
|
167
295
|
}[] | undefined;
|
|
168
|
-
limit?:
|
|
169
|
-
answerMode?:
|
|
296
|
+
limit?: unknown;
|
|
297
|
+
answerMode?: unknown;
|
|
298
|
+
compareMode?: unknown;
|
|
170
299
|
}>;
|
|
171
300
|
export type SmartQueryPlanInput = z.input<typeof SmartQueryPlanSchema>;
|
|
172
301
|
export type SmartQueryPlanOutput = z.output<typeof SmartQueryPlanSchema>;
|
package/dist/schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY;;;;;;;;;;;;EASvB,CAAC;AAIH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAIH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAK1B,CAAC;AAIH,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAIH,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY;;;;;;;;;;;;EASvB,CAAC;AAIH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAIH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM7B,CAAC;AAIH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAK1B,CAAC;AAIH,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAIH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwC/B,CAAC;AAIH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
package/dist/schemas.js
CHANGED
|
@@ -16,6 +16,14 @@ export const EntityFilterSchema = z.object({
|
|
|
16
16
|
input: z.string(),
|
|
17
17
|
outputColumn: z.string(),
|
|
18
18
|
});
|
|
19
|
+
// ── Exists filter schema ──
|
|
20
|
+
export const ExistsFilterSchema = z.object({
|
|
21
|
+
mode: z.enum(['exists', 'not_exists']),
|
|
22
|
+
dataset: z.string(),
|
|
23
|
+
joinColumn: z.string(),
|
|
24
|
+
foreignColumn: z.string(),
|
|
25
|
+
filters: z.array(FilterSchema).optional().default([]),
|
|
26
|
+
});
|
|
19
27
|
// ── Date range schema ──
|
|
20
28
|
export const DateRangeSchema = z.object({
|
|
21
29
|
mode: z.enum(["relative", "explicit", "latest", "none"]),
|
|
@@ -34,12 +42,16 @@ export const SmartQueryPlanSchema = z.object({
|
|
|
34
42
|
select: z.array(z.string()).optional().default([]),
|
|
35
43
|
metrics: z.array(z.string()).optional().default([]),
|
|
36
44
|
groupBy: z.array(z.string()).optional().default([]),
|
|
37
|
-
timeBucket: z.enum(["hour", "day", "week", "month", "quarter", "year"]).optional(),
|
|
45
|
+
timeBucket: z.preprocess((v) => (v === null ? undefined : v), z.enum(["hour", "day", "week", "month", "quarter", "year"]).optional()),
|
|
46
|
+
extractBucket: z.preprocess((v) => (v === null ? undefined : v), z.enum(["hour_of_day", "day_of_week", "month_of_year", "quarter", "year", "week"]).optional()),
|
|
38
47
|
filters: z.array(FilterSchema).optional().default([]),
|
|
48
|
+
having: z.preprocess((v) => (v === null ? [] : v), z.array(FilterSchema).optional().default([])),
|
|
49
|
+
existsFilters: z.preprocess((v) => (v === null ? [] : v), z.array(ExistsFilterSchema).optional().default([])),
|
|
39
50
|
entityFilters: z.array(EntityFilterSchema).optional().default([]),
|
|
40
|
-
dateRange: DateRangeSchema.optional(),
|
|
51
|
+
dateRange: z.preprocess((v) => (v === null ? undefined : v), DateRangeSchema.optional()),
|
|
41
52
|
orderBy: z.array(OrderBySchema).optional().default([]),
|
|
42
|
-
limit: z.number().int().positive().max(200).optional(),
|
|
43
|
-
answerMode: z.enum(["rows", "aggregate_table", "scalar"]).optional().default("rows"),
|
|
53
|
+
limit: z.preprocess((v) => (v === null ? undefined : v), z.number().int().positive().max(200).optional()),
|
|
54
|
+
answerMode: z.preprocess((v) => (v === null ? undefined : v), z.enum(["rows", "aggregate_table", "scalar"]).optional().default("rows")),
|
|
55
|
+
compareMode: z.preprocess((v) => (v === null ? undefined : v), z.enum(['previous_period', 'year_over_year']).optional()),
|
|
44
56
|
});
|
|
45
57
|
//# sourceMappingURL=schemas.js.map
|
package/dist/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,sBAAsB;AAEtB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACxG,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;QACb,CAAC,CAAC,MAAM,EAAE;QACV,CAAC,CAAC,MAAM,EAAE;QACV,CAAC,CAAC,OAAO,EAAE;QACX,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KAC3C,CAAC;CACH,CAAC,CAAC;AAEH,6BAA6B;AAE7B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;CACzB,CAAC,CAAC;AAEH,0BAA0B;AAE1B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,wBAAwB;AAExB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC5C,CAAC,CAAC;AAEH,gCAAgC;AAEhC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-builder.d.ts","sourceRoot":"","sources":["../src/sql-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIpF,iBAAS,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,wBAAgB,UAAU,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO,YAAY,EAAE,YAAY,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"sql-builder.d.ts","sourceRoot":"","sources":["../src/sql-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIpF,iBAAS,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,wBAAgB,UAAU,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO,YAAY,EAAE,YAAY,GAAG,WAAW,CAqUpI"}
|
package/dist/sql-builder.js
CHANGED
|
@@ -28,6 +28,7 @@ export function compileSQL(plan, ctx, catalog) {
|
|
|
28
28
|
}
|
|
29
29
|
// ── Auto-resolve FK columns to human-readable names ──
|
|
30
30
|
const fkNameColumns = [];
|
|
31
|
+
const fkGroupByRefs = [];
|
|
31
32
|
if (catalog && plan.dataset.joins) {
|
|
32
33
|
const columnsToResolve = plan.metrics.length > 0 ? plan.groupBy : plan.select;
|
|
33
34
|
for (const col of columnsToResolve) {
|
|
@@ -49,12 +50,23 @@ export function compileSQL(plan, ctx, catalog) {
|
|
|
49
50
|
joinAliases.set(bareTable, bareTable);
|
|
50
51
|
joinClauses.push(`LEFT JOIN ${targetFull} AS ${quoteIdentifier(bareTable)} ON ${quoteIdentifier(mainAlias)}.${quoteIdentifier(col)} = ${quoteIdentifier(bareTable)}.${quoteIdentifier(joinDef.foreignColumn)}`);
|
|
51
52
|
}
|
|
52
|
-
|
|
53
|
+
const fkRef = `${quoteIdentifier(bareTable)}.${quoteIdentifier(nameCol)}`;
|
|
54
|
+
fkNameColumns.push(`${fkRef} AS ${quoteIdentifier(col.replace(/_id$/, '_name'))}`);
|
|
55
|
+
fkGroupByRefs.push(fkRef);
|
|
53
56
|
}
|
|
54
57
|
}
|
|
55
|
-
// ── Determine which groupBy columns need DATE_TRUNC ──
|
|
58
|
+
// ── Determine which groupBy columns need DATE_TRUNC or EXTRACT ──
|
|
56
59
|
const dateGroupColumns = new Set();
|
|
57
|
-
|
|
60
|
+
const extractGroupColumns = new Set();
|
|
61
|
+
if (plan.extractBucket && !plan.timeBucket && plan.groupBy.length > 0) {
|
|
62
|
+
for (const col of plan.groupBy) {
|
|
63
|
+
const colType = plan.dataset.columnTypes[col];
|
|
64
|
+
if (colType === 'date' || colType === 'timestamp') {
|
|
65
|
+
extractGroupColumns.add(col);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (plan.timeBucket && plan.groupBy.length > 0) {
|
|
58
70
|
for (const col of plan.groupBy) {
|
|
59
71
|
const colType = plan.dataset.columnTypes[col];
|
|
60
72
|
if (colType === 'date' || colType === 'timestamp') {
|
|
@@ -62,6 +74,18 @@ export function compileSQL(plan, ctx, catalog) {
|
|
|
62
74
|
}
|
|
63
75
|
}
|
|
64
76
|
}
|
|
77
|
+
// Helper: build EXTRACT expression for extractBucket
|
|
78
|
+
const buildExtractExpr = (ref) => {
|
|
79
|
+
switch (plan.extractBucket) {
|
|
80
|
+
case 'hour_of_day': return `EXTRACT(HOUR FROM ${ref})`;
|
|
81
|
+
case 'day_of_week': return `EXTRACT(DOW FROM ${ref})`;
|
|
82
|
+
case 'month_of_year': return `EXTRACT(MONTH FROM ${ref})`;
|
|
83
|
+
case 'quarter': return `EXTRACT(QUARTER FROM ${ref})`;
|
|
84
|
+
case 'year': return `EXTRACT(YEAR FROM ${ref})`;
|
|
85
|
+
case 'week': return `EXTRACT(WEEK FROM ${ref})`;
|
|
86
|
+
default: return ref;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
65
89
|
// Helper: resolve a column reference (supports dot-notation for joins)
|
|
66
90
|
const resolveColRef = (col) => {
|
|
67
91
|
if (col.includes('.')) {
|
|
@@ -81,21 +105,37 @@ export function compileSQL(plan, ctx, catalog) {
|
|
|
81
105
|
return col.split('.', 2)[1];
|
|
82
106
|
return col;
|
|
83
107
|
};
|
|
84
|
-
// Helper: format a groupBy column for SELECT (with DATE_TRUNC and alias if needed)
|
|
108
|
+
// Helper: format a groupBy column for SELECT (with DATE_TRUNC, EXTRACT, and alias if needed)
|
|
85
109
|
const formatGroupCol = (col) => {
|
|
86
110
|
const ref = resolveColRef(col);
|
|
87
111
|
const alias = colAlias(col);
|
|
112
|
+
if (extractGroupColumns.has(col) && plan.extractBucket) {
|
|
113
|
+
const extractAliasMap = {
|
|
114
|
+
'hour_of_day': `${alias}_hour`,
|
|
115
|
+
'day_of_week': `${alias}_dow`,
|
|
116
|
+
'month_of_year': `${alias}_month`,
|
|
117
|
+
};
|
|
118
|
+
const extractAlias = extractAliasMap[plan.extractBucket] ?? plan.extractBucket;
|
|
119
|
+
return `${buildExtractExpr(ref)} AS ${quoteIdentifier(extractAlias)}`;
|
|
120
|
+
}
|
|
88
121
|
if (dateGroupColumns.has(col) && plan.timeBucket) {
|
|
89
122
|
return `DATE_TRUNC('${plan.timeBucket}', ${ref}) AS ${quoteIdentifier(alias)}`;
|
|
90
123
|
}
|
|
91
124
|
if (col.includes('.')) {
|
|
92
125
|
return `${ref} AS ${quoteIdentifier(alias)}`;
|
|
93
126
|
}
|
|
127
|
+
// For text columns, wrap with COALESCE to handle NULL values
|
|
128
|
+
if (plan.dataset.columnTypes[col] === 'text') {
|
|
129
|
+
return `COALESCE(${ref}::text, 'N/A') AS ${quoteIdentifier(col)}`;
|
|
130
|
+
}
|
|
94
131
|
return ref;
|
|
95
132
|
};
|
|
96
133
|
// Helper: format a groupBy column for GROUP BY clause (no alias)
|
|
97
134
|
const formatGroupByRef = (col) => {
|
|
98
135
|
const ref = resolveColRef(col);
|
|
136
|
+
if (extractGroupColumns.has(col) && plan.extractBucket) {
|
|
137
|
+
return buildExtractExpr(ref);
|
|
138
|
+
}
|
|
99
139
|
if (dateGroupColumns.has(col) && plan.timeBucket) {
|
|
100
140
|
return `DATE_TRUNC('${plan.timeBucket}', ${ref})`;
|
|
101
141
|
}
|
|
@@ -124,16 +164,25 @@ export function compileSQL(plan, ctx, catalog) {
|
|
|
124
164
|
// ── Build WHERE clause ──
|
|
125
165
|
const whereParts = [];
|
|
126
166
|
// Tenant isolation (ALWAYS injected server-side)
|
|
167
|
+
if (!ctx.tenantId || ctx.tenantId.trim() === '') {
|
|
168
|
+
throw new InferError('SQL_VALIDATION_FAILED', 'compiler', 'Tenant ID is required but was not provided');
|
|
169
|
+
}
|
|
127
170
|
const tenantCol = ctx.tenantColumn ?? 'tenant_id';
|
|
128
171
|
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(tenantCol)) {
|
|
129
172
|
throw new InferError('SQL_VALIDATION_FAILED', 'compiler', `Invalid tenant column name: ${tenantCol}`);
|
|
130
173
|
}
|
|
174
|
+
const tenantRef = joinClauses.length > 0
|
|
175
|
+
? `${quoteIdentifier(mainAlias)}.${quoteIdentifier(tenantCol)}`
|
|
176
|
+
: quoteIdentifier(tenantCol);
|
|
131
177
|
params.push(ctx.tenantId);
|
|
132
|
-
whereParts.push(`${
|
|
178
|
+
whereParts.push(`${tenantRef} = $${paramIdx++}`);
|
|
133
179
|
// Location scoping (optional)
|
|
134
180
|
if (ctx.locationIds && ctx.locationIds.length > 0) {
|
|
181
|
+
const locationRef = joinClauses.length > 0
|
|
182
|
+
? `${quoteIdentifier(mainAlias)}."location_id"`
|
|
183
|
+
: `"location_id"`;
|
|
135
184
|
params.push(ctx.locationIds);
|
|
136
|
-
whereParts.push(
|
|
185
|
+
whereParts.push(`${locationRef} = ANY($${paramIdx++})`);
|
|
137
186
|
}
|
|
138
187
|
// Date range
|
|
139
188
|
if (plan.dateRange && plan.dataset.dateColumn) {
|
|
@@ -173,11 +222,53 @@ export function compileSQL(plan, ctx, catalog) {
|
|
|
173
222
|
whereParts.push(`${col} = ANY($${paramIdx++})`);
|
|
174
223
|
}
|
|
175
224
|
}
|
|
225
|
+
// Exists filters (subqueries)
|
|
226
|
+
for (const ef of plan.existsFilters || []) {
|
|
227
|
+
const targetTable = `${quoteIdentifier(ef.table.schema)}.${quoteIdentifier(ef.table.name)}`;
|
|
228
|
+
const subAlias = `_ef_${ef.table.name}`;
|
|
229
|
+
let subWhere = `${quoteIdentifier(subAlias)}.${quoteIdentifier(ef.foreignColumn)} = ${quoteIdentifier(mainAlias)}.${quoteIdentifier(ef.joinColumn)}`;
|
|
230
|
+
for (const f of ef.filters) {
|
|
231
|
+
const op = sanitizeOperator(f.op);
|
|
232
|
+
if (op === 'IS NULL') {
|
|
233
|
+
subWhere += ` AND ${quoteIdentifier(subAlias)}.${quoteIdentifier(f.field)} IS NULL`;
|
|
234
|
+
}
|
|
235
|
+
else if (op === 'IS NOT NULL') {
|
|
236
|
+
subWhere += ` AND ${quoteIdentifier(subAlias)}.${quoteIdentifier(f.field)} IS NOT NULL`;
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
params.push(f.value);
|
|
240
|
+
subWhere += ` AND ${quoteIdentifier(subAlias)}.${quoteIdentifier(f.field)} ${op} $${paramIdx++}`;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
const existsOp = ef.mode === 'not_exists' ? 'NOT EXISTS' : 'EXISTS';
|
|
244
|
+
whereParts.push(`${existsOp} (SELECT 1 FROM ${targetTable} AS ${quoteIdentifier(subAlias)} WHERE ${subWhere})`);
|
|
245
|
+
}
|
|
176
246
|
const whereClause = whereParts.length > 0 ? whereParts.join(' AND ') : '1=1';
|
|
177
247
|
// ── Build GROUP BY ──
|
|
178
248
|
const groupBySql = plan.groupBy.length > 0
|
|
179
|
-
? `GROUP BY ${plan.groupBy.map(col => formatGroupByRef(col)).join(', ')}`
|
|
249
|
+
? `GROUP BY ${[...plan.groupBy.map(col => formatGroupByRef(col)), ...fkGroupByRefs].join(', ')}`
|
|
180
250
|
: '';
|
|
251
|
+
// ── Build HAVING ──
|
|
252
|
+
let havingSql = '';
|
|
253
|
+
if (plan.having && plan.having.length > 0) {
|
|
254
|
+
const havingParts = [];
|
|
255
|
+
for (const filter of plan.having) {
|
|
256
|
+
const metricDef = plan.metrics.find(m => m.id === filter.field);
|
|
257
|
+
const fieldRef = metricDef ? metricDef.expression : quoteIdentifier(filter.field);
|
|
258
|
+
const op = sanitizeOperator(filter.op);
|
|
259
|
+
if (op === 'IS NULL') {
|
|
260
|
+
havingParts.push(`${fieldRef} IS NULL`);
|
|
261
|
+
}
|
|
262
|
+
else if (op === 'IS NOT NULL') {
|
|
263
|
+
havingParts.push(`${fieldRef} IS NOT NULL`);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
params.push(filter.value);
|
|
267
|
+
havingParts.push(`${fieldRef} ${op} $${paramIdx++}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
havingSql = `HAVING ${havingParts.join(' AND ')}`;
|
|
271
|
+
}
|
|
181
272
|
// ── Build ORDER BY (direction whitelisted to ASC/DESC only) ──
|
|
182
273
|
const orderBySql = plan.orderBy.length > 0
|
|
183
274
|
? `ORDER BY ${plan.orderBy.map(o => {
|
|
@@ -206,10 +297,20 @@ export function compileSQL(plan, ctx, catalog) {
|
|
|
206
297
|
...joinClauses,
|
|
207
298
|
`WHERE ${whereClause}`,
|
|
208
299
|
groupBySql,
|
|
300
|
+
havingSql,
|
|
209
301
|
orderBySql,
|
|
210
302
|
limitSql,
|
|
211
303
|
offsetSql,
|
|
212
304
|
].filter(Boolean).join('\n');
|
|
305
|
+
// compareMode: wrap in CTE with LAG window functions
|
|
306
|
+
if (plan.compareMode && plan.metrics.length > 0 && (plan.timeBucket || plan.extractBucket)) {
|
|
307
|
+
const metricAliases = plan.metrics.map(m => quoteIdentifier(m.id));
|
|
308
|
+
const lagCols = metricAliases.map(alias => {
|
|
309
|
+
return `${alias} - LAG(${alias}) OVER (ORDER BY ${quoteIdentifier(plan.groupBy[0] || 'period')}) AS ${alias.replace(/"$/, '_delta"')}`;
|
|
310
|
+
});
|
|
311
|
+
const wrappedSql = `WITH _base AS (\n${sql}\n)\nSELECT *, ${lagCols.join(', ')} FROM _base`;
|
|
312
|
+
return { sql: wrappedSql, params };
|
|
313
|
+
}
|
|
213
314
|
return { sql, params };
|
|
214
315
|
}
|
|
215
316
|
function sanitizeOperator(op) {
|
package/dist/sql-builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-builder.js","sourceRoot":"","sources":["../src/sql-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sql-builder.js","sourceRoot":"","sources":["../src/sql-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-validator.d.ts","sourceRoot":"","sources":["../src/sql-validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sql-validator.d.ts","sourceRoot":"","sources":["../src/sql-validator.ts"],"names":[],"mappings":"AAqDA,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,IAAI,CAgEjF;AAkDD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAqD9D"}
|
package/dist/sql-validator.js
CHANGED
|
@@ -13,6 +13,9 @@ const ALLOWED_FUNCTIONS = new Set([
|
|
|
13
13
|
'cast', 'coalesce', 'nullif', 'greatest', 'least',
|
|
14
14
|
// Format
|
|
15
15
|
'to_char', 'to_date', 'to_number', 'to_timestamp',
|
|
16
|
+
// Statistical aggregates
|
|
17
|
+
'stddev', 'stddev_pop', 'stddev_samp', 'variance', 'var_pop', 'var_samp',
|
|
18
|
+
'percentile_cont', 'percentile_disc', 'mode', 'corr', 'regr_slope',
|
|
16
19
|
// Window functions
|
|
17
20
|
'row_number', 'rank', 'dense_rank', 'ntile',
|
|
18
21
|
'lag', 'lead', 'first_value', 'last_value', 'nth_value',
|
|
@@ -136,6 +139,8 @@ function validateTableAllowlist(sql, allowedTables) {
|
|
|
136
139
|
const SAFE_METRIC_STARTERS = new Set([
|
|
137
140
|
'sum', 'avg', 'count', 'min', 'max', 'round', 'abs', 'ceil', 'floor',
|
|
138
141
|
'coalesce', 'nullif', 'cast', 'extract', 'date_trunc', 'greatest', 'least',
|
|
142
|
+
'stddev', 'stddev_pop', 'stddev_samp', 'variance', 'var_pop', 'var_samp',
|
|
143
|
+
'percentile_cont', 'percentile_disc', 'mode', 'corr', 'regr_slope',
|
|
139
144
|
]);
|
|
140
145
|
export function validateMetricExpression(expr) {
|
|
141
146
|
const trimmed = expr.trim();
|
|
@@ -147,7 +152,9 @@ export function validateMetricExpression(expr) {
|
|
|
147
152
|
// Block subqueries and clause injection
|
|
148
153
|
if (/\bSELECT\b/i.test(trimmed))
|
|
149
154
|
return false;
|
|
150
|
-
|
|
155
|
+
// Block FROM except inside EXTRACT(... FROM ...)
|
|
156
|
+
const withoutExtract = trimmed.replace(/\bEXTRACT\s*\([^)]*\bFROM\b[^)]*\)/gi, '');
|
|
157
|
+
if (/\bFROM\b/i.test(withoutExtract))
|
|
151
158
|
return false;
|
|
152
159
|
if (/\bWHERE\b/i.test(trimmed))
|
|
153
160
|
return false;
|