Committed by Greg Sabino Mullane <[email protected]>

Make sure we account for materialized views where needed

---
 Changes |  6 ++++++
 Pg.pm   | 18 ++++++++++--------
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/Changes b/Changes
index 2b7feac..bd97dd0 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,12 @@
  'GSM' is Greg Sabino Mullane, [email protected]
 
 
+Version ??
+
+  - Make sure column_info() and table_info() can handle materialized views.
+    [Greg Sabino Mullane] (CPAN bug #97032)
+
+
 Version 3.3.0  Released May 31, 2014 (git commit 
055f788cf96b380b9fe0e80b6cedb88f8d1799b8)
 
   - Major cleanup of UTF-8 support:
diff --git a/Pg.pm b/Pg.pm
index e01d61c..612984a 100644
--- a/Pg.pm
+++ b/Pg.pm
@@ -485,7 +485,7 @@ use 5.008001;
                 $schemajoin
             WHERE
                 a.attnum >= 0
-                AND c.relkind IN ('r','v')
+                AND c.relkind IN ('r','v','m')
                 $whereclause
             ORDER BY "TABLE_SCHEM", "TABLE_NAME", "ORDINAL_POSITION"
             !;
@@ -1077,13 +1077,13 @@ use 5.008001;
                                        push @search, 'c.relname ' . ($table =~ 
/[_%]/ ? 'LIKE ' : '= ') . $dbh->quote($table);
                        }
                        ## All we can see is "table" or "view". Default is both
-                       my $typesearch = q{IN ('r','v')};
+                       my $typesearch = q{IN ('r','v','m')};
                        if (defined $type and length $type) {
                                if ($type =~ /\btable\b/i and $type !~ 
/\bview\b/i) {
                                        $typesearch = q{= 'r'};
                                }
                                elsif ($type =~ /\bview\b/i and $type !~ 
/\btable\b/i) {
-                                       $typesearch = q{= 'v'};
+                                       $typesearch = q{IN ('v','m')};
                                }
                        }
                        push @search, "c.relkind $typesearch";
@@ -1100,6 +1100,8 @@ use 5.008001;
                      , CASE
                              WHEN c.relkind = 'v' THEN
                                 CASE WHEN quote_ident(n.nspname) ~ '^pg_' THEN 
'SYSTEM VIEW' ELSE 'VIEW' END
+                             WHEN c.relkind = 'm' THEN
+                                CASE WHEN quote_ident(n.nspname) ~ '^pg_' THEN 
'SYSTEM VIEW' ELSE 'MATERIALIZED VIEW' END
                             ELSE
                                 CASE WHEN quote_ident(n.nspname) ~ '^pg_' THEN 
'SYSTEM TABLE' ELSE 'TABLE' END
                         END AS "TABLE_TYPE"
@@ -2751,7 +2753,7 @@ recommended by DBI.
 
   $sth = $dbh->table_info(undef, $schema, $table, $type);
 
-Returns all tables and views visible to the current user. 
+Returns all tables and views (including materialize views) visible to the 
current user. 
 The schema and table arguments will do a C<LIKE> search if a percent sign 
(C<%>) or an 
 underscore (C<_>) is detected in the argument. The C<$type> argument accepts a 
value of either 
 "TABLE" or "VIEW" (using both is the default action). Note that a statement 
handle is returned, 
@@ -2765,8 +2767,8 @@ B<TABLE_SCHEM>: The name of the schema that the table or 
view is in.
 
 B<TABLE_NAME>: The name of the table or view.
 
-B<TABLE_TYPE>: The type of object returned. Will be one of "TABLE", "VIEW", 
-or "SYSTEM TABLE".
+B<TABLE_TYPE>: The type of object returned. Will be one of "TABLE", "VIEW",
+"MATERIALIZED VIEW", "SYSTEM VIEW", or "SYSTEM TABLE".
 
 The TABLE_SCHEM and TABLE_NAME will be quoted via C<quote_ident()>.
 
@@ -2783,7 +2785,7 @@ B<pg_tablespace_name>: the name of the tablespace the 
table is in
 
 B<pg_tablespace_location>: the location of the tablespace the table is in
 
-Tables that have not been assigned to a particular tablespace (or views) 
+Tables that have not been assigned to a particular tablespace (or views)
 will return NULL (C<undef>) for both of the above field.
 
 Rows are returned alphabetically, with all tables first, and then all views.
@@ -2929,7 +2931,7 @@ that this is an index expression.
   @names = $dbh->tables( undef, $schema, $table, $type, \%attr );
 
 Supported by this driver as proposed by DBI. This method returns all tables
-and/or views which are visible to the current user: see L</table_info>
+and/or views (including materialized views) which are visible to the current 
user: see L</table_info>
 for more information about the arguments. The name of the schema appears 
 before the table or view name. This can be turned off by adding in the 
 C<pg_noprefix> attribute:
-- 
1.8.4

Reply via email to