From: dpage Date: Wed, 11 Nov 2009 13:21:32 +0000 (+0000) Subject: Add basic support for role/database config option in PG 8.5+, where they're stored... X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=2ccaaa6a8e70342db1b0c5e9595e207cc6623e44;p=users%2Fquan74%2Fpgadmin-import.git Add basic support for role/database config option in PG 8.5+, where they're stored in pg_db_role_setting. Still need to add support for role+database specific settings. git-svn-id: svn://svn.pgadmin.org/trunk/pgadmin3@8077 a7884b65-44f6-0310-8a51-81a127f17b15 --- diff --git a/pgadmin/schema/pgDatabase.cpp b/pgadmin/schema/pgDatabase.cpp index 52bec39cf..2b401b3c6 100644 --- a/pgadmin/schema/pgDatabase.cpp +++ b/pgadmin/schema/pgDatabase.cpp @@ -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,") diff --git a/pgadmin/schema/pgRole.cpp b/pgadmin/schema/pgRole.cpp index 0b364afe7..e8868d97c 100644 --- a/pgadmin/schema/pgRole.cpp +++ b/pgadmin/schema/pgRole.cpp @@ -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)