Add support for postgres GROUPING SET, ROLLUP and CUBE grouping operators
Add support for mysql WITH ROLLUP grouping operator Add support for GROUPING operator
This commit is contained in:
parent
31dc7b6dd3
commit
fa69565dbf
9 changed files with 476 additions and 70 deletions
|
|
@ -217,16 +217,95 @@ GROUP BY payment.customer_id;
|
|||
|
||||
}
|
||||
|
||||
func TestGroupByWithRollup(t *testing.T) {
|
||||
skipForMariaDB(t)
|
||||
|
||||
stmt := SELECT(
|
||||
Inventory.FilmID.AS("film_id"),
|
||||
Inventory.StoreID.AS("store_id"),
|
||||
GROUPING(Inventory.FilmID).AS("grouping_film_id"),
|
||||
GROUPING(Inventory.FilmID, Inventory.StoreID).AS("grouping_film_id_store_id"),
|
||||
COUNT(STAR).AS("count"),
|
||||
).FROM(
|
||||
Inventory,
|
||||
).WHERE(
|
||||
Inventory.FilmID.IN(Int(2), Int(3)),
|
||||
).GROUP_BY(
|
||||
WITH_ROLLUP(Inventory.FilmID, Inventory.StoreID),
|
||||
).ORDER_BY(
|
||||
Inventory.FilmID,
|
||||
Inventory.StoreID,
|
||||
)
|
||||
|
||||
testutils.AssertDebugStatementSql(t, stmt, `
|
||||
SELECT inventory.film_id AS "film_id",
|
||||
inventory.store_id AS "store_id",
|
||||
GROUPING(inventory.film_id) AS "grouping_film_id",
|
||||
GROUPING(inventory.film_id, inventory.store_id) AS "grouping_film_id_store_id",
|
||||
COUNT(*) AS "count"
|
||||
FROM dvds.inventory
|
||||
WHERE inventory.film_id IN (2, 3)
|
||||
GROUP BY inventory.film_id, inventory.store_id WITH ROLLUP
|
||||
ORDER BY inventory.film_id, inventory.store_id;
|
||||
`)
|
||||
|
||||
var dest []struct {
|
||||
FilmID int
|
||||
StoreID int
|
||||
GroupingFilmID int
|
||||
GroupingFilmIDStoreID int
|
||||
}
|
||||
|
||||
err := stmt.Query(db, &dest)
|
||||
require.NoError(t, err)
|
||||
|
||||
testutils.AssertJSON(t, dest, `
|
||||
[
|
||||
{
|
||||
"FilmID": 0,
|
||||
"StoreID": 0,
|
||||
"GroupingFilmID": 1,
|
||||
"GroupingFilmIDStoreID": 3
|
||||
},
|
||||
{
|
||||
"FilmID": 2,
|
||||
"StoreID": 0,
|
||||
"GroupingFilmID": 0,
|
||||
"GroupingFilmIDStoreID": 1
|
||||
},
|
||||
{
|
||||
"FilmID": 2,
|
||||
"StoreID": 2,
|
||||
"GroupingFilmID": 0,
|
||||
"GroupingFilmIDStoreID": 0
|
||||
},
|
||||
{
|
||||
"FilmID": 3,
|
||||
"StoreID": 0,
|
||||
"GroupingFilmID": 0,
|
||||
"GroupingFilmIDStoreID": 1
|
||||
},
|
||||
{
|
||||
"FilmID": 3,
|
||||
"StoreID": 2,
|
||||
"GroupingFilmID": 0,
|
||||
"GroupingFilmIDStoreID": 0
|
||||
}
|
||||
]
|
||||
`)
|
||||
}
|
||||
|
||||
func TestSubQuery(t *testing.T) {
|
||||
|
||||
rRatingFilms := Film.
|
||||
SELECT(
|
||||
Film.FilmID,
|
||||
Film.Title,
|
||||
Film.Rating,
|
||||
).
|
||||
WHERE(Film.Rating.EQ(enum.FilmRating.R)).
|
||||
AsTable("rFilms")
|
||||
rRatingFilms := SELECT(
|
||||
Film.FilmID,
|
||||
Film.Title,
|
||||
Film.Rating,
|
||||
).FROM(
|
||||
Film,
|
||||
).WHERE(
|
||||
Film.Rating.EQ(enum.FilmRating.R),
|
||||
).AsTable("rFilms")
|
||||
|
||||
rFilmID := Film.FilmID.From(rRatingFilms)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue