Skip to content

Commit

Permalink
Added clearGroupBy() (#921)
Browse files Browse the repository at this point in the history
* added clearGroupBy

* fix clearGroupBy comment by adding a groupBy to be cleared
  • Loading branch information
dswbx authored Mar 24, 2024
1 parent e84863d commit 0fd4de8
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/operation-node/select-query-node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -218,4 +218,11 @@ export const SelectQueryNode = freeze({
orderBy: undefined,
})
},

cloneWithoutGroupBy(select: SelectQueryNode): SelectQueryNode {
return freeze({
...select,
groupBy: undefined,
})
},
})
27 changes: 27 additions & 0 deletions src/query-builder/select-query-builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1500,6 +1500,26 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O>
*/
clearOrderBy(): SelectQueryBuilder<DB, TB, O>

/**
* Clears `group by` clause from the query.
*
* ### Examples
*
* ```ts
* db.selectFrom('person')
* .selectAll()
* .groupBy('id')
* .clearGroupBy()
* ```
*
* The generated SQL(PostgreSQL):
*
* ```sql
* select * from "person"
* ```
*/
clearGroupBy(): SelectQueryBuilder<DB, TB, O>

/**
* Simply calls the provided function passing `this` as the only argument. `$call` returns
* what the provided function returns.
Expand Down Expand Up @@ -2279,6 +2299,13 @@ class SelectQueryBuilderImpl<DB, TB extends keyof DB, O>
})
}

clearGroupBy(): SelectQueryBuilder<DB, TB, O> {
return new SelectQueryBuilderImpl<DB, TB, O>({
...this.#props,
queryNode: SelectQueryNode.cloneWithoutGroupBy(this.#props.queryNode),
})
}

$call<T>(func: (qb: this) => T): T {
return func(this)
}
Expand Down
27 changes: 27 additions & 0 deletions test/node/src/clear.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -395,5 +395,32 @@ for (const dialect of DIALECTS) {
},
})
})

it('should clear groupBy', () => {
const query = ctx.db
.selectFrom('person')
.selectAll()
.groupBy('id')
.clearGroupBy()

testSql(query, dialect, {
postgres: {
sql: `select * from "person"`,
parameters: [],
},
mysql: {
sql: 'select * from `person`',
parameters: [],
},
mssql: {
sql: `select * from "person"`,
parameters: [],
},
sqlite: {
sql: `select * from "person"`,
parameters: [],
},
})
})
})
}

0 comments on commit 0fd4de8

Please sign in to comment.