Re: [HACKERS] object_classes array is broken, again

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: Robert Haas <robertmhaas(at)gmail(dot)com>, Jim Nasby <Jim(dot)Nasby(at)BlueTreble(dot)com>, Jaimin Pan <jaimin(dot)pan(at)gmail(dot)com>, Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>, pgsql-bugs(at)postgresql(dot)org
Subject: Re: [HACKERS] object_classes array is broken, again
Date: 2015-07-20 10:14:31
Message-ID: 20150720101431.GJ2301@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

Any opinions on this idea? I don't like it all that much, but it's
plenty effective.

Alvaro Herrera wrote:

> The problem is that there aren't enough callers of add_object_address:
> there are many indexes of that array that aren't ever accessed and so
> it's not obvious when the array is broken. If we were to put
> OCLASS_CLASS at the end instead of at the beginning, that would fix the
> problem by making it immediately obvious when things get broken this
> way, because the value used in the most common case would shift around
> every time we add another value. (Of course, we'd have to instruct
> people to not add new members after the pg_class entry.)

> diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
> index c1212e9..0107c53 100644
> --- a/src/backend/catalog/dependency.c
> +++ b/src/backend/catalog/dependency.c
> @@ -127,7 +127,6 @@ typedef struct
> * See also getObjectClass().
> */
> static const Oid object_classes[MAX_OCLASS] = {
> - RelationRelationId, /* OCLASS_CLASS */
> ProcedureRelationId, /* OCLASS_PROC */
> TypeRelationId, /* OCLASS_TYPE */
> CastRelationId, /* OCLASS_CAST */
> @@ -158,7 +157,9 @@ static const Oid object_classes[MAX_OCLASS] = {
> DefaultAclRelationId, /* OCLASS_DEFACL */
> ExtensionRelationId, /* OCLASS_EXTENSION */
> EventTriggerRelationId, /* OCLASS_EVENT_TRIGGER */
> - PolicyRelationId /* OCLASS_POLICY */
> + PolicyRelationId, /* OCLASS_POLICY */
> + TransformRelationId, /* OCLASS_POLICY */
> + RelationRelationId /* OCLASS_CLASS */
> };
>
>
> diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h
> index 5da18c2..6f4802d 100644
> --- a/src/include/catalog/dependency.h
> +++ b/src/include/catalog/dependency.h
> @@ -112,11 +112,10 @@ typedef struct ObjectAddresses ObjectAddresses;
>
> /*
> * This enum covers all system catalogs whose OIDs can appear in
> - * pg_depend.classId or pg_shdepend.classId.
> + * pg_depend.classId or pg_shdepend.classId. See also object_classes[].
> */
> typedef enum ObjectClass
> {
> - OCLASS_CLASS, /* pg_class */
> OCLASS_PROC, /* pg_proc */
> OCLASS_TYPE, /* pg_type */
> OCLASS_CAST, /* pg_cast */
> @@ -149,6 +148,11 @@ typedef enum ObjectClass
> OCLASS_EVENT_TRIGGER, /* pg_event_trigger */
> OCLASS_POLICY, /* pg_policy */
> OCLASS_TRANSFORM, /* pg_transform */
> + /*
> + * Keep this previous-to-last, see
> + * https://www.postgresql.org/message-id/
> + */
> + OCLASS_CLASS, /* pg_class */
> MAX_OCLASS /* MUST BE LAST */
> } ObjectClass;
>

--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Jeevan Chalke 2015-07-20 10:15:21 Re: [HACKERS] Grouping Sets: Fix unrecognized node type bug
Previous Message Sandeep Thakkar 2015-07-20 05:52:14 Re: BUG #13500: Windows binary zip doesn't include libintl.h

Browse pgsql-hackers by date

  From Date Subject
Next Message Jeevan Chalke 2015-07-20 10:15:21 Re: [HACKERS] Grouping Sets: Fix unrecognized node type bug
Previous Message Pavel Stehule 2015-07-20 09:55:06 Re: Implementation of global temporary tables?