summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIryna Cherniavska <icherniavska@cars.com>2014-12-17 21:16:21 -0800
committerIryna Cherniavska <icherniavska@cars.com>2014-12-17 21:16:21 -0800
commit2e73468148c9092696e70f7683c0062de0926d9a (patch)
tree839b4af1e349347715863eeaa52fdffc503ff9d9
parentb3f4972e127ded9e012f3e33475803bda710b1fa (diff)
added support for ansi sql functions; added CASE, WHEN, FULL keywords; changed GROUP to GROUP BY
-rw-r--r--.gitignore3
-rw-r--r--pgcli/packages/sqlcompletion.py5
-rw-r--r--pgcli/pgcompleter.py13
3 files changed, 16 insertions, 5 deletions
diff --git a/.gitignore b/.gitignore
index db4561ea..eea8dd0b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -52,3 +52,6 @@ docs/_build/
# PyBuilder
target/
+
+# PyCharm
+.idea/ \ No newline at end of file
diff --git a/pgcli/packages/sqlcompletion.py b/pgcli/packages/sqlcompletion.py
index e9c0745c..42b2ba83 100644
--- a/pgcli/packages/sqlcompletion.py
+++ b/pgcli/packages/sqlcompletion.py
@@ -78,9 +78,10 @@ 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 ('select', 'where', 'having', 'set',
- 'order by', 'group by'):
+ if last_token.lower() in ('set', 'order by', 'group by'):
return ('columns', None)
+ elif last_token.lower() in ('select', 'where', 'having'):
+ return ('columns-and-functions', None)
elif last_token.lower() in ('from', 'update', 'into', 'describe'):
return ('tables', None)
elif last_token in ('d',): # \d
diff --git a/pgcli/pgcompleter.py b/pgcli/pgcompleter.py
index 4c95137b..f5cb2215 100644
--- a/pgcli/pgcompleter.py
+++ b/pgcli/pgcompleter.py
@@ -4,11 +4,11 @@ from .packages.sqlcompletion import suggest_type
class PGCompleter(Completer):
keywords = ['ACCESS', 'ADD', 'ALL', 'ALTER TABLE', 'AND', 'ANY', 'AS',
- 'ASC', 'AUDIT', 'BETWEEN', 'BY', 'CHAR', 'CHECK', 'CLUSTER',
+ 'ASC', 'AUDIT', 'BETWEEN', 'BY', 'CASE', 'CHAR', 'CHECK', 'CLUSTER',
'COLUMN', 'COMMENT', 'COMPRESS', 'CONNECT', 'CREATE', 'CURRENT',
'DATE', 'DECIMAL', 'DEFAULT', 'DELETE FROM', 'DESC', 'DESCRIBE',
'DISTINCT', 'DROP', 'ELSE', 'EXCLUSIVE', 'EXISTS', 'FILE', 'FLOAT',
- 'FOR', 'FROM', 'GRANT', 'GROUP', 'HAVING', 'IDENTIFIED',
+ 'FOR', 'FROM', 'FULL', 'GRANT', 'GROUP BY', 'HAVING', 'IDENTIFIED',
'IMMEDIATE', 'IN', 'INCREMENT', 'INDEX', 'INITIAL', 'INSERT INTO',
'INTEGER', 'INTERSECT', 'INTO', 'IS', 'LEVEL', 'LIKE', 'LOCK',
'LONG', 'MAXEXTENTS', 'MINUS', 'MLSLABEL', 'MODE', 'MODIFY',
@@ -19,7 +19,11 @@ class PGCompleter(Completer):
'SET', 'SHARE', 'SIZE', 'SMALLINT', 'START', 'SUCCESSFUL',
'SYNONYM', 'SYSDATE', 'TABLE', 'THEN', 'TO', 'TRIGGER', 'UID',
'UNION', 'UNIQUE', 'UPDATE', 'USE', 'USER', 'VALIDATE', 'VALUES',
- 'VARCHAR', 'VARCHAR2', 'VIEW', 'WHENEVER', 'WHERE', 'WITH', ]
+ 'VARCHAR', 'VARCHAR2', 'VIEW', 'WHEN', 'WHENEVER', 'WHERE', 'WITH', ]
+
+ functions = ['AVG', 'COUNT', 'DISTINCT', 'FIRST', 'FORMAT', 'LAST', 'LCASE',
+ 'LEN', 'MAX', 'MIN', 'MID', 'NOW', 'ROUND', 'SUM', 'TOP',
+ 'UCASE']
special_commands = []
@@ -77,6 +81,9 @@ class PGCompleter(Completer):
if category == 'columns':
return self.find_matches(word_before_cursor, self.columns)
+ elif category == 'columns-and-functions':
+ return self.find_matches(word_before_cursor, self.columns +
+ self.functions)
elif category == 'tables':
return self.find_matches(word_before_cursor, self.tables)
elif category == 'databases':