]> granicus.if.org Git - postgresql/commitdiff
Redo pgaccess' queries about views so that they will work in both 7.1
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 7 Feb 2001 21:30:12 +0000 (21:30 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 7 Feb 2001 21:30:12 +0000 (21:30 +0000)
and prior releases --- rely on pg_views view instead of direct access
to pg_class and pg_rewrite.

src/bin/pgaccess/lib/database.tcl
src/bin/pgaccess/lib/mainlib.tcl

index 828baf099204d03ed061f18a4bc49c38636a1660..fb4395bc2fa60c87bc5f337f8e02c74b35b8d82f 100644 (file)
@@ -4,24 +4,21 @@ proc {getTablesList} {} {
 global CurrentDB PgAcVar
        set tlist {}
        if {[catch {
-               wpg_select $CurrentDB "select c.relname,count(c.relname) from pg_class C, pg_rewrite R where (r.ev_class = C.oid) and (r.ev_type = '1') group by relname" rec {
-                       if {$rec(count)!=0} {
-                               set itsaview($rec(relname)) 1
-                       }
+               # As of Postgres 7.1, testing for view-ness is not needed
+               # because relkind = 'r' eliminates views.  But we should
+               # leave the code in for awhile yet, so as not to fail when
+               # running against older releases.
+               wpg_select $CurrentDB "select viewname from pg_views" rec {
+                       set itsaview($rec(viewname)) 1
                }
                if {! $PgAcVar(pref,systemtables)} {
-                       wpg_select $CurrentDB "select relname from pg_class where (relname !~ '^pg_') and (relkind='r') order by relname" rec {
-                               if {![regexp "^pga_" $rec(relname)]} then {
-                                       if {![info exists itsaview($rec(relname))]} {
-                                               lappend tlist $rec(relname)
-                                       }
-                               }
-                       }
+                       set sysconstraint "and (relname !~ '^pg_') and (relname !~ '^pga_')"
                } else {
-                       wpg_select $CurrentDB "select relname from pg_class where (relkind='r') order by relname" rec {
-                               if {![info exists itsaview($rec(relname))]} {
-                                       lappend tlist $rec(relname)
-                               }
+                       set sysconstraint ""
+               }
+               wpg_select $CurrentDB "select relname from pg_class where (relkind='r') $sysconstraint order by relname" rec {
+                       if {![info exists itsaview($rec(relname))]} {
+                               lappend tlist $rec(relname)
                        }
                }
        } gterrmsg]} {
index e5c01f30afd580a5bbdc35fb7cb483d2758055aa..15675b29c3407192a6999ec477109f592d94e4e0 100644 (file)
@@ -295,19 +295,17 @@ catch {
 }
 
 proc {cmd_Views} {} {
-global CurrentDB
+global CurrentDB PgAcVar
 setCursor CLOCK
 .pgaw:Main.lb delete 0 end
 catch {
-       wpg_select $CurrentDB "select c.relname,count(c.relname) from pg_class C, pg_rewrite R where (relname !~ '^pg_') and (r.ev_class = C.oid) and (r.ev_type = '1') group by relname" rec {
-               if {$rec(count)!=0} {
-                       set itsaview($rec(relname)) 1
-               }
+       if {! $PgAcVar(pref,systemtables)} {
+               set sysconstraint "where (viewname !~ '^pg_') and (viewname !~ '^pga_')"
+       } else {
+               set sysconstraint ""
        }
-       wpg_select $CurrentDB "select relname from pg_class where (relname !~ '^pg_') and (relkind='r') and (relhasrules) order by relname" rec {
-               if {[info exists itsaview($rec(relname))]} {
-                       .pgaw:Main.lb insert end $rec(relname)
-               }
+       wpg_select $CurrentDB "select viewname from pg_views $sysconstraint order by viewname" rec {
+               .pgaw:Main.lb insert end $rec(viewname)
        }
 }
 setCursor DEFAULT