diff options
author | darikg <darik.gamble@gmail.com> | 2015-02-01 09:01:22 -0500 |
---|---|---|
committer | darikg <darik.gamble@gmail.com> | 2015-02-01 09:01:22 -0500 |
commit | 060e2c49807f335c0c0e90cc91f72493af576b1d (patch) | |
tree | 179b5eb7a9f93f7d8a6d0b92373a9abd8049c64d | |
parent | 25ea74bafab6b083de310f9a08d2b894a0d04aa0 (diff) |
Refactor list_tables into a more general method, and make \dv use it to also list views
-rw-r--r-- | pgcli/packages/pgspecial.py | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/pgcli/packages/pgspecial.py b/pgcli/packages/pgspecial.py index c96d60b6..8fc003ce 100644 --- a/pgcli/packages/pgspecial.py +++ b/pgcli/packages/pgspecial.py @@ -50,8 +50,15 @@ def list_schemas(cur, pattern, verbose): headers = [x[0] for x in cur.description] return [(cur, headers, cur.statusmessage)] -def list_tables(cur, pattern, verbose): +def list_tables_or_views(cur, pattern, verbose, relkinds): + """ + Returns (rows, header, status) + + This method is used by list_tables and list_views. + + relkinds is a list of strings to filter pg_class.relkind + """ schema_pattern, table_pattern = sql_name_pattern(pattern) verbose_columns = (''' @@ -72,12 +79,13 @@ def list_tables(cur, pattern, verbose): FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace - WHERE c.relkind IN ('r','') + WHERE c.relkind = ANY(%s) AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast' ''' - params = [] + params = [relkinds] + if schema_pattern: sql += ' AND n.nspname ~ %s' params.append(schema_pattern) @@ -96,6 +104,14 @@ def list_tables(cur, pattern, verbose): return [(cur, headers, cur.statusmessage)] +def list_tables(cur, pattern, verbose): + return list_tables_or_views(cur, pattern, verbose, ['r', '']) + + +def list_views(cur, pattern, verbose): + return list_tables_or_views(cur, pattern, verbose, ['v', 's', '']) + + def describe_table_details(cur, pattern, verbose): """ Returns (rows, headers, status) @@ -847,17 +863,7 @@ CASE_SENSITIVE_COMMANDS = { n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast' AND pg_catalog.pg_table_is_visible(c.oid) ORDER BY 1,2;''', ['\di', 'list indexes.']), - '\dv': ('''SELECT n.nspname as "Schema", c.relname as "Name", CASE - c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN - 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' - WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as - "Type", pg_catalog.pg_get_userbyid(c.relowner) as "Owner" FROM - pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON - n.oid = c.relnamespace WHERE c.relkind IN ('v','') AND - n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' - AND n.nspname !~ '^pg_toast' AND - pg_catalog.pg_table_is_visible(c.oid) ORDER BY 1,2;''', - ['\dv', 'list views.']), + '\dv': (list_views, ['\dv', 'list views.']), } NON_CASE_SENSITIVE_COMMANDS = { |