summaryrefslogtreecommitdiff
path: root/classes/database
diff options
context:
space:
mode:
authorRobert Treat2019-09-22 04:42:48 +0000
committerRobert Treat2019-09-22 04:42:48 +0000
commitfd9c78875b2683dea27989943345f91ce2f31450 (patch)
treeee808d9c5677bc6d819daaffa4c29e9c76788e52 /classes/database
parent1e219d838660a3d4f34ab3a5c719ca7b4819347a (diff)
Fix for SF BUG #470 Can't list/see/edit sequences owned by group
While I have implemented this fix against Postgres 12, as far as I can tell, this bug existed since 7.x, so I'm adding it to all versions back to 7.4 (when we did the class re-org). This could probably use more testing on older versions though. Thanks to Carlos Martinez for the bug report and reproducible test case!
Diffstat (limited to 'classes/database')
-rw-r--r--classes/database/Postgres.php42
1 files changed, 31 insertions, 11 deletions
diff --git a/classes/database/Postgres.php b/classes/database/Postgres.php
index ca649ec7..12103b77 100644
--- a/classes/database/Postgres.php
+++ b/classes/database/Postgres.php
@@ -2664,20 +2664,40 @@ class Postgres extends ADODB_base {
function getSequences($all = false) {
if ($all) {
// Exclude pg_catalog and information_schema tables
- $sql = "SELECT n.nspname, c.relname AS seqname, u.usename AS seqowner
- FROM pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n
- WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid
- AND c.relkind = 'S'
- AND n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
- ORDER BY nspname, seqname";
+ $sql = "
+ SELECT
+ n.nspname,
+ c.relname AS seqname,
+ pg_catalog.pg_get_userbyid(c.relowner) as seqowner
+ FROM
+ pg_catalog.pg_class c
+ JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
+ WHERE
+ c.relkind IN ('S')
+ AND n.nspname NOT IN ('pg_catalog','information_schema')
+ AND n.nspname !~ '^pg_toast'
+ AND pg_catalog.pg_table_is_visible(c.oid)
+ ORDER BY
+ nspname, seqname;";
} else {
$c_schema = $this->_schema;
$this->clean($c_schema);
- $sql = "SELECT c.relname AS seqname, u.usename AS seqowner, pg_catalog.obj_description(c.oid, 'pg_class') AS seqcomment,
- (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=c.reltablespace) AS tablespace
- FROM pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n
- WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid
- AND c.relkind = 'S' AND n.nspname='{$c_schema}' ORDER BY seqname";
+ $sql = "
+ SELECT
+ n.nspname,
+ c.relname AS seqname,
+ pg_catalog.obj_description(c.oid, 'pg_class') AS seqcomment,
+ (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=c.reltablespace) AS tablespace,
+ pg_catalog.pg_get_userbyid(c.relowner) as seqowner
+ FROM
+ pg_catalog.pg_class c
+ JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
+ WHERE
+ c.relkind IN ('S')
+ AND n.nspname = '{$c_schema}'
+ AND pg_catalog.pg_table_is_visible(c.oid)
+ ORDER BY
+ nspname, seqname;";
}
return $this->selectSet( $sql );