Exemplo n.º 1
0
def test_expr_mul_order():
    assert parse_expr('a + b * c') == OpBox(
        op='OP_ADD',
        left=NameBox('a'),
        right=OpBox(
            op='OP_MUL',
            left=NameBox('b'),
            right=NameBox('c'),
        ),
    )
Exemplo n.º 2
0
def test_expr_compare_order():
    assert parse_expr('a AND b = c') == OpBox(
        op='OP_AND',
        left=NameBox('a'),
        right=OpBox(
            op='OP_EQ',
            left=NameBox('b'),
            right=NameBox('c'),
        ),
    )
Exemplo n.º 3
0
def test_expr_braces():
    assert parse_expr('a * (b + c)') == OpBox(
        op='OP_MUL',
        left=NameBox('a'),
        right=OpBox(
            op='OP_ADD',
            left=NameBox('b'),
            right=NameBox('c'),
        ),
    )
Exemplo n.º 4
0
def test_group_by():
    query = parse('SELECT a FROM z GROUP BY foo + bar, foo')
    assert query.group_by == [
        OpBox(
            op='OP_ADD',
            left=NameBox('foo'),
            right=NameBox('bar'),
        ),
        NameBox('foo'),
    ]
Exemplo n.º 5
0
def test_expr_multi_add_sub():
    assert parse_expr('a + b - c') == OpBox(
        op='OP_SUB',
        left=OpBox(
            op='OP_ADD',
            left=NameBox('a'),
            right=NameBox('b'),
        ),
        right=NameBox('c'),
    )
Exemplo n.º 6
0
def test_expr_logic_order():
    assert parse_expr('a * b AND c') == OpBox(
        op='OP_AND',
        left=OpBox(
            op='OP_MUL',
            left=NameBox('a'),
            right=NameBox('b'),
        ),
        right=NameBox('c'),
    )
Exemplo n.º 7
0
def test_parser_simple_query():
    assert parse('SELECT x FROM z') == QueryBox(
        exprs=[
            NamedExprBox(None, NameBox('x')),
        ],
        froms=[NameBox('z')],
        where=None,
        limit=None,
        offset=None,
        group_by=None,
    )
Exemplo n.º 8
0
def parse_expr(expr: str) -> ExprBox:
    query_box = parse('SELECT %s FROM z' % expr)
    assert len(query_box.exprs) == 1
    assert query_box.froms == [NameBox('z')]
    expr = query_box.exprs[0]
    assert expr.name is None
    return expr.expr
Exemplo n.º 9
0
def test_expr_lshift():
    assert parse_expr('a << b') == OpBox(
        left=NameBox('a'),
        right=NameBox('b'),
        op='OP_LSHIFT',
    )
Exemplo n.º 10
0
def test_expr_rshift():
    assert parse_expr('a >> b') == OpBox(
        left=NameBox('a'),
        right=NameBox('b'),
        op='OP_RSHIFT',
    )
Exemplo n.º 11
0
def test_expr_neg():
    assert parse_expr('-a') == SingleOpBox(
        value=NameBox('a'),
        op='OP_SUB',
    )
Exemplo n.º 12
0
def test_expr_not_in():
    assert parse_expr('a NOT IN b') == OpBox(
        left=NameBox('a'),
        right=NameBox('b'),
        op='OP_NOT_IN',
    )
Exemplo n.º 13
0
def test_expr_not_like():
    assert parse_expr('a NOT LIKE b') == OpBox(
        left=NameBox('a'),
        right=NameBox('b'),
        op='OP_NOT_LIKE',
    )
Exemplo n.º 14
0
def test_expr_func():
    assert parse_expr('lower(b)') == FuncBox(name='lower',
                                             args=[
                                                 NameBox('b'),
                                             ])
Exemplo n.º 15
0
def test_expr_dotted_name():
    assert parse_expr('foo.bar') == NameBox('bar', table_value='foo')
Exemplo n.º 16
0
def test_parser_with_named_column_with_strings():
    assert parse('SELECT "a-a" AS "named" FROM z').exprs == [
        NamedExprBox(name=NameBox('named'), expr=NameBox('a-a')),
    ]
Exemplo n.º 17
0
def test_expr_module():
    assert parse_expr('a % b') == OpBox(
        left=NameBox('a'),
        right=NameBox('b'),
        op='OP_MOD',
    )
Exemplo n.º 18
0
def test_expr_bitwise_xor():
    assert parse_expr('a ^ b') == OpBox(
        left=NameBox('a'),
        right=NameBox('b'),
        op='OP_BITWISE_XOR',
    )
Exemplo n.º 19
0
def test_expr_bitwise_and():
    assert parse_expr('a & b') == OpBox(
        left=NameBox('a'),
        right=NameBox('b'),
        op='OP_BITWISE_AND',
    )
Exemplo n.º 20
0
def test_expr_func_with_args():
    assert parse_expr('a(b, c)') == FuncBox(name='a',
                                            args=[
                                                NameBox('b'),
                                                NameBox('c'),
                                            ])
Exemplo n.º 21
0
def test_expr_typecast():
    assert parse_expr('a::INT') == TypeCastBox(
        value=NameBox('a'),
        to='int',
    )
Exemplo n.º 22
0
def test_parser_with_named_column_without_as():
    assert parse('SELECT a named FROM z').exprs == [
        NamedExprBox(name=NameBox('named'), expr=NameBox('a')),
    ]
Exemplo n.º 23
0
def test_expr_name():
    assert parse_expr('foo') == NameBox('foo')
Exemplo n.º 24
0
def test_expr_absolute_sign():
    assert parse_expr('@ a') == SingleOpBox(
        value=NameBox('a'),
        op='OP_ABSOLUTE',
    )
Exemplo n.º 25
0
def test_expr_add():
    assert parse_expr('a + b') == OpBox(
        op='OP_ADD',
        left=NameBox('a'),
        right=NameBox('b'),
    )
Exemplo n.º 26
0
def test_parser_where():
    assert parse('SELECT a FROM z WHERE a = b').where == OpBox(
        op='OP_EQ',
        left=NameBox('a'),
        right=NameBox('b'),
    )
Exemplo n.º 27
0
def test_expr_not():
    assert parse_expr('NOT a') == SingleOpBox(
        value=NameBox('a'),
        op='OP_NOT',
    )
Exemplo n.º 28
0
def test_parser_with_many_columns():
    assert parse('SELECT a, b, c FROM z').exprs == [
        NamedExprBox(None, NameBox('a')),
        NamedExprBox(None, NameBox('b')),
        NamedExprBox(None, NameBox('c')),
    ]
Exemplo n.º 29
0
def test_expr_bitwise_not():
    assert parse_expr('~ a') == SingleOpBox(
        value=NameBox('a'),
        op='OP_BITWISE_NOT',
    )
Exemplo n.º 30
0
def dotted_name(left: Token, _, right: Token) -> NameBox:
    left_name = unquote_name(left.getstr())
    right_name = unquote_name(right.getstr())
    return NameBox(right_name, table_value=left_name)