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