@malloydata/malloy 0.0.240-dev250311202829 → 0.0.240-dev250311214430

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 (66) hide show
  1. package/dist/api/core.d.ts +1 -0
  2. package/dist/api/core.js +2 -1
  3. package/dist/lang/malloy-parse-info.d.ts +2 -10
  4. package/dist/lang/malloy-to-ast.d.ts +1 -0
  5. package/dist/lang/malloy-to-ast.js +9 -6
  6. package/dist/lang/malloy-to-stable-query.d.ts +76 -0
  7. package/dist/lang/malloy-to-stable-query.js +660 -0
  8. package/dist/lang/parse-log.d.ts +1 -0
  9. package/dist/lang/parse-malloy.d.ts +2 -9
  10. package/dist/lang/parse-malloy.js +7 -112
  11. package/dist/lang/parse-tree-walkers/model-annotation-walker.js +1 -1
  12. package/dist/lang/run-malloy-parser.d.ts +3 -0
  13. package/dist/lang/run-malloy-parser.js +53 -0
  14. package/dist/lang/syntax-errors/malloy-parser-error-listener.d.ts +4 -3
  15. package/dist/lang/syntax-errors/malloy-parser-error-listener.js +8 -4
  16. package/dist/lang/utils.d.ts +27 -1
  17. package/dist/lang/utils.js +78 -1
  18. package/package.json +3 -3
  19. package/dist/api/asynchronous.spec.d.ts +0 -1
  20. package/dist/api/asynchronous.spec.js +0 -240
  21. package/dist/api/sessioned.spec.d.ts +0 -1
  22. package/dist/api/sessioned.spec.js +0 -476
  23. package/dist/api/stateless.spec.d.ts +0 -1
  24. package/dist/api/stateless.spec.js +0 -400
  25. package/dist/lang/test/annotation.spec.d.ts +0 -14
  26. package/dist/lang/test/annotation.spec.js +0 -809
  27. package/dist/lang/test/composite-field-usage.spec.d.ts +0 -1
  28. package/dist/lang/test/composite-field-usage.spec.js +0 -261
  29. package/dist/lang/test/document-help-context-walker.spec.d.ts +0 -1
  30. package/dist/lang/test/document-help-context-walker.spec.js +0 -55
  31. package/dist/lang/test/document-symbol-walker.spec.d.ts +0 -1
  32. package/dist/lang/test/document-symbol-walker.spec.js +0 -209
  33. package/dist/lang/test/expressions.spec.d.ts +0 -1
  34. package/dist/lang/test/expressions.spec.js +0 -1181
  35. package/dist/lang/test/field-symbols.spec.d.ts +0 -1
  36. package/dist/lang/test/field-symbols.spec.js +0 -194
  37. package/dist/lang/test/find-table-path-walker.spec.d.ts +0 -1
  38. package/dist/lang/test/find-table-path-walker.spec.js +0 -50
  39. package/dist/lang/test/imports.spec.d.ts +0 -1
  40. package/dist/lang/test/imports.spec.js +0 -283
  41. package/dist/lang/test/lenses.spec.d.ts +0 -1
  42. package/dist/lang/test/lenses.spec.js +0 -384
  43. package/dist/lang/test/literals.spec.d.ts +0 -1
  44. package/dist/lang/test/literals.spec.js +0 -267
  45. package/dist/lang/test/locations.spec.d.ts +0 -1
  46. package/dist/lang/test/locations.spec.js +0 -679
  47. package/dist/lang/test/model-annotation-walker.spec.d.ts +0 -1
  48. package/dist/lang/test/model-annotation-walker.spec.js +0 -46
  49. package/dist/lang/test/model_serialization.spec.d.ts +0 -5
  50. package/dist/lang/test/model_serialization.spec.js +0 -116
  51. package/dist/lang/test/parameters.spec.d.ts +0 -1
  52. package/dist/lang/test/parameters.spec.js +0 -619
  53. package/dist/lang/test/parse.spec.d.ts +0 -1
  54. package/dist/lang/test/parse.spec.js +0 -893
  55. package/dist/lang/test/pretranslate.spec.d.ts +0 -1
  56. package/dist/lang/test/pretranslate.spec.js +0 -80
  57. package/dist/lang/test/query.spec.d.ts +0 -1
  58. package/dist/lang/test/query.spec.js +0 -1149
  59. package/dist/lang/test/source.spec.d.ts +0 -1
  60. package/dist/lang/test/source.spec.js +0 -570
  61. package/dist/lang/test/sql-block.spec.d.ts +0 -1
  62. package/dist/lang/test/sql-block.spec.js +0 -145
  63. package/dist/lang/test/syntax-errors.spec.d.ts +0 -1
  64. package/dist/lang/test/syntax-errors.spec.js +0 -142
  65. package/dist/model/utils.spec.d.ts +0 -1
  66. package/dist/model/utils.spec.js +0 -38
@@ -1,619 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright (c) Meta Platforms, Inc. and affiliates.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- const test_translator_1 = require("./test-translator");
10
- require("./parse-expects");
11
- describe('parameters', () => {
12
- test('can declare parameter with no default value', () => {
13
- expect(`
14
- ##! experimental.parameters
15
- source: ab_new(param::number) is ab
16
- `).toTranslate();
17
- });
18
- test('can declare parameter with default value literal', () => {
19
- expect(`
20
- ##! experimental.parameters
21
- source: ab_new(param::number is 7) is ab
22
- `).toTranslate();
23
- });
24
- test('can declare parameter with default value constant', () => {
25
- expect(`
26
- ##! experimental.parameters
27
- source: ab_new(param::number is 7 + 7) is ab
28
- `).toTranslate();
29
- });
30
- test('cannot specify default value with incompatible type', () => {
31
- expect((0, test_translator_1.markSource) `
32
- ##! experimental.parameters
33
- source: ab_new(param::number is ${'"hello"'}) is ab
34
- `).toLog((0, test_translator_1.errorMessage)('Default value for parameter does not match declared type `number`'));
35
- });
36
- test('error if paramter has no type or value', () => {
37
- expect((0, test_translator_1.markSource) `
38
- ##! experimental.parameters
39
- source: ab_new(param) is ab
40
- `).toLog((0, test_translator_1.errorMessage)('Parameter must have default value or declared type'));
41
- });
42
- test('error if paramter type is null', () => {
43
- expect((0, test_translator_1.markSource) `
44
- ##! experimental.parameters
45
- source: ab_new(param is null) is ab
46
- `).toLog((0, test_translator_1.errorMessage)('Default value cannot have type `null` unless parameter type is also specified'));
47
- });
48
- test('allowed to write null::string', () => {
49
- expect(`
50
- ##! experimental.parameters
51
- source: ab_new(param is null::string) is ab
52
- `).toTranslate();
53
- });
54
- test('allowed to write ::string is null', () => {
55
- expect(`
56
- ##! experimental.parameters
57
- source: ab_new(param::string is null) is ab
58
- `).toTranslate();
59
- });
60
- test('can use param in null equality expression', () => {
61
- expect(`
62
- ##! experimental.parameters
63
- source: ab_new(param is null::string) is ab extend {
64
- where: param is null
65
- }
66
- run: ab_new(param is "foo") -> { select: * } -> { select: * }
67
- `).toTranslate();
68
- });
69
- test('error if paramter type is range', () => {
70
- expect((0, test_translator_1.markSource) `
71
- ##! experimental.parameters
72
- source: ab_new(param is 10 to 20) is ab
73
- `).toLog((0, test_translator_1.errorMessage)('A Range is not a value'));
74
- });
75
- test('no additional error if default value type is error', () => {
76
- expect((0, test_translator_1.markSource) `
77
- ##! experimental.parameters
78
- source: ab_new(param::number is 1 + ${'"foo"'}) is ab
79
- `).toLog((0, test_translator_1.errorMessage)("The '+' operator requires a number, not a 'string'"));
80
- });
81
- test('can declare parameter with inferred type', () => {
82
- expect(`
83
- ##! experimental.parameters
84
- source: ab_new(param is 7) is ab
85
- `).toTranslate();
86
- });
87
- test('can pass parameter into extended base source', () => {
88
- expect(`
89
- ##! experimental.parameters
90
- source: ab_new(param::number) is ab
91
- source: ab_new_new(param::number) is ab_new(param) extend {}
92
- `).toTranslate();
93
- });
94
- test.skip('can pass parameter into source of query', () => {
95
- expect(`
96
- ##! experimental.parameters
97
- source: ab_new(param::number) is ab
98
- source: ab_new_new(param::number) is ab_new(param) -> { select: * }
99
- `).toTranslate();
100
- });
101
- test('can pass parameter to override default value with constant', () => {
102
- expect(`
103
- ##! experimental.parameters
104
- source: ab_new(param::number is 10) is ab
105
- source: ab_new_new is ab_new(param is 7) extend {}
106
- `).toTranslate();
107
- });
108
- test('can pass parameter to override default value with param value', () => {
109
- expect(`
110
- ##! experimental.parameters
111
- source: ab_new(param::number is 10) is ab
112
- source: ab_new_new(param::number is 11) is ab_new(param) extend {}
113
- `).toTranslate();
114
- });
115
- test('can pass parameter into named base source', () => {
116
- expect(`
117
- ##! experimental.parameters
118
- source: ab_new(param::number) is ab
119
- source: ab_new_new(param::number) is ab_new(param)
120
- `).toTranslate();
121
- });
122
- test('can pass differently-named parameter into extended base source', () => {
123
- expect(`
124
- ##! experimental.parameters
125
- source: ab_new(new_param::number) is ab
126
- source: ab_new_new(new_new_param::number) is ab_new(new_param is new_new_param) extend {}
127
- `).toTranslate();
128
- });
129
- test('can pass differently-named parameter into named base source', () => {
130
- expect(`
131
- ##! experimental.parameters
132
- source: ab_new(new_param::number) is ab
133
- source: ab_new_new(new_new_param::number) is ab_new(new_param is new_new_param)
134
- `).toTranslate();
135
- });
136
- test('can pass parameter into base source longhand', () => {
137
- expect(`
138
- ##! experimental.parameters
139
- source: ab_new(param::number) is ab
140
- source: ab_new_new(param::number) is ab_new(param is param)
141
- `).toTranslate();
142
- });
143
- test('can pass parameter into base source shorthand', () => {
144
- expect(`
145
- ##! experimental.parameters
146
- source: ab_new(param::number) is ab
147
- source: ab_new_new(param::number) is ab_new(param)
148
- `).toTranslate();
149
- });
150
- test('can use declared parameter in dimension', () => {
151
- expect(`
152
- ##! experimental.parameters
153
- source: ab_new(param::number) is ab extend {
154
- dimension: param_plus_one is param + 1
155
- }
156
- `).toTranslate();
157
- });
158
- test('can use declared parameter in sql function', () => {
159
- expect(`
160
- ##! experimental { parameters sql_functions }
161
- source: ab_new(param::number) is ab extend {
162
- dimension: param_plus_one is sql_number("\${param} + 1")
163
- }
164
- run: ab_new(param is 1) -> param_plus_one
165
- `).toTranslate();
166
- });
167
- test('can use declared parameter in nest extending other', () => {
168
- expect(`
169
- ##! experimental.parameters
170
- source: ab_new(param::number is 10) is ab extend {
171
- dimension: p1 is param
172
- view: my_view is {
173
- group_by: p2 is param
174
- nest: nested is {
175
- group_by: p3 is param
176
- }
177
- }
178
- }
179
- run: ab_new -> my_view
180
- `).toTranslate();
181
- });
182
- test('can use declared parameter in source extension in view', () => {
183
- expect(`
184
- ##! experimental.parameters
185
- source: ab_new(param::number is 10) is ab extend {
186
- view: my_view is {
187
- extend: {
188
- dimension: p1 is param
189
- }
190
- group_by: p1
191
- }
192
- }
193
- `).toTranslate();
194
- });
195
- test('can use declared parameter in nest with table', () => {
196
- expect(`
197
- ##! experimental.parameters
198
- source: ab_new(param::number is 10) is _db_.table('aTable') extend {
199
- dimension: p1 is param
200
- view: my_view is {
201
- group_by: p2 is param
202
- nest: nested is {
203
- group_by: p3 is param
204
- }
205
- }
206
- }
207
- run: ab_new -> my_view
208
- `).toTranslate();
209
- });
210
- test('can pass argument for param', () => {
211
- expect(`
212
- ##! experimental.parameters
213
- source: ab_new(param::number) is ab
214
- run: ab_new(param is 1) -> { select: * }
215
- `).toTranslate();
216
- });
217
- test('can not pass argument for default-valued param', () => {
218
- expect(`
219
- ##! experimental.parameters
220
- source: ab_new(param is 1) is ab
221
- run: ab_new -> { select: * }
222
- `).toTranslate();
223
- });
224
- test('can pass zero args for source with default-valued param', () => {
225
- expect(`
226
- ##! experimental.parameters
227
- source: ab_new(param is 1) is ab
228
- run: ab_new() -> { select: * }
229
- `).toTranslate();
230
- });
231
- test('can pass non-literal argument for param', () => {
232
- expect(`
233
- ##! experimental.parameters
234
- source: ab_new(param::number) is ab
235
- run: ab_new(param is 1 + 1) -> { select: * }
236
- `).toTranslate();
237
- });
238
- test('parameter not included in wildcard', () => {
239
- expect((0, test_translator_1.markSource) `
240
- ##! experimental.parameters
241
- source: ab_new(param::number) is ab extend {
242
- view: all_fields is { select: * }
243
- }
244
- run: ab_new(param is 1) -> all_fields -> { select: ${'param'} }
245
- `).toLog((0, test_translator_1.errorMessage)("'param' is not defined"));
246
- });
247
- test('cannot reference renamed param in query against source', () => {
248
- expect((0, test_translator_1.markSource) `
249
- ##! experimental.parameters
250
- source: ab_new(param::number) is ab
251
- run: ab_new(param is 1) -> { select: p is ${'param'} }
252
- `).toLog((0, test_translator_1.errorMessage)("'param' is not defined"));
253
- });
254
- test('cannot reference param in query against source', () => {
255
- expect((0, test_translator_1.markSource) `
256
- ##! experimental.parameters
257
- source: ab_new(param::number) is ab
258
- run: ab_new(param is 1) -> { select: ${'param'} }
259
- `).toLog((0, test_translator_1.errorMessage)("'param' is not defined"));
260
- });
261
- test('cannot reference param in source extension', () => {
262
- expect((0, test_translator_1.markSource) `
263
- ##! experimental.parameters
264
- source: ab_new(param::number) is ab
265
- source: x is ab_new(param is 1) extend {
266
- dimension: param_copy is ${'param'}
267
- }
268
- `).toLog((0, test_translator_1.errorMessage)("'param' is not defined"));
269
- });
270
- test('cannot reference param in in-query source extension', () => {
271
- expect((0, test_translator_1.markSource) `
272
- ##! experimental.parameters
273
- source: ab_new(param::number) is ab
274
- run: ab_new(param is 1) -> {
275
- extend: {
276
- dimension: param_copy is ${'param'}
277
- }
278
- group_by: param_copy
279
- }
280
- `).toLog((0, test_translator_1.errorMessage)("'param' is not defined"));
281
- });
282
- test('can reference field in source in argument', () => {
283
- expect((0, test_translator_1.markSource) `
284
- ##! experimental.parameters
285
- source: ab_new(param::number) is ab
286
- run: ab_new(param is ${'ai'}) -> { select: * }
287
- `).toLog((0, test_translator_1.errorMessage)('`ai` is not defined'));
288
- });
289
- test('can pass through parameter to joined source (shorthand)', () => {
290
- expect(`
291
- ##! experimental.parameters
292
- source: ab_ext_1(a_1::string) is ab extend {
293
- where: ai = a_1
294
- }
295
-
296
- source: ab_ext_2(a_2::string) is ab extend {
297
- where: ai = a_2
298
- join_many: ab_ext_1(a_1 is a_2) on 1 = 1
299
- }
300
-
301
- run: ab_ext_2(a_2 is "CA") -> {
302
- group_by:
303
- a1 is ai,
304
- a2 is ab_ext_1.ai
305
- aggregate: c is count()
306
- }
307
- `).toTranslate();
308
- });
309
- test('can pass through parameter to joined source (longhand)', () => {
310
- expect(`
311
- ##! experimental.parameters
312
- source: ab_ext_1(a_1::string) is ab extend {
313
- where: ai = a_1
314
- }
315
-
316
- source: ab_ext_2(a_2::string) is ab extend {
317
- where: ai = a_2
318
- join_many: ab_ext_1 is ab_ext_1(a_1 is a_2) on 1 = 1
319
- }
320
-
321
- run: ab_ext_2(a_2 is "CA") -> {
322
- group_by:
323
- a1 is ai,
324
- a2 is ab_ext_1.ai
325
- aggregate: c is count()
326
- }
327
- `).toTranslate();
328
- });
329
- test.skip('can pass through parameter to source in joined query', () => {
330
- expect(`
331
- ##! experimental.parameters
332
- source: ab_ext_1(a_1::string) is ab extend {
333
- where: ai = a_1
334
- }
335
-
336
- source: ab_ext_2(a_2::string) is ab extend {
337
- where: ai = a_2
338
- join_many: ab_ext_1 is ab_ext_1(a_1 is a_2) -> { select: * } on 1 = 1
339
- }
340
- `).toTranslate();
341
- });
342
- test.skip('can pass through parameter to view in joined query', () => {
343
- expect(`
344
- ##! experimental.parameters
345
- source: ab_ext(param::string) is ab extend {
346
- join_many: abq is ab -> { select: p is param } on 1 = 1
347
- }
348
- `).toTranslate();
349
- });
350
- test.skip('can pass through parameter to source in query in SQL source', () => {
351
- expect(`
352
- ##! experimental.parameters
353
- source: ab_ext(param::string) is ab
354
- source: sql_query(a_1::string) is duckdb.sql("""
355
- SELECT * FROM (%{ ab_ext(param is a_1) -> { select: * } })
356
- """)
357
- `).toTranslate();
358
- });
359
- test.skip('can pass through parameter to view in query in SQL source', () => {
360
- expect(`
361
- ##! experimental.parameters
362
- source: sql_query(a_1::string) is duckdb.sql("""
363
- SELECT * FROM (%{ ab -> { select: p is param } })
364
- """)
365
- `).toTranslate();
366
- });
367
- test.skip('can pass through parameter to source in query in joined SQL source', () => {
368
- expect(`
369
- ##! experimental.parameters
370
- source: ab_ext_1(a_1::string) is ab extend {
371
- where: ai = a_1
372
- }
373
-
374
- source: ab_ext_2(a_2::string) is ab extend {
375
- where: ai = a_2
376
- join_many: ab_ext_1 is duckdb.sql("""
377
- SELECT * FROM (%{ ab_ext_1(a_1 is a_2) -> { select: * } })
378
- """) on 1 = 1
379
- }
380
- `).toTranslate();
381
- });
382
- test('can reference param in query against source', () => {
383
- expect((0, test_translator_1.markSource) `
384
- ##! experimental.parameters
385
- source: ab_new(param::number) is ab
386
- run: ab_new(param is 1) -> { select: ${'param'} }
387
- `).toLog((0, test_translator_1.errorMessage)("'param' is not defined"));
388
- });
389
- test('can reference param in view in source', () => {
390
- expect(`
391
- ##! experimental.parameters
392
- source: ab_new(param::number) is ab extend {
393
- view: x is { select: param }
394
- }
395
- `).toTranslate();
396
- });
397
- test('can declare dimension which is just the parameter', () => {
398
- expect(`
399
- ##! experimental.parameters
400
- source: ab_new(param::number) is ab extend {
401
- dimension: p is param
402
- }
403
- `).toTranslate();
404
- });
405
- test('cannot reference param in expression in query against source', () => {
406
- expect(`
407
- ##! experimental.parameters
408
- source: ab_new(param::number) is ab
409
- run: ab_new(param is 1) -> { select: p is ${'param'} }
410
- `).toLog((0, test_translator_1.errorMessage)("'param' is not defined"));
411
- });
412
- test('error when declaring parameter twice', () => {
413
- expect((0, test_translator_1.markSource) `
414
- ##! experimental.parameters
415
- source: ab_new(param::number, ${'param::number'}) is ab
416
- `).toLog((0, test_translator_1.errorMessage)('Cannot redefine parameter `param`'));
417
- });
418
- // This behavior will likely change in the future; but in the meantime, this
419
- // safeguards against some confusion about parameter scoping
420
- test('error when declaring parameter with same name as field (extended)', () => {
421
- expect(`
422
- ##! experimental.parameters
423
- source: ab_new(ai::string) is ab extend {
424
- dimension: foo is upper(ai)
425
- }
426
- `).toLog((0, test_translator_1.errorMessage)('No matching overload for function upper(number)'), (0, test_translator_1.errorMessage)('Illegal shadowing of field `ai` by parameter with the same name'));
427
- });
428
- test('can shadow field that is excepted', () => {
429
- expect(`
430
- ##! experimental.parameters
431
- source: ab_new(ai::string) is ab extend {
432
- except: ai
433
- dimension: foo is upper(ai)
434
- }
435
- `).toTranslate();
436
- });
437
- test('error when declaring parameter with same name as field (not extended)', () => {
438
- expect((0, test_translator_1.markSource) `
439
- ##! experimental.parameters
440
- source: ab_new(${'ai::string'}) is ab
441
- `).toLog((0, test_translator_1.errorMessage)('Illegal shadowing of field `ai` by parameter with the same name'));
442
- });
443
- test('do not inherit parameters from base source', () => {
444
- expect((0, test_translator_1.markSource) `
445
- ##! experimental.parameters
446
- source: ab_new(param::number) is ab
447
- source: ab_new_new is ab_new(param is 1)
448
- run: ab_new_new(${'param'} is 2) -> { select: * }
449
- `).toLog((0, test_translator_1.errorMessage)('`ab_new_new` has no declared parameter named `param`'));
450
- });
451
- test('error when declaring field with same name as parameter', () => {
452
- expect((0, test_translator_1.markSource) `
453
- ##! experimental.parameters
454
- source: ab_new(param::number) is ab extend {
455
- dimension: param is 1
456
- }
457
- `).toLog((0, test_translator_1.errorMessage)("Cannot redefine 'param'"));
458
- });
459
- test('error when declaring parameter without experiment enabled', () => {
460
- expect((0, test_translator_1.markSource) `
461
- source: ab_new(param::number) is ab
462
- `).toLog((0, test_translator_1.error)('experiment-not-enabled', { experimentId: 'parameters' }));
463
- });
464
- test('cannot except parameter from extended source', () => {
465
- expect((0, test_translator_1.markSource) `
466
- ##! experimental.parameters
467
- source: ab_new(param_a::number) is ab
468
- source: ab_new_new(param_b::number) is ab_new(param_a is 1) extend {
469
- except: param_a
470
- }
471
- `).toLog((0, test_translator_1.errorMessage)('`param_a` is not defined'));
472
- });
473
- test('cannot except parameter in direct extend', () => {
474
- expect((0, test_translator_1.markSource) `
475
- ##! experimental.parameters
476
- source: ab_new(param::number) is ab extend {
477
- except: param
478
- }
479
- `).toLog((0, test_translator_1.errorMessage)('Illegal `except:` of parameter'));
480
- });
481
- test('cannot accept parameter', () => {
482
- expect((0, test_translator_1.markSource) `
483
- ##! experimental.parameters
484
- source: ab_new(param::number) is ab extend {
485
- accept: param
486
- }
487
- `).toLog((0, test_translator_1.errorMessage)('Illegal `accept:` of parameter'));
488
- });
489
- test('error when using parameter without experiment enabled', () => {
490
- expect((0, test_translator_1.markSource) `
491
- run: ab_new${'(param is param)'} -> { select: * }
492
- `).toLog((0, test_translator_1.error)('experiment-not-enabled', { experimentId: 'parameters' }));
493
- });
494
- test('parameters cannot reference themselves', () => {
495
- expect((0, test_translator_1.markSource) `
496
- ##! experimental.parameters
497
- source: ab_new(param::number) is ab
498
- run: ab_new(param is ${'param'}) -> { select: * }
499
- `).toLog((0, test_translator_1.errorMessage)('`param` is not defined'));
500
- });
501
- // This just looks like circular referencing--in reality, you cannot reference other
502
- // parameters in parameter arguments, hence just "xxx is not defined"
503
- test('error when circularly referencing mutually recursive parameters in argument', () => {
504
- expect((0, test_translator_1.markSource) `
505
- ##! experimental.parameters
506
- source: ab_new(p_a::number, p_b::number) is ab
507
- run: ab_new(p_a is ${'p_b'}, p_b is ${'p_a'}) -> { select: * }
508
- `).toLog((0, test_translator_1.errorMessage)('`p_b` is not defined'), (0, test_translator_1.errorMessage)('`p_a` is not defined'));
509
- });
510
- test('error when passing param with no name', () => {
511
- expect((0, test_translator_1.markSource) `
512
- ##! experimental.parameters
513
- source: ab_new(param::number) is ab
514
- run: ab_new(${'1'}) -> { select: * }
515
- `).toLog((0, test_translator_1.errorMessage)('Parameterized source arguments must be named with `parameter_name is`'), (0, test_translator_1.errorMessage)('Argument not provided for required parameter `param`'));
516
- });
517
- test('error when passing param with incorrect name', () => {
518
- expect((0, test_translator_1.markSource) `
519
- ##! experimental.parameters
520
- source: ab_new(param::number) is ab
521
- run: ab_new(${'wrong_name'} is 1, param is 2) -> { select: * }
522
- `).toLog((0, test_translator_1.errorMessage)('`ab_new` has no declared parameter named `wrong_name`'));
523
- });
524
- test('error when passing param multiple times', () => {
525
- expect((0, test_translator_1.markSource) `
526
- ##! experimental.parameters
527
- source: ab_new(param::number) is ab
528
- run: ab_new(param is 1, ${'param is 2'}) -> { select: * }
529
- `).toLog((0, test_translator_1.errorMessage)('Cannot pass argument for `param` more than once'));
530
- });
531
- test('error when not specifying argument for param with parentheses', () => {
532
- expect((0, test_translator_1.markSource) `
533
- ##! experimental.parameters
534
- source: ab_new(param::number) is ab
535
- run: ${'ab_new'}() -> { select: * }
536
- `).toLog((0, test_translator_1.errorMessage)('Argument not provided for required parameter `param`'));
537
- });
538
- test('error when not specifying argument for param without parentheses', () => {
539
- expect((0, test_translator_1.markSource) `
540
- ##! experimental.parameters
541
- source: ab_new(param::number) is ab
542
- run: ${'ab_new'} -> { select: * }
543
- `).toLog((0, test_translator_1.errorMessage)('Argument not provided for required parameter `param`'));
544
- });
545
- test('error when not specifying argument for param second time', () => {
546
- expect((0, test_translator_1.markSource) `
547
- ##! experimental.parameters
548
- source: ab_new(param::number) is ab
549
- run: ab_new(param is 1) -> { select: * }
550
- run: ${'ab_new'} -> { select: * }
551
- `).toLog((0, test_translator_1.errorMessage)('Argument not provided for required parameter `param`'));
552
- });
553
- test('error when referencing parameter that does not exist in join definition', () => {
554
- expect((0, test_translator_1.markSource) `
555
- ##! experimental.parameters
556
- source: ab_new_1(param_1::number) is ab
557
- source: ab_new_2(param_2::number) is ab extend {
558
- join_one: ab_join is ab_new_1(param_1 is ${'param_3'})
559
- }
560
- `).toLog((0, test_translator_1.errorMessage)('`param_3` is not defined'));
561
- });
562
- test('error when referencing identifier in default param value', () => {
563
- expect((0, test_translator_1.markSource) `
564
- ##! experimental.parameters
565
- source: ab_new_1(param_1 is ${'ident'}) is ab
566
- `).toLog((0, test_translator_1.errorMessage)('Only constants allowed in parameter default values'));
567
- });
568
- test.skip('can use param in multi-stage query', () => {
569
- expect(`
570
- ##! experimental.parameters
571
- source: ab_new(param::number) is ab extend {
572
- view: q is {
573
- select: *
574
- } -> {
575
- group_by: x is param
576
- }
577
- }
578
- `).toTranslate();
579
- });
580
- test('can not pass parameter into source of query yet', () => {
581
- expect((0, test_translator_1.markSource) `
582
- ##! experimental.parameters
583
- source: ab_new(param::number) is ab
584
- source: ab_new_new(param::number) is ab_new(${'param'}) -> { select: * }
585
- `).toLog((0, test_translator_1.errorMessage)('`param` is not defined'));
586
- });
587
- test.skip('can add an annotation to a param', () => {
588
- expect(`
589
- ##! experimental.parameters
590
- source: ab_new(
591
- # mytag=1
592
- param::number
593
- ) is ab
594
- `).toTranslate();
595
- });
596
- test('source arguments from query propagate as arguments not parameters', () => {
597
- expect(`
598
- ##! experimental.parameters
599
- source: ab_new(param::number) is ab extend {
600
- dimension: param_value is param
601
- }
602
- query: foo is ab_new(param is 1) -> { select: param_value }
603
- source: foo_ext is foo
604
- run: foo_ext -> { select: param_value }
605
- `).toTranslate();
606
- });
607
- test('source arguments carry over from previous invocation', () => {
608
- expect(`
609
- ##! experimental.parameters
610
- source: ab_new(param::number) is ab extend {
611
- dimension: param_value is param
612
- }
613
- source: foo is ab_new(param is 1)
614
- source: foo_ext is foo
615
- run: foo_ext -> { select: param_value }
616
- `).toTranslate();
617
- });
618
- });
619
- //# sourceMappingURL=parameters.spec.js.map
@@ -1 +0,0 @@
1
- import './parse-expects';