From b88762bd173b500d13ffa7d31f2d1b8097f07f57 Mon Sep 17 00:00:00 2001 From: Chris Swenson Date: Mon, 13 Jan 2025 17:15:24 -0600 Subject: [PATCH] Fix issue with referencing field in doubly-nested join inside a nest (#2092) --- .../malloy/src/lang/ast/field-space/query-spaces.ts | 6 ++++-- packages/malloy/src/lang/test/query.spec.ts | 13 +++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/malloy/src/lang/ast/field-space/query-spaces.ts b/packages/malloy/src/lang/ast/field-space/query-spaces.ts index 0c9f5bc560..62677be29a 100644 --- a/packages/malloy/src/lang/ast/field-space/query-spaces.ts +++ b/packages/malloy/src/lang/ast/field-space/query-spaces.ts @@ -50,6 +50,7 @@ import { emptyCompositeFieldUsage, emptyNarrowedCompositeFieldResolution, isEmptyCompositeFieldUsage, + joinedCompositeFieldUsage, mergeCompositeFieldUsage, narrowCompositeFieldResolution, NarrowedCompositeFieldResolution, @@ -220,9 +221,10 @@ export abstract class QueryOperationSpace const lookup = this.exprSpace.lookup(reference); // Should always be found... if (lookup.found && lookup.found instanceof StructSpaceFieldBase) { - return ( + return joinedCompositeFieldUsage( + joinPath.slice(0, -1), lookup.found.fieldDef().onCompositeFieldUsage ?? - emptyCompositeFieldUsage() + emptyCompositeFieldUsage() ); } throw new Error('Unexpected join lookup was not found or not a struct'); diff --git a/packages/malloy/src/lang/test/query.spec.ts b/packages/malloy/src/lang/test/query.spec.ts index 1984541367..d6e2cb10c7 100644 --- a/packages/malloy/src/lang/test/query.spec.ts +++ b/packages/malloy/src/lang/test/query.spec.ts @@ -777,6 +777,19 @@ describe('query:', () => { group_by: b.ai }`).toTranslate(); }); + test('reference field in double nested join inside nest', () => { + expect(` + source: a_2 is a extend { join_one: b is b extend { + join_one: c is b on 1 = c.ai + } with astr } + + run: a_2 -> { + nest: x is { + group_by: ai is b.c.ai + } + } + `).toTranslate(); + }); test.skip('reference join as field', () => { expect(`run: a -> { extend: { join_one: b with astr }