def test_expr_function_arity(self): # Compile with the correct number of arguments. qc.compile_expression(qp.Function('sum', [qp.Column('number')]), qe.TargetsEnvironment()) # Compile with an incorrect number of arguments. with self.assertRaises(qc.CompilationError): qc.compile_expression(qp.Function('sum', [qp.Column('date'), qp.Column('account')]), qe.TargetsEnvironment())
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)
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)
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;")
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;")
def test_journal(self): journal = self.parse("JOURNAL;") select = qc.transform_journal(journal) self.assertEqual( qp.Select([ qp.Target(qp.Column('date'), None), qp.Target(qp.Column('flag'), None), qp.Target(qp.Function('maxwidth', [qp.Column('payee'), qp.Constant(48)]), None), qp.Target(qp.Function('maxwidth', [qp.Column('narration'), qp.Constant(80)]), None), qp.Target(qp.Column('account'), None), qp.Target(qp.Column('position'), None), qp.Target(qp.Column('balance'), None), ], None, None, None, None, None, None, None, None), select)
def setUp(self): super().setUp() self.targets = [qp.Target(qp.Column('a'), None), qp.Target(qp.Column('b'), None)] self.expr = qp.Equal(qp.Column('d'), qp.And( qp.Function('max', [qp.Column('e')]), qp.Constant(17)))
def test_expr_function__five_args(self): self.assertParse( qSelect([qp.Target(qp.Function('min', [qp.Column('a'), qp.Column('b'), qp.Column('c'), qp.Column('d'), qp.Column('e')]), None)]), "SELECT min(a, b, c, d, e);")
def test_journal_with_account_and_from(self): journal = self.parse("JOURNAL 'liabilities' FROM year = 2014;") select = qc.transform_journal(journal) self.assertEqual( qp.Select([ qp.Target(qp.Column('date'), None), qp.Target(qp.Column('flag'), None), qp.Target(qp.Function('maxwidth', [qp.Column('payee'), qp.Constant(48)]), None), qp.Target(qp.Function('maxwidth', [qp.Column('narration'), qp.Constant(80)]), None), qp.Target(qp.Column('account'), None), qp.Target(qp.Column('position'), None), qp.Target(qp.Column('balance'), None), ], qp.From(qp.Equal(qp.Column('year'), qp.Constant(2014)), None, None, None), qp.Match(qp.Column('account'), qp.Constant('liabilities')), None, None, None, None, None, None), select)
def test_expr_function(self): self.assertEqual( qe.SumPosition([qe.PositionColumn()]), qc.compile_expression(qp.Function('sum', [qp.Column('position')]), qe.TargetsEnvironment()))
def test_function(self): self.assertEqual( 'length_date', qp.get_expression_name(qp.Function('length', [qp.Column('date')])))
def test_expr_function__two_args(self): self.assertParse( qSelect([ qp.Target(qp.Function( 'min', [qp.Column('a'), qp.Column('b')]), None) ]), "SELECT min(a, b);")
def test_expr_function__zero_args(self): self.assertParse(qSelect([qp.Target(qp.Function('random', []), None)]), "SELECT random();")