示例#1
0
def test_2_statements_1st_current():
    suggestions = suggest_type("select * from ; select * from b",
                               "select * from ")
    assert set(suggestions) == set([FromClauseItem(schema=None), Schema()])

    suggestions = suggest_type("select  from a; select * from b", "select ")
    assert set(suggestions) == cols_etc("a", last_keyword="SELECT")
示例#2
0
def test_col_comma_suggests_cols():
    suggestions = suggest_type("SELECT a, b, FROM tbl", "SELECT a, b,")
    assert set(suggestions) == set([
        Column(table_refs=((None, "tbl", None, False), ), qualifiable=True),
        Function(schema=None),
        Keyword("SELECT"),
    ])
示例#3
0
def test_statements_in_function_body(text):
    suggestions = suggest_type(text, text[:text.find("  ") + 1])
    assert set(suggestions) == set([
        Column(table_refs=((None, "foo", None, False), ), qualifiable=True),
        Function(schema=None),
        Keyword("SELECT"),
    ])
示例#4
0
def test_distinct_suggests_cols(text):
    suggestions = suggest_type(text, text)
    assert set(suggestions) == set([
        Column(table_refs=(), local_tables=(), qualifiable=True),
        Function(schema=None),
        Keyword("DISTINCT"),
    ])
示例#5
0
def test_handle_unrecognized_kw_generously():
    sql = "SELECT * FROM sessions WHERE session = 1 AND "
    suggestions = suggest_type(sql, sql)
    expected = Column(table_refs=((None, "sessions", None, False), ),
                      qualifiable=True)

    assert expected in set(suggestions)
示例#6
0
def test_select_suggests_cols_and_funcs():
    suggestions = suggest_type("SELECT ", "SELECT ")
    assert set(suggestions) == set([
        Column(table_refs=(), qualifiable=True),
        Function(schema=None),
        Keyword("SELECT"),
    ])
示例#7
0
def test_lparen_suggests_cols_and_funcs():
    suggestion = suggest_type("SELECT MAX( FROM tbl", "SELECT MAX(")
    assert set(suggestion) == set([
        Column(table_refs=((None, "tbl", None, False), ), qualifiable=True),
        Function(schema=None),
        Keyword("("),
    ])
示例#8
0
    def get_completions(self, document, complete_event, smart_completion=None):
        word_before_cursor = document.get_word_before_cursor(WORD=True)

        if smart_completion is None:
            smart_completion = self.smart_completion

        # If smart_completion is off then match any word that starts with
        # 'word_before_cursor'.
        if not smart_completion:
            matches = self.find_matches(
                word_before_cursor, self.all_completions, mode="strict"
            )
            completions = [m.completion for m in matches]
            return sorted(completions, key=operator.attrgetter("text"))

        matches = []
        suggestions = suggest_type(document.text, document.text_before_cursor)

        for suggestion in suggestions:
            suggestion_type = type(suggestion)
            _logger.debug("Suggestion type: %r", suggestion_type)

            # Map suggestion type to method
            # e.g. 'table' -> self.get_table_matches
            matcher = self.suggestion_matchers[suggestion_type]
            matches.extend(matcher(self, suggestion, word_before_cursor))

        # Sort matches so highest priorities are first
        matches = sorted(matches, key=operator.attrgetter("priority"), reverse=True)

        return [m.completion for m in matches]
示例#9
0
def test_dot_suggests_cols_of_an_alias_where(sql):
    suggestions = suggest_type(sql, sql)
    assert set(suggestions) == set([
        Table(schema="t1"),
        View(schema="t1"),
        Column(table_refs=((None, "tabl1", "t1", False), )),
        Function(schema="t1"),
    ])
示例#10
0
def test_suggest_columns_after_multiple_joins():
    sql = """select * from t1
            inner join t2 ON
              t1.id = t2.t1_id
            inner join t3 ON
              t2.id = t3."""
    suggestions = suggest_type(sql, sql)
    assert Column(table_refs=((None, "t3", None, False), )) in set(suggestions)
示例#11
0
def test_suggest_after_join_with_one_table(expression):
    suggestions = suggest_type(expression, expression)
    tables = ((None, "foo", None, False), )
    assert set(suggestions) == set([
        FromClauseItem(schema=None, table_refs=tables),
        Join(((None, "foo", None, False), ), None),
        Schema(),
    ])
示例#12
0
def test_suggest_after_join_with_two_tables(expression):
    suggestions = suggest_type(expression, expression)
    tables = tuple([(None, "foo", None, False), (None, "bar", None, False)])
    assert set(suggestions) == set([
        FromClauseItem(schema=None, table_refs=tables),
        Join(tables, None),
        Schema()
    ])
示例#13
0
def test_join_alias_dot_suggests_cols2(sql):
    suggestion = suggest_type(sql, sql)
    assert set(suggestion) == set([
        Column(table_refs=((None, "def", "d", False), )),
        Table(schema="d"),
        View(schema="d"),
        Function(schema="d"),
    ])
示例#14
0
def test_2_statements_2nd_current():
    suggestions = suggest_type("select * from a; select * from ",
                               "select * from a; select * from ")
    assert set(suggestions) == set([FromClauseItem(schema=None), Schema()])

    suggestions = suggest_type("select * from a; select  from b",
                               "select * from a; select ")
    assert set(suggestions) == set([
        Column(table_refs=((None, "b", None, False), ), qualifiable=True),
        Function(schema=None),
        Keyword("SELECT"),
    ])

    # Should work even if first statement is invalid
    suggestions = suggest_type("select * from; select * from ",
                               "select * from; select * from ")
    assert set(suggestions) == set([FromClauseItem(schema=None), Schema()])
示例#15
0
def test_dot_suggests_cols_of_a_table_or_schema_qualified_table():
    suggestions = suggest_type("SELECT tabl. FROM tabl", "SELECT tabl.")
    assert set(suggestions) == set([
        Column(table_refs=((None, "tabl", None, False), )),
        Table(schema="tabl"),
        View(schema="tabl"),
        Function(schema="tabl"),
    ])
示例#16
0
def test_sub_select_col_name_completion():
    suggestions = suggest_type("SELECT * FROM (SELECT  FROM abc",
                               "SELECT * FROM (SELECT ")
    assert set(suggestions) == set([
        Column(table_refs=((None, "abc", None, False), ), qualifiable=True),
        Function(schema=None),
        Keyword("SELECT"),
    ])
示例#17
0
def test_left_join_with_comma():
    text = "select * from foo f left join bar b,"
    suggestions = suggest_type(text, text)
    # tbls should also include (None, 'bar', 'b', False)
    # but there's a bug with commas
    tbls = tuple([(None, "foo", "f", False)])
    assert set(suggestions) == set(
        [FromClauseItem(schema=None, table_refs=tbls),
         Schema()])
示例#18
0
def test_join_suggests_tables_and_schemas(tbl_alias, join_type):
    text = "SELECT * FROM abc {0} {1} JOIN ".format(tbl_alias, join_type)
    suggestion = suggest_type(text, text)
    tbls = tuple([(None, "abc", tbl_alias or None, False)])
    assert set(suggestion) == set([
        FromClauseItem(schema=None, table_refs=tbls),
        Schema(),
        Join(tbls, None)
    ])
示例#19
0
def test_dot_col_comma_suggests_cols_or_schema_qualified_table():
    suggestions = suggest_type("SELECT t1.a, t2. FROM tabl1 t1, tabl2 t2",
                               "SELECT t1.a, t2.")
    assert set(suggestions) == set([
        Column(table_refs=((None, "tabl2", "t2", False), )),
        Table(schema="t2"),
        View(schema="t2"),
        Function(schema="t2"),
    ])
示例#20
0
def test_outer_table_reference_in_exists_subquery_suggests_columns():
    q = "SELECT * FROM foo f WHERE EXISTS (SELECT 1 FROM bar WHERE f."
    suggestions = suggest_type(q, q)
    assert set(suggestions) == set([
        Column(table_refs=((None, "foo", "f", False), )),
        Table(schema="f"),
        View(schema="f"),
        Function(schema="f"),
    ])
示例#21
0
def test_sub_select_dot_col_name_completion():
    suggestions = suggest_type("SELECT * FROM (SELECT t. FROM tabl t",
                               "SELECT * FROM (SELECT t.")
    assert set(suggestions) == set([
        Column(table_refs=((None, "tabl", "t", False), )),
        Table(schema="t"),
        View(schema="t"),
        Function(schema="t"),
    ])
示例#22
0
def test_join_alias_dot_suggests_cols1(sql):
    suggestions = suggest_type(sql, sql)
    tables = ((None, "abc", "a", False), (None, "def", "d", False))
    assert set(suggestions) == set([
        Column(table_refs=((None, "abc", "a", False), )),
        Table(schema="a"),
        View(schema="a"),
        Function(schema="a"),
        JoinCondition(table_refs=tables, parent=(None, "abc", "a", False)),
    ])
示例#23
0
def test_distinct_and_order_by_suggestions_with_alias_given(text, text_before):
    suggestions = suggest_type(text, text_before)
    assert set(suggestions) == set([
        Column(
            table_refs=(TableReference(None, "tbl", "x", False), ),
            local_tables=(),
            qualifiable=False,
        ),
        Table(schema="x"),
        View(schema="x"),
        Function(schema="x"),
    ])
示例#24
0
def test_function_arguments_with_alias_given():
    suggestions = suggest_type("SELECT avg(x. FROM tbl x, tbl2 y",
                               "SELECT avg(x.")

    assert set(suggestions) == set([
        Column(
            table_refs=(TableReference(None, "tbl", "x", False), ),
            local_tables=(),
            qualifiable=False,
        ),
        Table(schema="x"),
        View(schema="x"),
        Function(schema="x"),
    ])
示例#25
0
def test_distinct_and_order_by_suggestions_with_aliases(
        text, text_before, last_keyword):
    suggestions = suggest_type(text, text_before)
    assert set(suggestions) == set([
        Column(
            table_refs=(
                TableReference(None, "tbl", "x", False),
                TableReference(None, "tbl1", "y", False),
            ),
            local_tables=(),
            qualifiable=True,
        ),
        Function(schema=None),
        Keyword(last_keyword),
    ])
示例#26
0
def test_after_as(expression):
    suggestions = suggest_type(expression, expression)
    assert set(suggestions) == set()
示例#27
0
def test_keyword_after_alter(sql):
    assert Keyword("ALTER") in set(suggest_type(sql, sql))
示例#28
0
def test_column_keyword_suggests_columns(sql):
    suggestions = suggest_type(sql, sql)
    assert set(suggestions) == set(
        [Column(table_refs=((None, "foo", None, False), ))])
示例#29
0
def test_ignore_leading_double_quotes(sql):
    suggestions = suggest_type(sql, sql)
    assert FromClauseItem(schema=None) in set(suggestions)
示例#30
0
def test_leading_parenthesis(sql):
    # No assertion for now; just make sure it doesn't crash
    suggest_type(sql, sql)