@malloydata/malloy 0.0.80-dev230907183434 → 0.0.80
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/dist/lang/ast/expressions/expr-aggregate-function.d.ts +8 -2
- package/dist/lang/ast/expressions/expr-aggregate-function.js +211 -12
- package/dist/lang/ast/expressions/expr-asymmetric.d.ts +2 -1
- package/dist/lang/ast/expressions/expr-asymmetric.js +5 -2
- package/dist/lang/ast/expressions/expr-avg.d.ts +1 -1
- package/dist/lang/ast/expressions/expr-avg.js +2 -2
- package/dist/lang/ast/expressions/expr-sum.d.ts +1 -1
- package/dist/lang/ast/expressions/expr-sum.js +2 -2
- package/dist/lang/ast/field-space/static-space.js +19 -2
- package/dist/lang/ast/field-space/struct-space-field-base.d.ts +2 -1
- package/dist/lang/ast/field-space/struct-space-field-base.js +3 -0
- package/dist/lang/ast/types/lookup-result.d.ts +5 -0
- package/dist/lang/ast/types/malloy-element.d.ts +1 -0
- package/dist/lang/ast/types/malloy-element.js +4 -0
- package/dist/lang/lib/Malloy/MalloyLexer.d.ts +75 -74
- package/dist/lang/lib/Malloy/MalloyLexer.js +1101 -1094
- package/dist/lang/lib/Malloy/MalloyParser.d.ts +91 -78
- package/dist/lang/lib/Malloy/MalloyParser.js +866 -801
- package/dist/lang/lib/Malloy/MalloyParserListener.d.ts +13 -0
- package/dist/lang/lib/Malloy/MalloyParserVisitor.d.ts +8 -0
- package/dist/lang/malloy-to-ast.d.ts +3 -0
- package/dist/lang/malloy-to-ast.js +76 -25
- package/dist/lang/parse-malloy.d.ts +1 -0
- package/dist/lang/parse-malloy.js +13 -0
- package/dist/lang/test/expressions.spec.js +241 -25
- package/dist/lang/test/parse.spec.js +1 -127
- package/dist/lang/test/query.spec.js +1 -1
- package/dist/lang/test/test-translator.d.ts +7 -1
- package/dist/lang/test/test-translator.js +40 -13
- package/dist/model/utils.d.ts +1 -0
- package/dist/model/utils.js +101 -1
- package/package.json +1 -1
|
@@ -28,7 +28,7 @@ export declare class TestTranslator extends MalloyTranslator {
|
|
|
28
28
|
readonly testSrc: string;
|
|
29
29
|
testRoot?: TestRoot;
|
|
30
30
|
internalModel: ModelDef;
|
|
31
|
-
constructor(testSrc: string, rootRule?: string);
|
|
31
|
+
constructor(testSrc: string, rootRule?: string, internalModel?: ModelDef);
|
|
32
32
|
translate(): TranslateResponse;
|
|
33
33
|
addChild(url: string): void;
|
|
34
34
|
ast(): MalloyElement | undefined;
|
|
@@ -44,6 +44,7 @@ export declare class TestTranslator extends MalloyTranslator {
|
|
|
44
44
|
export declare class BetaExpression extends TestTranslator {
|
|
45
45
|
private compiled?;
|
|
46
46
|
constructor(src: string);
|
|
47
|
+
private testFS;
|
|
47
48
|
compile(): void;
|
|
48
49
|
generated(): ExprValue;
|
|
49
50
|
}
|
|
@@ -62,6 +63,11 @@ interface HasTranslator extends MarkedSource {
|
|
|
62
63
|
}
|
|
63
64
|
export declare function expr(unmarked: TemplateStringsArray, ...marked: string[]): HasTranslator;
|
|
64
65
|
export declare function model(unmarked: TemplateStringsArray, ...marked: string[]): HasTranslator;
|
|
66
|
+
export declare function makeModelFunc(options: {
|
|
67
|
+
model?: ModelDef;
|
|
68
|
+
prefix?: string;
|
|
69
|
+
wrap?: (code: string) => string;
|
|
70
|
+
}): (unmarked: TemplateStringsArray, ...marked: string[]) => HasTranslator;
|
|
65
71
|
export declare function markSource(unmarked: TemplateStringsArray, ...marked: string[]): MarkedSource;
|
|
66
72
|
export declare function getSelectOneStruct(sqlBlock: SQLBlockSource): SQLBlockStructDef;
|
|
67
73
|
export {};
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
24
|
*/
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.getSelectOneStruct = exports.markSource = exports.model = exports.expr = exports.getJoinField = exports.getQueryField = exports.getFieldDef = exports.getModelQuery = exports.getExplore = exports.BetaExpression = exports.TestTranslator = exports.TestChildTranslator = exports.aTableDef = exports.pretty = void 0;
|
|
26
|
+
exports.getSelectOneStruct = exports.markSource = exports.makeModelFunc = exports.model = exports.expr = exports.getJoinField = exports.getQueryField = exports.getFieldDef = exports.getModelQuery = exports.getExplore = exports.BetaExpression = exports.TestTranslator = exports.TestChildTranslator = exports.aTableDef = exports.pretty = void 0;
|
|
27
27
|
const util_1 = require("util");
|
|
28
28
|
const malloy_types_1 = require("../../model/malloy_types");
|
|
29
29
|
const ast_1 = require("../ast");
|
|
@@ -51,6 +51,14 @@ const mockSchema = {
|
|
|
51
51
|
{ type: 'timestamp', name: 'ats' },
|
|
52
52
|
{ type: 'unsupported', name: 'aun' },
|
|
53
53
|
{ type: 'unsupported', name: 'aweird', rawType: 'weird' },
|
|
54
|
+
{
|
|
55
|
+
type: 'struct',
|
|
56
|
+
name: 'astruct',
|
|
57
|
+
structSource: { type: 'nested' },
|
|
58
|
+
structRelationship: { type: 'inline' },
|
|
59
|
+
fields: [{ type: 'number', name: 'column', numberType: 'integer' }],
|
|
60
|
+
dialect: 'standardsql',
|
|
61
|
+
},
|
|
54
62
|
],
|
|
55
63
|
},
|
|
56
64
|
'malloytest.carriers': {
|
|
@@ -188,7 +196,7 @@ class TestChildTranslator extends parse_malloy_1.MalloyChildTranslator {
|
|
|
188
196
|
exports.TestChildTranslator = TestChildTranslator;
|
|
189
197
|
const testURI = 'internal://test/langtests/root.malloy';
|
|
190
198
|
class TestTranslator extends parse_malloy_1.MalloyTranslator {
|
|
191
|
-
constructor(testSrc, rootRule = 'malloyDocument') {
|
|
199
|
+
constructor(testSrc, rootRule = 'malloyDocument', internalModel) {
|
|
192
200
|
super(testURI);
|
|
193
201
|
this.testSrc = testSrc;
|
|
194
202
|
/*
|
|
@@ -252,6 +260,9 @@ class TestTranslator extends parse_malloy_1.MalloyTranslator {
|
|
|
252
260
|
};
|
|
253
261
|
this.grammarRule = rootRule;
|
|
254
262
|
this.importZone.define(testURI, testSrc);
|
|
263
|
+
if (internalModel !== undefined) {
|
|
264
|
+
this.internalModel = internalModel;
|
|
265
|
+
}
|
|
255
266
|
for (const tableName in mockSchema) {
|
|
256
267
|
this.schemaZone.define(tableName, mockSchema[tableName]);
|
|
257
268
|
this.schemaZone.define('conn:' + tableName, mockSchema[tableName]);
|
|
@@ -357,20 +368,24 @@ class BetaExpression extends TestTranslator {
|
|
|
357
368
|
constructor(src) {
|
|
358
369
|
super(src, 'justExpr');
|
|
359
370
|
}
|
|
371
|
+
testFS() {
|
|
372
|
+
const aStruct = this.internalModel.contents['ab'];
|
|
373
|
+
if (aStruct.type === 'struct') {
|
|
374
|
+
const tstFS = new static_space_1.StaticSpace(aStruct);
|
|
375
|
+
return tstFS;
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
throw new Error("Can't get simple namespace for expression tests");
|
|
379
|
+
}
|
|
380
|
+
}
|
|
360
381
|
compile() {
|
|
361
382
|
const exprAst = this.ast();
|
|
362
383
|
if (exprAst instanceof ast_1.ExpressionDef) {
|
|
363
|
-
const
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
if (TestTranslator.inspectCompile) {
|
|
369
|
-
console.log('EXPRESSION: ', pretty(exprDef));
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
else {
|
|
373
|
-
throw new Error("Can't get simple namespace for expression tests");
|
|
384
|
+
const tstFS = this.testFS();
|
|
385
|
+
const exprDef = exprAst.getExpression(tstFS);
|
|
386
|
+
this.compiled = exprDef;
|
|
387
|
+
if (TestTranslator.inspectCompile) {
|
|
388
|
+
console.log('EXPRESSION: ', pretty(exprDef));
|
|
374
389
|
}
|
|
375
390
|
}
|
|
376
391
|
else if (this.logger.hasErrors()) {
|
|
@@ -447,6 +462,18 @@ function model(unmarked, ...marked) {
|
|
|
447
462
|
};
|
|
448
463
|
}
|
|
449
464
|
exports.model = model;
|
|
465
|
+
function makeModelFunc(options) {
|
|
466
|
+
return function model(unmarked, ...marked) {
|
|
467
|
+
var _a;
|
|
468
|
+
const ms = markSource(unmarked, ...marked);
|
|
469
|
+
return {
|
|
470
|
+
...ms,
|
|
471
|
+
translator: new TestTranslator(((_a = options.prefix) !== null && _a !== void 0 ? _a : '') +
|
|
472
|
+
(options.wrap ? options.wrap(ms.code) : ms.code), undefined, options === null || options === void 0 ? void 0 : options.model),
|
|
473
|
+
};
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
exports.makeModelFunc = makeModelFunc;
|
|
450
477
|
function markSource(unmarked, ...marked) {
|
|
451
478
|
let code = '';
|
|
452
479
|
const locations = [];
|
package/dist/model/utils.d.ts
CHANGED
|
@@ -22,5 +22,6 @@ export declare class AndChain {
|
|
|
22
22
|
}
|
|
23
23
|
export declare function generateHash(input: string): string;
|
|
24
24
|
export declare function exprMap(expr: Expr, func: (fragment: Fragment) => Expr): Expr;
|
|
25
|
+
export declare function exprWalk(expr: Expr, func: (fragment: Fragment) => void): void;
|
|
25
26
|
export declare function joinWith<T>(els: T[][], sep: T): T[];
|
|
26
27
|
export declare function range(start: number, end: number): number[];
|
package/dist/model/utils.js
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.range = exports.joinWith = exports.exprMap = exports.generateHash = exports.AndChain = exports.generateSQLStringLiteral = exports.indent = void 0;
|
|
25
|
+
exports.range = exports.joinWith = exports.exprWalk = exports.exprMap = exports.generateHash = exports.AndChain = exports.generateSQLStringLiteral = exports.indent = void 0;
|
|
26
26
|
const uuid_1 = require("uuid");
|
|
27
27
|
/** simple indent function */
|
|
28
28
|
function indent(s) {
|
|
@@ -199,6 +199,106 @@ function exprMap(expr, func) {
|
|
|
199
199
|
});
|
|
200
200
|
}
|
|
201
201
|
exports.exprMap = exprMap;
|
|
202
|
+
function exprWalk(expr, func) {
|
|
203
|
+
expr.forEach(fragment => {
|
|
204
|
+
func(fragment);
|
|
205
|
+
if (typeof fragment === 'string') {
|
|
206
|
+
return fragment;
|
|
207
|
+
}
|
|
208
|
+
switch (fragment.type) {
|
|
209
|
+
case 'aggregate':
|
|
210
|
+
case 'all':
|
|
211
|
+
case 'spread':
|
|
212
|
+
case 'sql_expression':
|
|
213
|
+
case 'exclude':
|
|
214
|
+
return {
|
|
215
|
+
...fragment,
|
|
216
|
+
e: exprWalk(fragment.e, func),
|
|
217
|
+
};
|
|
218
|
+
case 'apply':
|
|
219
|
+
return {
|
|
220
|
+
...fragment,
|
|
221
|
+
to: exprWalk(fragment.to, func),
|
|
222
|
+
value: exprWalk(fragment.value, func),
|
|
223
|
+
};
|
|
224
|
+
case 'applyVal':
|
|
225
|
+
case 'field':
|
|
226
|
+
case 'function_parameter':
|
|
227
|
+
case 'parameter':
|
|
228
|
+
case 'outputField':
|
|
229
|
+
return fragment;
|
|
230
|
+
case 'function_call':
|
|
231
|
+
return {
|
|
232
|
+
...fragment,
|
|
233
|
+
args: fragment.args.map(arg => exprWalk(arg, func)),
|
|
234
|
+
};
|
|
235
|
+
case 'filterExpression':
|
|
236
|
+
return {
|
|
237
|
+
...fragment,
|
|
238
|
+
e: exprWalk(fragment.e, func),
|
|
239
|
+
filterList: fragment.filterList.map(filter => {
|
|
240
|
+
return {
|
|
241
|
+
...filter,
|
|
242
|
+
expression: exprWalk(filter.expression, func),
|
|
243
|
+
};
|
|
244
|
+
}),
|
|
245
|
+
};
|
|
246
|
+
case 'dialect': {
|
|
247
|
+
switch (fragment.function) {
|
|
248
|
+
case 'cast':
|
|
249
|
+
case 'regexpMatch':
|
|
250
|
+
return {
|
|
251
|
+
...fragment,
|
|
252
|
+
expr: exprWalk(fragment.expr, func),
|
|
253
|
+
};
|
|
254
|
+
case 'delta':
|
|
255
|
+
return {
|
|
256
|
+
...fragment,
|
|
257
|
+
delta: exprWalk(fragment.delta, func),
|
|
258
|
+
};
|
|
259
|
+
case 'div':
|
|
260
|
+
return {
|
|
261
|
+
...fragment,
|
|
262
|
+
denominator: exprWalk(fragment.denominator, func),
|
|
263
|
+
numerator: exprWalk(fragment.numerator, func),
|
|
264
|
+
};
|
|
265
|
+
case 'now':
|
|
266
|
+
case 'numberLiteral':
|
|
267
|
+
case 'stringLiteral':
|
|
268
|
+
case 'timeLiteral':
|
|
269
|
+
case 'regexpLiteral':
|
|
270
|
+
return fragment;
|
|
271
|
+
case 'extract':
|
|
272
|
+
case 'trunc':
|
|
273
|
+
return {
|
|
274
|
+
...fragment,
|
|
275
|
+
expr: {
|
|
276
|
+
...fragment.expr,
|
|
277
|
+
value: exprWalk(fragment.expr.value, func),
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
case 'timeDiff':
|
|
281
|
+
return {
|
|
282
|
+
...fragment,
|
|
283
|
+
left: {
|
|
284
|
+
...fragment.left,
|
|
285
|
+
value: exprWalk(fragment.left.value, func),
|
|
286
|
+
},
|
|
287
|
+
right: {
|
|
288
|
+
...fragment.left,
|
|
289
|
+
value: exprWalk(fragment.left.value, func),
|
|
290
|
+
},
|
|
291
|
+
};
|
|
292
|
+
default:
|
|
293
|
+
throw new Error('unexpected dialect function');
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
default:
|
|
297
|
+
throw new Error('unexpected');
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
exports.exprWalk = exprWalk;
|
|
202
302
|
function joinWith(els, sep) {
|
|
203
303
|
const result = [];
|
|
204
304
|
for (let i = 0; i < els.length; i++) {
|