@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.
Files changed (52) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/index.js +1 -3
  3. package/dist/lang/ast/error-factory.js +3 -3
  4. package/dist/lang/ast/expressions/expr-aggregate-function.d.ts +6 -4
  5. package/dist/lang/ast/expressions/expr-aggregate-function.js +24 -13
  6. package/dist/lang/ast/expressions/expr-count.js +1 -1
  7. package/dist/lang/ast/expressions/expr-func.js +4 -4
  8. package/dist/lang/ast/expressions/expr-id-reference.js +2 -2
  9. package/dist/lang/ast/field-space/dynamic-space.js +1 -1
  10. package/dist/lang/ast/field-space/index-field-space.d.ts +5 -3
  11. package/dist/lang/ast/field-space/index-field-space.js +85 -16
  12. package/dist/lang/ast/field-space/query-input-space.d.ts +3 -3
  13. package/dist/lang/ast/field-space/query-spaces.d.ts +15 -12
  14. package/dist/lang/ast/field-space/query-spaces.js +60 -57
  15. package/dist/lang/ast/field-space/reference-field.d.ts +0 -5
  16. package/dist/lang/ast/field-space/reference-field.js +16 -46
  17. package/dist/lang/ast/query-builders/index-builder.d.ts +2 -2
  18. package/dist/lang/ast/query-builders/partial-builder.js +28 -1
  19. package/dist/lang/ast/query-builders/project-builder.d.ts +8 -4
  20. package/dist/lang/ast/query-builders/project-builder.js +5 -6
  21. package/dist/lang/ast/query-builders/reduce-builder.d.ts +13 -8
  22. package/dist/lang/ast/query-builders/reduce-builder.js +12 -9
  23. package/dist/lang/ast/query-items/field-declaration.d.ts +1 -1
  24. package/dist/lang/ast/query-items/field-references.d.ts +5 -1
  25. package/dist/lang/ast/query-items/field-references.js +17 -1
  26. package/dist/lang/ast/query-properties/qop-desc.d.ts +2 -2
  27. package/dist/lang/ast/source-properties/joins.js +1 -1
  28. package/dist/lang/ast/types/field-space.d.ts +2 -2
  29. package/dist/lang/ast/types/query-builder.d.ts +2 -2
  30. package/dist/lang/ast/view-elements/qop-desc-view.d.ts +3 -3
  31. package/dist/lang/ast/view-elements/reference-view.d.ts +3 -3
  32. package/dist/lang/ast/view-elements/reference-view.js +1 -1
  33. package/dist/lang/ast/view-elements/refine-utils.js +20 -18
  34. package/dist/lang/ast/view-elements/view-arrow.d.ts +2 -2
  35. package/dist/lang/ast/view-elements/view-refine.d.ts +3 -3
  36. package/dist/lang/ast/view-elements/view.d.ts +4 -4
  37. package/dist/lang/field-utils.d.ts +3 -3
  38. package/dist/lang/field-utils.js +9 -8
  39. package/dist/lang/test/annotation.spec.js +26 -27
  40. package/dist/lang/test/expressions.spec.js +43 -40
  41. package/dist/lang/test/field-symbols.spec.js +4 -4
  42. package/dist/lang/test/locations.spec.js +13 -6
  43. package/dist/lang/test/query.spec.js +44 -56
  44. package/dist/lang/test/test-translator.d.ts +3 -2
  45. package/dist/lang/test/test-translator.js +30 -24
  46. package/dist/malloy.js +1 -1
  47. package/dist/model/malloy_query.d.ts +14 -36
  48. package/dist/model/malloy_query.js +145 -312
  49. package/dist/model/malloy_types.d.ts +18 -23
  50. package/dist/model/malloy_types.js +2 -15
  51. package/dist/tags.js +19 -4
  52. 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 | FieldReferenceFragment | SourceReferenceFragment | SqlStringFragment | ParameterFragment | FilterFragment | OutputFieldFragment | AggregateFragment | UngroupFragment | DialectFragment | FunctionParameterFragment | FunctionCallFragment | SQLExpressionFragment | SpreadFragment;
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
- fields: string[];
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
- fields: QueryFieldDef[];
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
- field: FieldRef;
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
- /** field reference in a query */
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 type FieldRef = string | FieldDef;
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.isFieldReferenceFragment = exports.isFieldFragment = exports.isSpreadFragment = exports.isSQLExpressionFragment = exports.isFunctionCallFragment = exports.isFunctionParameterFragment = exports.isUngroupFragment = exports.isAsymmetricFragment = exports.isAggregateFragment = exports.isDialectFragment = exports.isFilterFragment = exports.isOutputFieldFragment = exports.isFilteredAliasedName = 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 = exports.isIndexSegment = exports.isRawSegment = void 0;
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
- // MTOY TODO SYNTAX ERROR NOT FOUND
438
+ this.msgLog.semanticError(ctx, `Reference to undefined property ${path.join('.')}`);
424
439
  return this.defaultResult();
425
440
  }
426
441
  visitTagEq(ctx) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/malloy",
3
- "version": "0.0.119-dev240123183113",
3
+ "version": "0.0.119-dev240124170348",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",