OSDN Git Service

Index tuple data arrays using Anum_xxx symbolic constants instead of "i++".
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 16 Jun 2011 21:03:58 +0000 (17:03 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 16 Jun 2011 21:04:40 +0000 (17:04 -0400)
We had already converted most places to this style, but this patch gets the
last few that were still doing it the old way.  The main advantage is that
this exposes a greppable name for each target column, rather than having
to rely on comments (which a couple of places failed to provide anyhow).

Richard Hopkins, additional work by me to clean up update_attstats() too

src/backend/catalog/pg_operator.c
src/backend/catalog/pg_type.c
src/backend/commands/analyze.c
src/backend/commands/comment.c
src/backend/rewrite/rewriteDefine.c

index ccd0fe1..4d2d7b7 100644 (file)
@@ -234,22 +234,21 @@ OperatorShellMake(const char *operatorName,
         * initialize values[] with the operator name and input data types. Note
         * that oprcode is set to InvalidOid, indicating it's a shell.
         */
-       i = 0;
        namestrcpy(&oname, operatorName);
-       values[i++] = NameGetDatum(&oname); /* oprname */
-       values[i++] = ObjectIdGetDatum(operatorNamespace);      /* oprnamespace */
-       values[i++] = ObjectIdGetDatum(GetUserId());            /* oprowner */
-       values[i++] = CharGetDatum(leftTypeId ? (rightTypeId ? 'b' : 'r') : 'l');       /* oprkind */
-       values[i++] = BoolGetDatum(false);      /* oprcanmerge */
-       values[i++] = BoolGetDatum(false);      /* oprcanhash */
-       values[i++] = ObjectIdGetDatum(leftTypeId); /* oprleft */
-       values[i++] = ObjectIdGetDatum(rightTypeId);            /* oprright */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* oprresult */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* oprcom */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* oprnegate */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* oprcode */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* oprrest */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* oprjoin */
+       values[Anum_pg_operator_oprname - 1] = NameGetDatum(&oname);
+       values[Anum_pg_operator_oprnamespace - 1] = ObjectIdGetDatum(operatorNamespace);
+       values[Anum_pg_operator_oprowner - 1] = ObjectIdGetDatum(GetUserId());
+       values[Anum_pg_operator_oprkind - 1] = CharGetDatum(leftTypeId ? (rightTypeId ? 'b' : 'r') : 'l');
+       values[Anum_pg_operator_oprcanmerge - 1] = BoolGetDatum(false);
+       values[Anum_pg_operator_oprcanhash - 1] = BoolGetDatum(false);
+       values[Anum_pg_operator_oprleft - 1] = ObjectIdGetDatum(leftTypeId);
+       values[Anum_pg_operator_oprright - 1] = ObjectIdGetDatum(rightTypeId);
+       values[Anum_pg_operator_oprresult - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_operator_oprcom - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_operator_oprnegate - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_operator_oprcode - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_operator_oprrest - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_operator_oprjoin - 1] = ObjectIdGetDatum(InvalidOid);
 
        /*
         * open pg_operator
@@ -492,22 +491,21 @@ OperatorCreate(const char *operatorName,
                nulls[i] = false;
        }
 
-       i = 0;
        namestrcpy(&oname, operatorName);
-       values[i++] = NameGetDatum(&oname); /* oprname */
-       values[i++] = ObjectIdGetDatum(operatorNamespace);      /* oprnamespace */
-       values[i++] = ObjectIdGetDatum(GetUserId());            /* oprowner */
-       values[i++] = CharGetDatum(leftTypeId ? (rightTypeId ? 'b' : 'r') : 'l');       /* oprkind */
-       values[i++] = BoolGetDatum(canMerge);           /* oprcanmerge */
-       values[i++] = BoolGetDatum(canHash);            /* oprcanhash */
-       values[i++] = ObjectIdGetDatum(leftTypeId); /* oprleft */
-       values[i++] = ObjectIdGetDatum(rightTypeId);            /* oprright */
-       values[i++] = ObjectIdGetDatum(operResultType);         /* oprresult */
-       values[i++] = ObjectIdGetDatum(commutatorId);           /* oprcom */
-       values[i++] = ObjectIdGetDatum(negatorId);      /* oprnegate */
-       values[i++] = ObjectIdGetDatum(procedureId);            /* oprcode */
-       values[i++] = ObjectIdGetDatum(restrictionId);          /* oprrest */
-       values[i++] = ObjectIdGetDatum(joinId);         /* oprjoin */
+       values[Anum_pg_operator_oprname - 1] = NameGetDatum(&oname);
+       values[Anum_pg_operator_oprnamespace - 1] = ObjectIdGetDatum(operatorNamespace);
+       values[Anum_pg_operator_oprowner - 1] = ObjectIdGetDatum(GetUserId());
+       values[Anum_pg_operator_oprkind - 1] = CharGetDatum(leftTypeId ? (rightTypeId ? 'b' : 'r') : 'l');
+       values[Anum_pg_operator_oprcanmerge - 1] = BoolGetDatum(canMerge);
+       values[Anum_pg_operator_oprcanhash - 1] = BoolGetDatum(canHash);
+       values[Anum_pg_operator_oprleft - 1] = ObjectIdGetDatum(leftTypeId);
+       values[Anum_pg_operator_oprright - 1] = ObjectIdGetDatum(rightTypeId);
+       values[Anum_pg_operator_oprresult - 1] = ObjectIdGetDatum(operResultType);
+       values[Anum_pg_operator_oprcom - 1] = ObjectIdGetDatum(commutatorId);
+       values[Anum_pg_operator_oprnegate - 1] = ObjectIdGetDatum(negatorId);
+       values[Anum_pg_operator_oprcode - 1] = ObjectIdGetDatum(procedureId);
+       values[Anum_pg_operator_oprrest - 1] = ObjectIdGetDatum(restrictionId);
+       values[Anum_pg_operator_oprjoin - 1] = ObjectIdGetDatum(joinId);
 
        pg_operator_desc = heap_open(OperatorRelationId, RowExclusiveLock);
 
index de5c63d..f608229 100644 (file)
@@ -87,37 +87,36 @@ TypeShellMake(const char *typeName, Oid typeNamespace, Oid ownerId)
         * give it typtype = TYPTYPE_PSEUDO as extra insurance that it won't be
         * mistaken for a usable type.
         */
-       i = 0;
        namestrcpy(&name, typeName);
-       values[i++] = NameGetDatum(&name);      /* typname */
-       values[i++] = ObjectIdGetDatum(typeNamespace);          /* typnamespace */
-       values[i++] = ObjectIdGetDatum(ownerId);        /* typowner */
-       values[i++] = Int16GetDatum(sizeof(int4));      /* typlen */
-       values[i++] = BoolGetDatum(true);       /* typbyval */
-       values[i++] = CharGetDatum(TYPTYPE_PSEUDO); /* typtype */
-       values[i++] = CharGetDatum(TYPCATEGORY_PSEUDOTYPE); /* typcategory */
-       values[i++] = BoolGetDatum(false);      /* typispreferred */
-       values[i++] = BoolGetDatum(false);      /* typisdefined */
-       values[i++] = CharGetDatum(DEFAULT_TYPDELIM);           /* typdelim */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* typrelid */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* typelem */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* typarray */
-       values[i++] = ObjectIdGetDatum(F_SHELL_IN); /* typinput */
-       values[i++] = ObjectIdGetDatum(F_SHELL_OUT);            /* typoutput */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* typreceive */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* typsend */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* typmodin */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* typmodout */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* typanalyze */
-       values[i++] = CharGetDatum('i');        /* typalign */
-       values[i++] = CharGetDatum('p');        /* typstorage */
-       values[i++] = BoolGetDatum(false);      /* typnotnull */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* typbasetype */
-       values[i++] = Int32GetDatum(-1);        /* typtypmod */
-       values[i++] = Int32GetDatum(0);         /* typndims */
-       values[i++] = ObjectIdGetDatum(InvalidOid); /* typcollation */
-       nulls[i++] = true;                      /* typdefaultbin */
-       nulls[i++] = true;                      /* typdefault */
+       values[Anum_pg_type_typname - 1] = NameGetDatum(&name);
+       values[Anum_pg_type_typnamespace - 1] = ObjectIdGetDatum(typeNamespace);
+       values[Anum_pg_type_typowner - 1] = ObjectIdGetDatum(ownerId);
+       values[Anum_pg_type_typlen - 1] = Int16GetDatum(sizeof(int4));
+       values[Anum_pg_type_typbyval - 1] = BoolGetDatum(true);
+       values[Anum_pg_type_typtype - 1] = CharGetDatum(TYPTYPE_PSEUDO);
+       values[Anum_pg_type_typcategory - 1] = CharGetDatum(TYPCATEGORY_PSEUDOTYPE);
+       values[Anum_pg_type_typispreferred - 1] = BoolGetDatum(false);
+       values[Anum_pg_type_typisdefined - 1] = BoolGetDatum(false);
+       values[Anum_pg_type_typdelim - 1] = CharGetDatum(DEFAULT_TYPDELIM);
+       values[Anum_pg_type_typrelid - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_type_typelem - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_type_typarray - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_type_typinput - 1] = ObjectIdGetDatum(F_SHELL_IN);
+       values[Anum_pg_type_typoutput - 1] = ObjectIdGetDatum(F_SHELL_OUT);
+       values[Anum_pg_type_typreceive - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_type_typsend - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_type_typmodin - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_type_typmodout - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_type_typanalyze - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_type_typalign - 1] = CharGetDatum('i');
+       values[Anum_pg_type_typstorage - 1] = CharGetDatum('p');
+       values[Anum_pg_type_typnotnull - 1] = BoolGetDatum(false);
+       values[Anum_pg_type_typbasetype - 1] = ObjectIdGetDatum(InvalidOid);
+       values[Anum_pg_type_typtypmod - 1] = Int32GetDatum(-1);
+       values[Anum_pg_type_typndims - 1] = Int32GetDatum(0);
+       values[Anum_pg_type_typcollation - 1] = ObjectIdGetDatum(InvalidOid);
+       nulls[Anum_pg_type_typdefaultbin - 1] = true;
+       nulls[Anum_pg_type_typdefault - 1] = true;
 
        /*
         * create a new type tuple
@@ -322,56 +321,53 @@ TypeCreate(Oid newTypeOid,
        }
 
        /*
-        * initialize the *values information
+        * insert data values
         */
-       i = 0;
        namestrcpy(&name, typeName);
-       values[i++] = NameGetDatum(&name);      /* typname */
-       values[i++] = ObjectIdGetDatum(typeNamespace);          /* typnamespace */
-       values[i++] = ObjectIdGetDatum(ownerId);        /* typowner */
-       values[i++] = Int16GetDatum(internalSize);      /* typlen */
-       values[i++] = BoolGetDatum(passedByValue);      /* typbyval */
-       values[i++] = CharGetDatum(typeType);           /* typtype */
-       values[i++] = CharGetDatum(typeCategory);       /* typcategory */
-       values[i++] = BoolGetDatum(typePreferred);      /* typispreferred */
-       values[i++] = BoolGetDatum(true);       /* typisdefined */
-       values[i++] = CharGetDatum(typDelim);           /* typdelim */
-       values[i++] = ObjectIdGetDatum(relationOid);            /* typrelid */
-       values[i++] = ObjectIdGetDatum(elementType);            /* typelem */
-       values[i++] = ObjectIdGetDatum(arrayType);      /* typarray */
-       values[i++] = ObjectIdGetDatum(inputProcedure);         /* typinput */
-       values[i++] = ObjectIdGetDatum(outputProcedure);        /* typoutput */
-       values[i++] = ObjectIdGetDatum(receiveProcedure);       /* typreceive */
-       values[i++] = ObjectIdGetDatum(sendProcedure);          /* typsend */
-       values[i++] = ObjectIdGetDatum(typmodinProcedure);      /* typmodin */
-       values[i++] = ObjectIdGetDatum(typmodoutProcedure); /* typmodout */
-       values[i++] = ObjectIdGetDatum(analyzeProcedure);       /* typanalyze */
-       values[i++] = CharGetDatum(alignment);          /* typalign */
-       values[i++] = CharGetDatum(storage);            /* typstorage */
-       values[i++] = BoolGetDatum(typeNotNull);        /* typnotnull */
-       values[i++] = ObjectIdGetDatum(baseType);       /* typbasetype */
-       values[i++] = Int32GetDatum(typeMod);           /* typtypmod */
-       values[i++] = Int32GetDatum(typNDims);          /* typndims */
-       values[i++] = ObjectIdGetDatum(typeCollation);          /* typcollation */
+       values[Anum_pg_type_typname - 1] = NameGetDatum(&name);
+       values[Anum_pg_type_typnamespace - 1] = ObjectIdGetDatum(typeNamespace);
+       values[Anum_pg_type_typowner - 1] = ObjectIdGetDatum(ownerId);
+       values[Anum_pg_type_typlen - 1] = Int16GetDatum(internalSize);
+       values[Anum_pg_type_typbyval - 1] = BoolGetDatum(passedByValue);
+       values[Anum_pg_type_typtype - 1] = CharGetDatum(typeType);
+       values[Anum_pg_type_typcategory - 1] = CharGetDatum(typeCategory);
+       values[Anum_pg_type_typispreferred - 1] = BoolGetDatum(typePreferred);
+       values[Anum_pg_type_typisdefined - 1] = BoolGetDatum(true);
+       values[Anum_pg_type_typdelim - 1] = CharGetDatum(typDelim);
+       values[Anum_pg_type_typrelid - 1] = ObjectIdGetDatum(relationOid);
+       values[Anum_pg_type_typelem - 1] = ObjectIdGetDatum(elementType);
+       values[Anum_pg_type_typarray - 1] = ObjectIdGetDatum(arrayType);
+       values[Anum_pg_type_typinput - 1] = ObjectIdGetDatum(inputProcedure);
+       values[Anum_pg_type_typoutput - 1] = ObjectIdGetDatum(outputProcedure);
+       values[Anum_pg_type_typreceive - 1] = ObjectIdGetDatum(receiveProcedure);
+       values[Anum_pg_type_typsend - 1] = ObjectIdGetDatum(sendProcedure);
+       values[Anum_pg_type_typmodin - 1] = ObjectIdGetDatum(typmodinProcedure);
+       values[Anum_pg_type_typmodout - 1] = ObjectIdGetDatum(typmodoutProcedure);
+       values[Anum_pg_type_typanalyze - 1] = ObjectIdGetDatum(analyzeProcedure);
+       values[Anum_pg_type_typalign - 1] = CharGetDatum(alignment);
+       values[Anum_pg_type_typstorage - 1] = CharGetDatum(storage);
+       values[Anum_pg_type_typnotnull - 1] = BoolGetDatum(typeNotNull);
+       values[Anum_pg_type_typbasetype - 1] = ObjectIdGetDatum(baseType);
+       values[Anum_pg_type_typtypmod - 1] = Int32GetDatum(typeMod);
+       values[Anum_pg_type_typndims - 1] = Int32GetDatum(typNDims);
+       values[Anum_pg_type_typcollation - 1] = ObjectIdGetDatum(typeCollation);
 
        /*
         * initialize the default binary value for this type.  Check for nulls of
         * course.
         */
        if (defaultTypeBin)
-               values[i] = CStringGetTextDatum(defaultTypeBin);
+               values[Anum_pg_type_typdefaultbin - 1] = CStringGetTextDatum(defaultTypeBin);
        else
-               nulls[i] = true;
-       i++;                                            /* typdefaultbin */
+               nulls[Anum_pg_type_typdefaultbin - 1] = true;
 
        /*
         * initialize the default value for this type.
         */
        if (defaultTypeValue)
-               values[i] = CStringGetTextDatum(defaultTypeValue);
+               values[Anum_pg_type_typdefault - 1] = CStringGetTextDatum(defaultTypeValue);
        else
-               nulls[i] = true;
-       i++;                                            /* typdefault */
+               nulls[Anum_pg_type_typdefault - 1] = true;
 
        /*
         * open pg_type and prepare to insert or update a row.
index 57188bc..7b73355 100644 (file)
@@ -1603,21 +1603,23 @@ update_attstats(Oid relid, bool inh, int natts, VacAttrStats **vacattrstats)
                        replaces[i] = true;
                }
 
-               i = 0;
-               values[i++] = ObjectIdGetDatum(relid);  /* starelid */
-               values[i++] = Int16GetDatum(stats->attr->attnum);               /* staattnum */
-               values[i++] = BoolGetDatum(inh);                /* stainherit */
-               values[i++] = Float4GetDatum(stats->stanullfrac);               /* stanullfrac */
-               values[i++] = Int32GetDatum(stats->stawidth);   /* stawidth */
-               values[i++] = Float4GetDatum(stats->stadistinct);               /* stadistinct */
+               values[Anum_pg_statistic_starelid - 1] = ObjectIdGetDatum(relid);
+               values[Anum_pg_statistic_staattnum - 1] = Int16GetDatum(stats->attr->attnum);
+               values[Anum_pg_statistic_stainherit - 1] = BoolGetDatum(inh);
+               values[Anum_pg_statistic_stanullfrac - 1] = Float4GetDatum(stats->stanullfrac);
+               values[Anum_pg_statistic_stawidth - 1] = Int32GetDatum(stats->stawidth);
+               values[Anum_pg_statistic_stadistinct - 1] = Float4GetDatum(stats->stadistinct);
+               i = Anum_pg_statistic_stakind1 - 1;
                for (k = 0; k < STATISTIC_NUM_SLOTS; k++)
                {
                        values[i++] = Int16GetDatum(stats->stakind[k]);         /* stakindN */
                }
+               i = Anum_pg_statistic_staop1 - 1;
                for (k = 0; k < STATISTIC_NUM_SLOTS; k++)
                {
                        values[i++] = ObjectIdGetDatum(stats->staop[k]);        /* staopN */
                }
+               i = Anum_pg_statistic_stanumbers1 - 1;
                for (k = 0; k < STATISTIC_NUM_SLOTS; k++)
                {
                        int                     nnum = stats->numnumbers[k];
@@ -1641,6 +1643,7 @@ update_attstats(Oid relid, bool inh, int natts, VacAttrStats **vacattrstats)
                                values[i++] = (Datum) 0;
                        }
                }
+               i = Anum_pg_statistic_stavalues1 - 1;
                for (k = 0; k < STATISTIC_NUM_SLOTS; k++)
                {
                        if (stats->numvalues[k] > 0)
index d09bef0..587a689 100644 (file)
@@ -157,11 +157,10 @@ CreateComments(Oid oid, Oid classoid, int32 subid, char *comment)
                        nulls[i] = false;
                        replaces[i] = true;
                }
-               i = 0;
-               values[i++] = ObjectIdGetDatum(oid);
-               values[i++] = ObjectIdGetDatum(classoid);
-               values[i++] = Int32GetDatum(subid);
-               values[i++] = CStringGetTextDatum(comment);
+               values[Anum_pg_description_objoid - 1] = ObjectIdGetDatum(oid);
+               values[Anum_pg_description_classoid - 1] = ObjectIdGetDatum(classoid);
+               values[Anum_pg_description_objsubid - 1] = Int32GetDatum(subid);
+               values[Anum_pg_description_description - 1] = CStringGetTextDatum(comment);
        }
 
        /* Use the index to search for a matching old tuple */
@@ -257,10 +256,9 @@ CreateSharedComments(Oid oid, Oid classoid, char *comment)
                        nulls[i] = false;
                        replaces[i] = true;
                }
-               i = 0;
-               values[i++] = ObjectIdGetDatum(oid);
-               values[i++] = ObjectIdGetDatum(classoid);
-               values[i++] = CStringGetTextDatum(comment);
+               values[Anum_pg_shdescription_objoid - 1] = ObjectIdGetDatum(oid);
+               values[Anum_pg_shdescription_classoid - 1] = ObjectIdGetDatum(classoid);
+               values[Anum_pg_shdescription_description - 1] = CStringGetTextDatum(comment);
        }
 
        /* Use the index to search for a matching old tuple */
index 52c55de..bb7d468 100644 (file)
@@ -60,7 +60,6 @@ InsertRule(char *rulname,
 {
        char       *evqual = nodeToString(event_qual);
        char       *actiontree = nodeToString((Node *) action);
-       int                     i;
        Datum           values[Natts_pg_rewrite];
        bool            nulls[Natts_pg_rewrite];
        bool            replaces[Natts_pg_rewrite];
@@ -78,16 +77,15 @@ InsertRule(char *rulname,
         */
        MemSet(nulls, false, sizeof(nulls));
 
-       i = 0;
        namestrcpy(&rname, rulname);
-       values[i++] = NameGetDatum(&rname); /* rulename */
-       values[i++] = ObjectIdGetDatum(eventrel_oid);           /* ev_class */
-       values[i++] = Int16GetDatum(evslot_index);      /* ev_attr */
-       values[i++] = CharGetDatum(evtype + '0');       /* ev_type */
-       values[i++] = CharGetDatum(RULE_FIRES_ON_ORIGIN);       /* ev_enabled */
-       values[i++] = BoolGetDatum(evinstead);          /* is_instead */
-       values[i++] = CStringGetTextDatum(evqual);      /* ev_qual */
-       values[i++] = CStringGetTextDatum(actiontree);          /* ev_action */
+       values[Anum_pg_rewrite_rulename - 1] = NameGetDatum(&rname);
+       values[Anum_pg_rewrite_ev_class - 1] = ObjectIdGetDatum(eventrel_oid);
+       values[Anum_pg_rewrite_ev_attr - 1] = Int16GetDatum(evslot_index);
+       values[Anum_pg_rewrite_ev_type - 1] = CharGetDatum(evtype + '0');
+       values[Anum_pg_rewrite_ev_enabled - 1] = CharGetDatum(RULE_FIRES_ON_ORIGIN);
+       values[Anum_pg_rewrite_is_instead - 1] = BoolGetDatum(evinstead);
+       values[Anum_pg_rewrite_ev_qual - 1] = CStringGetTextDatum(evqual);
+       values[Anum_pg_rewrite_ev_action - 1] = CStringGetTextDatum(actiontree);
 
        /*
         * Ready to store new pg_rewrite tuple