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);