From 629b3e0fc7affa14c89e55707048c5d0e159fb8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20=C3=81vila=20Martins?= Date: Mon, 1 Aug 2022 20:27:54 -0300 Subject: [PATCH] Fix regression on selectStarOfAliases and clickhouse replace (#71) * Fix regression on selectStarOfAlias and clickhouse replace * update docs --- docs/api/classes/select-statement.ts.md | 7 +++++-- src/classes/joined.ts | 2 +- src/classes/select-statement.ts | 6 +++++- src/types.ts | 4 +++- tests/unit/regression.test.ts | 16 ++++++++++++++++ 5 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 tests/unit/regression.test.ts diff --git a/docs/api/classes/select-statement.ts.md b/docs/api/classes/select-statement.ts.md index 3ae0408..2daf81b 100644 --- a/docs/api/classes/select-statement.ts.md +++ b/docs/api/classes/select-statement.ts.md @@ -229,8 +229,11 @@ clickhouse: { | readonly (Selection | FlatScope)[] | ((fields: Record) => ReadonlyArray | SafeString) ) => SelectStatement - replace: (_: (f: Record & NoSelectFieldsCompileError) => ReplaceT) => - SelectStatement + replace: ( + _: ( + f: Record & SelectionOfScope & NoSelectFieldsCompileError + ) => ReplaceT + ) => SelectStatement } ``` diff --git a/src/classes/joined.ts b/src/classes/joined.ts index b56acbd..a81a7a4 100644 --- a/src/classes/joined.ts +++ b/src/classes/joined.ts @@ -199,7 +199,7 @@ export class Joined< SelectStatement.__fromTableOrSubqueryAndSelectionArray( this, [StarOfAliasesSymbol(aliases as any)], - {}, + this.__props.scope, undefined ) as any; /** diff --git a/src/classes/select-statement.ts b/src/classes/select-statement.ts index f8f0245..6004085 100644 --- a/src/classes/select-statement.ts +++ b/src/classes/select-statement.ts @@ -303,12 +303,16 @@ export class SelectStatement< replace: ( _: ( f: Record & + SelectionOfScope & NoSelectFieldsCompileError ) => ReplaceT ): SelectStatement => this.copy().setReplace([ ...this.__props.replace, - ...(consumeReplaceCallback(_, this.__props.scope) as any), + ...(consumeReplaceCallback( + _ as any, + this.__props.scope + ) as any), ]), }; diff --git a/src/types.ts b/src/types.ts index 2813251..a4f0029 100644 --- a/src/types.ts +++ b/src/types.ts @@ -126,7 +126,9 @@ export type SelectionArrayCallbackShape = ) => SafeString | ReadonlyArray); export type SelectionReplaceCallbackShape = ( - f: Record & NoSelectFieldsCompileError + f: Record & + SelectionOfScope & + NoSelectFieldsCompileError ) => ReadonlyArray; export type SelectionWrapperTypes = ReadonlyArray< diff --git a/tests/unit/regression.test.ts b/tests/unit/regression.test.ts new file mode 100644 index 0000000..8731d6a --- /dev/null +++ b/tests/unit/regression.test.ts @@ -0,0 +1,16 @@ +import { dsql, table } from "../../src"; + +test("selectStarOfAliases", () => { + const cols = ["a", "b"] as const; + const q = table(cols, "t") + .select((_f) => ({ a: dsql(1) })) + .as("m") + .join("LEFT", table(cols, "t").selectStar().as("a2")) + .noConstraint() + .selectStarOfAliases(["a2"]) + .clickhouse.replace((f) => [["a", f.a2.a]]); + + expect(q.stringify()).toMatchInlineSnapshot( + `"SELECT a2.* REPLACE (\`a2\`.\`a\` AS \`a\`) FROM (SELECT 1 AS \`a\` FROM \`t\`) AS \`m\` LEFT JOIN (SELECT * FROM \`t\`) AS \`a2\`"` + ); +});