@balena/abstract-sql-compiler 10.2.3-build-renovate-major-22-node-d6c0f904df738bdfb51aa65395e2b146a26000e6-1 → 10.2.3-build-tests-0edb21cc4ee30ead2a6eeb290623f3a0adc7a0fe-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.
@@ -1,22 +1,11 @@
1
- import type { AnyTypeNodes } from '../../src/AbstractSQLCompiler';
2
-
3
- type TestCb = (
4
- result: { query: string },
5
- sqlEquals: (a: string, b: string) => void,
6
- ) => void;
7
- import $test from './test';
8
- const test = $test as (
9
- query: AnyTypeNodes,
10
- binds: any[][] | TestCb,
11
- cb?: TestCb,
12
- ) => void;
1
+ import test from './test';
13
2
 
14
3
  describe('Add', () => {
15
4
  test(
16
5
  ['SelectQuery', ['Select', [['Add', ['Number', 5], ['Number', 3]]]]],
17
6
  (result, sqlEquals) => {
18
7
  it('should produce a valid Add statement', () => {
19
- sqlEquals(result.query, 'SELECT 5 + 3');
8
+ sqlEquals(result, 'SELECT 5 + 3');
20
9
  });
21
10
  },
22
11
  );
@@ -27,7 +16,7 @@ describe('Subtract', () => {
27
16
  ['SelectQuery', ['Select', [['Subtract', ['Number', 5], ['Number', 3]]]]],
28
17
  (result, sqlEquals) => {
29
18
  it('should produce a valid Subtract statement', () => {
30
- sqlEquals(result.query, 'SELECT 5 - 3');
19
+ sqlEquals(result, 'SELECT 5 - 3');
31
20
  });
32
21
  },
33
22
  );
@@ -38,7 +27,7 @@ describe('Multiply', () => {
38
27
  ['SelectQuery', ['Select', [['Multiply', ['Number', 5], ['Number', 3]]]]],
39
28
  (result, sqlEquals) => {
40
29
  it('should produce a valid Multiply statement', () => {
41
- sqlEquals(result.query, 'SELECT 5 * 3');
30
+ sqlEquals(result, 'SELECT 5 * 3');
42
31
  });
43
32
  },
44
33
  );
@@ -49,7 +38,7 @@ describe('Divide', () => {
49
38
  ['SelectQuery', ['Select', [['Divide', ['Number', 10], ['Number', 5]]]]],
50
39
  (result, sqlEquals) => {
51
40
  it('should produce a valid Divide statement', () => {
52
- sqlEquals(result.query, 'SELECT 10 / 5');
41
+ sqlEquals(result, 'SELECT 10 / 5');
53
42
  });
54
43
  },
55
44
  );
@@ -63,7 +52,7 @@ describe('BitwiseAnd', () => {
63
52
  ],
64
53
  (result, sqlEquals) => {
65
54
  it('should produce a valid BitwiseAnd statement', () => {
66
- sqlEquals(result.query, 'SELECT 10 & 5');
55
+ sqlEquals(result, 'SELECT 10 & 5');
67
56
  });
68
57
  },
69
58
  );
@@ -77,7 +66,7 @@ describe('BitwiseShiftRight', () => {
77
66
  ],
78
67
  (result, sqlEquals) => {
79
68
  it('should produce a valid BitwiseShiftRight statement', () => {
80
- sqlEquals(result.query, 'SELECT 10 >> 5');
69
+ sqlEquals(result, 'SELECT 10 >> 5');
81
70
  });
82
71
  },
83
72
  );
@@ -88,7 +77,7 @@ describe('Round', () => {
88
77
  ['SelectQuery', ['Select', [['Round', ['Number', 10.4]]]]],
89
78
  (result, sqlEquals) => {
90
79
  it('should produce a valid Round statement', () => {
91
- sqlEquals(result.query, `SELECT ROUND(10.4)`);
80
+ sqlEquals(result, `SELECT ROUND(10.4)`);
92
81
  });
93
82
  },
94
83
  );
@@ -99,7 +88,7 @@ describe('Floor', () => {
99
88
  ['SelectQuery', ['Select', [['Floor', ['Number', 10.4]]]]],
100
89
  (result, sqlEquals) => {
101
90
  it('should produce a valid Floor statement', () => {
102
- sqlEquals(result.query, `SELECT FLOOR(10.4)`);
91
+ sqlEquals(result, `SELECT FLOOR(10.4)`);
103
92
  });
104
93
  },
105
94
  );
@@ -110,7 +99,7 @@ describe('Ceiling', () => {
110
99
  ['SelectQuery', ['Select', [['Ceiling', ['Number', 10.4]]]]],
111
100
  (result, sqlEquals) => {
112
101
  it('should produce a valid Ceiling statement', () => {
113
- sqlEquals(result.query, `SELECT CEILING(10.4)`);
102
+ sqlEquals(result, `SELECT CEILING(10.4)`);
114
103
  });
115
104
  },
116
105
  );
@@ -128,7 +117,7 @@ describe('Math Operator Precedence', () => {
128
117
  ],
129
118
  (result, sqlEquals) => {
130
119
  it('should produce a valid Add statement when the first operand is a Multiply', () => {
131
- sqlEquals(result.query, 'SELECT (2 * 3) + 4');
120
+ sqlEquals(result, 'SELECT (2 * 3) + 4');
132
121
  });
133
122
  },
134
123
  );
@@ -143,7 +132,7 @@ describe('Math Operator Precedence', () => {
143
132
  ],
144
133
  (result, sqlEquals) => {
145
134
  it('should produce a valid Add statement when the second operand is a Multiply', () => {
146
- sqlEquals(result.query, 'SELECT 2 + (3 * 4)');
135
+ sqlEquals(result, 'SELECT 2 + (3 * 4)');
147
136
  });
148
137
  },
149
138
  );
@@ -164,7 +153,7 @@ describe('Math Operator Precedence', () => {
164
153
  ],
165
154
  (result, sqlEquals) => {
166
155
  it('should produce a valid Add statement of two Multiplications', () => {
167
- sqlEquals(result.query, 'SELECT (2 * 3) + (4 * 5)');
156
+ sqlEquals(result, 'SELECT (2 * 3) + (4 * 5)');
168
157
  });
169
158
  },
170
159
  );
@@ -179,7 +168,7 @@ describe('Math Operator Precedence', () => {
179
168
  ],
180
169
  (result, sqlEquals) => {
181
170
  it('should produce a valid Multiply statement when the first operand is an Add', () => {
182
- sqlEquals(result.query, 'SELECT (2 + 3) * 4');
171
+ sqlEquals(result, 'SELECT (2 + 3) * 4');
183
172
  });
184
173
  },
185
174
  );
@@ -194,7 +183,7 @@ describe('Math Operator Precedence', () => {
194
183
  ],
195
184
  (result, sqlEquals) => {
196
185
  it('should produce a valid Multiply statement when the second operand is an Add', () => {
197
- sqlEquals(result.query, 'SELECT 2 * (3 + 4)');
186
+ sqlEquals(result, 'SELECT 2 * (3 + 4)');
198
187
  });
199
188
  },
200
189
  );
@@ -215,7 +204,7 @@ describe('Math Operator Precedence', () => {
215
204
  ],
216
205
  (result, sqlEquals) => {
217
206
  it('should produce a valid Multiply statement of two Additions', () => {
218
- sqlEquals(result.query, 'SELECT (2 + 3) * (4 + 5)');
207
+ sqlEquals(result, 'SELECT (2 + 3) * (4 + 5)');
219
208
  });
220
209
  },
221
210
  );
@@ -236,7 +225,7 @@ describe('Math Operator Precedence', () => {
236
225
  ],
237
226
  (result, sqlEquals) => {
238
227
  it('should produce a valid Subtract statement of two Multiplications', () => {
239
- sqlEquals(result.query, 'SELECT (2 * 3) - (4 * 5)');
228
+ sqlEquals(result, 'SELECT (2 * 3) - (4 * 5)');
240
229
  });
241
230
  },
242
231
  );
@@ -257,7 +246,7 @@ describe('Math Operator Precedence', () => {
257
246
  ],
258
247
  (result, sqlEquals) => {
259
248
  it('should produce a valid Subtract statement of two Divisions', () => {
260
- sqlEquals(result.query, 'SELECT (2 / 3) - (4 / 5)');
249
+ sqlEquals(result, 'SELECT (2 / 3) - (4 / 5)');
261
250
  });
262
251
  },
263
252
  );
@@ -278,7 +267,7 @@ describe('Math Operator Precedence', () => {
278
267
  ],
279
268
  (result, sqlEquals) => {
280
269
  it('should produce a valid Divide statement of two Additions', () => {
281
- sqlEquals(result.query, 'SELECT (2 + 3) / (4 + 5)');
270
+ sqlEquals(result, 'SELECT (2 + 3) / (4 + 5)');
282
271
  });
283
272
  },
284
273
  );
@@ -299,7 +288,7 @@ describe('Math Operator Precedence', () => {
299
288
  ],
300
289
  (result, sqlEquals) => {
301
290
  it('should produce a valid Divide statement of two Subtractions', () => {
302
- sqlEquals(result.query, 'SELECT (2 - 3) / (4 - 5)');
291
+ sqlEquals(result, 'SELECT (2 - 3) / (4 - 5)');
303
292
  });
304
293
  },
305
294
  );
@@ -322,7 +311,7 @@ describe('Math Operator Precedence', () => {
322
311
  ],
323
312
  (result, sqlEquals) => {
324
313
  it('should produce a valid Add statement when there are nested Additions', () => {
325
- sqlEquals(result.query, 'SELECT (2 + 3) + (4 + 5)');
314
+ sqlEquals(result, 'SELECT (2 + 3) + (4 + 5)');
326
315
  });
327
316
  },
328
317
  );
@@ -343,7 +332,7 @@ describe('Math Operator Precedence', () => {
343
332
  ],
344
333
  (result, sqlEquals) => {
345
334
  it('should produce a valid Add statement when there are nested Subtractions', () => {
346
- sqlEquals(result.query, 'SELECT (2 - 3) + (4 - 5)');
335
+ sqlEquals(result, 'SELECT (2 - 3) + (4 - 5)');
347
336
  });
348
337
  },
349
338
  );
@@ -364,7 +353,7 @@ describe('Math Operator Precedence', () => {
364
353
  ],
365
354
  (result, sqlEquals) => {
366
355
  it('should produce a valid Subtract statement when there are nested Additions', () => {
367
- sqlEquals(result.query, 'SELECT (2 + 3) - (4 + 5)');
356
+ sqlEquals(result, 'SELECT (2 + 3) - (4 + 5)');
368
357
  });
369
358
  },
370
359
  );
@@ -385,7 +374,7 @@ describe('Math Operator Precedence', () => {
385
374
  ],
386
375
  (result, sqlEquals) => {
387
376
  it('should produce a valid Add statement when there are nested Subtractions', () => {
388
- sqlEquals(result.query, 'SELECT (2 - 3) - (4 - 5)');
377
+ sqlEquals(result, 'SELECT (2 - 3) - (4 - 5)');
389
378
  });
390
379
  },
391
380
  );
@@ -408,7 +397,7 @@ describe('Math Operator Precedence', () => {
408
397
  ],
409
398
  (result, sqlEquals) => {
410
399
  it('should produce a valid Multiply statement when there are nested Multiplications', () => {
411
- sqlEquals(result.query, 'SELECT (2 * 3) * (4 * 5)');
400
+ sqlEquals(result, 'SELECT (2 * 3) * (4 * 5)');
412
401
  });
413
402
  },
414
403
  );
@@ -429,7 +418,7 @@ describe('Math Operator Precedence', () => {
429
418
  ],
430
419
  (result, sqlEquals) => {
431
420
  it('should produce a valid Multiply statement when there are nested Divisions', () => {
432
- sqlEquals(result.query, 'SELECT (2 / 3) * (4 / 5)');
421
+ sqlEquals(result, 'SELECT (2 / 3) * (4 / 5)');
433
422
  });
434
423
  },
435
424
  );
@@ -450,7 +439,7 @@ describe('Math Operator Precedence', () => {
450
439
  ],
451
440
  (result, sqlEquals) => {
452
441
  it('should produce a valid Divide statement when there are nested Multiplications', () => {
453
- sqlEquals(result.query, 'SELECT (2 * 3) / (4 * 5)');
442
+ sqlEquals(result, 'SELECT (2 * 3) / (4 * 5)');
454
443
  });
455
444
  },
456
445
  );
@@ -471,7 +460,7 @@ describe('Math Operator Precedence', () => {
471
460
  ],
472
461
  (result, sqlEquals) => {
473
462
  it('should produce a valid Multiply statement when there are nested Divisions', () => {
474
- sqlEquals(result.query, 'SELECT (2 / 3) / (4 / 5)');
463
+ sqlEquals(result, 'SELECT (2 / 3) / (4 / 5)');
475
464
  });
476
465
  },
477
466
  );
@@ -1,16 +1,5 @@
1
1
  import { stripIndent } from 'common-tags';
2
- import type { AnyTypeNodes } from '../../src/AbstractSQLCompiler';
3
-
4
- type TestCb = (
5
- result: { query: string },
6
- sqlEquals: (a: string, b: string) => void,
7
- ) => void;
8
- import $test from './test';
9
- const test = $test as (
10
- query: AnyTypeNodes,
11
- binds: any[][] | TestCb,
12
- cb?: TestCb,
13
- ) => void;
2
+ import test from './test';
14
3
 
15
4
  describe('Nested OR EQUALs should create a single IN statement', () => {
16
5
  test(
@@ -44,7 +33,7 @@ describe('Nested OR EQUALs should create a single IN statement', () => {
44
33
  (result, sqlEquals) => {
45
34
  it('should produce a single IN statement', () => {
46
35
  sqlEquals(
47
- result.query,
36
+ result,
48
37
  stripIndent`
49
38
  SELECT 1
50
39
  FROM "table"
@@ -100,7 +89,7 @@ describe('Nested AND NOT EQUALs should create a single NOT IN statement', () =>
100
89
  (result, sqlEquals) => {
101
90
  it('should produce a single IN statement', () => {
102
91
  sqlEquals(
103
- result.query,
92
+ result,
104
93
  stripIndent`
105
94
  SELECT 1
106
95
  FROM "table"
@@ -145,7 +134,7 @@ describe('OR IN/EQUALs should create a single IN statement', () => {
145
134
  (result, sqlEquals) => {
146
135
  it('should produce a single in statement', () => {
147
136
  sqlEquals(
148
- result.query,
137
+ result,
149
138
  stripIndent`
150
139
  SELECT 1
151
140
  FROM "table"
@@ -198,7 +187,7 @@ describe('AND NOT IN/NOT EQUALs should create a single NOT IN statement', () =>
198
187
  (result, sqlEquals) => {
199
188
  it('should produce a single not in statement', () => {
200
189
  sqlEquals(
201
- result.query,
190
+ result,
202
191
  stripIndent`
203
192
  SELECT 1
204
193
  FROM "table"
@@ -1,22 +1,11 @@
1
1
  import { stripIndent } from 'common-tags';
2
- import type { AnyTypeNodes } from '../../src/AbstractSQLCompiler';
3
-
4
- type TestCb = (
5
- result: { query: string },
6
- sqlEquals: (a: string, b: string) => void,
7
- ) => void;
8
- import $test from './test';
9
- const test = $test as (
10
- query: AnyTypeNodes,
11
- binds: any[][] | TestCb,
12
- cb?: TestCb,
13
- ) => void;
2
+ import test from './test';
14
3
 
15
4
  describe('NOT(NOT(...)) should cancel each other out', () => {
16
5
  test(['Not', ['Not', ['Boolean', true]]], [], (result, sqlEquals) => {
17
6
  it('should produce a query using the boolean directly', () => {
18
7
  sqlEquals(
19
- result.query,
8
+ result,
20
9
  stripIndent`
21
10
  SELECT TRUE AS "result";
22
11
  `,
@@ -0,0 +1,192 @@
1
+ import * as AbstractSQLCompiler from '../..';
2
+
3
+ import { expect } from 'chai';
4
+ import _ from 'lodash';
5
+
6
+ type ExpectedBindings = Array<
7
+ AbstractSQLCompiler.Binding | AbstractSQLCompiler.Binding[]
8
+ >;
9
+ const bindingsTest = function (
10
+ actualBindings: AbstractSQLCompiler.Binding[],
11
+ expectedBindings: AbstractSQLCompiler.Binding[] | false = false,
12
+ ) {
13
+ if (expectedBindings === false) {
14
+ it('should not have any bindings', () => {
15
+ expect(actualBindings).to.be.empty;
16
+ });
17
+ } else {
18
+ it('should have matching bindings', () => {
19
+ expect(actualBindings).to.deep.equal(expectedBindings);
20
+ });
21
+ }
22
+ };
23
+
24
+ type SqlEquals = (
25
+ actual:
26
+ | AbstractSQLCompiler.SqlResult
27
+ | AbstractSQLCompiler.SqlResult[]
28
+ | string,
29
+ expected: string,
30
+ ) => void;
31
+ const equals: SqlEquals = (actual, expected) => {
32
+ if (typeof actual !== 'string') {
33
+ if (Array.isArray(actual)) {
34
+ throw new Error('Expected a single query, got multiple');
35
+ }
36
+ actual = actual.query;
37
+ }
38
+ expect(actual).to.equal(expected);
39
+ };
40
+ const sqlEquals = {
41
+ websql: equals,
42
+ mysql: equals,
43
+ postgres(actual, expected) {
44
+ let num = 1;
45
+ while (_.includes(expected, '?')) {
46
+ expected = expected.replace('?', '$' + num);
47
+ num++;
48
+ }
49
+ equals(actual, expected);
50
+ },
51
+ } satisfies Record<string, SqlEquals>;
52
+
53
+ type ExpectationSuccessFn = (
54
+ result:
55
+ | AbstractSQLCompiler.SqlResult
56
+ | [AbstractSQLCompiler.SqlResult, AbstractSQLCompiler.SqlResult],
57
+ sqlEquals: SqlEquals,
58
+ ) => void;
59
+ type ExpectationFailFn = (result: Error) => void;
60
+ type ExpectationFn<ExpectFail extends boolean> = ExpectFail extends true
61
+ ? ExpectationFailFn
62
+ : ExpectationSuccessFn;
63
+
64
+ function runExpectation<ExpectFail extends boolean>(
65
+ describe: Mocha.SuiteFunction,
66
+ engine: keyof typeof sqlEquals,
67
+ expectFailure: ExpectFail,
68
+ input: AbstractSQLCompiler.AbstractSqlQuery,
69
+ expectedBindings: ExpectedBindings | false,
70
+ expectation: ExpectationFn<ExpectFail>,
71
+ ): void;
72
+ function runExpectation<ExpectFail extends boolean>(
73
+ describe: Mocha.SuiteFunction,
74
+ engine: keyof typeof sqlEquals,
75
+ expectFailure: ExpectFail,
76
+ input: AbstractSQLCompiler.AbstractSqlQuery,
77
+ expectation: ExpectationFn<ExpectFail>,
78
+ ): void;
79
+ function runExpectation<ExpectFail extends boolean>(
80
+ describe: Mocha.SuiteFunction,
81
+ engine: keyof typeof sqlEquals,
82
+ expectFailure: ExpectFail,
83
+ input: AbstractSQLCompiler.AbstractSqlQuery,
84
+ ...args:
85
+ | [expectation: ExpectationFn<ExpectFail>]
86
+ | [
87
+ expectedBindings: ExpectedBindings | false,
88
+ expectation: ExpectationFn<ExpectFail>,
89
+ ]
90
+ ): void {
91
+ let expectedBindings: ExpectedBindings | false = false;
92
+ let expectation: ExpectationFn<ExpectFail>;
93
+ switch (args.length) {
94
+ case 1:
95
+ [expectation] = args;
96
+ break;
97
+ case 2:
98
+ [expectedBindings, expectation] = args;
99
+ break;
100
+ }
101
+
102
+ describe('Parsing ' + JSON.stringify(input), function () {
103
+ let result;
104
+ try {
105
+ result = AbstractSQLCompiler[engine].compileRule(input);
106
+ } catch (e: any) {
107
+ if (!expectFailure) {
108
+ throw e;
109
+ }
110
+ (expectation as ExpectationFailFn)(e);
111
+ return;
112
+ }
113
+ if (expectFailure) {
114
+ throw new Error("Expected failure but didn't get one");
115
+ }
116
+ if (Array.isArray(result)) {
117
+ for (let i = 0; i < result.length; i++) {
118
+ const actualResult = result[i];
119
+ if (expectedBindings === false) {
120
+ bindingsTest(actualResult.bindings, false);
121
+ } else if (expectedBindings[0][0] === 'Bind') {
122
+ bindingsTest(
123
+ actualResult.bindings,
124
+ expectedBindings as AbstractSQLCompiler.Binding[],
125
+ );
126
+ } else {
127
+ bindingsTest(
128
+ actualResult.bindings,
129
+ expectedBindings[i] as AbstractSQLCompiler.Binding[],
130
+ );
131
+ }
132
+ }
133
+ } else {
134
+ bindingsTest(
135
+ result.bindings,
136
+ expectedBindings as AbstractSQLCompiler.Binding[],
137
+ );
138
+ }
139
+ (expectation as ExpectationSuccessFn)(result, sqlEquals[engine]);
140
+ });
141
+ }
142
+
143
+ interface BoundRunExpectation<ExpectFail extends boolean> {
144
+ (
145
+ input: AbstractSQLCompiler.AbstractSqlQuery,
146
+ expectedBindings: ExpectedBindings | false,
147
+ expectation: ExpectationFn<ExpectFail>,
148
+ ): void;
149
+ (
150
+ input: AbstractSQLCompiler.AbstractSqlQuery,
151
+ expectation: ExpectationFn<ExpectFail>,
152
+ ): void;
153
+ (
154
+ input: AbstractSQLCompiler.AbstractSqlQuery,
155
+ ...args:
156
+ | [expectation: ExpectationFn<ExpectFail>]
157
+ | [
158
+ expectedBindings: ExpectedBindings | false,
159
+ expectation: ExpectationFn<ExpectFail>,
160
+ ]
161
+ ): void;
162
+ }
163
+
164
+ type MochaBoundRunExpectation = BoundRunExpectation<false> & {
165
+ fail: BoundRunExpectation<true>;
166
+ skip: BoundRunExpectation<false>;
167
+ only: BoundRunExpectation<false>;
168
+ };
169
+ const bindRunExpectation = function (engine: keyof typeof sqlEquals) {
170
+ const bound: MochaBoundRunExpectation = runExpectation.bind(
171
+ null,
172
+ describe,
173
+ engine,
174
+ false,
175
+ );
176
+ bound.fail = runExpectation.bind(null, describe, engine, true);
177
+ bound.skip = runExpectation.bind(null, describe.skip, engine, false);
178
+ // eslint-disable-next-line no-only-tests/no-only-tests -- this is a false positive
179
+ bound.only = runExpectation.bind(null, describe.only, engine, false);
180
+ return bound;
181
+ };
182
+
183
+ const testFn = bindRunExpectation('postgres') as MochaBoundRunExpectation & {
184
+ postgres: MochaBoundRunExpectation;
185
+ mysql: MochaBoundRunExpectation;
186
+ websql: MochaBoundRunExpectation;
187
+ };
188
+ testFn.postgres = bindRunExpectation('postgres');
189
+ testFn.mysql = bindRunExpectation('mysql');
190
+ testFn.websql = bindRunExpectation('websql');
191
+
192
+ export default testFn;
@@ -1,15 +1,4 @@
1
- import type { AnyTypeNodes } from '../../src/AbstractSQLCompiler';
2
-
3
- type TestCb = (
4
- result: { query: string },
5
- sqlEquals: (a: string, b: string) => void,
6
- ) => void;
7
- import $test from './test';
8
- const test = $test as (
9
- query: AnyTypeNodes,
10
- binds: any[][] | TestCb,
11
- cb?: TestCb,
12
- ) => void;
1
+ import test from './test';
13
2
 
14
3
  describe('Concatenate', () => {
15
4
  test(
@@ -22,7 +11,7 @@ describe('Concatenate', () => {
22
11
  ],
23
12
  (result, sqlEquals) => {
24
13
  it('should produce a valid Concatenate statement', () => {
25
- sqlEquals(result.query, `SELECT ('foo' || 'bar')`);
14
+ sqlEquals(result, `SELECT ('foo' || 'bar')`);
26
15
  });
27
16
  },
28
17
  );
@@ -46,7 +35,7 @@ describe('ConcatenateWithSeparator', () => {
46
35
  ],
47
36
  (result, sqlEquals) => {
48
37
  it('should produce a valid ConcatenateWithSeparator statement', () => {
49
- sqlEquals(result.query, `SELECT CONCAT_WS('|', 'foo', 'bar')`);
38
+ sqlEquals(result, `SELECT CONCAT_WS('|', 'foo', 'bar')`);
50
39
  });
51
40
  },
52
41
  );
@@ -70,7 +59,7 @@ describe('Replace', () => {
70
59
  ],
71
60
  (result, sqlEquals) => {
72
61
  it('should produce a valid Replace statement', () => {
73
- sqlEquals(result.query, `SELECT REPLACE('foobar', 'bar', 'baz')`);
62
+ sqlEquals(result, `SELECT REPLACE('foobar', 'bar', 'baz')`);
74
63
  });
75
64
  },
76
65
  );
@@ -84,7 +73,7 @@ describe('CharacterLength', () => {
84
73
  ],
85
74
  (result, sqlEquals) => {
86
75
  it('should produce a valid CharacterLength statement', () => {
87
- sqlEquals(result.query, `SELECT LENGTH('foobar')`);
76
+ sqlEquals(result, `SELECT LENGTH('foobar')`);
88
77
  });
89
78
  },
90
79
  );
@@ -101,7 +90,7 @@ describe('StrPos', () => {
101
90
  ],
102
91
  (result, sqlEquals) => {
103
92
  it('should produce a valid StrPos statement', () => {
104
- sqlEquals(result.query, `SELECT STRPOS('foobar', 'b')`);
93
+ sqlEquals(result, `SELECT STRPOS('foobar', 'b')`);
105
94
  });
106
95
  },
107
96
  );
@@ -125,7 +114,7 @@ describe('Substring', () => {
125
114
  ],
126
115
  (result, sqlEquals) => {
127
116
  it('should produce a valid Substring statement', () => {
128
- sqlEquals(result.query, `SELECT SUBSTRING('foobar', 0, 5)`);
117
+ sqlEquals(result, `SELECT SUBSTRING('foobar', 0, 5)`);
129
118
  });
130
119
  },
131
120
  );
@@ -139,7 +128,7 @@ describe('Right', () => {
139
128
  ],
140
129
  (result, sqlEquals) => {
141
130
  it('should produce a valid Right statement', () => {
142
- sqlEquals(result.query, `SELECT RIGHT('foobar', 1)`);
131
+ sqlEquals(result, `SELECT RIGHT('foobar', 1)`);
143
132
  });
144
133
  },
145
134
  );
@@ -150,7 +139,7 @@ describe('Lower', () => {
150
139
  ['SelectQuery', ['Select', [['Lower', ['EmbeddedText', 'FOOBAR']]]]],
151
140
  (result, sqlEquals) => {
152
141
  it('should produce a valid Lower statement', () => {
153
- sqlEquals(result.query, `SELECT LOWER('FOOBAR')`);
142
+ sqlEquals(result, `SELECT LOWER('FOOBAR')`);
154
143
  });
155
144
  },
156
145
  );
@@ -161,7 +150,7 @@ describe('Upper', () => {
161
150
  ['SelectQuery', ['Select', [['Upper', ['EmbeddedText', 'foobar']]]]],
162
151
  (result, sqlEquals) => {
163
152
  it('should produce a valid Upper statement', () => {
164
- sqlEquals(result.query, `SELECT UPPER('foobar')`);
153
+ sqlEquals(result, `SELECT UPPER('foobar')`);
165
154
  });
166
155
  },
167
156
  );
@@ -172,7 +161,7 @@ describe('Trim', () => {
172
161
  ['SelectQuery', ['Select', [['Trim', ['EmbeddedText', ' foobar ']]]]],
173
162
  (result, sqlEquals) => {
174
163
  it('should produce a valid Trim statement', () => {
175
- sqlEquals(result.query, `SELECT TRIM(' foobar ')`);
164
+ sqlEquals(result, `SELECT TRIM(' foobar ')`);
176
165
  });
177
166
  },
178
167
  );
@@ -66,28 +66,25 @@ const sqlEquals = {
66
66
  },
67
67
  };
68
68
 
69
- const runExpectation = function (
70
- describe,
71
- engine,
72
- input,
73
- method,
74
- expectedBindings,
75
- body,
76
- expectation,
77
- ) {
78
- if (expectation == null) {
79
- if (body == null) {
80
- if (expectedBindings == null) {
81
- expectation = method;
82
- method = 'GET';
83
- } else {
84
- expectation = expectedBindings;
85
- }
86
- expectedBindings = false;
87
- } else {
88
- expectation = body;
89
- }
90
- body = {};
69
+ const runExpectation = function (describe, engine, input, ...args) {
70
+ /** @type {import('@balena/odata-parser').SupportedMethod} */
71
+ let method = 'GET';
72
+ let expectedBindings = false;
73
+ let body = {};
74
+ let expectation;
75
+ switch (args.length) {
76
+ case 1:
77
+ [expectation] = args;
78
+ break;
79
+ case 2:
80
+ [method, expectation] = args;
81
+ break;
82
+ case 3:
83
+ [method, expectedBindings, expectation] = args;
84
+ break;
85
+ case 4:
86
+ [method, expectedBindings, body, expectation] = args;
87
+ break;
91
88
  }
92
89
 
93
90
  describe(