update find feature for pre 7.3
authorchriskl <chriskl>
Sat, 15 Nov 2003 10:40:25 +0000 (10:40 +0000)
committerchriskl <chriskl>
Sat, 15 Nov 2003 10:40:25 +0000 (10:40 +0000)
BUGS
classes/database/Postgres.php

diff --git a/BUGS b/BUGS
index fceee07e340eaeab4117e16017f0abdeada01ca4..a5887376840e6db0959c9d1ede6f7802b8b881c5 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -5,7 +5,7 @@ re-enable help system
 all DROP and ALTER commands MUST be fully schema-qualified otherwise you can accidentally drop stuff in pg_catalog :(
 need icons for Casts and Conversions and Languages
 submit changes to HTML_TreeMenu maintainer
-update < 7.3 Find feature for all new objects
+test < 7.3 Find feature for all new objects
 fix index search to not get constraints, etc.
 fix constraint search to get domain and table constraints?
 fix trigger search to definitely not show constraint triggers
index cb453ea741be5bee1139d4de39ac73a5a42509e9..3badcf104c91a4643306a85f845fd3a17618d7f9 100755 (executable)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: Postgres.php,v 1.162 2003/11/05 15:06:23 chriskl Exp $
+ * $Id: Postgres.php,v 1.163 2003/11/15 10:40:25 chriskl Exp $
  */
 
 // @@@ THOUGHT: What about inherits? ie. use of ONLY???
@@ -2097,12 +2097,14 @@ class Postgres extends BaseDB {
                $this->clean($term);
 
                // Build SQL, excluding system relations as necessary
+               // Relations
                $sql = "
                        SELECT CASE WHEN relkind='r' THEN 'TABLE'::VARCHAR WHEN relkind='v' THEN 'VIEW'::VARCHAR WHEN relkind='S' THEN 'SEQUENCE'::VARCHAR END AS type, 
                                pc.oid, NULL::VARCHAR AS schemaname, NULL::VARCHAR AS relname, pc.relname AS name FROM pg_class pc
                                WHERE relkind IN ('r', 'v', 'S') AND relname ~* '.*{$term}.*'";
                if (!$conf['show_system']) $sql .= " AND pc.relname NOT LIKE 'pg_%'";                           
 
+               // Columns
                $sql .= "                               
                        UNION ALL
                        SELECT 'COLUMN', NULL, NULL, pc.relname, pa.attname FROM pg_class pc,
@@ -2110,25 +2112,78 @@ class Postgres extends BaseDB {
                                AND pa.attname ~* '.*{$term}.*' AND pa.attnum > 0 AND pc.relkind IN ('r', 'v')";
                if (!$conf['show_system']) $sql .= " AND pc.relname NOT LIKE 'pg_%'";                           
 
+               // Functions
                $sql .= "
                        UNION ALL
                        SELECT 'FUNCTION', pp.oid, NULL, NULL, pp.proname FROM pg_proc pp
                                WHERE proname ~* '.*{$term}.*'";
                if (!$conf['show_system']) $sql .= " AND pp.oid > '{$this->_lastSystemOID}'::oid";
-                               
+                       
+               // Indexes
                $sql .= "
                        UNION ALL
-                       SELECT 'TYPE', pt.oid, NULL, NULL, pt.typname FROM pg_type pt
-                               WHERE typname ~* '.*{$term}.*' AND (pt.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_class c WHERE c.oid = pt.typrelid))";
-               if (!$conf['show_system']) $sql .= " AND pt.oid > '{$this->_lastSystemOID}'::oid";
+                       SELECT 'INDEX', NULL, NULL, pc.relname, pc2.relname FROM pg_class pc,
+                               pg_index pi, pg_class pc2 WHERE pc.oid=pi.indrelid 
+                               AND pi.indexrelid=pc2.oid
+                               AND pc2.relname ~* '.*{$term}.*' AND NOT pi.indisprimary AND NOT pi.indisunique";
+               if (!$conf['show_system']) $sql .= " AND pc2.relname NOT LIKE 'pg_%'";                          
 
-               $sql .= "                               
+               // Check Constraints
+               $sql .= "
+                       UNION ALL
+                       SELECT 'CONSTRAINT', NULL, NULL, pc.relname, pr.rcname FROM pg_class pc,
+                               pg_relcheck pr WHERE pc.oid=pr.rcrelid
+                               AND pr.rcname ~* '.*{$term}.*'";
+               if (!$conf['show_system']) $sql .= " AND pc.relname NOT LIKE 'pg_%'";                           
+               // Unique and Primary Key Constraints
+               $sql .= "
+                       UNION ALL
+                       SELECT 'CONSTRAINT', NULL, NULL, pc.relname, pc2.relname FROM pg_class pc,
+                               pg_index pi, pg_class pc2 WHERE pc.oid=pi.indrelid 
+                               AND pi.indexrelid=pc2.oid
+                               AND pc2.relname ~* '.*{$term}.*' AND (pi.indisprimary OR pi.indisunique)";
+               if (!$conf['show_system']) $sql .= " AND pc2.relname NOT LIKE 'pg_%'";                          
+
+               // Triggers
+               $sql .= "
                        UNION ALL
-                       SELECT 'OPERATOR', po.oid, NULL, NULL, po.oprname FROM pg_operator po
-                               WHERE oprname ~* '.*{$term}.*'";
-               if (!$conf['show_system']) $sql .= " AND po.oid > '{$this->_lastSystemOID}'::oid\n";
+                       SELECT 'TRIGGER', NULL, NULL, pc.relname, pt.tgname FROM pg_class pc,
+                               pg_trigger pt WHERE pc.oid=pt.tgrelid
+                               AND pt.tgname ~* '.*{$term}.*'";
+               if (!$conf['show_system']) $sql .= " AND pc.relname NOT LIKE 'pg_%'";                           
+
+               // Rules
+               $sql .= "
+                       UNION ALL
+                       SELECT 'RULE', NULL, NULL, tablename, rulename FROM pg_rules
+                               WHERE rulename ~* '.*{$term}.*'";
+               if (!$conf['show_system']) $sql .= " AND tablename NOT LIKE 'pg_%'";                            
+
+               // Advanced Objects
+               if ($conf['show_advanced']) {
+                       // Types
+                       $sql .= "
+                               UNION ALL
+                               SELECT 'TYPE', pt.oid, NULL, NULL, pt.typname FROM pg_type pt
+                                       WHERE typname ~* '.*{$term}.*' AND (pt.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_class c WHERE c.oid = pt.typrelid))";
+                       if (!$conf['show_system']) $sql .= " AND pt.oid > '{$this->_lastSystemOID}'::oid";
+
+                       // Operators
+                       $sql .= "                               
+                               UNION ALL
+                               SELECT 'OPERATOR', po.oid, NULL, NULL, po.oprname FROM pg_operator po
+                                       WHERE oprname ~* '.*{$term}.*'";
+                       if (!$conf['show_system']) $sql .= " AND po.oid > '{$this->_lastSystemOID}'::oid";
+
+                       // Languages
+                       $sql .= "                               
+                               UNION ALL
+                               SELECT 'LANGUAGE', pl.oid, NULL, NULL, pl.lanname FROM pg_language pl
+                                       WHERE lanname ~* '.*{$term}.*'";
+                       if (!$conf['show_system']) $sql .= " AND pl.lanispl";
+               }
                                
-               $sql .= "ORDER BY type, schemaname, relname, name";
+               $sql .= " ORDER BY type, schemaname, relname, name";
                        
                return $this->selectSet($sql);
        }