function getPrivileges($object, $type, $table = null)
{
$c_schema = $this->_schema;
$this->clean($c_schema);
$this->clean($object);
switch ($type) {
case 'column':
$this->clean($table);
$sql = "\n\t\t\t\t\tSELECT E'{' || pg_catalog.array_to_string(attacl, E',') || E'}' as acl\n\t\t\t\t\tFROM pg_catalog.pg_attribute a\n\t\t\t\t\t\tLEFT JOIN pg_catalog.pg_class c ON (a.attrelid = c.oid)\n\t\t\t\t\t\tLEFT JOIN pg_catalog.pg_namespace n ON (c.relnamespace=n.oid)\n\t\t\t\t\tWHERE n.nspname='{$c_schema}'\n\t\t\t\t\t\tAND c.relname='{$table}'\n\t\t\t\t\t\tAND a.attname='{$object}'";
break;
case 'table':
case 'view':
case 'sequence':
$sql = "\n\t\t\t\t\tSELECT relacl AS acl FROM pg_catalog.pg_class\n\t\t\t\t\tWHERE relname='{$object}'\n\t\t\t\t\t\tAND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace\n\t\t\t\t\t\t\tWHERE nspname='{$c_schema}')";
break;
case 'database':
$sql = "SELECT datacl AS acl FROM pg_catalog.pg_database WHERE datname='{$object}'";
break;
case 'function':
// Since we fetch functions by oid, they are already constrained to
// the current schema.
$sql = "SELECT proacl AS acl FROM pg_catalog.pg_proc WHERE oid='{$object}'";
break;
case 'language':
$sql = "SELECT lanacl AS acl FROM pg_catalog.pg_language WHERE lanname='{$object}'";
break;
case 'schema':
$sql = "SELECT nspacl AS acl FROM pg_catalog.pg_namespace WHERE nspname='{$object}'";
break;
case 'tablespace':
$sql = "SELECT spcacl AS acl FROM pg_catalog.pg_tablespace WHERE spcname='{$object}'";
break;
default:
return -1;
}
// Fetch the ACL for object
$acl = $this->selectField($sql, 'acl');
if ($acl == -1) {
return -2;
} elseif ($acl == '' || $acl == null) {
return array();
} else {
return $this->_parseACL($acl);
}
}