diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java index 328079ce514736f72d3e7b2da00f53889ae2712e..98af4ce9838a986a8edb93f2a2f4202944abee21 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java @@ -2466,7 +2466,7 @@ public abstract class AbstractJdbc1DatabaseMetaData byte column[] = rs.getBytes("attname"); String owner = rs.getString("usename"); String acl = rs.getString("relacl"); - Hashtable permissions = parseACL(acl); + Hashtable permissions = parseACL(acl, owner); String permNames[] = new String[permissions.size()]; Enumeration e = permissions.keys(); int i=0; @@ -2569,7 +2569,7 @@ public abstract class AbstractJdbc1DatabaseMetaData byte table[] = rs.getBytes("relname"); String owner = rs.getString("usename"); String acl = rs.getString("relacl"); - Hashtable permissions = parseACL(acl); + Hashtable permissions = parseACL(acl, owner); String permNames[] = new String[permissions.size()]; Enumeration e = permissions.keys(); int i=0; @@ -2693,7 +2693,11 @@ public abstract class AbstractJdbc1DatabaseMetaData * a Hashtable mapping the SQL permission name to a Vector of * usernames who have that permission. */ - protected Hashtable parseACL(String aclArray) { + protected Hashtable parseACL(String aclArray, String owner) { + if (aclArray == null || aclArray == "") { + //null acl is a shortcut for owner having full privs + aclArray = "{" + owner + "=arwdRxt}"; + } Vector acls = parseACLArray(aclArray); Hashtable privileges = new Hashtable(); for (int i=0; i<acls.size(); i++) { diff --git a/src/interfaces/jdbc/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java b/src/interfaces/jdbc/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java index 9ee4c0ab50cae1a56613f3443b025ec806364406..faf23a5c85e6477a91c7d116e01e83d9a59820e2 100644 --- a/src/interfaces/jdbc/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java +++ b/src/interfaces/jdbc/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java @@ -9,7 +9,7 @@ import java.sql.*; * * PS: Do you know how difficult it is to type on a train? ;-) * - * $Id: DatabaseMetaDataTest.java,v 1.16 2002/11/11 07:11:12 barry Exp $ + * $Id: DatabaseMetaDataTest.java,v 1.17 2003/03/24 03:48:32 barry Exp $ */ public class DatabaseMetaDataTest extends TestCase @@ -237,13 +237,19 @@ public class DatabaseMetaDataTest extends TestCase public void testTablePrivileges() { - // At the moment just test that no exceptions are thrown KJ try { DatabaseMetaData dbmd = con.getMetaData(); assertNotNull(dbmd); - ResultSet rs = dbmd.getTablePrivileges(null,null,"grantme"); + ResultSet rs = dbmd.getTablePrivileges(null,null,"testmetadata"); + boolean l_foundSelect = false; + while (rs.next()) { + if (rs.getString("GRANTEE").equals(TestUtil.getUser()) + && rs.getString("PRIVILEGE").equals("SELECT")) l_foundSelect = true; + } rs.close(); + //Test that the table owner has select priv + assertTrue("Couldn't find SELECT priv on table testmetadata for " + TestUtil.getUser(),l_foundSelect); } catch (SQLException sqle) { sqle.printStackTrace(); fail(sqle.getMessage());