Query optimisation, per Kieran McCusker [Ashesh Vashi]
authordpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Thu, 4 Jun 2009 11:56:00 +0000 (11:56 +0000)
committerdpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Thu, 4 Jun 2009 11:56:00 +0000 (11:56 +0000)
git-svn-id: svn://svn.pgadmin.org/trunk/pgadmin3@7895 a7884b65-44f6-0310-8a51-81a127f17b15

pgadmin/schema/pgColumn.cpp

index f39a61e6ff20bf71ae0999b73dcf538712cc0c38..619d45b09afe3ac72fd61791703c0748ea03cdd9 100644 (file)
@@ -371,7 +371,12 @@ pgObject *pgColumnFactory::CreateObjects(pgCollection *coll, ctlTree *browser, c
     wxString sql=
         wxT("SELECT att.*, def.*, pg_catalog.pg_get_expr(def.adbin, def.adrelid) AS defval, CASE WHEN att.attndims > 0 THEN 1 ELSE 0 END AS isarray, format_type(ty.oid,NULL) AS typname, tn.nspname as typnspname, et.typname as elemtypname,\n")
         wxT("  cl.relname, na.nspname, att.attstattarget, description, cs.relname AS sername, ns.nspname AS serschema,\n")
-        wxT("  (SELECT count(1) FROM pg_type t2 WHERE t2.typname=ty.typname) > 1 AS isdup, indkey, inha.attrelid::regclass AS inhrelname");
+        wxT("  (SELECT count(1) FROM pg_type t2 WHERE t2.typname=ty.typname) > 1 AS isdup, indkey,\n")
+        wxT("  CASE \n")
+        wxT("       WHEN EXISTS( SELECT inhparent FROM pg_inherits WHERE inhrelid=att.attrelid )\n")
+        wxT("            THEN att.attrelid::regclass\n")
+        wxT("       ELSE NULL\n")
+        wxT("  END AS inhrelname");
 
     if (database->BackendMinimumVersion(7, 4))
         sql += 
@@ -391,7 +396,6 @@ pgObject *pgColumnFactory::CreateObjects(pgCollection *coll, ctlTree *browser, c
         wxT("  LEFT OUTER JOIN (pg_depend JOIN pg_class cs ON objid=cs.oid AND cs.relkind='S') ON refobjid=att.attrelid AND refobjsubid=att.attnum\n")
         wxT("  LEFT OUTER JOIN pg_namespace ns ON ns.oid=cs.relnamespace\n")
         wxT("  LEFT OUTER JOIN pg_index pi ON pi.indrelid=att.attrelid AND indisprimary\n")
-        wxT("  LEFT JOIN pg_attribute inha ON att.attname=inha.attname AND inha.attrelid IN (SELECT inhparent FROM pg_inherits WHERE inhrelid=att.attrelid)\n")
         wxT(" WHERE att.attrelid = ") + collection->GetOidStr()
         + restriction + systemRestriction + wxT("\n")
         wxT("   AND att.attisdropped IS FALSE\n")