From 926004eeddeebbb9c0a3bed1dd210059e82b1df8 Mon Sep 17 00:00:00 2001 From: koljonen Date: Sat, 14 May 2016 19:08:53 +0200 Subject: [PATCH 1/2] Fix bug where "USING(" wasn't detected properly + add test case --- pgcli/packages/sqlcompletion.py | 4 +++- tests/test_smart_completion_multiple_schemata.py | 10 +++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pgcli/packages/sqlcompletion.py b/pgcli/packages/sqlcompletion.py index 60c8e404..4d298539 100644 --- a/pgcli/packages/sqlcompletion.py +++ b/pgcli/packages/sqlcompletion.py @@ -247,7 +247,9 @@ def suggest_based_on_last_token(token, text_before_cursor, full_text, identifier # Get the token before the parens prev_tok = p.token_prev(len(p.tokens) - 1) - if prev_tok and prev_tok.value and prev_tok.value.lower() == 'using': + + if (prev_tok and prev_tok.value + and prev_tok.value.lower().split(' ')[-1] == 'using'): # tbl1 INNER JOIN tbl2 USING (col1, col2) tables = extract_tables(full_text) diff --git a/tests/test_smart_completion_multiple_schemata.py b/tests/test_smart_completion_multiple_schemata.py index 1881110a..4b889658 100644 --- a/tests/test_smart_completion_multiple_schemata.py +++ b/tests/test_smart_completion_multiple_schemata.py @@ -322,4 +322,12 @@ def test_suggest_columns_from_aliased_set_returning_function(completer, complete result = completer.get_completions(Document(text=sql, cursor_position=pos), complete_event) assert set(result) == set([ - Completion(text='x', start_position=0, display_meta='column')]) \ No newline at end of file + Completion(text='x', start_position=0, display_meta='column')]) + +def test_using(completer, complete_event): + sql = 'select * from public.users join custom.shipments using(' + pos = len(sql) + result = completer.get_completions(Document(text=sql, cursor_position=pos), + complete_event) + assert set(result) == set([ + Completion(text='id', start_position=0, display_meta='column')]) From ef9908495497df997e22948b52a694f97b8741d7 Mon Sep 17 00:00:00 2001 From: koljonen Date: Sun, 15 May 2016 20:29:48 +0200 Subject: [PATCH 2/2] Remove new test I added and edit the existing ones to cover the same case instead As suggested by darikg --- tests/test_smart_completion_multiple_schemata.py | 10 +--------- tests/test_smart_completion_public_schema_only.py | 14 ++++++++++---- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/tests/test_smart_completion_multiple_schemata.py b/tests/test_smart_completion_multiple_schemata.py index 4b889658..1881110a 100644 --- a/tests/test_smart_completion_multiple_schemata.py +++ b/tests/test_smart_completion_multiple_schemata.py @@ -322,12 +322,4 @@ def test_suggest_columns_from_aliased_set_returning_function(completer, complete result = completer.get_completions(Document(text=sql, cursor_position=pos), complete_event) assert set(result) == set([ - Completion(text='x', start_position=0, display_meta='column')]) - -def test_using(completer, complete_event): - sql = 'select * from public.users join custom.shipments using(' - pos = len(sql) - result = completer.get_completions(Document(text=sql, cursor_position=pos), - complete_event) - assert set(result) == set([ - Completion(text='id', start_position=0, display_meta='column')]) + Completion(text='x', start_position=0, display_meta='column')]) \ No newline at end of file diff --git a/tests/test_smart_completion_public_schema_only.py b/tests/test_smart_completion_public_schema_only.py index 36ca6203..19641af5 100644 --- a/tests/test_smart_completion_public_schema_only.py +++ b/tests/test_smart_completion_public_schema_only.py @@ -344,8 +344,11 @@ def test_suggested_tables_after_on_right_side(completer, complete_event): Completion(text='users', start_position=0, display_meta='table alias'), Completion(text='orders', start_position=0, display_meta='table alias')]) -def test_join_using_suggests_common_columns(completer, complete_event): - text = 'SELECT * FROM users INNER JOIN orders USING (' +@pytest.mark.parametrize('text', [ + 'SELECT * FROM users INNER JOIN orders USING (', + 'SELECT * FROM users INNER JOIN orders USING(', +]) +def test_join_using_suggests_common_columns(completer, complete_event, text): pos = len(text) result = set(completer.get_completions( Document(text=text, cursor_position=pos), complete_event)) @@ -354,8 +357,11 @@ def test_join_using_suggests_common_columns(completer, complete_event): Completion(text='email', start_position=0, display_meta='column'), ]) -def test_join_using_suggests_columns_after_first_column(completer, complete_event): - text = 'SELECT * FROM users INNER JOIN orders USING (id,' +@pytest.mark.parametrize('text', [ + 'SELECT * FROM users INNER JOIN orders USING (id,', + 'SELECT * FROM users INNER JOIN orders USING(id,', +]) +def test_join_using_suggests_columns_after_first_column(completer, complete_event, text): pos = len(text) result = set(completer.get_completions( Document(text=text, cursor_position=pos), complete_event))