def test_transform_order(): r = transform(t, sin_amount=sin(t.amount), cos_id=cos(t.id)) result = compute(r, s) expected = """SELECT accounts.name, accounts.amount, accounts.id, cos(accounts.id) as cos_id, sin(accounts.amount) as sin_amount FROM accounts """ assert normalize(str(result)) == normalize(expected)
def test_transform_filter_by_single_column(): t2 = t[t.amount < 0] tr = transform(t2, abs_amt=abs(t2.amount), sine=sin(t2.id)) expr = by(tr.name, avg_amt=tr.abs_amt.mean()) result = compute(expr, s) expected = normalize("""SELECT accounts.name, avg(abs(accounts.amount)) AS avg_amt FROM accounts WHERE accounts.amount < :amount_1 GROUP BY accounts.name """) assert normalize(str(result)) == expected
def test_math(): result = compute(sin(t.amount), s) assert normalize(str(result)) == normalize(""" SELECT sin(accounts.amount) as amount FROM accounts""") result = compute(floor(t.amount), s) assert normalize(str(result)) == normalize(""" SELECT floor(accounts.amount) as amount FROM accounts""") result = compute(t.amount // 2, s) assert normalize(str(result)) == normalize(""" SELECT floor(accounts.amount / :amount_1) AS amount FROM accounts""")
def test_transform_filter_by_different_order(): t2 = transform(t, abs_amt=abs(t.amount), sine=sin(t.id)) tr = t2[t2.amount < 0] expr = by(tr.name, avg_amt=tr.abs_amt.mean(), avg_sine=tr.sine.sum() / tr.sine.count()) result = compute(expr, s) expected = normalize("""SELECT accounts.name, avg(abs(accounts.amount)) AS avg_amt, sum(sin(accounts.id)) / count(sin(accounts.id)) AS avg_sine FROM accounts WHERE accounts.amount < :amount_1 GROUP BY accounts.name """) assert normalize(str(result)) == expected
def test_transform_where(): t2 = t[t.id == 1] expr = transform(t2, abs_amt=abs(t2.amount), sine=sin(t2.id)) result = compute(expr, s) expected = """SELECT accounts.name, accounts.amount, accounts.id, abs(accounts.amount) as abs_amt, sin(accounts.id) as sine FROM accounts WHERE accounts.id = :id_1 """ assert normalize(str(result)) == normalize(expected)