From 54cb40478350d9a29512dbc2407249c042918793 Mon Sep 17 00:00:00 2001 From: Hieuzest Date: Fri, 10 May 2024 23:57:35 +0800 Subject: [PATCH] fix(core,sql): ensure full SELECT and Field.expr for JoinSelection only --- packages/core/src/driver.ts | 16 ++++++++++++---- packages/sql-utils/src/index.ts | 2 +- packages/tests/src/selection.ts | 13 +++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/packages/core/src/driver.ts b/packages/core/src/driver.ts index d104888e..f9c64815 100644 --- a/packages/core/src/driver.ts +++ b/packages/core/src/driver.ts @@ -93,11 +93,19 @@ export abstract class Driver { } if (table instanceof Selection) { - if (!table.args[0].fields) return table.model + if (!table.args[0].fields && (typeof table.table === 'string' || table.table instanceof Selection)) { + return table.model + } const model = new Model('temp') - model.fields = mapValues(table.args[0].fields, (expr, key) => ({ - type: Type.fromTerm(expr), - })) + if (table.args[0].fields) { + model.fields = mapValues(table.args[0].fields, (expr) => ({ + type: Type.fromTerm(expr), + })) + } else { + model.fields = mapValues(table.model.fields, (field) => ({ + type: Type.fromField(field), + })) + } return model } diff --git a/packages/sql-utils/src/index.ts b/packages/sql-utils/src/index.ts index 99a9153b..315d04c5 100644 --- a/packages/sql-utils/src/index.ts +++ b/packages/sql-utils/src/index.ts @@ -535,7 +535,7 @@ export class Builder { suffix = ` WHERE ${filter}` + suffix } - if (inline && !args[0].fields && !suffix) { + if (inline && !args[0].fields && !suffix && (typeof table === 'string' || table instanceof Selection)) { return (addref && isBracketed(prefix)) ? `${prefix} ${ref}` : prefix } diff --git a/packages/tests/src/selection.ts b/packages/tests/src/selection.ts index 03f6b35e..ea418a10 100644 --- a/packages/tests/src/selection.ts +++ b/packages/tests/src/selection.ts @@ -369,6 +369,19 @@ namespace SelectionTests { .join(['foo', 'bar']) .execute(row => $.count(row.bar.id)) ).to.eventually.equal(6) + + await expect(database + .join(['foo', 'bar']) + .where(row => $.gt(row.bar.id, 3)) + .execute(row => $.count(row.bar.id)) + ).to.eventually.equal(3) + + await expect(database + .join(['foo', 'bar']) + .where(row => $.gt(row.bar.id, 3)) + .orderBy(row => row.bar.id) + .execute(row => $.count(row.bar.id)) + ).to.eventually.equal(3) }) }