@malloydata/malloy-tests 0.0.95-dev231019211822 → 0.0.95
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 +213 -1
- package/dist/api.spec.d.ts +1 -1
- package/dist/api.spec.js +6 -13
- package/dist/api.spec.js.map +1 -1
- package/dist/databases/all/db_index.spec.js +21 -41
- package/dist/databases/all/db_index.spec.js.map +1 -1
- package/dist/databases/all/expr.spec.js +262 -339
- package/dist/databases/all/expr.spec.js.map +1 -1
- package/dist/databases/all/functions.spec.js +37 -35
- package/dist/databases/all/functions.spec.js.map +1 -1
- package/dist/databases/all/join.spec.js +125 -169
- package/dist/databases/all/join.spec.js.map +1 -1
- package/dist/databases/all/nomodel.spec.js +335 -594
- package/dist/databases/all/nomodel.spec.js.map +1 -1
- package/dist/databases/all/orderby.spec.js +82 -128
- package/dist/databases/all/orderby.spec.js.map +1 -1
- package/dist/databases/all/sql_expressions.spec.js +27 -43
- package/dist/databases/all/sql_expressions.spec.js.map +1 -1
- package/dist/databases/all/time.spec.js +63 -103
- package/dist/databases/all/time.spec.js.map +1 -1
- package/dist/databases/bigquery/double_truncation.spec.js +1 -1
- package/dist/databases/bigquery/handexpr.spec.js +12 -12
- package/dist/databases/bigquery/injestion_time_partitioning.spec.js +22 -22
- package/dist/databases/bigquery/joined_filters.spec.js +3 -3
- package/dist/databases/bigquery/json.spec.d.ts +1 -1
- package/dist/databases/bigquery/json.spec.js +25 -45
- package/dist/databases/bigquery/json.spec.js.map +1 -1
- package/dist/databases/bigquery/malloy_query.spec.d.ts +1 -1
- package/dist/databases/bigquery/malloy_query.spec.js +47 -48
- package/dist/databases/bigquery/malloy_query.spec.js.map +1 -1
- package/dist/databases/bigquery/time.spec.js +9 -13
- package/dist/databases/bigquery/time.spec.js.map +1 -1
- package/dist/databases/bigquery/wildcard_table_names.spec.js +19 -19
- package/dist/databases/bigquery-duckdb/nested_source_table.spec.js +53 -87
- package/dist/databases/bigquery-duckdb/nested_source_table.spec.js.map +1 -1
- package/dist/databases/bigquery-postgres/multi_connection.spec.js +5 -20
- package/dist/databases/bigquery-postgres/multi_connection.spec.js.map +1 -1
- package/dist/databases/bigquery-postgres/streaming.spec.js +6 -6
- package/dist/databases/bigquery-postgres/streaming.spec.js.map +1 -1
- package/dist/databases/duckdb/duckdb.spec.js +24 -33
- package/dist/databases/duckdb/duckdb.spec.js.map +1 -1
- package/dist/databases/postgres/postgres.spec.js +46 -67
- package/dist/databases/postgres/postgres.spec.js.map +1 -1
- package/dist/jestMatcher.spec.d.ts +1 -0
- package/dist/jestMatcher.spec.js +81 -0
- package/dist/jestMatcher.spec.js.map +1 -0
- package/dist/render/render.spec.js +10 -12
- package/dist/render/render.spec.js.map +1 -1
- package/dist/tags.spec.js +22 -2
- package/dist/tags.spec.js.map +1 -1
- package/dist/util/db-jest-matchers.d.ts +17 -6
- package/dist/util/db-jest-matchers.js +81 -20
- package/dist/util/db-jest-matchers.js.map +1 -1
- package/dist/util/index.d.ts +1 -2
- package/dist/util/index.js +11 -13
- package/dist/util/index.js.map +1 -1
- package/package.json +6 -6
- package/src/api.spec.ts +7 -16
- package/src/databases/all/db_index.spec.ts +22 -48
- package/src/databases/all/expr.spec.ts +273 -431
- package/src/databases/all/functions.spec.ts +37 -35
- package/src/databases/all/join.spec.ts +130 -196
- package/src/databases/all/nomodel.spec.ts +333 -689
- package/src/databases/all/orderby.spec.ts +87 -161
- package/src/databases/all/sql_expressions.spec.ts +29 -49
- package/src/databases/all/time.spec.ts +73 -130
- package/src/databases/bigquery/double_truncation.spec.ts +1 -1
- package/src/databases/bigquery/handexpr.spec.ts +12 -12
- package/src/databases/bigquery/injestion_time_partitioning.spec.ts +22 -22
- package/src/databases/bigquery/joined_filters.spec.ts +3 -3
- package/src/databases/bigquery/json.spec.ts +25 -49
- package/src/databases/bigquery/malloy_query.spec.ts +47 -54
- package/src/databases/bigquery/time.spec.ts +13 -17
- package/src/databases/bigquery/wildcard_table_names.spec.ts +19 -19
- package/src/databases/bigquery-duckdb/nested_source_table.spec.ts +56 -98
- package/src/databases/bigquery-postgres/multi_connection.spec.ts +5 -23
- package/src/databases/bigquery-postgres/streaming.spec.ts +12 -6
- package/src/databases/duckdb/duckdb.spec.ts +31 -43
- package/src/databases/postgres/postgres.spec.ts +54 -84
- package/src/jestMatcher.spec.ts +88 -0
- package/src/render/render.spec.ts +10 -12
- package/src/tags.spec.ts +22 -2
- package/src/util/db-jest-matchers.ts +106 -32
- package/src/util/index.ts +16 -14
|
@@ -29,25 +29,27 @@ import * as malloy from '@malloydata/malloy';
|
|
|
29
29
|
|
|
30
30
|
const runtimes = new RuntimeList(databasesFromEnvironmentOr(allDatabases));
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
function modelText(databaseName: string) {
|
|
33
|
+
return `
|
|
34
|
+
source: aircraft_models is ${databaseName}.table('malloytest.aircraft_models') extend {
|
|
34
35
|
primary_key: aircraft_model_code
|
|
35
36
|
}
|
|
36
37
|
|
|
37
|
-
source: aircraft is table('malloytest.aircraft'){
|
|
38
|
+
source: aircraft is ${databaseName}.table('malloytest.aircraft') extend {
|
|
38
39
|
primary_key: tail_num
|
|
39
40
|
join_one: aircraft_models with aircraft_model_code
|
|
40
41
|
measure: aircraft_count is count()
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
source: airports is table('malloytest.airports')
|
|
44
|
+
source: airports is ${databaseName}.table('malloytest.airports')
|
|
44
45
|
|
|
45
|
-
source: state_facts is table('malloytest.state_facts')
|
|
46
|
+
source: state_facts is ${databaseName}.table('malloytest.state_facts')
|
|
46
47
|
`;
|
|
48
|
+
}
|
|
47
49
|
|
|
48
50
|
const expressionModels = new Map<string, malloy.ModelMaterializer>();
|
|
49
51
|
runtimes.runtimeMap.forEach((runtime, databaseName) =>
|
|
50
|
-
expressionModels.set(databaseName, runtime.loadModel(
|
|
52
|
+
expressionModels.set(databaseName, runtime.loadModel(modelText(databaseName)))
|
|
51
53
|
);
|
|
52
54
|
|
|
53
55
|
expressionModels.forEach((expressionModel, databaseName) => {
|
|
@@ -62,7 +64,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
62
64
|
return await expressionModel
|
|
63
65
|
.loadQuery(
|
|
64
66
|
`
|
|
65
|
-
|
|
67
|
+
run: aircraft -> { ${type}: f is ${expr} }`
|
|
66
68
|
)
|
|
67
69
|
.run();
|
|
68
70
|
};
|
|
@@ -90,7 +92,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
90
92
|
return await expressionModel
|
|
91
93
|
.loadQuery(
|
|
92
94
|
`
|
|
93
|
-
|
|
95
|
+
run: aircraft -> { ${testCases.map(
|
|
94
96
|
(testCase, i) => `group_by: f${i} is ${testCase[0]}`
|
|
95
97
|
)} }`
|
|
96
98
|
)
|
|
@@ -277,7 +279,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
277
279
|
it(`works when the order by is a dimension - ${databaseName}`, async () => {
|
|
278
280
|
const result = await expressionModel
|
|
279
281
|
.loadQuery(
|
|
280
|
-
`
|
|
282
|
+
`run: state_facts -> {
|
|
281
283
|
group_by: state
|
|
282
284
|
calculate: row_num is row_number()
|
|
283
285
|
}`
|
|
@@ -290,7 +292,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
290
292
|
it(`works when the order by is a dimension in the other order - ${databaseName}`, async () => {
|
|
291
293
|
const result = await expressionModel
|
|
292
294
|
.loadQuery(
|
|
293
|
-
`
|
|
295
|
+
`run: state_facts -> {
|
|
294
296
|
calculate: row_num is row_number()
|
|
295
297
|
group_by: state
|
|
296
298
|
}`
|
|
@@ -303,7 +305,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
303
305
|
it(`works when the order by is a measure - ${databaseName}`, async () => {
|
|
304
306
|
const result = await expressionModel
|
|
305
307
|
.loadQuery(
|
|
306
|
-
`
|
|
308
|
+
`run: state_facts -> {
|
|
307
309
|
group_by: popular_name
|
|
308
310
|
aggregate: c is count()
|
|
309
311
|
calculate: row_num is row_number()
|
|
@@ -317,7 +319,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
317
319
|
it(`works when the order by is a measure but there is no group by - ${databaseName}`, async () => {
|
|
318
320
|
const result = await expressionModel
|
|
319
321
|
.loadQuery(
|
|
320
|
-
`
|
|
322
|
+
`run: state_facts -> {
|
|
321
323
|
aggregate: c is count()
|
|
322
324
|
calculate: row_num is row_number()
|
|
323
325
|
}`
|
|
@@ -329,7 +331,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
329
331
|
it(`works inside nest - ${databaseName}`, async () => {
|
|
330
332
|
const result = await expressionModel
|
|
331
333
|
.loadQuery(
|
|
332
|
-
`
|
|
334
|
+
`run: state_facts extend { join_one: airports on airports.state = state } -> {
|
|
333
335
|
group_by: state
|
|
334
336
|
nest: q is {
|
|
335
337
|
group_by: airports.county
|
|
@@ -347,7 +349,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
347
349
|
test(`works outside nest, but with a nest nearby - ${databaseName}`, async () => {
|
|
348
350
|
const result = await expressionModel
|
|
349
351
|
.loadQuery(
|
|
350
|
-
`
|
|
352
|
+
`run: state_facts -> {
|
|
351
353
|
group_by: state
|
|
352
354
|
calculate: row_num is row_number()
|
|
353
355
|
nest: nested is {
|
|
@@ -365,7 +367,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
365
367
|
it(`works ordered by dimension - ${databaseName}`, async () => {
|
|
366
368
|
const result = await expressionModel
|
|
367
369
|
.loadQuery(
|
|
368
|
-
`
|
|
370
|
+
`run: state_facts -> {
|
|
369
371
|
group_by:
|
|
370
372
|
state,
|
|
371
373
|
births_ballpark is ceil(births / 1000000) * 1000000
|
|
@@ -386,7 +388,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
386
388
|
it(`works ordered by aggregate - ${databaseName}`, async () => {
|
|
387
389
|
const result = await expressionModel
|
|
388
390
|
.loadQuery(
|
|
389
|
-
`
|
|
391
|
+
`run: state_facts -> {
|
|
390
392
|
group_by: first_letter is substr(state, 1, 1)
|
|
391
393
|
aggregate: states_with_first_letter_ish is round(count() / 2) * 2
|
|
392
394
|
calculate: r is rank()
|
|
@@ -404,7 +406,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
404
406
|
it(`works with one param - ${databaseName}`, async () => {
|
|
405
407
|
const result = await expressionModel
|
|
406
408
|
.loadQuery(
|
|
407
|
-
`
|
|
409
|
+
`run: state_facts -> {
|
|
408
410
|
group_by: state
|
|
409
411
|
calculate: prev_state is lag(state)
|
|
410
412
|
}`
|
|
@@ -420,7 +422,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
420
422
|
it(`works with expression field - ${databaseName}`, async () => {
|
|
421
423
|
const result = await expressionModel
|
|
422
424
|
.loadQuery(
|
|
423
|
-
`
|
|
425
|
+
`run: state_facts -> {
|
|
424
426
|
group_by: lower_state is lower(state)
|
|
425
427
|
calculate: prev_state is lag(lower_state)
|
|
426
428
|
}`
|
|
@@ -436,7 +438,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
436
438
|
it(`works with expression - ${databaseName}`, async () => {
|
|
437
439
|
const result = await expressionModel
|
|
438
440
|
.loadQuery(
|
|
439
|
-
`
|
|
441
|
+
`run: state_facts -> {
|
|
440
442
|
group_by: state
|
|
441
443
|
calculate: prev_state is lag(lower(state))
|
|
442
444
|
}`
|
|
@@ -452,7 +454,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
452
454
|
it(`works with field, ordering by expression field - ${databaseName}`, async () => {
|
|
453
455
|
const result = await expressionModel
|
|
454
456
|
.loadQuery(
|
|
455
|
-
`
|
|
457
|
+
`run: state_facts -> {
|
|
456
458
|
group_by: lower_state is lower(state)
|
|
457
459
|
aggregate: c is count()
|
|
458
460
|
order_by: lower_state
|
|
@@ -470,7 +472,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
470
472
|
it(`works with offset - ${databaseName}`, async () => {
|
|
471
473
|
const result = await expressionModel
|
|
472
474
|
.loadQuery(
|
|
473
|
-
`
|
|
475
|
+
`run: state_facts -> {
|
|
474
476
|
group_by: state
|
|
475
477
|
calculate: prev_prev_state is lag(state, 2)
|
|
476
478
|
}`
|
|
@@ -487,7 +489,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
487
489
|
it(`works with default value - ${databaseName}`, async () => {
|
|
488
490
|
const result = await expressionModel
|
|
489
491
|
.loadQuery(
|
|
490
|
-
`
|
|
492
|
+
`run: state_facts -> {
|
|
491
493
|
group_by: state
|
|
492
494
|
calculate: prev_state is lag(state, 1, 'NONE')
|
|
493
495
|
}`
|
|
@@ -500,7 +502,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
500
502
|
const result = await expressionModel
|
|
501
503
|
.loadQuery(
|
|
502
504
|
`
|
|
503
|
-
|
|
505
|
+
run: state_facts -> {
|
|
504
506
|
group_by: state
|
|
505
507
|
calculate: lag_val is lag(@2011-11-11 11:11:11, 1, now).year = now.year
|
|
506
508
|
}`
|
|
@@ -515,7 +517,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
515
517
|
it(`output field referenceable in calculate - ${databaseName}`, async () => {
|
|
516
518
|
const result = await expressionModel
|
|
517
519
|
.loadQuery(
|
|
518
|
-
`
|
|
520
|
+
`run: aircraft -> {
|
|
519
521
|
group_by: s is aircraft_models.seats
|
|
520
522
|
calculate: a is lag(s)
|
|
521
523
|
}`
|
|
@@ -532,7 +534,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
532
534
|
const result = await expressionModel
|
|
533
535
|
.loadQuery(
|
|
534
536
|
`
|
|
535
|
-
|
|
537
|
+
run: aircraft -> {
|
|
536
538
|
group_by: state
|
|
537
539
|
where: state != null
|
|
538
540
|
nest: by_county is {
|
|
@@ -555,7 +557,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
555
557
|
const result = await expressionModel
|
|
556
558
|
.loadQuery(
|
|
557
559
|
`
|
|
558
|
-
|
|
560
|
+
run: state_facts -> {
|
|
559
561
|
group_by: state, births
|
|
560
562
|
order_by: births desc
|
|
561
563
|
calculate: most_births is first_value(births)
|
|
@@ -570,7 +572,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
570
572
|
const result = await expressionModel
|
|
571
573
|
.loadQuery(
|
|
572
574
|
`
|
|
573
|
-
|
|
575
|
+
run: airports extend { measure: airport_count is count() } -> {
|
|
574
576
|
group_by: state
|
|
575
577
|
where: state != null
|
|
576
578
|
calculate: prev_airport_count is lag(airport_count)
|
|
@@ -585,7 +587,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
585
587
|
const result = await expressionModel
|
|
586
588
|
.loadQuery(
|
|
587
589
|
`
|
|
588
|
-
|
|
590
|
+
run: aircraft -> {
|
|
589
591
|
group_by: aircraft_models.seats,
|
|
590
592
|
calculate: prev_sum_of_seats is lag(aircraft_models.seats.sum())
|
|
591
593
|
}`
|
|
@@ -967,7 +969,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
967
969
|
it(`works with one param - ${databaseName}`, async () => {
|
|
968
970
|
const result = await expressionModel
|
|
969
971
|
.loadQuery(
|
|
970
|
-
`
|
|
972
|
+
`run: state_facts -> {
|
|
971
973
|
group_by: state
|
|
972
974
|
calculate: next_state is lead(state)
|
|
973
975
|
}`
|
|
@@ -981,7 +983,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
981
983
|
it(`works with offset - ${databaseName}`, async () => {
|
|
982
984
|
const result = await expressionModel
|
|
983
985
|
.loadQuery(
|
|
984
|
-
`
|
|
986
|
+
`run: state_facts -> {
|
|
985
987
|
group_by: state
|
|
986
988
|
calculate: next_next_state is lead(state, 2)
|
|
987
989
|
}`
|
|
@@ -998,7 +1000,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
998
1000
|
it(`works with default value - ${databaseName}`, async () => {
|
|
999
1001
|
const result = await expressionModel
|
|
1000
1002
|
.loadQuery(
|
|
1001
|
-
`
|
|
1003
|
+
`run: state_facts -> { select: *; limit: 10 } -> {
|
|
1002
1004
|
group_by: state
|
|
1003
1005
|
calculate: next_state is lead(state, 1, 'NONE')
|
|
1004
1006
|
}`
|
|
@@ -1012,7 +1014,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
1012
1014
|
const result = await expressionModel
|
|
1013
1015
|
.loadQuery(
|
|
1014
1016
|
`
|
|
1015
|
-
|
|
1017
|
+
run: state_facts -> {
|
|
1016
1018
|
group_by: state, births
|
|
1017
1019
|
order_by: births desc
|
|
1018
1020
|
calculate: least_births is last_value(births)
|
|
@@ -1030,7 +1032,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
1030
1032
|
const result = await expressionModel
|
|
1031
1033
|
.loadQuery(
|
|
1032
1034
|
`
|
|
1033
|
-
|
|
1035
|
+
run: state_facts -> {
|
|
1034
1036
|
group_by: state, births
|
|
1035
1037
|
order_by: births desc
|
|
1036
1038
|
calculate: rolling_avg is avg_moving(births, 2)
|
|
@@ -1057,7 +1059,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
1057
1059
|
const result = await expressionModel
|
|
1058
1060
|
.loadQuery(
|
|
1059
1061
|
`
|
|
1060
|
-
|
|
1062
|
+
run: state_facts -> { select: *; limit: 3 } -> {
|
|
1061
1063
|
group_by: state, births
|
|
1062
1064
|
order_by: births desc
|
|
1063
1065
|
calculate: rolling_avg is avg_moving(births, 0, 2)
|
|
@@ -1081,7 +1083,7 @@ expressionModels.forEach((expressionModel, databaseName) => {
|
|
|
1081
1083
|
const result = await expressionModel
|
|
1082
1084
|
.loadQuery(
|
|
1083
1085
|
`
|
|
1084
|
-
|
|
1086
|
+
run: state_facts -> { select: *; limit: 5 } -> {
|
|
1085
1087
|
group_by: state, births
|
|
1086
1088
|
order_by: births asc
|
|
1087
1089
|
calculate: min_c is min_cumulative(births)
|