you cant dbsize a database you can't connect to. this is a simple fix which just...
authorRobert Treat <xzilla@users.sourceforge.net>
Sat, 2 Aug 2008 16:38:17 +0000 (12:38 -0400)
committerRobert Treat <xzilla@users.sourceforge.net>
Sat, 2 Aug 2008 16:38:17 +0000 (12:38 -0400)
HISTORY
classes/database/Postgres82.php

diff --git a/HISTORY b/HISTORY
index 1c97a468eb966d93c099e9e9c1c34d102c4416a4..54521f315c74b1969744ca56391f9e3c4f7956d5 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -10,7 +10,7 @@ Bugs
 * Fix missing language string for shared credential logout
 * Add missing text search functions/operators (Loomis K, xzilla)
 * Update FAQ info for postgres win32 releases
-
+* Fix database list error for users without connect privileges on all databases (Thomi Dammann, xzilla)
 
 Version 4.2
 -----------
index 5615a663ac7ac4c4eb76acae9788e77f2a43dd3a..903dba204581ffa1febbd5bfd2003aaf2ea02b25 100644 (file)
@@ -91,11 +91,13 @@ class Postgres82 extends Postgres81 {
                        $where = ' AND pdb.datallowconn';
 
                $sql = "SELECT pdb.datname AS datname, pr.rolname AS datowner, pg_encoding_to_char(encoding) AS datencoding,
-                               (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid) AS datcomment,
-                               (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace,
-                                                          pg_catalog.pg_database_size(pdb.oid) as dbsize
-                        FROM pg_catalog.pg_database pdb LEFT JOIN pg_catalog.pg_roles pr ON (pdb.datdba = pr.oid)
-                                               WHERE true
+                       (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid) AS datcomment,
+                       (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace,
+                                          CASE WHEN pg_catalog.has_database_privilege(current_user, pdb.oid, 'CONNECT') 
+                                                               THEN pg_catalog.pg_database_size(pdb.oid) 
+                                                       ELSE NULL END as dbsize 
+                FROM pg_catalog.pg_database pdb LEFT JOIN pg_catalog.pg_roles pr ON (pdb.datdba = pr.oid)
+                               WHERE true 
                        {$where}
                        {$clause}
                        {$orderby}";