Re: object_classes array is broken, again - Mailing list pgsql-hackers

From Alvaro Herrera
Subject Re: object_classes array is broken, again
Date
Msg-id 20150720101431.GJ2301@postgresql.org
Whole thread Raw
In response to object_classes array is broken, again  (Robert Haas <robertmhaas@gmail.com>)
Responses Re: [BUGS] object_classes array is broken, again
List 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



pgsql-hackers by date:

Previous
From: Pavel Stehule
Date:
Subject: Re: Implementation of global temporary tables?
Next
From: Jeevan Chalke
Date:
Subject: Re: Grouping Sets: Fix unrecognized node type bug