@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.
Files changed (84) hide show
  1. package/README.md +213 -1
  2. package/dist/api.spec.d.ts +1 -1
  3. package/dist/api.spec.js +6 -13
  4. package/dist/api.spec.js.map +1 -1
  5. package/dist/databases/all/db_index.spec.js +21 -41
  6. package/dist/databases/all/db_index.spec.js.map +1 -1
  7. package/dist/databases/all/expr.spec.js +262 -339
  8. package/dist/databases/all/expr.spec.js.map +1 -1
  9. package/dist/databases/all/functions.spec.js +37 -35
  10. package/dist/databases/all/functions.spec.js.map +1 -1
  11. package/dist/databases/all/join.spec.js +125 -169
  12. package/dist/databases/all/join.spec.js.map +1 -1
  13. package/dist/databases/all/nomodel.spec.js +335 -594
  14. package/dist/databases/all/nomodel.spec.js.map +1 -1
  15. package/dist/databases/all/orderby.spec.js +82 -128
  16. package/dist/databases/all/orderby.spec.js.map +1 -1
  17. package/dist/databases/all/sql_expressions.spec.js +27 -43
  18. package/dist/databases/all/sql_expressions.spec.js.map +1 -1
  19. package/dist/databases/all/time.spec.js +63 -103
  20. package/dist/databases/all/time.spec.js.map +1 -1
  21. package/dist/databases/bigquery/double_truncation.spec.js +1 -1
  22. package/dist/databases/bigquery/handexpr.spec.js +12 -12
  23. package/dist/databases/bigquery/injestion_time_partitioning.spec.js +22 -22
  24. package/dist/databases/bigquery/joined_filters.spec.js +3 -3
  25. package/dist/databases/bigquery/json.spec.d.ts +1 -1
  26. package/dist/databases/bigquery/json.spec.js +25 -45
  27. package/dist/databases/bigquery/json.spec.js.map +1 -1
  28. package/dist/databases/bigquery/malloy_query.spec.d.ts +1 -1
  29. package/dist/databases/bigquery/malloy_query.spec.js +47 -48
  30. package/dist/databases/bigquery/malloy_query.spec.js.map +1 -1
  31. package/dist/databases/bigquery/time.spec.js +9 -13
  32. package/dist/databases/bigquery/time.spec.js.map +1 -1
  33. package/dist/databases/bigquery/wildcard_table_names.spec.js +19 -19
  34. package/dist/databases/bigquery-duckdb/nested_source_table.spec.js +53 -87
  35. package/dist/databases/bigquery-duckdb/nested_source_table.spec.js.map +1 -1
  36. package/dist/databases/bigquery-postgres/multi_connection.spec.js +5 -20
  37. package/dist/databases/bigquery-postgres/multi_connection.spec.js.map +1 -1
  38. package/dist/databases/bigquery-postgres/streaming.spec.js +6 -6
  39. package/dist/databases/bigquery-postgres/streaming.spec.js.map +1 -1
  40. package/dist/databases/duckdb/duckdb.spec.js +24 -33
  41. package/dist/databases/duckdb/duckdb.spec.js.map +1 -1
  42. package/dist/databases/postgres/postgres.spec.js +46 -67
  43. package/dist/databases/postgres/postgres.spec.js.map +1 -1
  44. package/dist/jestMatcher.spec.d.ts +1 -0
  45. package/dist/jestMatcher.spec.js +81 -0
  46. package/dist/jestMatcher.spec.js.map +1 -0
  47. package/dist/render/render.spec.js +10 -12
  48. package/dist/render/render.spec.js.map +1 -1
  49. package/dist/tags.spec.js +22 -2
  50. package/dist/tags.spec.js.map +1 -1
  51. package/dist/util/db-jest-matchers.d.ts +17 -6
  52. package/dist/util/db-jest-matchers.js +81 -20
  53. package/dist/util/db-jest-matchers.js.map +1 -1
  54. package/dist/util/index.d.ts +1 -2
  55. package/dist/util/index.js +11 -13
  56. package/dist/util/index.js.map +1 -1
  57. package/package.json +6 -6
  58. package/src/api.spec.ts +7 -16
  59. package/src/databases/all/db_index.spec.ts +22 -48
  60. package/src/databases/all/expr.spec.ts +273 -431
  61. package/src/databases/all/functions.spec.ts +37 -35
  62. package/src/databases/all/join.spec.ts +130 -196
  63. package/src/databases/all/nomodel.spec.ts +333 -689
  64. package/src/databases/all/orderby.spec.ts +87 -161
  65. package/src/databases/all/sql_expressions.spec.ts +29 -49
  66. package/src/databases/all/time.spec.ts +73 -130
  67. package/src/databases/bigquery/double_truncation.spec.ts +1 -1
  68. package/src/databases/bigquery/handexpr.spec.ts +12 -12
  69. package/src/databases/bigquery/injestion_time_partitioning.spec.ts +22 -22
  70. package/src/databases/bigquery/joined_filters.spec.ts +3 -3
  71. package/src/databases/bigquery/json.spec.ts +25 -49
  72. package/src/databases/bigquery/malloy_query.spec.ts +47 -54
  73. package/src/databases/bigquery/time.spec.ts +13 -17
  74. package/src/databases/bigquery/wildcard_table_names.spec.ts +19 -19
  75. package/src/databases/bigquery-duckdb/nested_source_table.spec.ts +56 -98
  76. package/src/databases/bigquery-postgres/multi_connection.spec.ts +5 -23
  77. package/src/databases/bigquery-postgres/streaming.spec.ts +12 -6
  78. package/src/databases/duckdb/duckdb.spec.ts +31 -43
  79. package/src/databases/postgres/postgres.spec.ts +54 -84
  80. package/src/jestMatcher.spec.ts +88 -0
  81. package/src/render/render.spec.ts +10 -12
  82. package/src/tags.spec.ts +22 -2
  83. package/src/util/db-jest-matchers.ts +106 -32
  84. 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
- const expressionModelText = `
33
- source: aircraft_models is table('malloytest.aircraft_models'){
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(expressionModelText))
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
- query: aircraft -> { ${type}: f is ${expr} }`
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
- query: aircraft -> { ${testCases.map(
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts { join_one: airports on airports.state = state } -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- query: state_facts -> {
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
- `query: aircraft -> {
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
- query: aircraft -> {
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
- query: state_facts -> {
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
- query: airports { measure: airport_count is count() } -> {
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
- query: aircraft -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> {
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
- `query: state_facts -> { select: *; limit: 10 } -> {
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
- query: state_facts -> {
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
- query: state_facts -> {
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
- query: state_facts -> { select: *; limit: 3 } -> {
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
- query: state_facts -> { select: *; limit: 5 } -> {
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)