From a97324a2b85dd8463f300004bee82b906a68251d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Sun, 5 Jun 2022 16:43:31 +0200 Subject: [PATCH] fix(query-builder): fix calling `qb.count('id', true).getCount()` Closes #3182 --- packages/knex/src/query/QueryBuilder.ts | 5 +++++ tests/QueryBuilder.test.ts | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/packages/knex/src/query/QueryBuilder.ts b/packages/knex/src/query/QueryBuilder.ts index e2809a453b1b..735972fa2db4 100644 --- a/packages/knex/src/query/QueryBuilder.ts +++ b/packages/knex/src/query/QueryBuilder.ts @@ -529,6 +529,11 @@ export class QueryBuilder = AnyEntity> { * Executes count query (without offset and limit), returning total count of results */ async getCount(field?: string | string[], distinct?: boolean): Promise { + if (this.type === QueryType.COUNT) { + const res = await this.execute<{ count: number }>('get', false); + return res ? +res.count : 0; + } + const qb = this.clone(); qb.count(field, distinct ?? qb.hasToManyJoins()).limit(undefined).offset(undefined).orderBy([]); const res = await qb.execute<{ count: number }>('get', false); diff --git a/tests/QueryBuilder.test.ts b/tests/QueryBuilder.test.ts index ea3b8e1b89c2..8e451bc0fa82 100644 --- a/tests/QueryBuilder.test.ts +++ b/tests/QueryBuilder.test.ts @@ -1370,6 +1370,11 @@ describe('QueryBuilder', () => { await qb.where({ price: orm.em.raw('price + 1') }).getCount(); }); + test('gh issue 3182', async () => { + const qb = orm.em.createQueryBuilder(Author2); + await qb.count('id', true).getCount(); + }); + test('update query with JSON type and raw value', async () => { const qb = orm.em.createQueryBuilder(Book2); const raw = qb.raw(`jsonb_set(payload, '$.{consumed}', ?)`, [123]);