@malloydata/malloy 0.0.217-dev241118224156 → 0.0.217

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.
@@ -94,7 +94,7 @@ class ExprAggregateFunction extends expression_def_1.ExpressionDef {
94
94
  evalSpace: footType.evalSpace,
95
95
  compositeFieldUsage: footType.compositeFieldUsage,
96
96
  };
97
- structPath = this.source.path;
97
+ structPath = this.source.path.slice(0, -1);
98
98
  // Here we handle a special case where you write `foo.agg()` and `foo` is a
99
99
  // dimension which uses only one distinct join path; in this case, we set the
100
100
  // locality to be that join path
@@ -29,13 +29,14 @@ const query_utils_1 = require("../query-utils");
29
29
  const malloy_element_1 = require("../types/malloy-element");
30
30
  class QueryBase extends malloy_element_1.MalloyElement {
31
31
  query() {
32
+ var _a;
32
33
  const { inputStruct, query } = this.queryComp(true);
33
34
  // TODO add an error if a raw/index query is done against a composite source
34
35
  let compositeResolvedSourceDef = undefined;
35
36
  if (query.pipeline[0] && (0, malloy_types_1.isQuerySegment)(query.pipeline[0])) {
36
- const compositeFieldUsage = query.pipeline[0].compositeFieldUsage;
37
- if (compositeFieldUsage !== undefined &&
38
- !(0, composite_source_utils_1.isEmptyCompositeFieldUsage)(compositeFieldUsage)) {
37
+ const compositeFieldUsage = (_a = query.pipeline[0].compositeFieldUsage) !== null && _a !== void 0 ? _a : (0, composite_source_utils_1.emptyCompositeFieldUsage)();
38
+ if (!(0, composite_source_utils_1.isEmptyCompositeFieldUsage)(compositeFieldUsage) ||
39
+ inputStruct.type === 'composite') {
39
40
  const resolved = (0, composite_source_utils_1.resolveCompositeSources)(inputStruct, compositeFieldUsage);
40
41
  compositeResolvedSourceDef = resolved.sourceDef;
41
42
  }
@@ -42,6 +42,7 @@ describe('composite sources', () => {
42
42
  ##! experimental.composite_sources
43
43
  source: x is compose(ab, ab) extend {
44
44
  dimension: aif is ai + af
45
+ measure: ss is ai.sum()
45
46
  }
46
47
 
47
48
  source: y is compose(ab, ab) extend {
@@ -74,6 +75,10 @@ describe('composite sources', () => {
74
75
  ['x', 'af'],
75
76
  ]));
76
77
  });
78
+ test('measure defined in composite source', () => {
79
+ const mexpr = (0, test_translator_1.makeExprFunc)(m.translator.modelDef, 'x');
80
+ expect(mexpr `ss`).hasCompositeUsage(paths([['ai']]));
81
+ });
77
82
  });
78
83
  describe('composite source resolution and validation', () => {
79
84
  test('compose fails on group_by that is relevant', () => {
@@ -10,9 +10,10 @@ exports.compositeFieldUsageJoinPaths = exports.joinedCompositeFieldUsage = expor
10
10
  const utils_1 = require("../lang/utils");
11
11
  const malloy_types_1 = require("./malloy_types");
12
12
  function _resolveCompositeSources(path, source, compositeFieldUsage, narrowedCompositeFieldResolution = undefined) {
13
- var _a, _b, _c, _d, _e, _f, _g;
13
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
14
14
  let base = { ...source };
15
15
  let narrowedSources = undefined;
16
+ const nonCompositeFields = getNonCompositeFields(source);
16
17
  if (compositeFieldUsage.fields.length > 0) {
17
18
  if (source.type === 'composite') {
18
19
  let found = false;
@@ -36,7 +37,6 @@ function _resolveCompositeSources(path, source, compositeFieldUsage, narrowedCom
36
37
  continue overSources;
37
38
  }
38
39
  }
39
- const nonCompositeFields = getNonCompositeFields(source);
40
40
  if (inputSource.type === 'composite') {
41
41
  const resolveInner = _resolveCompositeSources(path, inputSource, compositeFieldUsageWithoutNonCompositeFields(compositeFieldUsage, inputSource),
42
42
  // This looks wonky, but what we're doing is taking the nested sources
@@ -86,10 +86,18 @@ function _resolveCompositeSources(path, source, compositeFieldUsage, narrowedCom
86
86
  return { error: { code: 'not_a_composite_source', data: { path } } };
87
87
  }
88
88
  }
89
+ else if (source.type === 'composite') {
90
+ const first = source.sources[0];
91
+ base = {
92
+ ...first,
93
+ fields: [...nonCompositeFields, ...base.fields],
94
+ filterList: [...((_e = source.filterList) !== null && _e !== void 0 ? _e : []), ...((_f = first.filterList) !== null && _f !== void 0 ? _f : [])],
95
+ };
96
+ }
89
97
  const fieldsByName = {};
90
- const narrowedJoinedSources = (_e = narrowedCompositeFieldResolution === null || narrowedCompositeFieldResolution === void 0 ? void 0 : narrowedCompositeFieldResolution.joined) !== null && _e !== void 0 ? _e : {};
98
+ const narrowedJoinedSources = (_g = narrowedCompositeFieldResolution === null || narrowedCompositeFieldResolution === void 0 ? void 0 : narrowedCompositeFieldResolution.joined) !== null && _g !== void 0 ? _g : {};
91
99
  for (const field of base.fields) {
92
- fieldsByName[(_f = field.as) !== null && _f !== void 0 ? _f : field.name] = field;
100
+ fieldsByName[(_h = field.as) !== null && _h !== void 0 ? _h : field.name] = field;
93
101
  }
94
102
  for (const [joinName, joinedUsage] of Object.entries(compositeFieldUsage.joinedUsage)) {
95
103
  const join = fieldsByName[joinName];
@@ -119,7 +127,7 @@ function _resolveCompositeSources(path, source, compositeFieldUsage, narrowedCom
119
127
  fieldsByName[joinName] = {
120
128
  ...resolved.success,
121
129
  join: join.join,
122
- as: (_g = join.as) !== null && _g !== void 0 ? _g : join.name,
130
+ as: (_j = join.as) !== null && _j !== void 0 ? _j : join.name,
123
131
  onExpression: join.onExpression,
124
132
  };
125
133
  narrowedJoinedSources[joinName] = resolved.narrowedCompositeFieldResolution;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/malloy",
3
- "version": "0.0.217-dev241118224156",
3
+ "version": "0.0.217",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": "./dist/index.js",