@malloydata/malloy 0.0.119-dev240123183113 → 0.0.119-dev240124170348
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/index.d.ts +2 -2
- package/dist/index.js +1 -3
- package/dist/lang/ast/error-factory.js +3 -3
- package/dist/lang/ast/expressions/expr-aggregate-function.d.ts +6 -4
- package/dist/lang/ast/expressions/expr-aggregate-function.js +24 -13
- package/dist/lang/ast/expressions/expr-count.js +1 -1
- package/dist/lang/ast/expressions/expr-func.js +4 -4
- package/dist/lang/ast/expressions/expr-id-reference.js +2 -2
- package/dist/lang/ast/field-space/dynamic-space.js +1 -1
- package/dist/lang/ast/field-space/index-field-space.d.ts +5 -3
- package/dist/lang/ast/field-space/index-field-space.js +85 -16
- package/dist/lang/ast/field-space/query-input-space.d.ts +3 -3
- package/dist/lang/ast/field-space/query-spaces.d.ts +15 -12
- package/dist/lang/ast/field-space/query-spaces.js +60 -57
- package/dist/lang/ast/field-space/reference-field.d.ts +0 -5
- package/dist/lang/ast/field-space/reference-field.js +16 -46
- package/dist/lang/ast/query-builders/index-builder.d.ts +2 -2
- package/dist/lang/ast/query-builders/partial-builder.js +28 -1
- package/dist/lang/ast/query-builders/project-builder.d.ts +8 -4
- package/dist/lang/ast/query-builders/project-builder.js +5 -6
- package/dist/lang/ast/query-builders/reduce-builder.d.ts +13 -8
- package/dist/lang/ast/query-builders/reduce-builder.js +12 -9
- package/dist/lang/ast/query-items/field-declaration.d.ts +1 -1
- package/dist/lang/ast/query-items/field-references.d.ts +5 -1
- package/dist/lang/ast/query-items/field-references.js +17 -1
- package/dist/lang/ast/query-properties/qop-desc.d.ts +2 -2
- package/dist/lang/ast/source-properties/joins.js +1 -1
- package/dist/lang/ast/types/field-space.d.ts +2 -2
- package/dist/lang/ast/types/query-builder.d.ts +2 -2
- package/dist/lang/ast/view-elements/qop-desc-view.d.ts +3 -3
- package/dist/lang/ast/view-elements/reference-view.d.ts +3 -3
- package/dist/lang/ast/view-elements/reference-view.js +1 -1
- package/dist/lang/ast/view-elements/refine-utils.js +20 -18
- package/dist/lang/ast/view-elements/view-arrow.d.ts +2 -2
- package/dist/lang/ast/view-elements/view-refine.d.ts +3 -3
- package/dist/lang/ast/view-elements/view.d.ts +4 -4
- package/dist/lang/field-utils.d.ts +3 -3
- package/dist/lang/field-utils.js +9 -8
- package/dist/lang/test/annotation.spec.js +26 -27
- package/dist/lang/test/expressions.spec.js +43 -40
- package/dist/lang/test/field-symbols.spec.js +4 -4
- package/dist/lang/test/locations.spec.js +13 -6
- package/dist/lang/test/query.spec.js +44 -56
- package/dist/lang/test/test-translator.d.ts +3 -2
- package/dist/lang/test/test-translator.js +30 -24
- package/dist/malloy.js +1 -1
- package/dist/model/malloy_query.d.ts +14 -36
- package/dist/model/malloy_query.js +145 -312
- package/dist/model/malloy_types.d.ts +18 -23
- package/dist/model/malloy_types.js +2 -15
- package/dist/tags.js +19 -4
- package/package.json +1 -1
|
@@ -71,10 +71,6 @@ export interface AliasedName {
|
|
|
71
71
|
export interface TypedObject {
|
|
72
72
|
type: string;
|
|
73
73
|
}
|
|
74
|
-
export interface FilteredAliasedName extends AliasedName {
|
|
75
|
-
filterList?: FilterExpression[];
|
|
76
|
-
}
|
|
77
|
-
export declare function isFilteredAliasedName(f: FieldTypeRef): f is FilteredAliasedName;
|
|
78
74
|
/** all named objects have a type an a name (optionally aliased) */
|
|
79
75
|
export interface NamedObject extends AliasedName, HasLocation {
|
|
80
76
|
type: string;
|
|
@@ -113,7 +109,7 @@ export interface AggregateFragment {
|
|
|
113
109
|
type: 'aggregate';
|
|
114
110
|
function: AggregateFunctionType;
|
|
115
111
|
e: Expr;
|
|
116
|
-
structPath?: string;
|
|
112
|
+
structPath?: string[];
|
|
117
113
|
}
|
|
118
114
|
export declare function isAggregateFragment(f: Fragment): f is AggregateFragment;
|
|
119
115
|
export declare function isAsymmetricFragment(f: Fragment): f is AggregateFragment;
|
|
@@ -133,7 +129,7 @@ export interface FunctionCallFragment {
|
|
|
133
129
|
overload: FunctionOverloadDef;
|
|
134
130
|
expressionType: ExpressionType;
|
|
135
131
|
args: Expr[];
|
|
136
|
-
structPath?: string;
|
|
132
|
+
structPath?: string[];
|
|
137
133
|
}
|
|
138
134
|
export declare function isFunctionCallFragment(f: Fragment): f is FunctionCallFragment;
|
|
139
135
|
export interface SQLExpressionFragment {
|
|
@@ -148,14 +144,9 @@ export interface SpreadFragment {
|
|
|
148
144
|
export declare function isSpreadFragment(f: Fragment): f is SpreadFragment;
|
|
149
145
|
export interface FieldFragment {
|
|
150
146
|
type: 'field';
|
|
151
|
-
path: string;
|
|
147
|
+
path: string[];
|
|
152
148
|
}
|
|
153
149
|
export declare function isFieldFragment(f: Fragment): f is FieldFragment;
|
|
154
|
-
export interface FieldReferenceFragment {
|
|
155
|
-
type: 'field-reference';
|
|
156
|
-
path: string;
|
|
157
|
-
}
|
|
158
|
-
export declare function isFieldReferenceFragment(f: Fragment): f is FieldReferenceFragment;
|
|
159
150
|
export interface SqlStringFragment {
|
|
160
151
|
type: 'sql-string';
|
|
161
152
|
e: Expr;
|
|
@@ -163,12 +154,12 @@ export interface SqlStringFragment {
|
|
|
163
154
|
export declare function isSqlStringFragment(f: Fragment): f is SqlStringFragment;
|
|
164
155
|
export interface SourceReferenceFragment {
|
|
165
156
|
type: 'source-reference';
|
|
166
|
-
path?: string;
|
|
157
|
+
path?: string[];
|
|
167
158
|
}
|
|
168
159
|
export declare function isSourceReferenceFragment(f: Fragment): f is SourceReferenceFragment;
|
|
169
160
|
export interface ParameterFragment {
|
|
170
161
|
type: 'parameter';
|
|
171
|
-
path: string;
|
|
162
|
+
path: string[];
|
|
172
163
|
}
|
|
173
164
|
export declare function isParameterFragment(f: Fragment): f is ParameterFragment;
|
|
174
165
|
export interface ApplyValueFragment {
|
|
@@ -249,7 +240,7 @@ export interface NumberLiteralFragment extends DialectFragmentBase {
|
|
|
249
240
|
literal: string;
|
|
250
241
|
}
|
|
251
242
|
export type DialectFragment = DivFragment | TimeLiteralFragment | NowFragment | TimeDeltaFragment | TimeDiffFragment | TimeTruncFragment | TypecastFragment | TimeExtractFragment | StringLiteralFragment | RegexpLiteralFragment | NumberLiteralFragment | RegexpMatchFragment;
|
|
252
|
-
export type Fragment = string | ApplyFragment | ApplyValueFragment | FieldFragment |
|
|
243
|
+
export type Fragment = string | ApplyFragment | ApplyValueFragment | FieldFragment | SourceReferenceFragment | SqlStringFragment | ParameterFragment | FilterFragment | OutputFieldFragment | AggregateFragment | UngroupFragment | DialectFragment | FunctionParameterFragment | FunctionCallFragment | SQLExpressionFragment | SpreadFragment;
|
|
253
244
|
export type Expr = Fragment[];
|
|
254
245
|
export interface TypedValue {
|
|
255
246
|
value: Expr;
|
|
@@ -458,9 +449,11 @@ export interface RawSegment extends Filtered {
|
|
|
458
449
|
fields: never[];
|
|
459
450
|
}
|
|
460
451
|
export declare function isRawSegment(pe: PipeSegment): pe is RawSegment;
|
|
452
|
+
export type IndexFieldDef = RefToField;
|
|
453
|
+
export type SegmentFieldDef = IndexFieldDef | QueryFieldDef;
|
|
461
454
|
export interface IndexSegment extends Filtered {
|
|
462
455
|
type: 'index';
|
|
463
|
-
|
|
456
|
+
indexFields: IndexFieldDef[];
|
|
464
457
|
limit?: number;
|
|
465
458
|
weightMeasure?: string;
|
|
466
459
|
sample?: Sampling;
|
|
@@ -468,7 +461,7 @@ export interface IndexSegment extends Filtered {
|
|
|
468
461
|
export declare function isIndexSegment(pe: PipeSegment): pe is IndexSegment;
|
|
469
462
|
export interface QuerySegment extends Filtered {
|
|
470
463
|
type: 'reduce' | 'project' | 'partial';
|
|
471
|
-
|
|
464
|
+
queryFields: QueryFieldDef[];
|
|
472
465
|
extendSource?: FieldDef[];
|
|
473
466
|
limit?: number;
|
|
474
467
|
by?: By;
|
|
@@ -496,7 +489,7 @@ export type StructRelationship = {
|
|
|
496
489
|
type: 'inline';
|
|
497
490
|
} | {
|
|
498
491
|
type: 'nested';
|
|
499
|
-
|
|
492
|
+
fieldName: string;
|
|
500
493
|
isArray: boolean;
|
|
501
494
|
};
|
|
502
495
|
export interface SQLFragment {
|
|
@@ -611,14 +604,16 @@ export type FieldAtomicTypeDef = FieldStringTypeDef | FieldDateTypeDef | FieldTi
|
|
|
611
604
|
export declare function isFieldTypeDef(f: FieldDef): f is FieldTypeDef;
|
|
612
605
|
export declare function isFieldTimeBased(f: FieldDef): f is FieldTimestampDef | FieldDateDef;
|
|
613
606
|
export declare function isFieldStructDef(f: FieldDef): f is StructDef;
|
|
614
|
-
|
|
615
|
-
export type FieldTypeRef = string | FieldTypeDef | FilteredAliasedName;
|
|
616
|
-
/** field reference with with possibly and order by. */
|
|
617
|
-
export type QueryFieldDef = FieldTypeRef | TurtleDef;
|
|
607
|
+
export type QueryFieldDef = FieldTypeDef | TurtleDef | RefToField;
|
|
618
608
|
/** basics statement */
|
|
619
609
|
export type FieldDef = FieldTypeDef | StructDef | TurtleDef;
|
|
620
610
|
/** reference to a field */
|
|
621
|
-
export
|
|
611
|
+
export interface RefToField {
|
|
612
|
+
type: 'fieldref';
|
|
613
|
+
path: string[];
|
|
614
|
+
annotation?: Annotation;
|
|
615
|
+
}
|
|
616
|
+
export type FieldRefOrDef = FieldDef | RefToField;
|
|
622
617
|
/** which field is the primary key in this struct */
|
|
623
618
|
export type PrimaryKeyRef = string;
|
|
624
619
|
/** filters */
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.isSamplingEnable = exports.isSamplingPercent = exports.isSamplingRows = exports.isQuerySegment = exports.isProjectSegment = exports.isPartialSegment = exports.isReduceSegment = exports.refIsStructDef = exports.isByExpression = exports.isByName = exports.ValueType = exports.isExtractUnit = exports.isTimestampUnit = exports.isDateUnit = exports.FieldIsIntrinsic = exports.isCastType = exports.isAtomicFieldType = exports.isTimeFieldType = exports.hasExpression = exports.maxOfExpressionTypes = exports.maxExpressionType = exports.isExpressionTypeLEQ = exports.expressionIsAnalytic = exports.expressionIsCalculation = exports.expressionInvolvesAggregate = exports.expressionIsUngroupedAggregate = exports.expressionIsAggregate = exports.expressionIsScalar = exports.mkExpr = exports.isApplyFragment = exports.isApplyValue = exports.isParameterFragment = exports.isSourceReferenceFragment = exports.isSqlStringFragment = exports.
|
|
26
|
-
exports.isValueDate = exports.isValueTimestamp = exports.isValueBoolean = exports.isValueNumber = exports.isValueString = exports.isMeasureLike = exports.getPhysicalFields = exports.getDimensions = exports.isPhysical = exports.isDimensional = exports.isAtomicField = exports.isTurtleDef = exports.getIdentifier = exports.isFieldStructDef = exports.isFieldTimeBased = exports.isFieldTypeDef = exports.isSQLBlockStruct = exports.mergeEvalSpaces = exports.isSQLFragment = exports.isJoinOn = exports.isMatrixOperation =
|
|
25
|
+
exports.isIndexSegment = exports.isRawSegment = exports.isSamplingEnable = exports.isSamplingPercent = exports.isSamplingRows = exports.isQuerySegment = exports.isProjectSegment = exports.isPartialSegment = exports.isReduceSegment = exports.refIsStructDef = exports.isByExpression = exports.isByName = exports.ValueType = exports.isExtractUnit = exports.isTimestampUnit = exports.isDateUnit = exports.FieldIsIntrinsic = exports.isCastType = exports.isAtomicFieldType = exports.isTimeFieldType = exports.hasExpression = exports.maxOfExpressionTypes = exports.maxExpressionType = exports.isExpressionTypeLEQ = exports.expressionIsAnalytic = exports.expressionIsCalculation = exports.expressionInvolvesAggregate = exports.expressionIsUngroupedAggregate = exports.expressionIsAggregate = exports.expressionIsScalar = exports.mkExpr = exports.isApplyFragment = exports.isApplyValue = exports.isParameterFragment = exports.isSourceReferenceFragment = exports.isSqlStringFragment = exports.isFieldFragment = exports.isSpreadFragment = exports.isSQLExpressionFragment = exports.isFunctionCallFragment = exports.isFunctionParameterFragment = exports.isUngroupFragment = exports.isAsymmetricFragment = exports.isAggregateFragment = exports.isDialectFragment = exports.isFilterFragment = exports.isOutputFieldFragment = exports.paramHasValue = exports.isConditionParameter = exports.isValueParameter = void 0;
|
|
26
|
+
exports.isValueDate = exports.isValueTimestamp = exports.isValueBoolean = exports.isValueNumber = exports.isValueString = exports.isMeasureLike = exports.getPhysicalFields = exports.getDimensions = exports.isPhysical = exports.isDimensional = exports.isAtomicField = exports.isTurtleDef = exports.getIdentifier = exports.isFieldStructDef = exports.isFieldTimeBased = exports.isFieldTypeDef = exports.isSQLBlockStruct = exports.mergeEvalSpaces = exports.isSQLFragment = exports.isJoinOn = exports.isMatrixOperation = void 0;
|
|
27
27
|
function isValueParameter(p) {
|
|
28
28
|
return p.value !== undefined;
|
|
29
29
|
}
|
|
@@ -36,15 +36,6 @@ function paramHasValue(p) {
|
|
|
36
36
|
return isValueParameter(p) || p.condition !== null;
|
|
37
37
|
}
|
|
38
38
|
exports.paramHasValue = paramHasValue;
|
|
39
|
-
function isFilteredAliasedName(f) {
|
|
40
|
-
for (const prop of Object.keys(f)) {
|
|
41
|
-
if (!['name', 'as', 'filterList'].includes(prop)) {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
exports.isFilteredAliasedName = isFilteredAliasedName;
|
|
48
39
|
function isOutputFieldFragment(f) {
|
|
49
40
|
return (f === null || f === void 0 ? void 0 : f.type) === 'outputField';
|
|
50
41
|
}
|
|
@@ -90,10 +81,6 @@ function isFieldFragment(f) {
|
|
|
90
81
|
return (f === null || f === void 0 ? void 0 : f.type) === 'field';
|
|
91
82
|
}
|
|
92
83
|
exports.isFieldFragment = isFieldFragment;
|
|
93
|
-
function isFieldReferenceFragment(f) {
|
|
94
|
-
return (f === null || f === void 0 ? void 0 : f.type) === 'field-reference';
|
|
95
|
-
}
|
|
96
|
-
exports.isFieldReferenceFragment = isFieldReferenceFragment;
|
|
97
84
|
function isSqlStringFragment(f) {
|
|
98
85
|
return (f === null || f === void 0 ? void 0 : f.type) === 'sql-string';
|
|
99
86
|
}
|
package/dist/tags.js
CHANGED
|
@@ -278,6 +278,20 @@ class TagErrorListener {
|
|
|
278
278
|
};
|
|
279
279
|
this.log.push(logMsg);
|
|
280
280
|
}
|
|
281
|
+
semanticError(cx, msg) {
|
|
282
|
+
const errAt = {
|
|
283
|
+
line: this.atLine,
|
|
284
|
+
// mtoy TODO get this right
|
|
285
|
+
character: 0,
|
|
286
|
+
};
|
|
287
|
+
const range = { start: errAt, end: errAt };
|
|
288
|
+
const logMsg = {
|
|
289
|
+
message: msg,
|
|
290
|
+
at: { url: this.sourceURL, range },
|
|
291
|
+
severity: 'error',
|
|
292
|
+
};
|
|
293
|
+
this.log.push(logMsg);
|
|
294
|
+
}
|
|
281
295
|
}
|
|
282
296
|
function getBuildOn(ctx) {
|
|
283
297
|
const buildOn = ctx['buildOn'];
|
|
@@ -333,19 +347,20 @@ function parseTagline(source, extending, outerScope, sourceURL, onLine, atChar)
|
|
|
333
347
|
const inputStream = antlr4ts_1.CharStreams.fromString(source);
|
|
334
348
|
const lexer = new MalloyTagLexer_1.MalloyTagLexer(inputStream);
|
|
335
349
|
const tokenStream = new antlr4ts_1.CommonTokenStream(lexer);
|
|
350
|
+
const pLog = new TagErrorListener(sourceURL, onLine, atChar);
|
|
336
351
|
const taglineParser = new MalloyTagParser_1.MalloyTagParser(tokenStream);
|
|
337
352
|
taglineParser.removeErrorListeners();
|
|
338
|
-
const pLog = new TagErrorListener(sourceURL, onLine, atChar);
|
|
339
353
|
taglineParser.addErrorListener(pLog);
|
|
340
354
|
const tagTree = taglineParser.tagLine();
|
|
341
|
-
const treeWalker = new TaglineParser(outerScope);
|
|
355
|
+
const treeWalker = new TaglineParser(outerScope, pLog);
|
|
342
356
|
const tag = treeWalker.tagLineToTag(tagTree, extending);
|
|
343
357
|
return { tag, log: pLog.log };
|
|
344
358
|
}
|
|
345
359
|
class TaglineParser extends tree_1.AbstractParseTreeVisitor {
|
|
346
|
-
constructor(outerScopes = []) {
|
|
360
|
+
constructor(outerScopes = [], msgLog) {
|
|
347
361
|
super();
|
|
348
362
|
this.scopes = [];
|
|
363
|
+
this.msgLog = msgLog;
|
|
349
364
|
this.scopes.unshift(...outerScopes);
|
|
350
365
|
}
|
|
351
366
|
defaultResult() {
|
|
@@ -420,7 +435,7 @@ class TaglineParser extends tree_1.AbstractParseTreeVisitor {
|
|
|
420
435
|
break;
|
|
421
436
|
}
|
|
422
437
|
}
|
|
423
|
-
|
|
438
|
+
this.msgLog.semanticError(ctx, `Reference to undefined property ${path.join('.')}`);
|
|
424
439
|
return this.defaultResult();
|
|
425
440
|
}
|
|
426
441
|
visitTagEq(ctx) {
|