diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2005-10-07 19:59:34 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2005-10-07 19:59:34 +0000 |
commit | 426d0158cafe5d138ce15c640134b2db8f37f6dc (patch) | |
tree | c2f80364f893b56fb1227ce1dfdc6336037abcd6 | |
parent | b888ab82dab90409fd262655b05407403544bbfb (diff) | |
download | postgresql-426d0158cafe5d138ce15c640134b2db8f37f6dc.tar.gz postgresql-426d0158cafe5d138ce15c640134b2db8f37f6dc.zip |
Marginal performance improvement in aclmask(): don't bother with
testing ownership if the caller isn't interested in any GOPTION bits
(which is the common case). It did not matter in 8.0 where the ownership
test was just a trivial equality test, but it matters now.
-rw-r--r-- | src/backend/utils/adt/acl.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index d51162e7eed..bc3a32a0d76 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.123 2005/07/28 22:27:02 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.124 2005/10/07 19:59:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1013,10 +1013,11 @@ aclmask(const Acl *acl, Oid roleid, Oid ownerId, result = 0; /* Owner always implicitly has all grant options */ - if (has_privs_of_role(roleid, ownerId)) + if ((mask & ACLITEM_ALL_GOPTION_BITS) && + has_privs_of_role(roleid, ownerId)) { result = mask & ACLITEM_ALL_GOPTION_BITS; - if (result == mask) + if ((how == ACLMASK_ALL) ? (result == mask) : (result != 0)) return result; } @@ -1024,7 +1025,7 @@ aclmask(const Acl *acl, Oid roleid, Oid ownerId, aidat = ACL_DAT(acl); /* - * Check privileges granted directly to user or to public + * Check privileges granted directly to roleid or to public */ for (i = 0; i < num; i++) { @@ -1040,11 +1041,11 @@ aclmask(const Acl *acl, Oid roleid, Oid ownerId, } /* - * Check privileges granted indirectly via roles. + * Check privileges granted indirectly via role memberships. * We do this in a separate pass to minimize expensive indirect * membership tests. In particular, it's worth testing whether * a given ACL entry grants any privileges still of interest before - * we perform the is_member test. + * we perform the has_privs_of_role test. */ remaining = mask & ~result; for (i = 0; i < num; i++) |