Thread: refactor ownercheck and aclcheck functions

refactor ownercheck and aclcheck functions

From
Peter Eisentraut
Date:
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).
Attachment

Re: refactor ownercheck and aclcheck functions

From
Corey Huinker
Date:
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?

Re: refactor ownercheck and aclcheck functions

From
Peter Eisentraut
Date:
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.




Re: refactor ownercheck and aclcheck functions

From
Antonin Houska
Date:
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



Re: refactor ownercheck and aclcheck functions

From
Peter Eisentraut
Date:
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.

Attachment

Re: refactor ownercheck and aclcheck functions

From
Corey Huinker
Date:
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.
 

Re: refactor ownercheck and aclcheck functions

From
Peter Eisentraut
Date:
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