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) }) }