def test_suggested_multiple_column_names(completer):
    result = get_result(
        completer, 'SELECT id,  from custom.products', len('SELECT id, ')
    )
    assert completions_to_set(result) == completions_to_set(testdata.columns_functions_and_keywords(
        'products', 'custom'
    ))
def test_suggested_column_names_from_schema_qualifed_table(completer):
    result = get_result(
        completer, 'SELECT  from custom.products', len('SELECT ')
    )
    assert completions_to_set(result) == completions_to_set(testdata.columns_functions_and_keywords(
        'products', 'custom'
    ))
def test_aliased_joins(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(testdata.schemas() + aliased_rels + [
        join('"Users" U ON U.userid = Users.id'),
        join('users u ON u.id = Users.parentid'),
        join('users u ON u.parentid = Users.id'),
    ])
def test_suggested_auto_qualified_column_names_two_tables(text, completer):
    position = text.index('  ') + 1
    cols = [column('U.' + c.lower()) for c in cased_users_col_names]
    cols += [column('"Users".' + c.lower()) for c in cased_users2_col_names]
    result = get_result(completer, text, position)
    assert completions_to_set(result) == completions_to_set(
        cols + testdata.functions_and_keywords())
def test_user_function_name_completion_matches_anywhere(completer):
    result = get_result(completer, 'SELECT om')
    assert completions_to_set(result) == completions_to_set([
        function('custom_fun()', -2),
        function('_custom_fun()', -2),
        function('custom_func1()', -2),
        function('custom_func2()', -2)])
def test_suggest_columns_from_set_returning_function(completer):
    result = get_result(
        completer, 'select  from set_returning_func()', len('select ')
    )
    assert completions_to_set(result) == completions_to_set(testdata.columns_functions_and_keywords(
        'set_returning_func', typ='functions'
    ))
def test_suggested_aliases_after_on_right_side(completer, text):
    position = len(
        'SELECT u.name, o.id FROM users u JOIN orders o ON o.user_id = '
    )
    result = get_result(completer, text, position)
    assert completions_to_set(result) == completions_to_set(
        [alias('u'), alias('o')])
def test_join_functions_using_suggests_common_columns(completer):
    text = '''SELECT * FROM set_returning_func() f1
              INNER JOIN set_returning_func() f2 USING ('''
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        testdata.columns('set_returning_func', typ='functions')
    )
def test_suggest_columns_from_aliased_set_returning_function(completer):
    result = get_result(
        completer, 'select f. from set_returning_func() f', len('select f.')
    )
    assert completions_to_set(result) == completions_to_set(
        testdata.columns('set_returning_func', typ='functions')
    )
def test_all_schema_objects_with_casing(completer):
    text = 'SELECT * FROM '
    result = get_result(completer, text)
    assert completions_to_set(result) >= completions_to_set(
        [table(x) for x in ('Orders', '"select"', 'CUSTOM.shipments')]
        + [function(x + '()') for x in ('func2',)]
    )
def test_cased_joins(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set([schema('PUBLIC')] + cased_rels + [
        join('"Users" ON "Users".UserID = Users.ID'),
        join('Users Users2 ON Users2.ID = Users.PARENTID'),
        join('Users Users2 ON Users2.PARENTID = Users.ID'),
    ])
def test_all_schema_objects_with_aliases(completer):
    text = ('SELECT * FROM ')
    result = get_result(completer, text)
    assert completions_to_set(result) >= completions_to_set(
        [table(x) for x in ('orders o', '"select" s', 'custom.shipments s')]
        + [function(x) for x in ('func2() f',)]
    )
def test_suggested_join_conditions(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set([
        alias('users'),
        alias('shipments'),
        name_join('shipments.id = users.id'),
        fk_join('shipments.user_id = users.id')])
def test_suggested_multiple_column_names_with_dot(completer):
    result = get_result(
        completer,
        "SELECT users.id, users. from users u",
        len("SELECT users.id, users."),
    )
    assert completions_to_set(result) == completions_to_set(
        testdata.columns("users"))
Beispiel #15
0
def test_special_name_completion(completer, complete_event):
    text = '\\'
    position = len('\\')
    result = completions_to_set(completer.get_completions(
        Document(text=text, cursor_position=position),
        complete_event))
    # Special commands will NOT be suggested during naive completion mode.
    assert result == completions_to_set([])
Beispiel #16
0
def test_column_name_completion(completer, complete_event):
    text = 'SELECT  FROM users'
    position = len('SELECT ')
    result = completions_to_set(completer.get_completions(
        Document(text=text, cursor_position=position),
        complete_event))
    assert result == completions_to_set(
        map(Completion, completer.all_completions))
Beispiel #17
0
def test_select_keyword_completion(completer, complete_event):
    text = 'SEL'
    position = len('SEL')
    result = completions_to_set(completer.get_completions(
        Document(text=text, cursor_position=position),
        complete_event))
    assert result == completions_to_set(
        [Completion(text='SELECT', start_position=-3)])
def test_aliased_joins(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        testdata.schemas() + aliased_rels + [
            join('"Users" U ON U.userid = Users.id'),
            join("users u ON u.id = Users.parentid"),
            join("users u ON u.parentid = Users.id"),
        ])
def test_suggested_tables_after_on_right_side(completer, text):
    position = len(
        "SELECT users.name, orders.id FROM users JOIN orders ON orders.user_id = "
    )
    result = get_result(completer, text, position)
    assert completions_to_set(result) == completions_to_set(
        [alias("users"), alias("orders")]
    )
def test_suggested_auto_qualified_column_names_two_tables(text, completer):
    position = text.index("  ") + 1
    cols = [column("U." + c.lower()) for c in cased_users_col_names]
    cols += [column('"Users".' + c.lower()) for c in cased_users2_col_names]
    result = get_result(completer, text, position)
    assert completions_to_set(result) == completions_to_set(
        cols + testdata.functions_and_keywords()
    )
def test_suggested_cased_column_names(completer):
    result = get_result(completer, "SELECT  from users", len("SELECT "))
    assert completions_to_set(result) == completions_to_set(
        cased_funcs
        + cased_users_cols
        + testdata.builtin_functions()
        + testdata.keywords()
    )
def test_set_schema(completer):
    text = ('SET SCHEMA ')
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set([
        schema(u"'blog'"),
        schema(u"'Custom'"),
        schema(u"'custom'"),
        schema(u"'public'")])
def test_suggested_joins(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        testdata.schemas_and_from_clause_items() + [
            join('"Users" ON "Users".userid = Users.id'),
            join("users users2 ON users2.id = Users.parentid"),
            join("users users2 ON users2.parentid = Users.id"),
        ])
def test_cased_joins(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        [schema("PUBLIC")] + cased_rels + [
            join('"Users" ON "Users".UserID = Users.ID'),
            join("Users Users2 ON Users2.ID = Users.PARENTID"),
            join("Users Users2 ON Users2.PARENTID = Users.ID"),
        ])
def test_aliases_with_casing(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(cased_schemas + [
        table('users u'),
        table('Orders O' if text == 'SELECT * FROM ' else 'Orders O2'),
        table('"select" s'),
        function('Func1() F'),
        function('func2() f')])
Beispiel #26
0
def test_user_function_name_completion_matches_anywhere(completer):
    result = get_result(completer, "SELECT om")
    assert completions_to_set(result) == completions_to_set([
        function("custom_fun()", -2),
        function("_custom_fun()", -2),
        function("custom_func1()", -2),
        function("custom_func2()", -2),
    ])
def test_table_casing(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(cased_schemas + [
        table('users'),
        table('Orders'),
        table('"select"'),
        function('Func1()'),
        function('func2()')])
Beispiel #28
0
def test_empty_string_completion(completer, complete_event):
    text = ''
    position = 0
    result = completions_to_set(completer.get_completions(
        Document(text=text, cursor_position=position),
        complete_event))
    assert result == completions_to_set(
        map(Completion, completer.all_completions))
def test_table_aliases(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(testdata.schemas() + [
        table('users u'),
        table('orders o' if text == 'SELECT * FROM ' else 'orders o2'),
        table('"select" s'),
        function('func1() f'),
        function('func2() f')])
def test_join_functions_on_suggests_columns_and_join_conditions(completer):
    text = """SELECT * FROM set_returning_func() f1
              INNER JOIN set_returning_func() f2 ON f1."""
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        [name_join("y = f2.y"), name_join("x = f2.x")]
        + testdata.columns("set_returning_func", typ="functions")
    )
def test_suggested_multiple_column_names_with_alias(completer):
    result = get_result(
        completer,
        'SELECT p.id, p. from custom.products p',
        len('SELECT u.id, u.')
    )
    assert completions_to_set(result) == completions_to_set(
        testdata.columns('products', 'custom'))
Beispiel #32
0
def test_suggested_join_conditions(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set([
        alias("users"),
        alias("shipments"),
        name_join("shipments.id = users.id"),
        fk_join("shipments.user_id = users.id"),
    ])
Beispiel #33
0
def test_suggested_cased_always_qualified_column_names(completer):
    text = "SELECT  from users"
    position = len("SELECT ")
    cols = [column("users." + c) for c in cased_users_col_names]
    result = get_result(completer, text, position)
    assert completions_to_set(result) == completions_to_set(
        cased_funcs + cols + testdata.builtin_functions() +
        testdata.keywords())
def test_join_functions_on_suggests_columns_and_join_conditions(completer):
    text = '''SELECT * FROM set_returning_func() f1
              INNER JOIN set_returning_func() f2 ON f1.'''
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        [name_join('y = f2.y'), name_join('x = f2.x')] +
        testdata.columns('set_returning_func', typ='functions')
    )
def test_suggested_multiple_column_names_with_dot(completer):
    result = get_result(
        completer,
        'SELECT users.id, users. from users u',
        len('SELECT users.id, users.')
    )
    assert completions_to_set(result) == completions_to_set(
        testdata.columns('users'))
def test_suggested_aliases_after_on(completer, text):
    position = len('SELECT u.name, o.id FROM users u JOIN orders o ON ')
    result = get_result(completer, text, position)
    assert completions_to_set(result) == completions_to_set([
        alias('u'),
        name_join('o.id = u.id'),
        name_join('o.email = u.email'),
        alias('o')])
def test_suggested_cased_always_qualified_column_names(
    completer
):
    text = 'SELECT  from users'
    position = len('SELECT ')
    cols = [column('users.' + c) for c in cased_users_col_names]
    result = get_result(completer, text, position)
    assert completions_to_set(result) == completions_to_set(cased_funcs + cols
                                                            + testdata.builtin_functions() + testdata.keywords())
def test_user_function_name_completion(completer):
    result = get_result(completer, 'SELECT cu')
    assert completions_to_set(result) == completions_to_set([
        function('custom_fun()', -2),
        function('_custom_fun()', -2),
        function('custom_func1()', -2),
        function('custom_func2()', -2),
        keyword('CURRENT', -2),
    ])
Beispiel #39
0
def test_aliases_with_casing(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(cased_schemas + [
        table("users u"),
        table("Orders O" if text == "SELECT * FROM " else "Orders O2"),
        table('"select" s'),
        function("Func1() F"),
        function("func2() f"),
    ])
Beispiel #40
0
def test_suggested_aliases_after_on(completer, text):
    position = len("SELECT u.name, o.id FROM users u JOIN orders o ON ")
    result = get_result(completer, text, position)
    assert completions_to_set(result) == completions_to_set([
        alias("u"),
        name_join("o.id = u.id"),
        name_join("o.email = u.email"),
        alias("o"),
    ])
Beispiel #41
0
def test_user_function_name_completion(completer):
    result = get_result(completer, "SELECT cu")
    assert completions_to_set(result) == completions_to_set([
        function("custom_fun()", -2),
        function("_custom_fun()", -2),
        function("custom_func1()", -2),
        function("custom_func2()", -2),
        keyword("CURRENT", -2),
    ])
Beispiel #42
0
def test_special_name_completion(completer):
    result = get_result(completer, "\\t")
    assert completions_to_set(result) == completions_to_set([
        Completion(
            text="\\timing",
            start_position=-2,
            display_meta="Toggle timing of commands.",
        )
    ])
Beispiel #43
0
def test_set_schema(completer):
    text = "SET SCHEMA "
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set([
        schema("'blog'"),
        schema("'Custom'"),
        schema("'custom'"),
        schema("'public'")
    ])
def test_suggested_joins(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        testdata.schemas_and_from_clause_items() + [
        join('"Users" ON "Users".userid = Users.id'),
        join('users users2 ON users2.id = Users.parentid'),
        join('users users2 ON users2.parentid = Users.id'),
        ]
    )
def test_schema_qualified_function_name(completer):
    text = "SELECT custom.func"
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        [
            function("func3()", -len("func")),
            function("set_returning_func()", -len("func")),
        ]
    )
def test_suggestions_after_on(completer, text):
    position = len('SELECT x.id, y.product_name FROM custom.products x JOIN custom.products y ON ')
    result = get_result(completer, text, position)
    assert completions_to_set(result) == completions_to_set([
        alias('x'),
        alias('y'),
        name_join('y.price = x.price'),
        name_join('y.product_name = x.product_name'),
        name_join('y.id = x.id')])
Beispiel #47
0
def test_table_casing(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(cased_schemas + [
        table("users"),
        table("Orders"),
        table('"select"'),
        function("Func1()"),
        function("func2()"),
    ])
def test_suggested_tables_after_on(completer, text):
    position = len('SELECT users.name, orders.id FROM users JOIN orders ON ')
    result = get_result(completer, text, position)
    assert completions_to_set(result) == completions_to_set([
        name_join('orders.id = users.id'),
        name_join('orders.email = users.email'),
        alias('users'),
        alias('orders')
    ])
Beispiel #49
0
def test_aliases_with_casing(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(cased_schemas + [
        table('users u'),
        table('Orders O' if text == 'SELECT * FROM ' else 'Orders O2'),
        table('"select" s'),
        function('Func1() F'),
        function('func2() f')
    ])
Beispiel #50
0
def test_table_casing(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(cased_schemas + [
        table('users'),
        table('Orders'),
        table('"select"'),
        function('Func1()'),
        function('func2()')
    ])
Beispiel #51
0
def test_function_name_completion(completer, complete_event):
    text = 'SELECT MA'
    position = len('SELECT MA')
    result = completions_to_set(completer.get_completions(
        Document(text=text, cursor_position=position),
        complete_event))
    assert result == completions_to_set([
        Completion(text='MATERIALIZED VIEW', start_position=-2),
        Completion(text='MAX', start_position=-2),
        Completion(text='MAXEXTENTS', start_position=-2)])
Beispiel #52
0
def test_table_aliases(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        testdata.schemas() + [
            table('users u'),
            table('orders o' if text == 'SELECT * FROM ' else 'orders o2'),
            table('"select" s'),
            function('func1() f'),
            function('func2() f')
        ])
Beispiel #53
0
def test_table_aliases(completer, text):
    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        testdata.schemas() + [
            table("users u"),
            table("orders o" if text == "SELECT * FROM " else "orders o2"),
            table('"select" s'),
            function("func1() f"),
            function("func2() f"),
        ])
Beispiel #54
0
def test_suggested_table_names_with_schema_dot2(completer, text,
                                                use_leading_double_quote):
    if use_leading_double_quote:
        text += '"'
        start_position = -1
    else:
        start_position = 0

    result = get_result(completer, text)
    assert completions_to_set(result) == completions_to_set(
        testdata.from_clause_items("Custom", start_position))