refactor ownercheck and aclcheck functions
These patches take the dozens of mostly-duplicate pg_foo_ownercheck()
and pg_foo_aclcheck() functions and replace (most of) them by common
functions that are driven by the ObjectProperty table. All the required
information is already in that table.
This is similar to the consolidation of the drop-by-OID functions that
we did a while ago (b1d32d3e3230f00b5baba08f75b4f665c7d6dac6).
On Fri, Oct 14, 2022 at 3:39 AM Peter Eisentraut <
peter.eisentraut@enterprisedb.com> wrote:
These patches take the dozens of mostly-duplicate pg_foo_ownercheck()
and pg_foo_aclcheck() functions and replace (most of) them by common
functions that are driven by the ObjectProperty table. All the required
information is already in that table.This is similar to the consolidation of the drop-by-OID functions that
we did a while ago (b1d32d3e3230f00b5baba08f75b4f665c7d6dac6).
Nice reduction in footprint!
I'd be inclined to remove the highly used ones as well. That way the
codebase would have more examples of object_ownercheck() for readers to
see. Seeing the existence of pg_FOO_ownercheck implies that a
pg_BAR_ownercheck might exist, and if BAR is missing they might be inclined
to re-add it.
If we do keep them, would it make sense to go the extra step and turn the
remaining six "regular" into static inline functions or even #define-s?
On 20.10.22 01:24, Corey Huinker wrote:
I'd be inclined to remove the highly used ones as well. That way the
codebase would have more examples of object_ownercheck() for readers to
see. Seeing the existence of pg_FOO_ownercheck implies that a
pg_BAR_ownercheck might exist, and if BAR is missing they might be
inclined to re-add it.
We do have several ownercheck and aclcheck functions that can't be
refactored into this framework right now, so we do have to keep some
special-purpose functions around anyway. I'm afraid converting all the
callers would blow up this patch quite a bit, but it could be done as a
follow-up patch.
If we do keep them, would it make sense to go the extra step and turn
the remaining six "regular" into static inline functions or even #define-s?
That could make sense.
Peter Eisentraut <peter.eisentraut@enterprisedb.com> wrote:
These patches take the dozens of mostly-duplicate pg_foo_ownercheck() and
pg_foo_aclcheck() functions and replace (most of) them by common functions
that are driven by the ObjectProperty table. All the required information is
already in that table.This is similar to the consolidation of the drop-by-OID functions that we did
a while ago (b1d32d3e3230f00b5baba08f75b4f665c7d6dac6).
I've reviewed this patch, as it's related to my patch [1] (In particular, it
reduces the size of my patch a little bit). I like the idea to reduce the
amount of (almost) copy & pasted code. I haven't found any problem in your
patch that would be worth mentioning, except that the 0001 part does not apply
to the current master branch.
--
Antonin Houska
Web: https://www.cybertec-postgresql.com
On 21.10.22 21:17, Peter Eisentraut wrote:
On 20.10.22 01:24, Corey Huinker wrote:
I'd be inclined to remove the highly used ones as well. That way the
codebase would have more examples of object_ownercheck() for readers
to see. Seeing the existence of pg_FOO_ownercheck implies that a
pg_BAR_ownercheck might exist, and if BAR is missing they might be
inclined to re-add it.We do have several ownercheck and aclcheck functions that can't be
refactored into this framework right now, so we do have to keep some
special-purpose functions around anyway. I'm afraid converting all the
callers would blow up this patch quite a bit, but it could be done as a
follow-up patch.If we do keep them, would it make sense to go the extra step and turn
the remaining six "regular" into static inline functions or even
#define-s?That could make sense.
After considering this again, I decided to brute-force this and get rid
of all the trivial wrapper functions and also several of the special
cases. That way, there is less confusion at the call sites about why
this or that style is used in a particular case. Also, it now makes
sure you can't accidentally use the generic functions when a particular
one should be used.
After considering this again, I decided to brute-force this and get rid
of all the trivial wrapper functions and also several of the special
cases. That way, there is less confusion at the call sites about why
this or that style is used in a particular case. Also, it now makes
sure you can't accidentally use the generic functions when a particular
one should be used.
+1
However, the aclcheck patch isn't applying for me now. That patch modifies
37 files, so it's hard to say just which commit conflicts.
On 09.11.22 19:12, Corey Huinker wrote:
After considering this again, I decided to brute-force this and get rid
of all the trivial wrapper functions and also several of the special
cases. That way, there is less confusion at the call sites about why
this or that style is used in a particular case. Also, it now makes
sure you can't accidentally use the generic functions when a particular
one should be used.+1
committed