changes.txt

text/plain

Filename: changes.txt
Type: text/plain
Part: 0
Message: Re: POC, WIP: OR-clause support for indexes
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index 25a4235dbd..de27d2646c 100644
--- a/src/backend/parser/parse_expr.c
+++ b/src/backend/parser/parse_expr.c
@@ -178,6 +178,10 @@ transformBoolExprOr(ParseState *pstate, BoolExpr *expr_orig)
 	HTAB 		   *or_group_htab = NULL;
 	int 			len_ors = list_length(expr_orig->args);
 
+	/* If this is not an 'OR' expression, skip the transformation */
+	if (!or_transform_limit || expr_orig->boolop != OR_EXPR || len_ors < 2)
+		return transformBoolExpr(pstate, (BoolExpr *) expr_orig);
+
 	MemSet(&info, 0, sizeof(info));
 	info.keysize = sizeof(char *);
 	info.entrysize = sizeof(OrClauseGroupEntry);
@@ -188,10 +192,6 @@ transformBoolExprOr(ParseState *pstate, BoolExpr *expr_orig)
 									  &info,
 									  HASH_ELEM | HASH_FUNCTION | HASH_COMPARE);
 
-	/* If this is not an 'OR' expression, skip the transformation */
-	if (expr_orig->boolop != OR_EXPR || !or_transform_limit || len_ors == 1 || !or_group_htab)
-		return transformBoolExpr(pstate, (BoolExpr *) expr_orig);
-
 	foreach(lc, expr_orig->args)
 	{
 		Node			   *arg = lfirst(lc);