summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmjith Ramanujam <amjith.r@gmail.com>2015-06-21 20:48:16 -0700
committerAmjith Ramanujam <amjith.r@gmail.com>2015-06-21 20:48:16 -0700
commit7f75f49899139a34fd3f817dd8b6776bf5713a9a (patch)
tree42bcbfabc045af84e9ecbba43300bda978263db2
parent506db1866996db0af17f5c602556fd882fe60b0e (diff)
Show named query usage when invoked.
-rw-r--r--pgcli/packages/pgspecial/iocommands.py41
-rw-r--r--pgcli/packages/pgspecial/namedqueries.py36
2 files changed, 63 insertions, 14 deletions
diff --git a/pgcli/packages/pgspecial/iocommands.py b/pgcli/packages/pgspecial/iocommands.py
index 5b93e6ce..49b5caae 100644
--- a/pgcli/packages/pgspecial/iocommands.py
+++ b/pgcli/packages/pgspecial/iocommands.py
@@ -101,10 +101,10 @@ def open_external_editor(filename=None, sql=''):
return (query, message)
@special_command('\\n', '\\n[+] [name]', 'List or execute named queries.')
-def execute_named_query(cur, pattern, verbose):
+def execute_named_query(cur, pattern, **_):
"""Returns (title, rows, headers, status)"""
if pattern == '':
- return list_named_queries(verbose)
+ return list_named_queries(True)
query = namedqueries.get(pattern)
title = '> {}'.format(query)
@@ -127,23 +127,40 @@ def list_named_queries(verbose):
else:
headers = ["Name", "Query"]
rows = [[r, namedqueries.get(r)] for r in namedqueries.list()]
- return [('', rows, headers, "")]
-@special_command('\\ns', '\\ns [name [query]]', 'Save a named query.')
+ if not rows:
+ status = namedqueries.usage
+ else:
+ status = ''
+ return [('', rows, headers, status)]
+
+@special_command('\\ns', '\\ns name query', 'Save a named query.')
def save_named_query(pattern, **_):
"""Save a new named query.
Returns (title, rows, headers, status)"""
- if ' ' not in pattern:
- return [(None, None, None, "Invalid argument.")]
- name, query = pattern.split(' ', 1)
+
+ usage = 'Syntax: \\ns name query.\n\n' + namedqueries.usage
+ if not pattern:
+ return [(None, None, None, usage)]
+
+ name, _, query = pattern.partition(' ')
+
+ # If either name or query is missing then print the usage and complain.
+ if (not name) or (not query):
+ return [(None, None, None,
+ usage + 'Err: Both name and query are required.')]
+
namedqueries.save(name, query)
return [(None, None, None, "Saved.")]
-@special_command('\\nd', '\\nd [name [query]]', 'Delete a named query.')
+@special_command('\\nd', '\\nd [name]', 'Delete a named query.')
def delete_named_query(pattern, **_):
"""Delete an existing named query.
"""
- if len(pattern) == 0:
- return [(None, None, None, "Invalid argument.")]
- namedqueries.delete(pattern)
- return [(None, None, None, "Deleted.")]
+ usage = 'Syntax: \\nd name.\n\n' + namedqueries.usage
+ if not pattern:
+ return [(None, None, None, usage)]
+
+ status = namedqueries.delete(pattern)
+
+ return [(None, None, None, status)]
diff --git a/pgcli/packages/pgspecial/namedqueries.py b/pgcli/packages/pgspecial/namedqueries.py
index 0c5f2957..00d241ba 100644
--- a/pgcli/packages/pgspecial/namedqueries.py
+++ b/pgcli/packages/pgspecial/namedqueries.py
@@ -1,7 +1,36 @@
+# -*- coding: utf-8 -*-
class NamedQueries(object):
section_name = 'named queries'
+ usage = u'''Named Queries are a way to save frequently used queries
+with a short name. Think of them as favorites.
+Examples:
+
+ # Save a new named query.
+ > \\ns simple select * from abc where a is not Null;
+
+ # List all named queries.
+ > \\n+
+ ╒════════╤═══════════════════════════════════════╕
+ │ Name │ Query │
+ ╞════════╪═══════════════════════════════════════╡
+ │ simple │ SELECT * FROM abc where a is not NULL │
+ ╘════════╧═══════════════════════════════════════╛
+
+ # Run a named query.
+ > \\n simple
+ ╒════════╤════════╕
+ │ a │ b │
+ ╞════════╪════════╡
+ │ 日本語 │ 日本語 │
+ ╘════════╧════════╛
+
+ # Delete a named query.
+ > \\nd simple
+ simple: Deleted
+'''
+
def __init__(self, config):
self.config = config
@@ -18,9 +47,12 @@ class NamedQueries(object):
self.config.write()
def delete(self, name):
- if self.section_name in self.config and name in self.config[self.section_name]:
+ try:
del self.config[self.section_name][name]
- self.config.write()
+ except KeyError:
+ return '%s: Not Found.' % name
+ self.config.write()
+ return '%s: Deleted' % name
from ...config import load_config
namedqueries = NamedQueries(load_config('~/.pgclirc'))