async def test_logic(conn, capsys): a, b, c, d = await conn.fetchrow_b('SELECT :a, :b, :c, :d::int', a=funcs.cast(5, 'int') * 5, b=funcs.sqrt(676), c=S('a').cat('b'), d=987_654) assert a == 25 assert b == 26 assert c == 'ab' assert d == 987_654 assert 'SELECT' not in capsys.readouterr().out
(lambda: V('x').contains(V('y')), 'x @> y'), (lambda: V('x').overlap(V('y')), 'x && y'), (lambda: V('x').contained_by(V('y')), 'x <@ y'), (lambda: V('x').like('y'), 'x LIKE $1'), (lambda: V('x').ilike('y'), 'x ILIKE $1'), (lambda: V('x').cat('y'), 'x || $1'), (lambda: V('x').comma(V('y')), 'x, y'), (lambda: V('a').asc(), 'a ASC'), (lambda: V('a').desc(), 'a DESC'), (lambda: V('a').nulls_first(), 'a NULLS FIRST'), (lambda: V('a').nulls_last(), 'a NULLS LAST'), (lambda: V('a').desc().nulls_first(), 'a DESC NULLS FIRST'), (lambda: ~V('a'), 'not(a)'), (lambda: -V('a'), '-a'), (lambda: V('x').operate(RawDangerous(' foobar '), V('y')), 'x foobar y'), (lambda: funcs.sqrt(4), '|/ $1'), (lambda: funcs.abs(4), '@ $1'), (lambda: funcs.factorial(4), '$1!'), (lambda: funcs.count('*'), 'COUNT(*)'), (lambda: funcs.count(V('*')), 'COUNT(*)'), (lambda: funcs.count('*').as_('foobar'), 'COUNT(*) AS foobar'), (lambda: funcs.upper('a'), 'upper($1)'), (lambda: funcs.lower('a'), 'lower($1)'), (lambda: funcs.lower('a') > 4, 'lower($1) > $2'), (lambda: funcs.length('a'), 'length($1)'), (lambda: funcs.position('a', 'b'), 'position($1 in $2)'), (lambda: funcs.substring('a', 'b'), 'substring($1 from $2)'), (lambda: funcs.substring('x', 2, 3), 'substring($1 from $2 for $3)'), (lambda: funcs.extract(V('epoch').from_(V('foo.bar'))).cast('int'), 'extract(epoch from foo.bar)::int'), (lambda: funcs.AND('a', 'b', 'c'), '$1 AND $2 AND $3'), (lambda: funcs.AND('a', 'b', V('c') | V('d')), '$1 AND $2 AND (c OR d)'),