diff options
author | Daniel Rocco <drocco@gmail.com> | 2015-02-24 12:44:32 -0500 |
---|---|---|
committer | Daniel Rocco <drocco@gmail.com> | 2015-02-24 12:44:32 -0500 |
commit | 840f3bd3a805a4cf3f824e37eb2e423756d52379 (patch) | |
tree | 2a37146ec6fddd7cc0980843fe7f91ebd0448926 | |
parent | 4d60c92184f78e91bed729db0adb2a0272a9c6b5 (diff) |
Add completion for CREATE WITH TEMPLATE
Closes #156
-rw-r--r-- | pgcli/packages/sqlcompletion.py | 4 | ||||
-rw-r--r-- | pgcli/pgcompleter.py | 40 | ||||
-rw-r--r-- | tests/test_sqlcompletion.py | 10 |
3 files changed, 32 insertions, 22 deletions
diff --git a/pgcli/packages/sqlcompletion.py b/pgcli/packages/sqlcompletion.py index c01277ed..f5d24147 100644 --- a/pgcli/packages/sqlcompletion.py +++ b/pgcli/packages/sqlcompletion.py @@ -124,7 +124,9 @@ def suggest_based_on_last_token(token, text_before_cursor, full_text): return [{'type': 'table', 'schema': identifiers[0]}] else: return [{'type': 'schema'}, {'type': 'table', 'schema': []}] - elif token_v.lower() in ('c', 'use'): # \c + elif token_v.lower() in ('c', 'use', 'database', 'template'): + # "\c <db", "use <db>", "DROP DATABASE <db>", + # "CREATE DATABASE <newdb> WITH TEMPLATE <db>" return [{'type': 'database'}] elif token_v.endswith(',') or token_v == '=': prev_keyword = find_prev_keyword(text_before_cursor) diff --git a/pgcli/pgcompleter.py b/pgcli/pgcompleter.py index 35054cd1..1cab631b 100644 --- a/pgcli/pgcompleter.py +++ b/pgcli/pgcompleter.py @@ -10,24 +10,26 @@ _logger = logging.getLogger(__name__) class PGCompleter(Completer): keywords = ['ACCESS', 'ADD', 'ALL', 'ALTER TABLE', 'AND', 'ANY', 'AS', - 'ASC', 'AUDIT', 'BETWEEN', 'BY', 'CASE', 'CHAR', 'CHECK', - 'CLUSTER', 'COLUMN', 'COMMENT', 'COMPRESS', 'CONNECT', 'COPY', - 'CREATE', 'CURRENT', 'DATE', 'DECIMAL', 'DEFAULT', 'DELETE FROM', - 'DESC', 'DESCRIBE', 'DISTINCT', 'DROP', 'ELSE', 'EXCLUSIVE', - 'EXISTS', 'FILE', 'FLOAT', 'FOR', 'FROM', 'FULL', 'GRANT', - 'GROUP BY', 'HAVING', 'IDENTIFIED', 'IMMEDIATE', 'IN', 'INCREMENT', - 'INDEX', 'INITIAL', 'INSERT INTO', 'INTEGER', 'INTERSECT', 'INTO', - 'IS', 'JOIN', 'LEFT', 'LEVEL', 'LIKE', 'LIMIT', 'LOCK', 'LONG', - 'MAXEXTENTS', 'MINUS', 'MLSLABEL', 'MODE', 'MODIFY', 'NOAUDIT', - 'NOCOMPRESS', 'NOT', 'NOWAIT', 'NULL', 'NUMBER', 'OF', 'OFFLINE', - 'ON', 'ONLINE', 'OPTION', 'OR', 'ORDER BY', 'OUTER', 'PCTFREE', - 'PRIMARY', 'PRIOR', 'PRIVILEGES', 'RAW', 'RENAME', 'RESOURCE', - 'REVOKE', 'RIGHT', 'ROW', 'ROWID', 'ROWNUM', 'ROWS', 'SELECT', - 'SESSION', 'SET', 'SHARE', 'SIZE', 'SMALLINT', 'START', - 'SUCCESSFUL', 'SYNONYM', 'SYSDATE', 'TABLE', 'THEN', 'TO', - 'TRIGGER', 'UID', 'UNION', 'UNIQUE', 'UPDATE', 'USE', 'USER', - 'VALIDATE', 'VALUES', 'VARCHAR', 'VARCHAR2', 'VIEW', 'WHEN', - 'WHENEVER', 'WHERE', 'WITH', ] + 'ASC', 'AUDIT', 'BETWEEN', 'BY', 'CASE', 'CHAR', 'CHECK', + 'CLUSTER', 'COLUMN', 'COMMENT', 'COMPRESS', 'CONNECT', + 'COPY', 'CREATE', 'CURRENT', 'DATABASE', 'DATE', 'DECIMAL', + 'DEFAULT', 'DELETE FROM', 'DESC', 'DESCRIBE', 'DISTINCT', + 'DROP', 'ELSE', 'EXCLUSIVE', 'EXISTS', 'FILE', 'FLOAT', + 'FOR', 'FROM', 'FULL', 'GRANT', 'GROUP BY', 'HAVING', + 'IDENTIFIED', 'IMMEDIATE', 'IN', 'INCREMENT', 'INDEX', + 'INITIAL', 'INSERT INTO', 'INTEGER', 'INTERSECT', 'INTO', + 'IS', 'JOIN', 'LEFT', 'LEVEL', 'LIKE', 'LIMIT', 'LOCK', + 'LONG', 'MAXEXTENTS', 'MINUS', 'MLSLABEL', 'MODE', 'MODIFY', + 'NOAUDIT', 'NOCOMPRESS', 'NOT', 'NOWAIT', 'NULL', 'NUMBER', + 'OF', 'OFFLINE', 'ON', 'ONLINE', 'OPTION', 'OR', 'ORDER BY', + 'OUTER', 'PCTFREE', 'PRIMARY', 'PRIOR', 'PRIVILEGES', 'RAW', + 'RENAME', 'RESOURCE', 'REVOKE', 'RIGHT', 'ROW', 'ROWID', + 'ROWNUM', 'ROWS', 'SELECT', 'SESSION', 'SET', 'SHARE', + 'SIZE', 'SMALLINT', 'START', 'SUCCESSFUL', 'SYNONYM', + 'SYSDATE', 'TABLE', 'TEMPLATE', 'THEN', 'TO', 'TRIGGER', + 'UID', 'UNION', 'UNIQUE', 'UPDATE', 'USE', 'USER', + 'VALIDATE', 'VALUES', 'VARCHAR', 'VARCHAR2', 'VIEW', 'WHEN', + 'WHENEVER', 'WHERE', 'WITH', ] functions = ['AVG', 'COUNT', 'DISTINCT', 'FIRST', 'FORMAT', 'LAST', 'LCASE', 'LEN', 'MAX', 'MIN', 'MID', 'NOW', 'ROUND', 'SUM', 'TOP', @@ -129,7 +131,7 @@ class PGCompleter(Completer): # function metadata -- right now we're not storing any further metadata # so just default to None as a placeholder metadata = self.dbmetadata['functions'] - + for f in func_data: schema, func = self.escaped_names(f) metadata[schema][func] = None diff --git a/tests/test_sqlcompletion.py b/tests/test_sqlcompletion.py index 4c28d9d4..f24b669e 100644 --- a/tests/test_sqlcompletion.py +++ b/tests/test_sqlcompletion.py @@ -177,13 +177,13 @@ def test_on_suggests_tables(): 'select abc.x, bcd.y from abc join bcd on ', 'select abc.x, bcd.y from abc join bcd on ') assert suggestions == [{'type': 'alias', 'aliases': ['abc', 'bcd']}] - + def test_on_suggests_aliases_right_side(): suggestions = suggest_type( 'select a.x, b.y from abc a join bcd b on a.id = ', 'select a.x, b.y from abc a join bcd b on a.id = ') assert suggestions == [{'type': 'alias', 'aliases': ['a', 'b']}] - + def test_on_suggests_tables_right_side(): suggestions = suggest_type( 'select abc.x, bcd.y from abc join bcd on ', @@ -232,3 +232,9 @@ def test_3_statements_2nd_current(): {'type': 'column', 'tables': [(None, 'b', None)]}, {'type': 'function', 'schema': []}]) + +def test_create_db_with_template(): + suggestions = suggest_type('create database foo with template ', + 'create database foo with template ') + + assert sorted_dicts(suggestions) == sorted_dicts([{'type': 'database'}]) |