@malloydata/malloy-tests 0.0.69-dev230808200646 → 0.0.69-dev230809221417

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 (79) hide show
  1. package/dist/databases/all/db_index.spec.d.ts +1 -1
  2. package/dist/databases/all/db_index.spec.js +116 -6
  3. package/dist/databases/all/db_index.spec.js.map +1 -1
  4. package/dist/databases/all/expr.spec.js +542 -6
  5. package/dist/databases/all/expr.spec.js.map +1 -1
  6. package/dist/databases/all/functions.spec.d.ts +1 -1
  7. package/dist/databases/all/functions.spec.js +745 -6
  8. package/dist/databases/all/functions.spec.js.map +1 -1
  9. package/dist/databases/all/join.spec.d.ts +1 -1
  10. package/dist/databases/all/join.spec.js +272 -6
  11. package/dist/databases/all/join.spec.js.map +1 -1
  12. package/dist/databases/all/nomodel.spec.d.ts +1 -1
  13. package/dist/databases/all/nomodel.spec.js +919 -6
  14. package/dist/databases/all/nomodel.spec.js.map +1 -1
  15. package/dist/databases/all/orderby.spec.d.ts +1 -1
  16. package/dist/databases/all/orderby.spec.js +187 -6
  17. package/dist/databases/all/orderby.spec.js.map +1 -1
  18. package/dist/databases/all/problems.spec.d.ts +1 -1
  19. package/dist/databases/all/problems.spec.js +76 -6
  20. package/dist/databases/all/problems.spec.js.map +1 -1
  21. package/dist/databases/all/sql_expressions.spec.d.ts +1 -1
  22. package/dist/databases/all/sql_expressions.spec.js +58 -6
  23. package/dist/databases/all/sql_expressions.spec.js.map +1 -1
  24. package/dist/databases/all/time.spec.d.ts +1 -1
  25. package/dist/databases/all/time.spec.js +609 -5
  26. package/dist/databases/all/time.spec.js.map +1 -1
  27. package/dist/databases/shared/test_list.js +1 -20
  28. package/dist/databases/shared/test_list.js.map +1 -1
  29. package/dist/index.d.ts +0 -8
  30. package/dist/index.js +1 -17
  31. package/dist/index.js.map +1 -1
  32. package/package.json +6 -6
  33. package/src/databases/all/db_index.spec.ts +137 -6
  34. package/src/databases/all/expr.spec.ts +661 -7
  35. package/src/databases/all/functions.spec.ts +1092 -6
  36. package/src/databases/all/join.spec.ts +309 -6
  37. package/src/databases/all/nomodel.spec.ts +1114 -7
  38. package/src/databases/all/orderby.spec.ts +229 -6
  39. package/src/databases/all/problems.spec.ts +82 -6
  40. package/src/databases/all/sql_expressions.spec.ts +65 -6
  41. package/src/databases/all/time.spec.ts +734 -5
  42. package/src/databases/shared/test_list.ts +1 -20
  43. package/src/index.ts +0 -9
  44. package/dist/databases/shared/db_index.d.ts +0 -3
  45. package/dist/databases/shared/db_index.js +0 -123
  46. package/dist/databases/shared/db_index.js.map +0 -1
  47. package/dist/databases/shared/expr.d.ts +0 -3
  48. package/dist/databases/shared/expr.js +0 -551
  49. package/dist/databases/shared/expr.js.map +0 -1
  50. package/dist/databases/shared/functions.d.ts +0 -3
  51. package/dist/databases/shared/functions.js +0 -754
  52. package/dist/databases/shared/functions.js.map +0 -1
  53. package/dist/databases/shared/join.d.ts +0 -3
  54. package/dist/databases/shared/join.js +0 -302
  55. package/dist/databases/shared/join.js.map +0 -1
  56. package/dist/databases/shared/nomodel.d.ts +0 -3
  57. package/dist/databases/shared/nomodel.js +0 -950
  58. package/dist/databases/shared/nomodel.js.map +0 -1
  59. package/dist/databases/shared/orderby.d.ts +0 -3
  60. package/dist/databases/shared/orderby.js +0 -217
  61. package/dist/databases/shared/orderby.js.map +0 -1
  62. package/dist/databases/shared/problems.d.ts +0 -3
  63. package/dist/databases/shared/problems.js +0 -106
  64. package/dist/databases/shared/problems.js.map +0 -1
  65. package/dist/databases/shared/sql_expressions.d.ts +0 -3
  66. package/dist/databases/shared/sql_expressions.js +0 -88
  67. package/dist/databases/shared/sql_expressions.js.map +0 -1
  68. package/dist/databases/shared/time.d.ts +0 -3
  69. package/dist/databases/shared/time.js +0 -640
  70. package/dist/databases/shared/time.js.map +0 -1
  71. package/src/databases/shared/db_index.ts +0 -167
  72. package/src/databases/shared/expr.ts +0 -695
  73. package/src/databases/shared/functions.ts +0 -1126
  74. package/src/databases/shared/join.ts +0 -340
  75. package/src/databases/shared/nomodel.ts +0 -1150
  76. package/src/databases/shared/orderby.ts +0 -260
  77. package/src/databases/shared/problems.ts +0 -113
  78. package/src/databases/shared/sql_expressions.ts +0 -96
  79. package/src/databases/shared/time.ts +0 -786
@@ -26,11 +26,547 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const runtimes_1 = require("../../runtimes");
27
27
  require("../../util/db-jest-matchers");
28
28
  const util_1 = require("../../util");
29
- const __1 = require("../..");
30
29
  const runtimes = new runtimes_1.RuntimeList((0, util_1.databasesFromEnvironmentOr)(runtimes_1.allDatabases));
31
- /*
32
- * This test file reuses common tests definitions.
33
- * For actual test development please go to: test/src/databases/shared/expr.spec.ts
34
- */
35
- (0, __1.exprSharedTests)(runtimes);
30
+ const expressionModelText = `
31
+ source: aircraft_models is table('malloytest.aircraft_models') extend {
32
+ primary_key: aircraft_model_code
33
+ measure:
34
+ airport_count is count(*),
35
+ aircraft_model_count is count(),
36
+ total_seats is sum(seats),
37
+ boeing_seats is sum(seats) {? manufacturer ? 'BOEING'},
38
+ percent_boeing is boeing_seats / total_seats * 100,
39
+ percent_boeing_floor is floor(boeing_seats / total_seats * 100),
40
+ dimension: seats_bucketed is floor(seats/20)*20.0
41
+ }
42
+
43
+ source: aircraft is table('malloytest.aircraft') extend {
44
+ primary_key: tail_num
45
+ join_one: aircraft_models with aircraft_model_code
46
+ measure: aircraft_count is count(*)
47
+ query: by_manufacturer is {
48
+ top: 5
49
+ group_by: aircraft_models.manufacturer
50
+ aggregate: aircraft_count
51
+ }
52
+ }
53
+ `;
54
+ describe.each(runtimes.runtimeList)('%s', (databaseName, runtime) => {
55
+ const expressionModel = runtime.loadModel(expressionModelText);
56
+ // basic calculations for sum, filtered sum, without a join.
57
+ it('basic calculations', async () => {
58
+ const result = await expressionModel
59
+ .loadQuery(`
60
+ query: aircraft_models->{
61
+ aggregate:
62
+ total_seats,
63
+ total_seats2 is sum(seats),
64
+ boeing_seats,
65
+ boeing_seats2 is sum(seats) {? manufacturer ? 'BOEING'},
66
+ boeing_seats3 is total_seats {? manufacturer ? 'BOEING'},
67
+ percent_boeing,
68
+ percent_boeing2 is boeing_seats / total_seats * 100,
69
+ -- percent_boeing_floor,
70
+ -- percent_boeing_floor2 is FLOOR(boeing_seats / total_seats * 100)
71
+ }
72
+ `)
73
+ .run();
74
+ expect(result.data.path(0, 'total_seats').value).toBe(452415);
75
+ expect(result.data.path(0, 'total_seats2').value).toBe(452415);
76
+ expect(result.data.path(0, 'boeing_seats').value).toBe(252771);
77
+ expect(result.data.path(0, 'boeing_seats2').value).toBe(252771);
78
+ expect(result.data.path(0, 'boeing_seats3').value).toBe(252771);
79
+ expect(Math.floor(result.data.path(0, 'percent_boeing').number.value)).toBe(55);
80
+ expect(Math.floor(result.data.path(0, 'percent_boeing2').number.value)).toBe(55);
81
+ // expect(result.data.path(0, "percent_boeing_floor").value).toBe(55);
82
+ // expect(result.data.path(0, "percent_boeing_floor2").value).toBe(55);
83
+ });
84
+ // Floor is broken (doesn't compile because the expression returned isn't an aggregate.)
85
+ it('Floor() -or any function bustage with aggregates', async () => {
86
+ const result = await expressionModel
87
+ .loadQuery(`
88
+ query: aircraft_models->{
89
+ aggregate:
90
+ percent_boeing_floor
91
+ percent_boeing_floor2 is FLOOR(boeing_seats / total_seats * 100)
92
+ }
93
+ `)
94
+ .run();
95
+ expect(result.data.path(0, 'percent_boeing_floor').value).toBe(55);
96
+ expect(result.data.path(0, 'percent_boeing_floor2').value).toBe(55);
97
+ });
98
+ // Model based version of sums.
99
+ it('model: expression fixups.', async () => {
100
+ const result = await expressionModel
101
+ .loadQuery(`
102
+ query: aircraft->{
103
+ aggregate:
104
+ aircraft_models.total_seats
105
+ aircraft_models.boeing_seats
106
+ }
107
+ `)
108
+ .run();
109
+ expect(result.data.path(0, 'total_seats').value).toBe(18294);
110
+ expect(result.data.path(0, 'boeing_seats').value).toBe(6244);
111
+ });
112
+ // turtle expressions
113
+ it('model: turtle', async () => {
114
+ const result = await expressionModel
115
+ .loadQuery(`
116
+ query: aircraft->by_manufacturer
117
+ `)
118
+ .run();
119
+ expect(result.data.path(0, 'manufacturer').value).toBe('CESSNA');
120
+ });
121
+ // filtered turtle expressions
122
+ (0, util_1.testIf)(runtime.supportsNesting)('model: filtered turtle', async () => {
123
+ const result = await expressionModel
124
+ .loadQuery(`
125
+ query: aircraft->{
126
+ nest: b is by_manufacturer{? aircraft_models.manufacturer ?~'B%'}
127
+ }
128
+ `)
129
+ .run();
130
+ expect(result.data.path(0, 'b', 0, 'manufacturer').value).toBe('BEECH');
131
+ });
132
+ // having.
133
+ it('model: simple having', async () => {
134
+ const result = await expressionModel
135
+ .loadQuery(`
136
+ query: aircraft->{
137
+ having: aircraft_count >90
138
+ group_by: state
139
+ aggregate: aircraft_count
140
+ order_by: 2
141
+ }
142
+ `)
143
+ .run();
144
+ expect(result.data.path(0, 'aircraft_count').value).toBe(91);
145
+ });
146
+ (0, util_1.testIf)(runtime.supportsNesting)('model: turtle having2', async () => {
147
+ const result = await expressionModel
148
+ .loadQuery(`
149
+ -- hacking a null test for now
150
+ query: aircraft->{
151
+ top: 10
152
+ order_by: 1
153
+ where: region != NULL
154
+ group_by: region
155
+ nest: by_state is {
156
+ top: 10
157
+ order_by: 1 desc
158
+ having: aircraft_count > 50
159
+ group_by: state
160
+ aggregate: aircraft_count
161
+ }
162
+ }
163
+ `)
164
+ .run();
165
+ expect(result.data.path(0, 'by_state', 0, 'state').value).toBe('VA');
166
+ });
167
+ (0, util_1.testIf)(runtime.supportsNesting)('model: turtle having on main', async () => {
168
+ const result = await expressionModel
169
+ .loadQuery(`
170
+ query: aircraft->{
171
+ order_by: 2 asc
172
+ having: aircraft_count ? >500
173
+ group_by: region
174
+ aggregate: aircraft_count
175
+ nest: by_state is {
176
+ order_by: 2 asc
177
+ having: aircraft_count >45
178
+ group_by: state
179
+ aggregate: aircraft_count
180
+ nest: by_city is {
181
+ order_by: 2 asc
182
+ having: aircraft_count ? >5
183
+ group_by: city
184
+ aggregate: aircraft_count
185
+ }
186
+ }
187
+ }
188
+ `)
189
+ .run();
190
+ expect(result.data.path(0, 'by_state', 0, 'by_city', 0, 'city').value).toBe('ALBUQUERQUE');
191
+ });
192
+ // bigquery doesn't like to partition by floats,
193
+ (0, util_1.testIf)(runtime.supportsNesting)('model: having float group by partition', async () => {
194
+ await expect(runtime).queryMatches(`${expressionModelText}
195
+ query: aircraft_models->{
196
+ order_by: 1
197
+ where: seats_bucketed > 0
198
+ having: aircraft_model_count > 400
199
+ group_by: seats_bucketed
200
+ aggregate: aircraft_model_count
201
+ nest: foo is {
202
+ group_by: engines
203
+ aggregate: aircraft_model_count
204
+ }
205
+ }`, { aircraft_model_count: 448 });
206
+ });
207
+ it('model: aggregate functions distinct min max', async () => {
208
+ const result = await expressionModel
209
+ .loadQuery(`
210
+ query: aircraft_models->{
211
+ aggregate:
212
+ distinct_seats is count(distinct seats),
213
+ boeing_distinct_seats is count(distinct seats) {?manufacturer ? 'BOEING'},
214
+ min_seats is min(seats),
215
+ cessna_min_seats is min(seats) {? manufacturer ? 'CESSNA'},
216
+ max_seats is max(seats),
217
+ cessna_max_seats is max(seats) {? manufacturer ? 'CESSNA'},
218
+ min_code is min(aircraft_model_code),
219
+ boeing_min_model is min(model) {? manufacturer ? 'BOEING'},
220
+ max_model is max(model),
221
+ boeing_max_model is max(model) {? manufacturer ? 'BOEING'},
222
+ }
223
+ `)
224
+ .run();
225
+ expect(result.data.path(0, 'distinct_seats').value).toBe(187);
226
+ expect(result.data.path(0, 'boeing_distinct_seats').value).toBe(85);
227
+ expect(result.data.path(0, 'min_seats').value).toBe(0);
228
+ expect(result.data.path(0, 'cessna_min_seats').value).toBe(1);
229
+ expect(result.data.path(0, 'max_seats').value).toBe(660);
230
+ expect(result.data.path(0, 'min_code').value).toBe('0030109');
231
+ expect(result.data.path(0, 'cessna_max_seats').value).toBe(14);
232
+ expect(result.data.path(0, 'boeing_min_model').value).toBe('100');
233
+ expect(result.data.path(0, 'max_model').value).toBe('ZWEIFEL PA18');
234
+ expect(result.data.path(0, 'boeing_max_model').value).toBe('YL-15');
235
+ });
236
+ (databaseName !== 'bigquery' ? it.skip : it)('model: dates named', async () => {
237
+ const result = await expressionModel
238
+ .loadQuery(`
239
+ query: table('malloytest.alltypes')->{
240
+ group_by:
241
+ t_date,
242
+ t_date_month is t_date.month,
243
+ t_date_year is t_date.year,
244
+ t_timestamp,
245
+ t_timestamp_date is t_timestamp.day,
246
+ t_timestamp_hour is t_timestamp.hour,
247
+ t_timestamp_minute is t_timestamp.minute,
248
+ t_timestamp_second is t_timestamp.second,
249
+ t_timestamp_month is t_timestamp.month,
250
+ t_timestamp_year is t_timestamp.year,
251
+ }
252
+
253
+ `)
254
+ .run();
255
+ expect(result.data.path(0, 't_date').value).toEqual(new Date('2020-03-02'));
256
+ expect(result.data.path(0, 't_date_month').value).toEqual(new Date('2020-03-01'));
257
+ expect(result.data.path(0, 't_date_year').value).toEqual(new Date('2020-01-01'));
258
+ expect(result.data.path(0, 't_timestamp').value).toEqual(new Date('2020-03-02T12:35:56.000Z'));
259
+ expect(result.data.path(0, 't_timestamp_second').value).toEqual(new Date('2020-03-02T12:35:56.000Z'));
260
+ expect(result.data.path(0, 't_timestamp_minute').value).toEqual(new Date('2020-03-02T12:35:00.000Z'));
261
+ expect(result.data.path(0, 't_timestamp_hour').value).toEqual(new Date('2020-03-02T12:00:00.000Z'));
262
+ expect(result.data.path(0, 't_timestamp_date').value).toEqual(new Date('2020-03-02'));
263
+ expect(result.data.path(0, 't_timestamp_month').value).toEqual(new Date('2020-03-01'));
264
+ expect(result.data.path(0, 't_timestamp_year').value).toEqual(new Date('2020-01-01'));
265
+ });
266
+ it.skip('defines in model', async () => {
267
+ // const result1 = await model.makeQuery(`
268
+ // define a is ('malloytest.alltypes');
269
+ // explore a | reduce x is count(*)
270
+ // `);
271
+ // const result = await model.makeQuery(`
272
+ // define a is ('malloytest.alltypes');
273
+ // explore a | reduce x is count(*)
274
+ // `);
275
+ });
276
+ it('named query metadata undefined', async () => {
277
+ const result = await expressionModel
278
+ .loadQuery(`
279
+ query: aircraft->{
280
+ aggregate: aircraft_count is count()
281
+ }
282
+ `)
283
+ .run();
284
+ // TODO The result explore should really be unnamed. This test currently
285
+ // inspects inner information because we have no way to have unnamed
286
+ // explores today.
287
+ // expect(result.getResultExplore().name).toBe(undefined);
288
+ expect(result._queryResult.queryName).toBe(undefined);
289
+ });
290
+ it('named query metadata named', async () => {
291
+ const result = await expressionModel
292
+ .loadQuery(`
293
+ query: aircraft->by_manufacturer
294
+ `)
295
+ .run();
296
+ expect(result.resultExplore.name).toBe('by_manufacturer');
297
+ });
298
+ it('named query metadata named head of pipeline', async () => {
299
+ const result = await expressionModel
300
+ .loadQuery(`
301
+ query: aircraft->by_manufacturer->{ aggregate: c is count()}
302
+ `)
303
+ .run();
304
+ // TODO Same as above -- this test should check the explore name
305
+ // expect(result.getResultExplore().name).toBe(undefined);
306
+ expect(result._queryResult.queryName).toBe(undefined);
307
+ });
308
+ it('filtered explores basic', async () => {
309
+ const result = await expressionModel
310
+ .loadQuery(`
311
+ source: b is aircraft{ where: aircraft_models.manufacturer ? ~'B%' }
312
+
313
+ query: b->{aggregate: m_count is count(distinct aircraft_models.manufacturer) }
314
+ `)
315
+ .run();
316
+ expect(result.data.path(0, 'm_count').value).toBe(63);
317
+ });
318
+ (0, util_1.testIf)(runtime.supportsNesting)('query with aliasname used twice', async () => {
319
+ const result = await expressionModel
320
+ .loadQuery(`
321
+ query: aircraft->{
322
+ group_by: first is substr(city,1,1)
323
+ aggregate: aircraft_count is count()
324
+ nest: aircraft is {
325
+ group_by: first_two is substr(city,1,2)
326
+ aggregate: aircraft_count is count()
327
+ nest: aircraft is {
328
+ group_by: first_three is substr(city,1,3)
329
+ aggregate: aircraft_count is count()
330
+ }
331
+ }
332
+ } -> {
333
+ project:
334
+ aircraft.aircraft.first_three
335
+ aircraft_count
336
+ order_by: 2 desc, 1
337
+ }
338
+ `)
339
+ .run();
340
+ expect(result.data.path(0, 'first_three').value).toBe('SAB');
341
+ });
342
+ it.skip('join foreign_key reverse', async () => {
343
+ const result = await expressionModel
344
+ .loadQuery(`
345
+ source: a is table('malloytest.aircraft') {
346
+ primary_key: tail_num
347
+ measure: aircraft_count is count()
348
+ }
349
+ query: table('malloytest.aircraft_models') {
350
+ primary_key: aircraft_model_code
351
+ join_many: a on a.aircraft_model_code
352
+
353
+ some_measures is {
354
+ aggregate: am_count is count()
355
+ aggregate: a.aircraft_count
356
+ }
357
+ } -> some_measure
358
+ `)
359
+ .run();
360
+ expect(result.data.path(0, 'first_three').value).toBe('SAN');
361
+ });
362
+ it('joined filtered explores', async () => {
363
+ const result = await expressionModel
364
+ .loadQuery(`
365
+ source: a_models is table('malloytest.aircraft_models'){
366
+ where: manufacturer ? ~'B%'
367
+ primary_key: aircraft_model_code
368
+ measure:model_count is count()
369
+ }
370
+
371
+ source: aircraft2 is table('malloytest.aircraft'){
372
+ join_one: model is a_models with aircraft_model_code
373
+ measure: aircraft_count is count()
374
+ }
375
+
376
+ query: aircraft2->{
377
+ aggregate:
378
+ model.model_count
379
+ aircraft_count
380
+ }
381
+ `)
382
+ .run();
383
+ expect(result.data.path(0, 'model_count').value).toBe(244);
384
+ expect(result.data.path(0, 'aircraft_count').value).toBe(3599);
385
+ });
386
+ it('joined filtered explores with dependancies', async () => {
387
+ const result = await expressionModel
388
+ .loadQuery(`
389
+ source: bo_models is
390
+ from(
391
+ table('malloytest.aircraft_models') {? manufacturer ? ~ 'BO%' }
392
+ -> { project: aircraft_model_code, manufacturer, seats }
393
+ ) {
394
+ primary_key: aircraft_model_code
395
+ measure: bo_count is count()
396
+ }
397
+
398
+ source: b_models is
399
+ from(
400
+ table('malloytest.aircraft_models') {? manufacturer ? ~ 'B%' }
401
+ -> { project: aircraft_model_code, manufacturer, seats }
402
+ ) {
403
+ where: bo_models.seats > 200
404
+ primary_key: aircraft_model_code
405
+ measure: b_count is count()
406
+ join_one: bo_models with aircraft_model_code
407
+ }
408
+
409
+ source: models is table('malloytest.aircraft_models') {
410
+ join_one: b_models with aircraft_model_code
411
+ measure: model_count is count()
412
+ }
413
+
414
+ query: models -> {
415
+ aggregate: model_count
416
+ aggregate: b_models.b_count
417
+ -- aggregate: b_models.bo_models.bo_count
418
+ }
419
+ `)
420
+ .run();
421
+ expect(result.data.path(0, 'model_count').value).toBe(60461);
422
+ expect(result.data.path(0, 'b_count').value).toBe(355);
423
+ });
424
+ it('group by explore - simple group by', async () => {
425
+ const result = await expressionModel
426
+ .loadQuery(`
427
+ query: aircraft->{
428
+ group_by: aircraft_models
429
+ aggregate: aircraft_count
430
+ }
431
+ `)
432
+ .run();
433
+ expect(result.data.path(0, 'aircraft_count').value).toBe(58);
434
+ expect(result.data.path(0, 'aircraft_models_id').value).toBe('7102802');
435
+ });
436
+ it('group by explore - pipeline', async () => {
437
+ const result = await expressionModel
438
+ .loadQuery(`
439
+ query: aircraft->{
440
+ group_by: aircraft_models
441
+ aggregate: aircraft_count
442
+ } -> {
443
+ group_by: aircraft_models.manufacturer
444
+ aggregate: aircraft_count is aircraft_count.sum()
445
+ }
446
+ `)
447
+ .run();
448
+ expect(result.data.path(0, 'aircraft_count').value).toBe(1048);
449
+ expect(result.data.path(0, 'manufacturer').value).toBe('CESSNA');
450
+ });
451
+ it('group by explore - pipeline 2 levels', async () => {
452
+ const result = await expressionModel
453
+ .loadQuery(`
454
+ source: f is table('malloytest.flights'){
455
+ join_one: a is table('malloytest.aircraft') {
456
+ join_one: state_facts is table('malloytest.state_facts'){primary_key: state} with state
457
+ } on tail_num = a.tail_num
458
+ }
459
+
460
+ query: f-> {
461
+ group_by: a.state_facts
462
+ aggregate: flight_count is count()
463
+ } -> {
464
+ group_by: state_facts.popular_name
465
+ aggregate: flight_count is flight_count.sum()
466
+ }
467
+ `)
468
+ .run();
469
+ // console.log(result.data.toObject());
470
+ expect(result.data.path(0, 'flight_count').value).toBe(199726);
471
+ expect(result.data.path(0, 'popular_name').value).toBe('Isabella');
472
+ });
473
+ });
474
+ describe.each(runtimes.runtimeList)('%s', (databaseName, runtime) => {
475
+ const sqlEq = (0, util_1.mkSqlEqWith)(runtime, {
476
+ malloy: `+ {
477
+ dimension: friName is 'friday'
478
+ dimension: friDay is 5
479
+ dimension: satName is 'saturday'
480
+ dimension: satDay is 6
481
+ }`,
482
+ });
483
+ describe.skip('alternations with not-eq', () => {
484
+ /*
485
+ Here's the desired truth table ...
486
+
487
+ x x != y | z
488
+ ====== ============
489
+ y false
490
+ z false
491
+ ^[yz] true
492
+ */
493
+ test('x not-eq y or z : x eq y', async () => {
494
+ const result = await sqlEq('6 != (6|7)', false);
495
+ expect(result).isSqlEq();
496
+ });
497
+ test('x not-eq y or z : x eq z', async () => {
498
+ const result = await sqlEq('7 != (6|7)', false);
499
+ expect(result).isSqlEq();
500
+ });
501
+ test('x not-eq y or z : else', async () => {
502
+ const result = await sqlEq('5 != (6|7)', true);
503
+ expect(result).isSqlEq();
504
+ });
505
+ /*
506
+ Writing this the old way, should have the same truth table ...
507
+ x != y & != z
508
+ */
509
+ test('x not-eq y and not-eq z : x eq y', async () => {
510
+ const result = await sqlEq('6 != (6 & !=7)', false);
511
+ expect(result).isSqlEq();
512
+ });
513
+ test('x not-eq y and not-eq z : x eq z', async () => {
514
+ const result = await sqlEq('7 != (6 & != 7)', false);
515
+ expect(result).isSqlEq();
516
+ });
517
+ test('x not-eq y and not-eq z : else', async () => {
518
+ const result = await sqlEq('5 != (6 & !=7)', true);
519
+ expect(result).isSqlEq();
520
+ });
521
+ });
522
+ describe('string literal quoting', () => {
523
+ const dq = '"';
524
+ const tick = "'";
525
+ const back = '\\';
526
+ test('quote single character', async () => {
527
+ expect(await sqlEq(`'${back}x'`, 'x')).isSqlEq();
528
+ });
529
+ test('quote single quote', async () => {
530
+ expect(await sqlEq(`'${back}${tick}'`, tick)).isSqlEq();
531
+ });
532
+ test('quote double quote', async () => {
533
+ await expect(runtime).queryMatches(`sql: x is {connection:"${databaseName}" select:"""SELECT 1 as x"""}
534
+ query: from_sql(x) -> {
535
+ project: double_quote is "${back}${dq}"
536
+ }
537
+ `, { double_quote: '"' });
538
+ });
539
+ test('quote backslash', async () => {
540
+ expect(await sqlEq(`'${back}${back}'`, back)).isSqlEq();
541
+ });
542
+ });
543
+ test('nullish ?? operator', async () => {
544
+ await expect(runtime).queryMatches(`sql: nullTest is { connection: "${databaseName}" select: """
545
+ SELECT '' as null_value, '' as string_value
546
+ UNION ALL SELECT null, 'correct'
547
+ """ }
548
+ query: from_sql(nullTest) -> {
549
+ where: null_value = null
550
+ project:
551
+ found_null is null_value ?? 'correct',
552
+ else_pass is string_value ?? 'incorrect'
553
+ literal_null is null ?? 'correct'
554
+ }`, { found_null: 'correct', else_pass: 'correct', literal_null: 'correct' });
555
+ });
556
+ test('dimension expressions expanded with parens properly', async () => {
557
+ await expect(runtime).queryMatches(`
558
+ sql: tbl is { connection: "${databaseName}" select: """SELECT 1 as n"""}
559
+ query: from_sql(tbl) + {
560
+ dimension: fot is (false) or (true)
561
+ } -> {
562
+ project:
563
+ no_paren is false and fot
564
+ paren is false and (fot)
565
+ }
566
+ `, { paren: false, no_paren: false });
567
+ });
568
+ });
569
+ afterAll(async () => {
570
+ await runtimes.closeAll();
571
+ });
36
572
  //# sourceMappingURL=expr.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expr.spec.js","sourceRoot":"","sources":["../../../src/databases/all/expr.spec.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B;;;;;;;;;;;;;;;;;;;;;GAqBG;;AAEH,6CAAyD;AACzD,uCAAqC;AACrC,qCAAsD;AACtD,6BAAsC;AAEtC,MAAM,QAAQ,GAAG,IAAI,sBAAW,CAAC,IAAA,iCAA0B,EAAC,uBAAY,CAAC,CAAC,CAAC;AAE3E;;;GAGG;AACH,IAAA,mBAAe,EAAC,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"expr.spec.js","sourceRoot":"","sources":["../../../src/databases/all/expr.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export {};
1
+ import '../../util/db-jest-matchers';