@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
|
@@ -27,8 +27,9 @@ const runtimes_1 = require("../../runtimes");
|
|
|
27
27
|
const util_1 = require("../../util");
|
|
28
28
|
require("../../util/db-jest-matchers");
|
|
29
29
|
const runtimes = new runtimes_1.RuntimeList((0, util_1.databasesFromEnvironmentOr)(runtimes_1.allDatabases));
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
function modelText(connectionName) {
|
|
31
|
+
return `
|
|
32
|
+
source: aircraft_models is ${connectionName}.table('malloytest.aircraft_models') extend {
|
|
32
33
|
primary_key: aircraft_model_code
|
|
33
34
|
measure: model_count is count()
|
|
34
35
|
view: manufacturer_models is {
|
|
@@ -41,7 +42,7 @@ const joinModelText = `
|
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
source: aircraft is table('malloytest.aircraft') extend {
|
|
45
|
+
source: aircraft is ${connectionName}.table('malloytest.aircraft') extend {
|
|
45
46
|
primary_key: tail_num
|
|
46
47
|
measure: aircraft_count is count()
|
|
47
48
|
}
|
|
@@ -51,103 +52,81 @@ const joinModelText = `
|
|
|
51
52
|
with manufacturer
|
|
52
53
|
}
|
|
53
54
|
`;
|
|
54
|
-
|
|
55
|
-
// runtimes.runtimeMap.forEach((runtime, key) => {
|
|
56
|
-
// models.set(key, runtime.loadModel(joinModelText));
|
|
57
|
-
// });
|
|
55
|
+
}
|
|
58
56
|
afterAll(async () => {
|
|
59
57
|
await runtimes.closeAll();
|
|
60
58
|
});
|
|
61
59
|
describe('join expression tests', () => {
|
|
62
60
|
runtimes.runtimeMap.forEach((runtime, database) => {
|
|
61
|
+
const joinModelText = modelText(database);
|
|
62
|
+
const joinModel = runtime.loadModel(joinModelText);
|
|
63
63
|
it(`model source refine join - ${database}`, async () => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
aircraft_models.model_count
|
|
75
|
-
}
|
|
76
|
-
`)
|
|
77
|
-
.run();
|
|
78
|
-
expect(result.data.value[0]['model_count']).toBe(1416);
|
|
64
|
+
await expect(`
|
|
65
|
+
source: a2 is aircraft extend {
|
|
66
|
+
join_one: aircraft_models with aircraft_model_code
|
|
67
|
+
}
|
|
68
|
+
run: a2 -> {
|
|
69
|
+
aggregate:
|
|
70
|
+
aircraft_count
|
|
71
|
+
aircraft_models.model_count
|
|
72
|
+
}
|
|
73
|
+
`).malloyResultMatches(joinModel, { model_count: 1416 });
|
|
79
74
|
});
|
|
80
75
|
it(`model source refine in query join - ${database}`, async () => {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
`)
|
|
92
|
-
.run();
|
|
93
|
-
expect(result.data.value[0]['model_count']).toBe(1416);
|
|
76
|
+
await expect(`
|
|
77
|
+
run: aircraft extend {
|
|
78
|
+
join_one: aircraft_models with aircraft_model_code
|
|
79
|
+
} -> {
|
|
80
|
+
aggregate:
|
|
81
|
+
aircraft_count
|
|
82
|
+
aircraft_models.model_count
|
|
83
|
+
}
|
|
84
|
+
`).malloyResultMatches(joinModel, { model_count: 1416 });
|
|
94
85
|
});
|
|
95
86
|
it(`model: join fact table query - ${database}`, async () => {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
`)
|
|
113
|
-
.run();
|
|
114
|
-
expect(result.data.value[0]['num_models']).toBe(1147);
|
|
87
|
+
await expect(`
|
|
88
|
+
run: aircraft_models extend {
|
|
89
|
+
join_one: am_facts is
|
|
90
|
+
aircraft_models->{
|
|
91
|
+
group_by: m is manufacturer
|
|
92
|
+
aggregate: num_models is count()
|
|
93
|
+
} with manufacturer
|
|
94
|
+
} -> {
|
|
95
|
+
select:
|
|
96
|
+
manufacturer
|
|
97
|
+
am_facts.num_models
|
|
98
|
+
order_by: 2 desc
|
|
99
|
+
limit: 1
|
|
100
|
+
}
|
|
101
|
+
`).malloyResultMatches(joinModel, { num_models: 1147 });
|
|
115
102
|
});
|
|
116
103
|
it(`model: source based on query - ${database}`, async () => {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
run:
|
|
121
|
-
aircraft_models-> {
|
|
104
|
+
await expect(`
|
|
105
|
+
run: aircraft_models
|
|
106
|
+
-> {
|
|
122
107
|
group_by: m is manufacturer
|
|
123
108
|
aggregate: num_models is count()
|
|
109
|
+
} -> {
|
|
110
|
+
select:
|
|
111
|
+
m
|
|
112
|
+
num_models
|
|
113
|
+
order_by: 2 desc
|
|
114
|
+
limit: 1
|
|
124
115
|
}
|
|
125
|
-
|
|
126
|
-
select:
|
|
127
|
-
m
|
|
128
|
-
num_models
|
|
129
|
-
order_by: 2 desc
|
|
130
|
-
limit: 1
|
|
131
|
-
}
|
|
132
|
-
`)
|
|
133
|
-
.run();
|
|
134
|
-
expect(result.data.value[0]['num_models']).toBe(1147);
|
|
116
|
+
`).malloyResultMatches(joinModel, { num_models: 1147 });
|
|
135
117
|
});
|
|
136
118
|
it(`model: funnel - merge two queries - ${database}`, async () => {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
aggregate: num_models is count()
|
|
143
|
-
} extend {
|
|
119
|
+
await expect(`
|
|
120
|
+
run: aircraft_models->{
|
|
121
|
+
group_by: m is manufacturer
|
|
122
|
+
aggregate: num_models is count()
|
|
123
|
+
} extend {
|
|
144
124
|
join_one: seats is
|
|
145
125
|
aircraft_models->{
|
|
146
126
|
group_by: m is manufacturer
|
|
147
127
|
aggregate: total_seats is seats.sum()
|
|
148
128
|
} with m
|
|
149
|
-
}
|
|
150
|
-
-> {
|
|
129
|
+
} -> {
|
|
151
130
|
select:
|
|
152
131
|
m
|
|
153
132
|
num_models
|
|
@@ -155,71 +134,60 @@ describe('join expression tests', () => {
|
|
|
155
134
|
order_by: 2 desc
|
|
156
135
|
limit: 1
|
|
157
136
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
137
|
+
`).malloyResultMatches(joinModel, {
|
|
138
|
+
num_models: 1147,
|
|
139
|
+
total_seats: 252771,
|
|
140
|
+
});
|
|
162
141
|
});
|
|
163
142
|
it(`model: modeled funnel - ${database}`, async () => {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
.run();
|
|
180
|
-
expect(result.data.value[0]['num_models']).toBe(1147);
|
|
181
|
-
expect(result.data.value[0]['total_seats']).toBe(252771);
|
|
143
|
+
await expect(`
|
|
144
|
+
run: aircraft_models-> manufacturer_models extend {
|
|
145
|
+
join_one: seats is aircraft_models->manufacturer_seats with manufacturer
|
|
146
|
+
} -> {
|
|
147
|
+
select:
|
|
148
|
+
manufacturer,
|
|
149
|
+
num_models,
|
|
150
|
+
seats.total_seats
|
|
151
|
+
order_by: 2 desc
|
|
152
|
+
limit: 1
|
|
153
|
+
}
|
|
154
|
+
`).malloyResultMatches(joinModel, {
|
|
155
|
+
num_models: 1147,
|
|
156
|
+
total_seats: 252771,
|
|
157
|
+
});
|
|
182
158
|
});
|
|
183
159
|
it(`model: modeled funnel2 - ${database}`, async () => {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
expect(result.data.value[0]['num_models']).toBe(1147);
|
|
198
|
-
expect(result.data.value[0]['total_seats']).toBe(252771);
|
|
160
|
+
await expect(`
|
|
161
|
+
run: funnel->{
|
|
162
|
+
select:
|
|
163
|
+
manufacturer
|
|
164
|
+
num_models
|
|
165
|
+
seats.total_seats
|
|
166
|
+
order_by: 2 desc
|
|
167
|
+
limit: 1
|
|
168
|
+
}
|
|
169
|
+
`).malloyResultMatches(joinModel, {
|
|
170
|
+
num_models: 1147,
|
|
171
|
+
total_seats: 252771,
|
|
172
|
+
});
|
|
199
173
|
});
|
|
200
174
|
it(`model: double_pipe - ${database}`, async () => {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
`)
|
|
213
|
-
.run();
|
|
214
|
-
expect(result.data.value[0]['f_sum2']).toBe(60462);
|
|
175
|
+
await expect(`
|
|
176
|
+
run: aircraft_models->{
|
|
177
|
+
group_by: manufacturer
|
|
178
|
+
aggregate: f is count()
|
|
179
|
+
}->{
|
|
180
|
+
aggregate: f_sum is f.sum()
|
|
181
|
+
}->{
|
|
182
|
+
select: f_sum2 is f_sum+1
|
|
183
|
+
}
|
|
184
|
+
`).malloyResultMatches(joinModel, { f_sum2: 60462 });
|
|
215
185
|
});
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
.loadModel(joinModelText)
|
|
219
|
-
.loadQuery(`
|
|
186
|
+
(0, util_1.testIf)(runtime.supportsNesting)(`model: unnest is left join - ${database}`, async () => {
|
|
187
|
+
await expect(`
|
|
220
188
|
// produce a table with 4 rows that has a nested element
|
|
221
|
-
query: a_states is table('malloytest.state_facts')-> {
|
|
222
|
-
|
|
189
|
+
query: a_states is ${database}.table('malloytest.state_facts')-> {
|
|
190
|
+
where: state ? ~ 'A%'
|
|
223
191
|
group_by: state
|
|
224
192
|
nest: somthing is {group_by: state}
|
|
225
193
|
}
|
|
@@ -227,7 +195,7 @@ describe('join expression tests', () => {
|
|
|
227
195
|
// join the 4 rows and reference the
|
|
228
196
|
// nested column. should return all the rows.
|
|
229
197
|
// If the unnest is an inner join, we'll get back just 4 rows.
|
|
230
|
-
run: table('malloytest.state_facts') {
|
|
198
|
+
run: ${database}.table('malloytest.state_facts') extend {
|
|
231
199
|
join_one: a_states is a_states with state
|
|
232
200
|
}
|
|
233
201
|
-> {
|
|
@@ -236,63 +204,51 @@ describe('join expression tests', () => {
|
|
|
236
204
|
nest: a is {
|
|
237
205
|
group_by: a_states.somthing.state
|
|
238
206
|
}
|
|
207
|
+
limit: 5
|
|
239
208
|
}
|
|
240
|
-
|
|
241
|
-
.run();
|
|
242
|
-
// console.log(result.data.toObject());
|
|
243
|
-
expect(result.data.rowCount).toBeGreaterThan(4);
|
|
209
|
+
`).malloyResultMatches(joinModel, [{}, {}, {}, {}, {}]);
|
|
244
210
|
});
|
|
245
|
-
// not sure how to solve this one yet
|
|
211
|
+
// not sure how to solve this one yet, just check for > 4 rows
|
|
246
212
|
it(`All joins at the same level - ${database}`, async () => {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
join_one: aircraft is table('malloytest.aircraft')
|
|
213
|
+
await expect(`
|
|
214
|
+
source: flights is ${database}.table('malloytest.flights') extend {
|
|
215
|
+
join_one: aircraft is ${database}.table('malloytest.aircraft')
|
|
251
216
|
on tail_num = aircraft.tail_num
|
|
252
|
-
join_one: aircraft_models is table('malloytest.aircraft_models')
|
|
217
|
+
join_one: aircraft_models is ${database}.table('malloytest.aircraft_models')
|
|
253
218
|
on aircraft.aircraft_model_code = aircraft_models.aircraft_model_code
|
|
254
219
|
}
|
|
255
220
|
|
|
256
221
|
run: flights -> {
|
|
257
222
|
group_by: aircraft_models.seats
|
|
258
223
|
aggregate: flight_count is count()
|
|
224
|
+
limit: 5
|
|
259
225
|
}
|
|
260
|
-
|
|
261
|
-
.run();
|
|
262
|
-
// console.log(result.data.toObject());
|
|
263
|
-
expect(result.data.rowCount).toBeGreaterThan(4);
|
|
226
|
+
`).malloyResultMatches(joinModel, [{}, {}, {}, {}, {}]);
|
|
264
227
|
});
|
|
265
228
|
it(`join issue440 - ${database}`, async () => {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
source: aircraft_models is table('malloytest.aircraft_models')
|
|
229
|
+
await expect(`
|
|
230
|
+
source: aircraft_models is ${database}.table('malloytest.aircraft_models')
|
|
269
231
|
|
|
270
|
-
source: aircraft is table('malloytest.aircraft')
|
|
232
|
+
source: aircraft is ${database}.table('malloytest.aircraft')
|
|
271
233
|
|
|
272
|
-
source: flights is table('malloytest.flights') extend {
|
|
234
|
+
source: flights is ${database}.table('malloytest.flights') extend {
|
|
273
235
|
join_one: aircraft on aircraft.tail_num = tail_num
|
|
274
236
|
join_one: aircraft_models on aircraft_models.aircraft_model_code = aircraft.aircraft_model_code
|
|
275
237
|
}
|
|
276
238
|
|
|
277
239
|
run: flights-> {
|
|
278
240
|
group_by: testingtwo is aircraft_models.model
|
|
241
|
+
limit: 5
|
|
279
242
|
}
|
|
280
|
-
`)
|
|
281
|
-
.run();
|
|
282
|
-
// console.log(result.data.toObject());
|
|
283
|
-
expect(result.data.rowCount).toBeGreaterThan(4);
|
|
243
|
+
`).malloyResultMatches(runtime, [{}, {}, {}, {}, {}]);
|
|
284
244
|
});
|
|
285
245
|
it(`join issue1092 - ${database}`, async () => {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
`)
|
|
293
|
-
.run();
|
|
294
|
-
// console.log(result.data.toObject());
|
|
295
|
-
expect(result.data.rowCount).toBe(1);
|
|
246
|
+
await expect(`
|
|
247
|
+
run: ${database}.table('malloytest.state_facts') -> {
|
|
248
|
+
extend: {join_one: sf is ${database}.table('malloytest.state_facts') on sf.state = state}
|
|
249
|
+
aggregate: x is sf.births.sum() { where: state = 'CA' }
|
|
250
|
+
}
|
|
251
|
+
`).malloyResultMatches(runtime, [{}]);
|
|
296
252
|
});
|
|
297
253
|
});
|
|
298
254
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join.spec.js","sourceRoot":"","sources":["../../../src/databases/all/join.spec.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;AAEH,+BAA+B;AAE/B,6CAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"join.spec.js","sourceRoot":"","sources":["../../../src/databases/all/join.spec.ts"],"names":[],"mappings":"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"}
|