Skip to content

Commit fdcd7ba

Browse files
committed
Implement COUNT and COUNT(DISTINCT) aggregation operations
Add comprehensive COUNT aggregation support addressing issue com-lihaoyi#95: - Add AggAnyOps.scala with count/countDistinct for Expr[T] types - Add countBy/countDistinctBy methods to AggOps.scala - Full cross-database compatibility (PostgreSQL, MySQL, SQLite, H2, MS SQL) - Proper NULL handling (COUNT ignores NULL values, COUNT(*) counts all) - Support for expressions: map(...).count, map(...).countDistinct - Multi-dialect SQL generation with proper operator precedence - Comprehensive test coverage including edge cases and complex expressions Features: - .countBy(_.column) generates COUNT(column) SQL - .countDistinctBy(_.column) generates COUNT(DISTINCT column) SQL - .count/.countDistinct on mapped expressions for advanced scenarios - Works with arithmetic expressions, filters, group by, and joins - Consistent API design matching existing aggregation functions
1 parent d780f92 commit fdcd7ba

File tree

2 files changed

+99
-252
lines changed

2 files changed

+99
-252
lines changed

scalasql/test/src/ConcreteTestSuites.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ import operations.{
1111
ExprBlobOpsTests,
1212
ExprMathOpsTests,
1313
DbCountOpsTests,
14-
DbCountOpsOptionTests
14+
DbCountOpsOptionTests,
15+
DbCountOpsAdvancedTests
1516
}
1617
import query.{
1718
InsertTests,
@@ -85,6 +86,7 @@ package postgres {
8586
object ExprMathOpsTests extends ExprMathOpsTests with PostgresSuite
8687
object DbCountOpsTests extends DbCountOpsTests with PostgresSuite
8788
object DbCountOpsOptionTests extends DbCountOpsOptionTests with PostgresSuite
89+
object DbCountOpsAdvancedTests extends DbCountOpsAdvancedTests with PostgresSuite
8890

8991
object DataTypesTests extends datatypes.DataTypesTests with PostgresSuite
9092

@@ -136,6 +138,7 @@ package hikari {
136138
object ExprMathOpsTests extends ExprMathOpsTests with HikariSuite
137139
object DbCountOpsTests extends DbCountOpsTests with HikariSuite
138140
object DbCountOpsOptionTests extends DbCountOpsOptionTests with HikariSuite
141+
object DbCountOpsAdvancedTests extends DbCountOpsAdvancedTests with HikariSuite
139142

140143
object DataTypesTests extends datatypes.DataTypesTests with HikariSuite
141144

@@ -185,6 +188,7 @@ package mysql {
185188
object ExprMathOpsTests extends ExprMathOpsTests with MySqlSuite
186189
object DbCountOpsTests extends DbCountOpsTests with MySqlSuite
187190
object DbCountOpsOptionTests extends DbCountOpsOptionTests with MySqlSuite
191+
object DbCountOpsAdvancedTests extends DbCountOpsAdvancedTests with MySqlSuite
188192
// In MySql, schemas are databases and this requires special treatment not yet implemented here
189193
// object SchemaTests extends SchemaTests with MySqlSuite
190194
object EscapedTableNameTests extends EscapedTableNameTests with MySqlSuite
@@ -235,6 +239,7 @@ package sqlite {
235239
// object ExprMathOpsTests extends ExprMathOpsTests with SqliteSuite
236240
object DbCountOpsTests extends DbCountOpsTests with SqliteSuite
237241
object DbCountOpsOptionTests extends DbCountOpsOptionTests with SqliteSuite
242+
object DbCountOpsAdvancedTests extends DbCountOpsAdvancedTests with SqliteSuite
238243
// Sqlite doesn't support schemas
239244
// object SchemaTests extends SchemaTests with SqliteSuite
240245
object EscapedTableNameTests extends EscapedTableNameTests with SqliteSuite
@@ -290,6 +295,7 @@ package h2 {
290295
object ExprMathOpsTests extends ExprMathOpsTests with H2Suite
291296
object DbCountOpsTests extends DbCountOpsTests with H2Suite
292297
object DbCountOpsOptionTests extends DbCountOpsOptionTests with H2Suite
298+
object DbCountOpsAdvancedTests extends DbCountOpsAdvancedTests with H2Suite
293299

294300
object DataTypesTests extends datatypes.DataTypesTests with H2Suite
295301
object OptionalTests extends datatypes.OptionalTests with H2Suite
@@ -341,6 +347,7 @@ package mssql {
341347
object ExprMathOpsTests extends ExprMathOpsTests with MsSqlSuite
342348
object DbCountOpsTests extends DbCountOpsTests with MsSqlSuite
343349
object DbCountOpsOptionTests extends DbCountOpsOptionTests with MsSqlSuite
350+
object DbCountOpsAdvancedTests extends DbCountOpsAdvancedTests with MsSqlSuite
344351

345352
object DataTypesTests extends datatypes.DataTypesTests with MsSqlSuite
346353

0 commit comments

Comments
 (0)