delta.patch
application/x-patch
Filename: delta.patch
Type: application/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Subject: delta
| File | + | − |
|---|---|---|
| src/backend/partitioning/partbounds.c | 93 | 116 |
From c7f165b575fd984ca3053ce7162bdd8e4bf56be8 Mon Sep 17 00:00:00 2001
From: Amul Sul <amul.sul@enterprisedb.com>
Date: Thu, 24 Oct 2019 05:38:11 -0400
Subject: [PATCH] delta
Changes :
1. Call process_outer_partition & process_inner_partition
unconditionally.
2. Used IS_OUTER_JOIN() instead of listing individual join type.
---
src/backend/partitioning/partbounds.c | 209 ++++++++++++--------------
1 file changed, 93 insertions(+), 116 deletions(-)
diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c
index 4c3a31c82c0..b29e44e2f28 100644
--- a/src/backend/partitioning/partbounds.c
+++ b/src/backend/partitioning/partbounds.c
@@ -3601,24 +3601,18 @@ partition_range_bounds_merge(int partnatts, FmgrInfo *partsupfuncs,
}
else
{
- if (inner_has_default ||
- jointype == JOIN_LEFT ||
- jointype == JOIN_ANTI ||
- jointype == JOIN_FULL)
- {
- if (!process_outer_partition(&outer_map,
- &inner_map,
- outer_has_default,
- inner_has_default,
- outer_part,
- inner_default,
- jointype,
- outer_bi->strategy,
- &next_index,
- &default_index,
- &merged_index))
- return NULL;
- }
+ if (!process_outer_partition(&outer_map,
+ &inner_map,
+ outer_has_default,
+ inner_has_default,
+ outer_part,
+ inner_default,
+ jointype,
+ outer_bi->strategy,
+ &next_index,
+ &default_index,
+ &merged_index))
+ return NULL;
merged_lb = &outer_lb;
merged_ub = &outer_ub;
@@ -3640,21 +3634,18 @@ partition_range_bounds_merge(int partnatts, FmgrInfo *partsupfuncs,
}
else
{
- if (outer_has_default || jointype == JOIN_FULL)
- {
- if (!process_inner_partition(&outer_map,
- &inner_map,
- outer_has_default,
- inner_has_default,
- inner_part,
- outer_default,
- jointype,
- outer_bi->strategy,
- &next_index,
- &default_index,
- &merged_index))
- return NULL;
- }
+ if (!process_inner_partition(&outer_map,
+ &inner_map,
+ outer_has_default,
+ inner_has_default,
+ inner_part,
+ outer_default,
+ jointype,
+ outer_bi->strategy,
+ &next_index,
+ &default_index,
+ &merged_index))
+ return NULL;
merged_lb = &inner_lb;
merged_ub = &inner_ub;
@@ -3857,27 +3848,18 @@ partition_list_bounds_merge(FmgrInfo *partsupfunc, Oid *partcollation,
/* A datum missing from the inner side. */
merged_datum = odatums;
- if (inner_has_default ||
- jointype == JOIN_LEFT ||
- jointype == JOIN_ANTI ||
- jointype == JOIN_FULL)
- {
- int o_index = outer_bi->indexes[cnto];
-
- Assert(o_index >= 0);
- if (!process_outer_partition(&outer_map,
- &inner_map,
- outer_has_default,
- inner_has_default,
- o_index,
- inner_default,
- jointype,
- outer_bi->strategy,
- &next_index,
- &default_index,
- &merged_index))
- return NULL;
- }
+ if (!process_outer_partition(&outer_map,
+ &inner_map,
+ outer_has_default,
+ inner_has_default,
+ outer_bi->indexes[cnto],
+ inner_default,
+ jointype,
+ outer_bi->strategy,
+ &next_index,
+ &default_index,
+ &merged_index))
+ return NULL;
/* Move to the next datum on the outer side. */
cnto++;
@@ -3890,24 +3872,18 @@ partition_list_bounds_merge(FmgrInfo *partsupfunc, Oid *partcollation,
/* A datum missing from the outer side. */
merged_datum = idatums;
- if (outer_has_default || jointype == JOIN_FULL)
- {
- int i_index = inner_bi->indexes[cnti];
-
- Assert(i_index >= 0);
- if (!process_inner_partition(&outer_map,
- &inner_map,
- outer_has_default,
- inner_has_default,
- i_index,
- outer_default,
- jointype,
- outer_bi->strategy,
- &next_index,
- &default_index,
- &merged_index))
- return NULL;
- }
+ if (!process_inner_partition(&outer_map,
+ &inner_map,
+ outer_has_default,
+ inner_has_default,
+ inner_bi->indexes[cnti],
+ outer_default,
+ jointype,
+ outer_bi->strategy,
+ &next_index,
+ &default_index,
+ &merged_index))
+ return NULL;
/* Move to the next datum on the inner side. */
cnti++;
@@ -4171,6 +4147,8 @@ process_outer_partition(PartitionMap *outer_map,
int *default_index,
int *merged_index)
{
+ Assert(*merged_index == -1);
+
/*
* If the inner side has the default partition, the outer partition has to
* be joined with the default partition; try merging them. Otherwise, we
@@ -4189,6 +4167,7 @@ process_outer_partition(PartitionMap *outer_map,
if (outer_has_default)
return false;
+ Assert(outer_index >= 0);
*merged_index = map_and_merge_partitions(outer_map, inner_map,
outer_index, inner_default,
next_index);
@@ -4210,17 +4189,17 @@ process_outer_partition(PartitionMap *outer_map,
*merged_index = -1;
}
}
- else
+ else if (IS_OUTER_JOIN(jointype))
{
- Assert(jointype == JOIN_LEFT || jointype == JOIN_ANTI ||
- jointype == JOIN_FULL);
-
+ Assert (jointype == JOIN_LEFT || jointype == JOIN_ANTI ||
+ jointype == JOIN_FULL);
/*
* In range partitioning, if the given outer partition is already
* merged (eg, because we found an overlapping range earlier), we know
* where it fits in the join result; nothing to do in that case. Else
* create a new merged partition.
*/
+ Assert(outer_index >= 0);
if (outer_map->merged_indexes[outer_index] >= 0)
{
if (strategy == PARTITION_STRATEGY_LIST)
@@ -4259,6 +4238,8 @@ process_inner_partition(PartitionMap *outer_map,
int *default_index,
int *merged_index)
{
+ Assert(*merged_index == -1);
+
/*
* If the outer side has the default partition, the inner partition has to
* be joined with the default partition; try merging them. Otherwise, we
@@ -4277,6 +4258,7 @@ process_inner_partition(PartitionMap *outer_map,
if (inner_has_default)
return false;
+ Assert(inner_index >= 0);
*merged_index = map_and_merge_partitions(outer_map, inner_map,
outer_default, inner_index,
next_index);
@@ -4288,9 +4270,11 @@ process_inner_partition(PartitionMap *outer_map,
* default partition of the join; record the index in *default_index
* if not done yet.
*/
- if (jointype == JOIN_LEFT || jointype == JOIN_ANTI ||
- jointype == JOIN_FULL)
+ if (IS_OUTER_JOIN(jointype))
{
+ Assert(jointype == JOIN_LEFT || jointype == JOIN_ANTI ||
+ jointype == JOIN_FULL);
+
if (*default_index == -1)
*default_index = *merged_index;
else
@@ -4299,16 +4283,15 @@ process_inner_partition(PartitionMap *outer_map,
*merged_index = -1;
}
}
- else
+ else if (jointype == JOIN_FULL)
{
- Assert(jointype == JOIN_FULL);
-
/*
* In range partitioning, if the given outer partition is already
* merged (eg, because we found an overlapping range earlier), we know
* where it fits in the join result; nothing to do in that case. Else
* create a new merged partition.
*/
+ Assert(inner_index >= 0);
if (inner_map->merged_indexes[inner_index] >= 0)
{
if (strategy == PARTITION_STRATEGY_LIST)
@@ -4528,11 +4511,12 @@ merge_default_partitions(PartitionMap *outer_map, PartitionMap *inner_map,
if (outer_has_default && !inner_has_default)
{
- if (jointype == JOIN_LEFT || jointype == JOIN_FULL ||
- jointype == JOIN_ANTI)
+ if (IS_OUTER_JOIN(jointype))
{
int merged_index;
+ Assert (jointype == JOIN_LEFT || jointype == JOIN_FULL ||
+ jointype == JOIN_ANTI);
Assert(outer_default >= 0 && outer_default < outer_map->nparts);
merged_index = outer_map->merged_indexes[outer_default];
if (merged_index == -1)
@@ -4621,24 +4605,19 @@ merge_null_partitions(PartitionBoundInfo outer_bi, PartitionBoundInfo inner_bi,
* contain the NULL values and thus become the NULL partition of the
* the join.
*/
- if (inner_has_default ||
- jointype == JOIN_LEFT ||
- jointype == JOIN_ANTI ||
- jointype == JOIN_FULL)
- {
- if (!process_outer_partition(outer_map,
- inner_map,
- outer_has_default,
- inner_has_default,
- outer_bi->null_index,
- inner_bi->default_index,
- jointype,
- outer_bi->strategy,
- next_index,
- default_index,
- &merged_index))
- return false;
- }
+ if (!process_outer_partition(outer_map,
+ inner_map,
+ outer_has_default,
+ inner_has_default,
+ outer_bi->null_index,
+ inner_bi->default_index,
+ jointype,
+ outer_bi->strategy,
+ next_index,
+ default_index,
+ &merged_index))
+ return false;
+
*null_index = merged_index;
}
else if (!outer_has_null && inner_has_null)
@@ -4651,21 +4630,19 @@ merge_null_partitions(PartitionBoundInfo outer_bi, PartitionBoundInfo inner_bi,
* contain the NULL values and thus become the NULL partition of the
* the join.
*/
- if (outer_has_default || jointype == JOIN_FULL)
- {
- if (!process_inner_partition(outer_map,
- inner_map,
- outer_has_default,
- inner_has_default,
- inner_bi->null_index,
- outer_bi->default_index,
- jointype,
- outer_bi->strategy,
- next_index,
- default_index,
- &merged_index))
- return false;
- }
+ if (!process_inner_partition(outer_map,
+ inner_map,
+ outer_has_default,
+ inner_has_default,
+ inner_bi->null_index,
+ outer_bi->default_index,
+ jointype,
+ outer_bi->strategy,
+ next_index,
+ default_index,
+ &merged_index))
+ return false;
+
*null_index = merged_index;
}
else
--
2.18.0