summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIryna Cherniavska <icherniavska@cars.com>2014-12-18 13:57:40 -0800
committerIryna Cherniavska <icherniavska@cars.com>2014-12-18 13:57:40 -0800
commite2877870456e0146380c3b3519cb1289e4f56a86 (patch)
treeaa5972fbdedbe01c8c7d1edf4bb188f60e9044b1
parent6a9efde3e62808d5ee3664d04f83b97968b1a5dc (diff)
attempt to suggest column name when function is typed
-rw-r--r--pgcli/packages/sqlcompletion.py7
-rw-r--r--pgcli/pgcompleter.py1
-rw-r--r--tests/test_sqlcompletion.py18
3 files changed, 24 insertions, 2 deletions
diff --git a/pgcli/packages/sqlcompletion.py b/pgcli/packages/sqlcompletion.py
index 6e45f435..3d46e85c 100644
--- a/pgcli/packages/sqlcompletion.py
+++ b/pgcli/packages/sqlcompletion.py
@@ -29,7 +29,12 @@ def suggest_type(full_text, text_before_cursor):
last_token = parsed[0].token_prev(len(parsed[0].tokens))
last_token = last_token.value if last_token else ''
- if last_token.lower() in ('set', 'by'):
+ def is_function_word(word):
+ return word and len(word) > 1 and word[-1] == '('
+
+ if is_function_word(word_before_cursor):
+ return ('columns', extract_tables(full_text))
+ elif last_token.lower() in ('set', 'by', 'distinct'):
return ('columns', extract_tables(full_text))
elif last_token.lower() in ('select', 'where', 'having'):
return ('columns-and-functions', extract_tables(full_text))
diff --git a/pgcli/pgcompleter.py b/pgcli/pgcompleter.py
index 8cc2e9d9..12727d50 100644
--- a/pgcli/pgcompleter.py
+++ b/pgcli/pgcompleter.py
@@ -1,6 +1,5 @@
from __future__ import print_function
from collections import defaultdict
-import itertools
from prompt_toolkit.completion import Completer, Completion
from .packages.sqlcompletion import suggest_type
diff --git a/tests/test_sqlcompletion.py b/tests/test_sqlcompletion.py
new file mode 100644
index 00000000..d31042f0
--- /dev/null
+++ b/tests/test_sqlcompletion.py
@@ -0,0 +1,18 @@
+from pgcli.packages.sqlcompletion import suggest_type
+
+class TestSqlCompletion:
+ def test_lparen_suggest_cols(self):
+ suggestion = suggest_type('SELECT MAX( FROM table_name', 'SELECT MAX(')
+ assert (suggestion and suggestion[0] == 'columns')
+
+ def test_select_suggest_cols_and_funcs(self):
+ suggestion = suggest_type('SELECT ', 'SELECT ')
+ assert (suggestion and suggestion[0] == 'columns-and-functions')
+
+ def test_from_suggest_tables(self):
+ suggestion = suggest_type('SELECT * FROM ', 'SELECT * FROM ')
+ assert (suggestion and suggestion[0] == 'tables')
+
+ def test_distinct_suggest_cols(self):
+ suggestion = suggest_type('SELECT DISTINCT ', 'SELECT DISTINCT ')
+ assert (suggestion and suggestion[0] == 'columns')