diff options
author | Amjith Ramanujam <amjith@newrelic.com> | 2014-12-30 18:27:21 -0800 |
---|---|---|
committer | Amjith Ramanujam <amjith@newrelic.com> | 2014-12-30 21:46:16 -0800 |
commit | 16af5d0ec14e6b3d7498a9724de4bfa388445ec8 (patch) | |
tree | 46a4a7379b7a7aa44b261be9823eb0541f5967c1 | |
parent | 39c6c54f4458ca9b4c6e2b72690eca1559c6b82a (diff) |
Add keyword completion for sub-select.
-rw-r--r-- | pgcli/packages/sqlcompletion.py | 6 | ||||
-rw-r--r-- | tests/test_sqlcompletion.py | 14 |
2 files changed, 14 insertions, 6 deletions
diff --git a/pgcli/packages/sqlcompletion.py b/pgcli/packages/sqlcompletion.py index b86e0ed9..b8c94f88 100644 --- a/pgcli/packages/sqlcompletion.py +++ b/pgcli/packages/sqlcompletion.py @@ -42,6 +42,12 @@ def suggest_based_on_last_token(token, text_before_cursor, full_text): token_v = token.value if token_v.lower().endswith('('): + p = sqlparse.parse(text_before_cursor)[0] + if p.token_first().value.lower() == 'select': + # If the lparen is preceeded by a space chances are we're about to + # do a sub-select. + if last_word(text_before_cursor, 'all_punctuations').startswith('('): + return 'keywords', [] return 'columns', extract_tables(full_text) if token_v.lower() in ('set', 'by', 'distinct'): return 'columns', extract_tables(full_text) diff --git a/tests/test_sqlcompletion.py b/tests/test_sqlcompletion.py index 860fabb6..86ae896c 100644 --- a/tests/test_sqlcompletion.py +++ b/tests/test_sqlcompletion.py @@ -57,8 +57,7 @@ def test_partially_typed_col_name_suggests_col_names(): assert suggestion == ('columns-and-functions', ['tabl']) def test_dot_suggests_cols_of_a_table(): - suggestion = suggest_type('SELECT tabl. FROM tabl', - 'SELECT tabl.') + suggestion = suggest_type('SELECT tabl. FROM tabl', 'SELECT tabl.') assert suggestion == ('columns', ['tabl']) def test_dot_suggests_cols_of_an_alias(): @@ -71,10 +70,13 @@ def test_dot_col_comma_suggests_cols(): 'SELECT t1.a, t2.') assert suggestion == ('columns', ['tabl2']) -#def test_sub_select_suggests_keyword(): - #suggestion = suggest_type('SELECT * FROM (', - #'SELECT * FROM (') - #assert suggestion == ('keywords', []) +def test_sub_select_suggests_keyword(): + suggestion = suggest_type('SELECT * FROM (', 'SELECT * FROM (') + assert suggestion == ('keywords', []) + +def test_sub_select_partial_text_suggests_keyword(): + suggestion = suggest_type('SELECT * FROM (S', 'SELECT * FROM (S') + assert suggestion == ('keywords', []) def test_sub_select_table_name_completion(): suggestion = suggest_type('SELECT * FROM (SELECT * FROM ', |