def test_index_access_right_hand():
    actual = ExpressionParser.parse(to_tokens("field = array[0]"))
    expected = Condition(
        Column("field"),
        "=",
        Index(Column("array"), [Integer(0)]),
    )
    assert actual == expected
Example #2
0
def test_chained_field():
    actual, _ = ExpressionParser.parse(
        to_tokens("table.field[offset(0)].subfield[offset(0)]"))
    expected = ChainedColumns(
        Column("table"),
        ChainedColumns(
            Index(Column("field"), [FunctionCall("offset", Integer(0))]),
            Index(Column("subfield"), [FunctionCall("offset", Integer(0))]),
        ),
    )
    assert actual == expected
Example #3
0
def test_multiple_indices_access():
    actual, _ = ExpressionParser.parse(to_tokens("array[index(0), 'foo'] alias"))
    expected = Alias(
        Index(
            Column("array"),
            [FunctionCall("index", Integer(0)), String("foo", quotes="'")],
        ),
        with_as=False,
        alias="alias",
    )
    assert actual == expected
Example #4
0
def test_boolean_condition():
    actual, _ = ExpressionParser.parse(to_tokens("f1 IS NOT NULL AND f2 > 0 fnew"))
    expected = Alias(
        BooleanCondition(
            "AND",
            Condition(Column("f1"), "is not", Null()),
            Condition(Column("f2"), ">", Integer(0)),
        ),
        with_as=False,
        alias="fnew",
    )
    assert actual == expected
def test_consecutive_parenthesis():
    actual = ExpressionParser.parse(to_tokens("((col+1) = 3 AND col2=4)"))
    expected = Parenthesis(
        BooleanCondition(
            "and",
            Condition(Parenthesis(Addition(Column("col"), Integer(1))), "=",
                      Integer(3)),
            Condition(
                Column("col2"),
                "=",
                Integer(4),
            ),
        ))
    assert actual == expected
Example #6
0
def test_nested_date_functions():
    actual, _ = ExpressionParser.parse(
        to_tokens("DATE(TIMESTAMP_TRUNC(CAST(date AS TIMESTAMP), MONTH))"))
    expected = FunctionCall(
        "DATE",
        FunctionCall(
            "TIMESTAMP_TRUNC",
            CastFunctionCall(
                Column("date"),
                Type("TIMESTAMP"),
            ),
            Type("MONTH"),
        ),
    )
    assert actual == expected
def test_nested_date_functions():
    actual = ExpressionParser.parse(
        to_tokens("DATE(TIMESTAMP_TRUNC(CAST(a.date AS TIMESTAMP), MONTH))"))
    expected = FunctionCall(
        "date",
        FunctionCall(
            "timestamp_trunc",
            FunctionCall(
                "cast",
                Alias(Column("a.date"), alias=Type("timestamp"),
                      with_as=True)),
            Type("month"),
        ),
    )
    assert actual == expected
Example #8
0
def test_boolean_condition_as_expression():
    sql = "field is not null and col > 0"
    actual, _ = ExpressionParser.parse(to_tokens(sql))
    expected = BooleanCondition(
        "and",
        Condition(
            Column("field"),
            "is not",
            Null(),
        ),
        Condition(
            Column("col"),
            ">",
            Integer(0),
        ),
    )
    assert actual == expected
Example #9
0
def test_chained_columns_with_arithmetic_operator():
    actual, _ = ExpressionParser.parse(
        to_tokens("IF((a.field + b.field) = 200, 'true', 'false') fa"))
    expected = Alias(
        FunctionCall(
            "IF", *[
                Condition(
                    Parenthesis(
                        ArithmaticOperator(
                            "+",
                            ChainedColumns(Column("a"), Column("field")),
                            ChainedColumns(Column("b"), Column("field")),
                        )),
                    "=",
                    Integer(200),
                ),
                String("true", quotes="'"),
                String("false", quotes="'"),
            ]),
        with_as=False,
        alias="fa",
    )
    assert actual == expected
Example #10
0
def test_simple_function_multiple_params():
    actual = ExpressionParser.parse(to_tokens("test(col, 'Test')"))
    expected = FunctionCall("test", Column("col"), String("Test", quotes="'"))
    assert actual == expected
Example #11
0
def test_addition():
    actual = ExpressionParser.parse(to_tokens("2+4"))
    expected = Addition(Integer(2), Integer(4))
    assert actual == expected
Example #12
0
def test_index_function_access():
    actual = ExpressionParser.parse(to_tokens("array[index(0)]"))
    expected = Index(Column("array"), [FunctionCall("index", Integer(0))])
    assert actual == expected
Example #13
0
def test_simple_function_parsing_no_args():
    actual = ExpressionParser.parse(to_tokens("test()"))
    expected = FunctionCall("test")
    assert actual == expected
Example #14
0
def test_index_access_alias():
    actual = ExpressionParser.parse(to_tokens("array[0] alias"))
    expected = Alias(Index(Column("array"), [Integer(0)]),
                     with_as=False,
                     alias="alias")
    assert actual == expected
Example #15
0
def test_index_access():
    actual = ExpressionParser.parse(to_tokens("array[0]"))
    expected = Index(Column("array"), [Integer(0)])
    assert actual == expected
Example #16
0
def test_conditional_expression():
    actual = ExpressionParser.parse(to_tokens("field = 4"))
    expected = Condition(Column("field"), "=", Integer(4))
    assert actual == expected
Example #17
0
def test_negative_integer():
    actual = ExpressionParser.parse(to_tokens("-2"))
    expected = Integer(-2)
    assert actual == expected
Example #18
0
def test_string_value():
    actual = ExpressionParser.parse(to_tokens("'VAL'"))
    expected = String("VAL", quotes="'")
    assert actual == expected
Example #19
0
def test_string_value_back_quotes():
    actual = ExpressionParser.parse(to_tokens("`val`"))
    expected = String("val", quotes="`")
    assert actual == expected
Example #20
0
def test_parenthesis_multiple_elements():
    actual = ExpressionParser.parse(to_tokens("(field,other_field,3,'test')"))
    expected = Parenthesis(Column("field"), Column("other_field"), Integer(3),
                           String("test", quotes="'"))
    assert actual == expected
Example #21
0
def test_parenthesis_conditional():
    actual = ExpressionParser.parse(to_tokens("(field+3) = 4"))
    expected = Condition(Parenthesis(Addition(Column("field"), Integer(3))),
                         "=", Integer(4))
    assert actual == expected
Example #22
0
def test_multiple_parentheses():
    actual = ExpressionParser.parse(to_tokens("((2))"))
    expected = Parenthesis(Parenthesis(Integer(2)))
    assert actual == expected
Example #23
0
def test_parenthesis():
    actual = ExpressionParser.parse(to_tokens("(field)"))
    expected = Parenthesis(Column("field"))
    assert actual == expected
Example #24
0
def test_nested_functions():
    actual = ExpressionParser.parse(to_tokens("test(foo(col))"))
    expected = FunctionCall("test", FunctionCall("foo", Column("col")))
    assert actual == expected
Example #25
0
def test_parse_date_function():
    actual = ExpressionParser.parse(to_tokens("col >= DATE('2020-01-01')"))
    expected = Condition(
        Column("col"), ">=",
        FunctionCall("date", String("2020-01-01", quotes="'")))
    assert actual == expected
Example #26
0
def test_chained_addition():
    actual = ExpressionParser.parse(to_tokens("2+4+5"))
    expected = Addition(Integer(2), Addition(Integer(4), Integer(5)))
    assert actual == expected
Example #27
0
def test_string_value_double_quotes():
    actual = ExpressionParser.parse(to_tokens('"val"'))
    expected = String("val", quotes='"')
    assert actual == expected
Example #28
0
def test_parse_date_function1():
    actual = ExpressionParser.parse(to_tokens("DATE('2020-01-01')"))
    expected = FunctionCall("date", String("2020-01-01", quotes="'"))
    assert actual == expected
Example #29
0
def test_aliased_column():
    actual = ExpressionParser.parse(to_tokens("col AS column_name"))
    expected = Alias(Column("col"), alias=Column("column_name"), with_as=True)
    assert actual == expected
Example #30
0
def test_simple_function_parsing():
    actual = ExpressionParser.parse(to_tokens("test(col)"))
    expected = FunctionCall("test", Column("col"))
    assert actual == expected