@malloydata/malloy-tests 0.0.66-dev230807232724

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