summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmjith Ramanujam <amjith@newrelic.com>2014-12-30 18:27:21 -0800
committerAmjith Ramanujam <amjith@newrelic.com>2014-12-30 21:46:16 -0800
commit16af5d0ec14e6b3d7498a9724de4bfa388445ec8 (patch)
tree46a4a7379b7a7aa44b261be9823eb0541f5967c1
parent39c6c54f4458ca9b4c6e2b72690eca1559c6b82a (diff)
Add keyword completion for sub-select.
-rw-r--r--pgcli/packages/sqlcompletion.py6
-rw-r--r--tests/test_sqlcompletion.py14
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 ',