2023-04-01 12:48:24 +03:00
package libsq_test
2023-04-01 11:38:32 +03:00
import (
"testing"
"github.com/neilotoole/sq/drivers/sqlite3"
"github.com/neilotoole/sq/drivers/mysql"
"github.com/neilotoole/sq/libsq/source"
_ "github.com/mattn/go-sqlite3"
)
//nolint:exhaustive,lll
func TestQuery_groupby ( t * testing . T ) {
testCases := [ ] queryTestCase {
{
name : "group_by/single-term" ,
in : ` @sakila | .payment | .customer_id, sum(.amount) | group_by(.customer_id) ` ,
wantSQL : ` SELECT "customer_id", sum("amount") AS "sum(.amount)" FROM "payment" GROUP BY "customer_id" ` ,
2023-04-22 06:36:32 +03:00
override : map [ source . DriverType ] string { mysql . Type : "SELECT `customer_id`, sum(`amount`) AS `sum(.amount)` FROM `payment` GROUP BY `customer_id`" } ,
2023-04-01 11:38:32 +03:00
wantRecs : 599 ,
} ,
{
name : "group_by/multiple_terms" ,
in : ` @sakila | .payment | .customer_id, .staff_id, sum(.amount) | group_by(.customer_id, .staff_id) ` ,
wantSQL : ` SELECT "customer_id", "staff_id", sum("amount") AS "sum(.amount)" FROM "payment" GROUP BY "customer_id", "staff_id" ` ,
2023-04-22 06:36:32 +03:00
override : map [ source . DriverType ] string { mysql . Type : "SELECT `customer_id`, `staff_id`, sum(`amount`) AS `sum(.amount)` FROM `payment` GROUP BY `customer_id`, `staff_id`" } ,
2023-04-01 11:38:32 +03:00
wantRecs : 1198 ,
} ,
{
name : "group_by/with_func/sqlite" ,
2023-05-27 06:11:38 +03:00
in : ` @sakila | .payment | _date("month", .payment_date):month, count(.payment_id):count | group_by(_date("month", .payment_date)) ` ,
2023-04-01 11:38:32 +03:00
wantSQL : ` SELECT date('month', "payment_date") AS "month", count("payment_id") AS "count" FROM "payment" GROUP BY date('month', "payment_date") ` ,
2023-04-22 06:36:32 +03:00
onlyFor : [ ] source . DriverType { sqlite3 . Type } ,
2023-04-01 11:38:32 +03:00
wantRecs : 1 ,
} ,
}
for _ , tc := range testCases {
tc := tc
t . Run ( tc . name , func ( t * testing . T ) {
execQueryTestCase ( t , tc )
} )
}
}