]> granicus.if.org Git - postgresql/commitdiff
Improve comment in get_partition_dispatch_recurse.
authorRobert Haas <rhaas@postgresql.org>
Wed, 16 May 2018 14:46:55 +0000 (10:46 -0400)
committerRobert Haas <rhaas@postgresql.org>
Wed, 16 May 2018 14:47:57 +0000 (10:47 -0400)
David Rowley, reviewed by Amit Langote, and revised a bit by me.

Discussion: http://postgr.es/m/CAKJS1f9yyimYyFzbHM4EwE+tkj4jvrHqSH0H4S4Kbas=UFpc9Q@mail.gmail.com

src/backend/executor/execPartition.c

index 954a96c6966c54956b1aa084418f0e947a8f2da2..75329b362415aaac096029dc48f6a342fb45ef94 100644 (file)
@@ -970,20 +970,14 @@ get_partition_dispatch_recurse(Relation rel, Relation parent,
         * partitions are processed as well and a corresponding PartitionDispatch
         * object gets added to *pds.
         *
-        * About the values in pd->indexes: for a leaf partition, it contains the
-        * leaf partition's position in the global list *leaf_part_oids minus 1,
-        * whereas for a partitioned table partition, it contains the partition's
-        * position in the global list *pds multiplied by -1.  The latter is
-        * multiplied by -1 to distinguish partitioned tables from leaf partitions
-        * when going through the values in pd->indexes.  So, for example, when
-        * using it during tuple-routing, encountering a value >= 0 means we found
-        * a leaf partition.  It is immediately returned as the index in the array
-        * of ResultRelInfos of all the leaf partitions, using which we insert the
-        * tuple into that leaf partition.  A negative value means we found a
-        * partitioned table.  The value multiplied by -1 is returned as the index
-        * in the array of PartitionDispatch objects of all partitioned tables in
-        * the tree.  This value is used to continue the search in the next level
-        * of the partition tree.
+        * The 'indexes' array is used when searching for a partition matching a
+        * given tuple.  The actual value we store here depends on whether the
+        * array element belongs to a leaf partition or a subpartitioned table.
+        * For leaf partitions we store the 0-based index into *leaf_part_oids,
+        * and for sub-partitioned tables we store a negative version of the
+        * 1-based index into the *pds list.  When searching, if we see a negative
+        * value, the search must continue in the corresponding sub-partition;
+        * otherwise, we've identified the correct partition.
         */
        pd->indexes = (int *) palloc(partdesc->nparts * sizeof(int));
        for (i = 0; i < partdesc->nparts; i++)