Add basic support for role/database config option in PG 8.5+, where they're stored...
authordpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Wed, 11 Nov 2009 13:21:32 +0000 (13:21 +0000)
committerdpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Wed, 11 Nov 2009 13:21:32 +0000 (13:21 +0000)
git-svn-id: svn://svn.pgadmin.org/trunk/pgadmin3@8077 a7884b65-44f6-0310-8a51-81a127f17b15

pgadmin/schema/pgDatabase.cpp
pgadmin/schema/pgRole.cpp

index 52bec39cfcc91f3d05c375aeafd30afe73179719..2b401b3c68030a186472db49b569a3079395ac58 100644 (file)
@@ -560,7 +560,22 @@ pgObject *pgDatabaseFactory::CreateObjects(pgCollection *collection, ctlTree *br
         restr += collection->GetServer()->GetDbRestriction() + wxT(")\n");
     }
     
-    if (collection->GetConnection()->BackendMinimumVersion(7, 5))
+    // In 8.5+, database config options are in pg_db_role_setting
+    if (collection->GetConnection()->BackendMinimumVersion(8, 5))
+        databases = collection->GetServer()->ExecuteSet(
+           wxT("SELECT db.oid, datname, db.dattablespace AS spcoid, spcname, datallowconn, setconfig AS datconfig, datacl, ")
+           wxT("pg_encoding_to_char(encoding) AS serverencoding, pg_get_userbyid(datdba) AS datowner,")
+           wxT("has_database_privilege(db.oid, 'CREATE') as cancreate, \n")
+           wxT("current_setting('default_tablespace') AS default_tablespace, \n")
+           wxT("descr.description\n") +
+           datconnlimit + datcollate + datctype +
+           wxT("  FROM pg_database db\n")
+           wxT("  LEFT OUTER JOIN pg_tablespace ta ON db.dattablespace=ta.OID\n")
+           wxT("  LEFT OUTER JOIN pg_shdescription descr ON db.oid=descr.objoid\n")
+           wxT("  LEFT OUTER JOIN pg_db_role_setting setting ON (db.oid=setting.setdatabase AND setting.setrole=0)\n")
+           + restr +
+           wxT(" ORDER BY datname"));
+    else if (collection->GetConnection()->BackendMinimumVersion(8, 0))
         databases = collection->GetServer()->ExecuteSet(
            wxT("SELECT db.oid, datname, db.dattablespace AS spcoid, spcname, datallowconn, datconfig, datacl, ")
            wxT("pg_encoding_to_char(encoding) AS serverencoding, pg_get_userbyid(datdba) AS datowner,")
index 0b364afe727a336fcf4831e5f77a13123d5ffa51..e8868d97c9746019f8495df0ef7d59d9fe310faf 100644 (file)
@@ -334,7 +334,12 @@ pgObject *pgRole::Refresh(ctlTree *browser, const wxTreeItemId item)
     pgObject *role=0;
     pgCollection *coll=browser->GetParentCollection(item);
     if (coll)
-        role = loginRoleFactory.CreateObjects(coll, 0, wxT("\n WHERE oid=") + GetOidStr());
+    {
+        if (coll->GetServer()->GetConnection()->BackendMinimumVersion(8, 5))
+            role = loginRoleFactory.CreateObjects(coll, 0, wxT("\n WHERE tab.oid=") + GetOidStr());
+        else
+            role = loginRoleFactory.CreateObjects(coll, 0, wxT("\n WHERE oid=") + GetOidStr());
+    }
 
     return role;
 }
@@ -353,11 +358,17 @@ pgObject *pgRoleBaseFactory::CreateObjects(pgCollection *collection, ctlTree *br
     else
         tabname=wxT("pg_roles");
 
-    if (collection->GetServer()->GetConnection()->BackendMinimumVersion(8, 2))
-        roles = collection->GetServer()->ExecuteSet(wxT("    SELECT oid, *, pg_catalog.shobj_description(oid, 'pg_authid') AS description FROM ") 
+    // In 8.5+, role config options are in pg_db_role_setting
+    if (collection->GetServer()->GetConnection()->BackendMinimumVersion(8, 5))
+        roles = collection->GetServer()->ExecuteSet(wxT("SELECT tab.oid, tab.*, pg_catalog.shobj_description(tab.oid, 'pg_authid') AS description, setting.setconfig AS rolconfig FROM ") +
+              tabname + wxT(" tab") +
+              wxT("  LEFT OUTER JOIN pg_db_role_setting setting ON (tab.oid=setting.setrole AND setting.setdatabase=0)\n") + 
+              restriction +  wxT(" ORDER BY rolname"));
+    else if (collection->GetServer()->GetConnection()->BackendMinimumVersion(8, 2))
+        roles = collection->GetServer()->ExecuteSet(wxT("SELECT oid, *, pg_catalog.shobj_description(oid, 'pg_authid') AS description FROM ") 
               + tabname + restriction + wxT(" ORDER BY rolname"));
     else
-        roles = collection->GetServer()->ExecuteSet(wxT("    SELECT oid, *, '' AS description FROM ") 
+        roles = collection->GetServer()->ExecuteSet(wxT("SELECT oid, *, '' AS description FROM ") 
              + tabname + restriction + wxT(" ORDER BY rolname"));
 
     if (roles)