aboutsummaryrefslogtreecommitdiff
path: root/contrib/tsearch2/query_gist.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tsearch2/query_gist.c')
-rw-r--r--contrib/tsearch2/query_gist.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/contrib/tsearch2/query_gist.c b/contrib/tsearch2/query_gist.c
index d9a55d088c8..ffa765560d9 100644
--- a/contrib/tsearch2/query_gist.c
+++ b/contrib/tsearch2/query_gist.c
@@ -184,11 +184,28 @@ gtsq_consistent(PG_FUNCTION_ARGS)
QUERYTYPE *query = (QUERYTYPE *) DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(1)));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
TPQTGist sq = makesign(query);
+ bool retval;
- if (GIST_LEAF(entry))
- PG_RETURN_BOOL(((*key) & sq) == ((strategy == 1) ? sq : *key));
- else
- PG_RETURN_BOOL((*key) & sq);
+ switch (strategy)
+ {
+ case RTContainsStrategyNumber:
+ case RTOldContainsStrategyNumber:
+ if (GIST_LEAF(entry))
+ retval = (*key & sq) == sq;
+ else
+ retval = (*key & sq) != 0;
+ break;
+ case RTContainedByStrategyNumber:
+ case RTOldContainedByStrategyNumber:
+ if (GIST_LEAF(entry))
+ retval = (*key & sq) == *key;
+ else
+ retval = (*key & sq) != 0;
+ break;
+ default:
+ retval = FALSE;
+ }
+ PG_RETURN_BOOL(retval);
}
Datum