示例#1
0
    def test_groupby_numbers(self):
        self.assertParse(
            qSelect(qp.Wildcard(), group_by=qp.GroupBy([1], None)),
            "SELECT * GROUP BY 1;")

        self.assertParse(
            qSelect(qp.Wildcard(), group_by=qp.GroupBy([2, 4, 5], None)),
            "SELECT * GROUP BY 2, 4, 5;")
示例#2
0
 def test_groupby_many(self):
     self.assertParse(
         qSelect(qp.Wildcard(),
                 group_by=qp.GroupBy(
                     [qp.Column('a'),
                      qp.Column('b'),
                      qp.Column('c')], None)), "SELECT * GROUP BY a, b, c;")
示例#3
0
 def test_groupby_expr(self):
     self.assertParse(
         qSelect(qp.Wildcard(),
                 group_by=qp.GroupBy([
                     qp.Greater(qp.Function('length', [qp.Column('a')]), qp.Constant(0)),
                     qp.Column('b')], None)),
         "SELECT * GROUP BY length(a) > 0, b;")
示例#4
0
 def test_groupby_having(self):
     self.assertParse(
         qSelect(qp.Wildcard(),
                 group_by=qp.GroupBy(
                     [qp.Column('a')],
                     qp.Equal(qp.Function('sum', [qp.Column('position')]),
                              qp.Constant(0)))),
         "SELECT * GROUP BY a HAVING sum(position) = 0;")
示例#5
0
class TestTranslationBalance(CompileSelectBase):

    group_by = qp.GroupBy([qp.Column('account'),
                           qp.Function('account_sortkey', [qp.Column(name='account')])],
                          None)

    order_by = qp.OrderBy([qp.Function('account_sortkey', [qp.Column('account')])], None)

    def test_balance(self):
        balance = self.parse("BALANCES;")
        select = qc.transform_balances(balance)
        self.assertEqual(
            qp.Select([
                qp.Target(qp.Column('account'), None),
                qp.Target(qp.Function('sum', [qp.Column('position')]), None),
                ], None, None, self.group_by, self.order_by,
                      None, None, None, None),
            select)

    def test_balance_with_units(self):
        balance = self.parse("BALANCES AT cost;")
        select = qc.transform_balances(balance)
        self.assertEqual(
            qp.Select([
                qp.Target(qp.Column('account'), None),
                qp.Target(qp.Function('sum',
                                      [qp.Function('cost',
                                                   [qp.Column('position')])]), None)],
                      None, None, self.group_by, self.order_by,
                      None, None, None, None),
            select)

    def test_balance_with_units_and_from(self):
        balance = self.parse("BALANCES AT cost FROM year = 2014;")
        select = qc.transform_balances(balance)
        self.assertEqual(
            qp.Select([
                qp.Target(qp.Column('account'), None),
                qp.Target(qp.Function('sum', [qp.Function('cost',
                                                          [qp.Column('position')])]), None),
                ],
                      qp.From(qp.Equal(qp.Column('year'), qp.Constant(2014)),
                              None, None, None),
                      None,
                      self.group_by,
                      self.order_by,
                      None, None, None, None),
            select)