Skip to content

Commit b92dae9

Browse files
committed
beutify handle_boolexpr()
1 parent e835537 commit b92dae9

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

src/pg_pathman.c

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -934,58 +934,62 @@ handle_boolexpr(const BoolExpr *expr,
934934
WrapperNode *result) /* ret value #1 */
935935
{
936936
const PartRelationInfo *prel = context->prel;
937+
List *ranges,
938+
*args = NIL;
939+
double paramsel = 1.0;
937940
ListCell *lc;
938941

939-
/* Save expression */
940-
result->orig = (const Node *) expr;
941-
942-
result->args = NIL;
943-
result->paramsel = 1.0;
944-
945-
/* First, set default rangeset */
946-
result->rangeset = (expr->boolop == AND_EXPR) ?
947-
list_make1_irange_full(prel, IR_COMPLETE) :
948-
NIL;
942+
/* Set default rangeset */
943+
ranges = (expr->boolop == AND_EXPR) ?
944+
list_make1_irange_full(prel, IR_COMPLETE) :
945+
NIL;
949946

947+
/* Examine expressions */
950948
foreach (lc, expr->args)
951949
{
952950
WrapperNode *wrap;
953951

954952
wrap = walk_expr_tree((Expr *) lfirst(lc), context);
955-
result->args = lappend(result->args, wrap);
953+
args = lappend(args, wrap);
956954

957955
switch (expr->boolop)
958956
{
959957
case OR_EXPR:
960-
result->rangeset = irange_list_union(result->rangeset,
961-
wrap->rangeset);
958+
ranges = irange_list_union(ranges, wrap->rangeset);
962959
break;
963960

964961
case AND_EXPR:
965-
result->rangeset = irange_list_intersection(result->rangeset,
966-
wrap->rangeset);
967-
result->paramsel *= wrap->paramsel;
962+
ranges = irange_list_intersection(ranges, wrap->rangeset);
963+
paramsel *= wrap->paramsel;
968964
break;
969965

970966
default:
971-
result->rangeset = list_make1_irange_full(prel, IR_LOSSY);
967+
ranges = list_make1_irange_full(prel, IR_LOSSY);
972968
break;
973969
}
974970
}
975971

972+
/* Adjust paramsel for OR */
976973
if (expr->boolop == OR_EXPR)
977974
{
978-
int totallen = irange_list_length(result->rangeset);
975+
int totallen = irange_list_length(ranges);
979976

980977
foreach (lc, result->args)
981978
{
982979
WrapperNode *arg = (WrapperNode *) lfirst(lc);
983980
int len = irange_list_length(arg->rangeset);
984981

985-
result->paramsel *= (1.0 - arg->paramsel * (double)len / (double)totallen);
982+
paramsel *= (1.0 - arg->paramsel * (double)len / (double)totallen);
986983
}
987-
result->paramsel = 1.0 - result->paramsel;
984+
985+
paramsel = 1.0 - paramsel;
988986
}
987+
988+
/* Save results */
989+
result->rangeset = ranges;
990+
result->paramsel = paramsel;
991+
result->orig = (const Node *) expr;
992+
result->args = args;
989993
}
990994

991995
/* Scalar array expression handler */

0 commit comments

Comments
 (0)