[DBD::Pg 08/14] LOCAL TEMPORARY support
[email protected] Sun, 27 Jul 2014 05:14:09 +0000
| Newsgroups | perl.dbd.pg.changes |
|---|---|
| Message-ID | <[email protected]> |
Committed by pilcrow <[email protected]> Subject: [DBD::Pg 08/14] LOCAL TEMPORARY support --- Pg.pm | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/Pg.pm b/Pg.pm index 80b9128..507238b 100644 --- a/Pg.pm +++ b/Pg.pm @@ -1170,7 +1170,7 @@ use 5.008001; and (defined $table and $table eq '') and (defined $type and $type eq '%') ) { - $tbl_sql = qq{ + $tbl_sql = q{ SELECT "TABLE_CAT" , "TABLE_SCHEM" , "TABLE_NAME" @@ -1185,13 +1185,16 @@ use 5.008001; , 'relkind: r' AS "REMARKS" UNION SELECT 'SYSTEM TABLE' - , 'relkind: r; nspname ~ ^pg_' + , 'relkind: r; nspname ~ ^pg_(catalog|toast)$' UNION SELECT 'VIEW' , 'relkind: v' UNION SELECT 'SYSTEM VIEW' - , 'relkind: v; nspname ~ ^pg_') type_info + , 'relkind: v; nspname ~ ^pg_(catalog|toast)$' + UNION + SELECT 'LOCAL TEMPORARY' + , 'relkind: r; nspname ~ ^pg_(toast_)?temp') type_info ORDER BY "TABLE_TYPE" ASC }; } @@ -1213,10 +1216,11 @@ use 5.008001; } my %typesearch = ( - TABLE => q{c.relkind = 'r' AND n.nspname !~ '^pg_'}, - VIEW => q{c.relkind = 'v' AND n.nspname !~ '^pg_'}, - 'SYSTEM TABLE' => q{c.relkind = 'r' AND n.nspname ~ '^pg_'}, - 'SYSTEM VIEW' => q{c.relkind = 'v' AND n.nspname ~ '^pg_'}, + TABLE => q{c.relkind = 'r' AND n.nspname !~ '^pg_'}, + VIEW => q{c.relkind = 'v' AND n.nspname !~ '^pg_'}, + 'SYSTEM TABLE' => q{c.relkind = 'r' AND n.nspname IN ('pg_catalog', 'pg_toast')}, + 'SYSTEM VIEW' => q{c.relkind = 'v' AND n.nspname IN ('pg_catalog', 'pg_toast')}, + 'LOCAL TEMPORARY' => q{c.relkind = 'r' AND quote_ident(n.nspname) ~ '^pg_(toast_)?temp_'}, ); my $typespec = join ' OR ' => grep {defined} @@ -1236,11 +1240,18 @@ use 5.008001; SELECT NULL::text AS "TABLE_CAT" , quote_ident(n.nspname) AS "TABLE_SCHEM" , quote_ident(c.relname) AS "TABLE_NAME" - , CASE - WHEN c.relkind = 'v' THEN - CASE WHEN quote_ident(n.nspname) ~ '^pg_' THEN 'SYSTEM VIEW' ELSE 'VIEW' END + , CASE WHEN c.relkind = 'v' THEN + CASE WHEN quote_ident(n.nspname) in ('pg_catalog', 'pg_toast') + THEN 'SYSTEM VIEW' + ELSE 'VIEW' + END ELSE - CASE WHEN quote_ident(n.nspname) ~ '^pg_' THEN 'SYSTEM TABLE' ELSE 'TABLE' END + CASE WHEN quote_ident(n.nspname) in ('pg_catalog', 'pg_toast') + THEN 'SYSTEM TABLE' + WHEN quote_ident(n.nspname) ~ '^pg_(toast_)?temp_' + THEN 'LOCAL TEMPORARY' + ELSE 'TABLE' + END END AS "TABLE_TYPE" , d.description AS "REMARKS" $showtablespace $extracols FROM pg_catalog.pg_class AS c @@ -1249,6 +1260,8 @@ use 5.008001; LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) LEFT JOIN $TSJOIN WHERE $whereclause + --- exclude others' TEMPORARY tables (and views, for that matter) + AND NOT (quote_ident(n.nspname) ~ '^pg_(toast_)?temp_' AND NOT has_schema_privilege(n.nspname, 'USAGE')) ORDER BY "TABLE_TYPE", "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME" }; } -- 1.8.4