def test_cube_operators(self): t = table('t', column('value'), column('x'), column('y'), column('z'), column('q')) stmt = select([func.sum(t.c.value)]) self.assert_compile( stmt.group_by(func.cube(t.c.x, t.c.y)), "SELECT sum(t.value) AS sum_1 FROM t GROUP BY CUBE(t.x, t.y)" ) self.assert_compile( stmt.group_by(func.rollup(t.c.x, t.c.y)), "SELECT sum(t.value) AS sum_1 FROM t GROUP BY ROLLUP(t.x, t.y)" ) self.assert_compile( stmt.group_by( func.grouping_sets(t.c.x, t.c.y) ), "SELECT sum(t.value) AS sum_1 FROM t " "GROUP BY GROUPING SETS(t.x, t.y)" ) self.assert_compile( stmt.group_by( func.grouping_sets( sql.tuple_(t.c.x, t.c.y), sql.tuple_(t.c.z, t.c.q), ) ), "SELECT sum(t.value) AS sum_1 FROM t GROUP BY " "GROUPING SETS((t.x, t.y), (t.z, t.q))" )
def query(self) -> Query: facet_columns = [ f.facet_column(self.base) for f in self.facets.values() ] count_field = get_primary_key(self.base) count_column = get_column(self.base, count_field) return self.session.query( *[*facet_columns, func.count(distinct(count_column))]).group_by( func.grouping_sets(*facet_columns))
def test_cube_operators(self): t = table( "t", column("value"), column("x"), column("y"), column("z"), column("q"), ) stmt = select(func.sum(t.c.value)) self.assert_compile( stmt.group_by(func.cube(t.c.x, t.c.y)), "SELECT sum(t.value) AS sum_1 FROM t GROUP BY CUBE(t.x, t.y)", ) self.assert_compile( stmt.group_by(func.rollup(t.c.x, t.c.y)), "SELECT sum(t.value) AS sum_1 FROM t GROUP BY ROLLUP(t.x, t.y)", ) self.assert_compile( stmt.group_by(func.grouping_sets(t.c.x, t.c.y)), "SELECT sum(t.value) AS sum_1 FROM t " "GROUP BY GROUPING SETS(t.x, t.y)", ) self.assert_compile( stmt.group_by( func.grouping_sets( sql.tuple_(t.c.x, t.c.y), sql.tuple_(t.c.z, t.c.q) ) ), "SELECT sum(t.value) AS sum_1 FROM t GROUP BY " "GROUPING SETS((t.x, t.y), (t.z, t.q))", )