aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/utils/adt/rangetypes_gist.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/backend/utils/adt/rangetypes_gist.c b/src/backend/utils/adt/rangetypes_gist.c
index 95f93905a5e..be59a5c4a38 100644
--- a/src/backend/utils/adt/rangetypes_gist.c
+++ b/src/backend/utils/adt/rangetypes_gist.c
@@ -444,13 +444,13 @@ range_gist_consistent_int(FmgrInfo *flinfo, StrategyNumber strategy,
switch (strategy)
{
case RANGESTRAT_BEFORE:
- if (RangeIsEmpty(key))
+ if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeType(query)))
return false;
proc = range_overright;
negate = true;
break;
case RANGESTRAT_OVERLEFT:
- if (RangeIsEmpty(key))
+ if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeType(query)))
return false;
proc = range_after;
negate = true;
@@ -459,13 +459,13 @@ range_gist_consistent_int(FmgrInfo *flinfo, StrategyNumber strategy,
proc = range_overlaps;
break;
case RANGESTRAT_OVERRIGHT:
- if (RangeIsEmpty(key))
+ if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeType(query)))
return false;
proc = range_before;
negate = true;
break;
case RANGESTRAT_AFTER:
- if (RangeIsEmpty(key))
+ if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeType(query)))
return false;
proc = range_overleft;
negate = true;
@@ -483,6 +483,11 @@ range_gist_consistent_int(FmgrInfo *flinfo, StrategyNumber strategy,
proc = range_contains;
break;
case RANGESTRAT_CONTAINED_BY:
+ /*
+ * Ideally we'd apply range_overlaps here, but at present it
+ * might fail to find empty ranges in the index, which should
+ * be reported as being contained by anything. This needs work.
+ */
return true;
break;
case RANGESTRAT_CONTAINS_ELEM: