squirreling 0.9.2 → 0.9.3
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/README.md +2 -0
- package/package.json +2 -2
- package/src/backend/dataSource.js +2 -2
- package/src/expression/evaluate.js +32 -1
- package/src/expression/spatial.js +1471 -0
- package/src/types.d.ts +16 -0
- package/src/validation.js +39 -2
- package/src/validationErrors.js +16 -0
package/src/types.d.ts
CHANGED
|
@@ -276,6 +276,22 @@ export type StringFunc =
|
|
|
276
276
|
| 'RIGHT'
|
|
277
277
|
| 'INSTR'
|
|
278
278
|
|
|
279
|
+
export type SpatialFunc =
|
|
280
|
+
| 'ST_INTERSECTS'
|
|
281
|
+
| 'ST_CONTAINS'
|
|
282
|
+
| 'ST_CONTAINSPROPERLY'
|
|
283
|
+
| 'ST_WITHIN'
|
|
284
|
+
| 'ST_OVERLAPS'
|
|
285
|
+
| 'ST_TOUCHES'
|
|
286
|
+
| 'ST_EQUALS'
|
|
287
|
+
| 'ST_CROSSES'
|
|
288
|
+
| 'ST_COVERS'
|
|
289
|
+
| 'ST_COVEREDBY'
|
|
290
|
+
| 'ST_DWITHIN'
|
|
291
|
+
| 'ST_GEOMFROMTEXT'
|
|
292
|
+
| 'ST_MAKEENVELOPE'
|
|
293
|
+
| 'ST_ASTEXT'
|
|
294
|
+
|
|
279
295
|
export interface StarColumn {
|
|
280
296
|
kind: 'star'
|
|
281
297
|
table?: string
|
package/src/validation.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParseError } from './parseErrors.js'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @import { AggregateFunc, BinaryOp, ExprNode, FunctionNode, IntervalUnit, MathFunc, StringFunc, UserDefinedFunction } from './types.js'
|
|
4
|
+
* @import { AggregateFunc, BinaryOp, ExprNode, FunctionNode, IntervalUnit, MathFunc, SpatialFunc, StringFunc, UserDefinedFunction } from './types.js'
|
|
5
5
|
* @param {string} name
|
|
6
6
|
* @returns {name is AggregateFunc}
|
|
7
7
|
*/
|
|
@@ -79,6 +79,19 @@ export function isRegexpFunc(name) {
|
|
|
79
79
|
return ['REGEXP_SUBSTR', 'REGEXP_REPLACE'].includes(name)
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
/**
|
|
83
|
+
* @param {string} name
|
|
84
|
+
* @returns {name is SpatialFunc}
|
|
85
|
+
*/
|
|
86
|
+
export function isSpatialFunc(name) {
|
|
87
|
+
return [
|
|
88
|
+
'ST_INTERSECTS', 'ST_CONTAINS', 'ST_CONTAINSPROPERLY', 'ST_WITHIN',
|
|
89
|
+
'ST_OVERLAPS', 'ST_TOUCHES', 'ST_EQUALS', 'ST_CROSSES',
|
|
90
|
+
'ST_COVERS', 'ST_COVEREDBY', 'ST_DWITHIN',
|
|
91
|
+
'ST_GEOMFROMTEXT', 'ST_MAKEENVELOPE', 'ST_ASTEXT',
|
|
92
|
+
].includes(name)
|
|
93
|
+
}
|
|
94
|
+
|
|
82
95
|
/**
|
|
83
96
|
* @param {string} name
|
|
84
97
|
* @returns {name is MathFunc}
|
|
@@ -178,6 +191,12 @@ export const FUNCTION_ARG_COUNTS = {
|
|
|
178
191
|
JSON_OBJECT: { min: 0 },
|
|
179
192
|
JSON_ARRAYAGG: { min: 1, max: 1 },
|
|
180
193
|
|
|
194
|
+
// Array functions
|
|
195
|
+
ARRAY_LENGTH: { min: 1, max: 1 },
|
|
196
|
+
ARRAY_POSITION: { min: 2, max: 2 },
|
|
197
|
+
ARRAY_SORT: { min: 1, max: 1 },
|
|
198
|
+
CARDINALITY: { min: 1, max: 1 },
|
|
199
|
+
|
|
181
200
|
// Conditional functions
|
|
182
201
|
COALESCE: { min: 1 },
|
|
183
202
|
NULLIF: { min: 2, max: 2 },
|
|
@@ -190,6 +209,22 @@ export const FUNCTION_ARG_COUNTS = {
|
|
|
190
209
|
MAX: { min: 1, max: 1 },
|
|
191
210
|
STDDEV_SAMP: { min: 1, max: 1 },
|
|
192
211
|
STDDEV_POP: { min: 1, max: 1 },
|
|
212
|
+
|
|
213
|
+
// Spatial predicate functions
|
|
214
|
+
ST_INTERSECTS: { min: 2, max: 2 },
|
|
215
|
+
ST_CONTAINS: { min: 2, max: 2 },
|
|
216
|
+
ST_CONTAINSPROPERLY: { min: 2, max: 2 },
|
|
217
|
+
ST_WITHIN: { min: 2, max: 2 },
|
|
218
|
+
ST_OVERLAPS: { min: 2, max: 2 },
|
|
219
|
+
ST_TOUCHES: { min: 2, max: 2 },
|
|
220
|
+
ST_EQUALS: { min: 2, max: 2 },
|
|
221
|
+
ST_CROSSES: { min: 2, max: 2 },
|
|
222
|
+
ST_COVERS: { min: 2, max: 2 },
|
|
223
|
+
ST_COVEREDBY: { min: 2, max: 2 },
|
|
224
|
+
ST_DWITHIN: { min: 3, max: 3 },
|
|
225
|
+
ST_GEOMFROMTEXT: { min: 1, max: 1 },
|
|
226
|
+
ST_MAKEENVELOPE: { min: 4, max: 4 },
|
|
227
|
+
ST_ASTEXT: { min: 1, max: 1 },
|
|
193
228
|
}
|
|
194
229
|
|
|
195
230
|
/**
|
|
@@ -249,7 +284,8 @@ export function isKnownFunction(funcName, functions) {
|
|
|
249
284
|
isAggregateFunc(funcName) ||
|
|
250
285
|
isMathFunc(funcName) ||
|
|
251
286
|
isStringFunc(funcName) ||
|
|
252
|
-
isRegexpFunc(funcName)
|
|
287
|
+
isRegexpFunc(funcName) ||
|
|
288
|
+
isSpatialFunc(funcName)
|
|
253
289
|
) {
|
|
254
290
|
return true
|
|
255
291
|
}
|
|
@@ -258,6 +294,7 @@ export function isKnownFunction(funcName, functions) {
|
|
|
258
294
|
if ([
|
|
259
295
|
'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP',
|
|
260
296
|
'JSON_VALUE', 'JSON_QUERY', 'JSON_OBJECT',
|
|
297
|
+
'ARRAY_LENGTH', 'ARRAY_POSITION', 'ARRAY_SORT', 'CARDINALITY',
|
|
261
298
|
'COALESCE', 'NULLIF', 'CAST',
|
|
262
299
|
].includes(funcName)) {
|
|
263
300
|
return true
|
package/src/validationErrors.js
CHANGED
|
@@ -68,6 +68,22 @@ export const FUNCTION_SIGNATURES = {
|
|
|
68
68
|
MAX: 'expression',
|
|
69
69
|
STDDEV_SAMP: 'expression',
|
|
70
70
|
STDDEV_POP: 'expression',
|
|
71
|
+
|
|
72
|
+
// Spatial predicate functions
|
|
73
|
+
ST_INTERSECTS: 'geometry, geometry',
|
|
74
|
+
ST_CONTAINS: 'geometry, geometry',
|
|
75
|
+
ST_CONTAINSPROPERLY: 'geometry, geometry',
|
|
76
|
+
ST_WITHIN: 'geometry, geometry',
|
|
77
|
+
ST_OVERLAPS: 'geometry, geometry',
|
|
78
|
+
ST_TOUCHES: 'geometry, geometry',
|
|
79
|
+
ST_EQUALS: 'geometry, geometry',
|
|
80
|
+
ST_CROSSES: 'geometry, geometry',
|
|
81
|
+
ST_COVERS: 'geometry, geometry',
|
|
82
|
+
ST_COVEREDBY: 'geometry, geometry',
|
|
83
|
+
ST_DWITHIN: 'geometry, geometry, distance',
|
|
84
|
+
ST_GEOMFROMTEXT: 'wkt',
|
|
85
|
+
ST_MAKEENVELOPE: 'xmin, ymin, xmax, ymax',
|
|
86
|
+
ST_ASTEXT: 'geometry',
|
|
71
87
|
}
|
|
72
88
|
|
|
73
89
|
/**
|