From 2e73468148c9092696e70f7683c0062de0926d9a Mon Sep 17 00:00:00 2001 From: Iryna Cherniavska Date: Wed, 17 Dec 2014 21:16:21 -0800 Subject: [PATCH] added support for ansi sql functions; added CASE, WHEN, FULL keywords; changed GROUP to GROUP BY --- .gitignore | 3 +++ pgcli/packages/sqlcompletion.py | 5 +++-- pgcli/pgcompleter.py | 13 ++++++++++--- 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':