]> granicus.if.org Git - postgresql/commitdiff
Code beautification for ATExecAttachPartition.
authorRobert Haas <rhaas@postgresql.org>
Thu, 3 Aug 2017 18:16:33 +0000 (14:16 -0400)
committerRobert Haas <rhaas@postgresql.org>
Thu, 3 Aug 2017 18:19:59 +0000 (14:19 -0400)
Amit Langote

Discussion: http://postgr.es/m/CAFjFpReT_kq_uwU_B8aWDxR7jNGE=P0iELycdq5oupi=xSQTOw@mail.gmail.com

src/backend/commands/tablecmds.c

index b58c92d8466750d984008973599023e49c12d4e3..3c42e160b2dbe57f454b798c6bef99f798974fbe 100644 (file)
@@ -13419,10 +13419,10 @@ ComputePartitionAttrs(Relation rel, List *partParams, AttrNumber *partattrs,
 static ObjectAddress
 ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
 {
-       Relation        attachRel,
+       Relation        attachrel,
                                catalog;
-       List       *childrels;
-       TupleConstr *attachRel_constr;
+       List       *attachrel_children;
+       TupleConstr *attachrel_constr;
        List       *partConstraint,
                           *existConstraint;
        SysScanDesc scan;
@@ -13434,22 +13434,22 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
        ObjectAddress address;
        const char *trigger_name;
 
-       attachRel = heap_openrv(cmd->name, AccessExclusiveLock);
+       attachrel = heap_openrv(cmd->name, AccessExclusiveLock);
 
        /*
         * Must be owner of both parent and source table -- parent was checked by
         * ATSimplePermissions call in ATPrepCmd
         */
-       ATSimplePermissions(attachRel, ATT_TABLE | ATT_FOREIGN_TABLE);
+       ATSimplePermissions(attachrel, ATT_TABLE | ATT_FOREIGN_TABLE);
 
        /* A partition can only have one parent */
-       if (attachRel->rd_rel->relispartition)
+       if (attachrel->rd_rel->relispartition)
                ereport(ERROR,
                                (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                                 errmsg("\"%s\" is already a partition",
-                                               RelationGetRelationName(attachRel))));
+                                               RelationGetRelationName(attachrel))));
 
-       if (OidIsValid(attachRel->rd_rel->reloftype))
+       if (OidIsValid(attachrel->rd_rel->reloftype))
                ereport(ERROR,
                                (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                                 errmsg("cannot attach a typed table as partition")));
@@ -13462,7 +13462,7 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
        ScanKeyInit(&skey,
                                Anum_pg_inherits_inhrelid,
                                BTEqualStrategyNumber, F_OIDEQ,
-                               ObjectIdGetDatum(RelationGetRelid(attachRel)));
+                               ObjectIdGetDatum(RelationGetRelid(attachrel)));
        scan = systable_beginscan(catalog, InheritsRelidSeqnoIndexId, true,
                                                          NULL, 1, &skey);
        if (HeapTupleIsValid(systable_getnext(scan)))
@@ -13475,11 +13475,11 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
        ScanKeyInit(&skey,
                                Anum_pg_inherits_inhparent,
                                BTEqualStrategyNumber, F_OIDEQ,
-                               ObjectIdGetDatum(RelationGetRelid(attachRel)));
+                               ObjectIdGetDatum(RelationGetRelid(attachrel)));
        scan = systable_beginscan(catalog, InheritsParentIndexId, true, NULL,
                                                          1, &skey);
        if (HeapTupleIsValid(systable_getnext(scan)) &&
-               attachRel->rd_rel->relkind == RELKIND_RELATION)
+               attachrel->rd_rel->relkind == RELKIND_RELATION)
                ereport(ERROR,
                                (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                                 errmsg("cannot attach inheritance parent as partition")));
@@ -13487,22 +13487,22 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
        heap_close(catalog, AccessShareLock);
 
        /*
-        * Prevent circularity by seeing if rel is a partition of attachRel. (In
+        * Prevent circularity by seeing if rel is a partition of attachrel. (In
         * particular, this disallows making a rel a partition of itself.)
         */
-       childrels = find_all_inheritors(RelationGetRelid(attachRel),
-                                                                       AccessShareLock, NULL);
-       if (list_member_oid(childrels, RelationGetRelid(rel)))
+       attachrel_children = find_all_inheritors(RelationGetRelid(attachrel),
+                                                                                        AccessShareLock, NULL);
+       if (list_member_oid(attachrel_children, RelationGetRelid(rel)))
                ereport(ERROR,
                                (errcode(ERRCODE_DUPLICATE_TABLE),
                                 errmsg("circular inheritance not allowed"),
                                 errdetail("\"%s\" is already a child of \"%s\".",
                                                   RelationGetRelationName(rel),
-                                                  RelationGetRelationName(attachRel))));
+                                                  RelationGetRelationName(attachrel))));
 
        /* Temp parent cannot have a partition that is itself not a temp */
        if (rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP &&
-               attachRel->rd_rel->relpersistence != RELPERSISTENCE_TEMP)
+               attachrel->rd_rel->relpersistence != RELPERSISTENCE_TEMP)
                ereport(ERROR,
                                (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                                 errmsg("cannot attach a permanent relation as partition of temporary relation \"%s\"",
@@ -13516,30 +13516,30 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
                                 errmsg("cannot attach as partition of temporary relation of another session")));
 
        /* Ditto for the partition */
-       if (attachRel->rd_rel->relpersistence == RELPERSISTENCE_TEMP &&
-               !attachRel->rd_islocaltemp)
+       if (attachrel->rd_rel->relpersistence == RELPERSISTENCE_TEMP &&
+               !attachrel->rd_islocaltemp)
                ereport(ERROR,
                                (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                                 errmsg("cannot attach temporary relation of another session as partition")));
 
        /* If parent has OIDs then child must have OIDs */
-       if (rel->rd_rel->relhasoids && !attachRel->rd_rel->relhasoids)
+       if (rel->rd_rel->relhasoids && !attachrel->rd_rel->relhasoids)
                ereport(ERROR,
                                (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                                 errmsg("cannot attach table \"%s\" without OIDs as partition of"
-                                               " table \"%s\" with OIDs", RelationGetRelationName(attachRel),
+                                               " table \"%s\" with OIDs", RelationGetRelationName(attachrel),
                                                RelationGetRelationName(rel))));
 
-       /* OTOH, if parent doesn't have them, do not allow in attachRel either */
-       if (attachRel->rd_rel->relhasoids && !rel->rd_rel->relhasoids)
+       /* OTOH, if parent doesn't have them, do not allow in attachrel either */
+       if (attachrel->rd_rel->relhasoids && !rel->rd_rel->relhasoids)
                ereport(ERROR,
                                (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                                 errmsg("cannot attach table \"%s\" with OIDs as partition of table"
-                                               " \"%s\" without OIDs", RelationGetRelationName(attachRel),
+                                               " \"%s\" without OIDs", RelationGetRelationName(attachrel),
                                                RelationGetRelationName(rel))));
 
-       /* Check if there are any columns in attachRel that aren't in the parent */
-       tupleDesc = RelationGetDescr(attachRel);
+       /* Check if there are any columns in attachrel that aren't in the parent */
+       tupleDesc = RelationGetDescr(attachrel);
        natts = tupleDesc->natts;
        for (attno = 1; attno <= natts; attno++)
        {
@@ -13557,7 +13557,7 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
                        ereport(ERROR,
                                        (errcode(ERRCODE_DATATYPE_MISMATCH),
                                         errmsg("table \"%s\" contains column \"%s\" not found in parent \"%s\"",
-                                                       RelationGetRelationName(attachRel), attributeName,
+                                                       RelationGetRelationName(attachrel), attributeName,
                                                        RelationGetRelationName(rel)),
                                         errdetail("New partition should contain only the columns present in parent.")));
        }
@@ -13567,34 +13567,34 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
         * currently don't allow it to become a partition.  See also prohibitions
         * in ATExecAddInherit() and CreateTrigger().
         */
-       trigger_name = FindTriggerIncompatibleWithInheritance(attachRel->trigdesc);
+       trigger_name = FindTriggerIncompatibleWithInheritance(attachrel->trigdesc);
        if (trigger_name != NULL)
                ereport(ERROR,
                                (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                                 errmsg("trigger \"%s\" prevents table \"%s\" from becoming a partition",
-                                               trigger_name, RelationGetRelationName(attachRel)),
+                                               trigger_name, RelationGetRelationName(attachrel)),
                                 errdetail("ROW triggers with transition tables are not supported on partitions")));
 
        /* OK to create inheritance.  Rest of the checks performed there */
-       CreateInheritance(attachRel, rel);
+       CreateInheritance(attachrel, rel);
 
        /*
         * Check that the new partition's bound is valid and does not overlap any
         * of existing partitions of the parent - note that it does not return on
         * error.
         */
-       check_new_partition_bound(RelationGetRelationName(attachRel), rel,
+       check_new_partition_bound(RelationGetRelationName(attachrel), rel,
                                                          cmd->bound);
 
        /* Update the pg_class entry. */
-       StorePartitionBound(attachRel, rel, cmd->bound);
+       StorePartitionBound(attachrel, rel, cmd->bound);
 
        /*
         * Generate partition constraint from the partition bound specification.
         * If the parent itself is a partition, make sure to include its
         * constraint as well.
         */
-       partConstraint = list_concat(get_qual_from_partbound(attachRel, rel,
+       partConstraint = list_concat(get_qual_from_partbound(attachrel, rel,
                                                                                                                 cmd->bound),
                                                                 RelationGetPartitionQual(rel));
        partConstraint = (List *) eval_const_expressions(NULL,
@@ -13612,20 +13612,20 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
         * There is a case in which we cannot rely on just the result of the
         * proof.
         */
-       attachRel_constr = tupleDesc->constr;
+       attachrel_constr = tupleDesc->constr;
        existConstraint = NIL;
-       if (attachRel_constr != NULL)
+       if (attachrel_constr != NULL)
        {
-               int                     num_check = attachRel_constr->num_check;
+               int                     num_check = attachrel_constr->num_check;
                int                     i;
 
-               if (attachRel_constr->has_not_null)
+               if (attachrel_constr->has_not_null)
                {
-                       int                     natts = attachRel->rd_att->natts;
+                       int                     natts = attachrel->rd_att->natts;
 
                        for (i = 1; i <= natts; i++)
                        {
-                               Form_pg_attribute att = attachRel->rd_att->attrs[i - 1];
+                               Form_pg_attribute att = attachrel->rd_att->attrs[i - 1];
 
                                if (att->attnotnull && !att->attisdropped)
                                {
@@ -13659,10 +13659,10 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
                         * If this constraint hasn't been fully validated yet, we must
                         * ignore it here.
                         */
-                       if (!attachRel_constr->check[i].ccvalid)
+                       if (!attachrel_constr->check[i].ccvalid)
                                continue;
 
-                       cexpr = stringToNode(attachRel_constr->check[i].ccbin);
+                       cexpr = stringToNode(attachrel_constr->check[i].ccbin);
 
                        /*
                         * Run each expression through const-simplification and
@@ -13684,28 +13684,25 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
                        skip_validate = true;
        }
 
-       /* It's safe to skip the validation scan after all */
        if (skip_validate)
+       {
+               /* No need to scan the table after all. */
                ereport(INFO,
                                (errmsg("partition constraint for table \"%s\" is implied by existing constraints",
-                                               RelationGetRelationName(attachRel))));
-
-       /*
-        * Set up to have the table be scanned to validate the partition
-        * constraint (see partConstraint above).  If it's a partitioned table, we
-        * instead schedule its leaf partitions to be scanned.
-        */
-       if (!skip_validate)
+                                               RelationGetRelationName(attachrel))));
+       }
+       else
        {
+               /* Constraints proved insufficient, so we need to scan the table. */
                List       *all_parts;
                ListCell   *lc;
 
                /* Take an exclusive lock on the partitions to be checked */
-               if (attachRel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
-                       all_parts = find_all_inheritors(RelationGetRelid(attachRel),
+               if (attachrel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
+                       all_parts = find_all_inheritors(RelationGetRelid(attachrel),
                                                                                        AccessExclusiveLock, NULL);
                else
-                       all_parts = list_make1_oid(RelationGetRelid(attachRel));
+                       all_parts = list_make1_oid(RelationGetRelid(attachrel));
 
                foreach(lc, all_parts)
                {
@@ -13716,23 +13713,23 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
                        bool            found_whole_row;
 
                        /* Lock already taken */
-                       if (part_relid != RelationGetRelid(attachRel))
+                       if (part_relid != RelationGetRelid(attachrel))
                                part_rel = heap_open(part_relid, NoLock);
                        else
-                               part_rel = attachRel;
+                               part_rel = attachrel;
 
                        /*
-                        * Skip if it's a partitioned table.  Only RELKIND_RELATION
-                        * relations (ie, leaf partitions) need to be scanned.
+                        * Skip if the partition is itself a partitioned table.  We can
+                        * only ever scan RELKIND_RELATION relations.
                         */
-                       if (part_rel != attachRel &&
-                               part_rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
+                       if (part_rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
                        {
-                               heap_close(part_rel, NoLock);
+                               if (part_rel != attachrel)
+                                       heap_close(part_rel, NoLock);
                                continue;
                        }
 
-                       /* Grab a work queue entry */
+                       /* Grab a work queue entry. */
                        tab = ATGetQueueEntry(wqueue, part_rel);
 
                        /* Adjust constraint to match this partition */
@@ -13746,15 +13743,15 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
                                elog(ERROR, "unexpected whole-row reference found in partition key");
 
                        /* keep our lock until commit */
-                       if (part_rel != attachRel)
+                       if (part_rel != attachrel)
                                heap_close(part_rel, NoLock);
                }
        }
 
-       ObjectAddressSet(address, RelationRelationId, RelationGetRelid(attachRel));
+       ObjectAddressSet(address, RelationRelationId, RelationGetRelid(attachrel));
 
        /* keep our lock until commit */
-       heap_close(attachRel, NoLock);
+       heap_close(attachrel, NoLock);
 
        return address;
 }