|
25 | 25 |
|
26 | 26 |
|
27 | 27 | static bool clause_contains_params_walker(Node *node, void *context);
|
28 |
| -static void change_varnos_in_restrinct_info(RestrictInfo *rinfo, change_varno_context *context); |
| 28 | +static void change_varnos_in_restrinct_info(RestrictInfo *rinfo, |
| 29 | + change_varno_context *context); |
29 | 30 | static bool change_varno_walker(Node *node, change_varno_context *context);
|
30 | 31 | static List *get_tableoids_list(List *tlist);
|
31 | 32 | static void lock_rows_visitor(Plan *plan, void *context);
|
@@ -440,6 +441,43 @@ change_varno_walker(Node *node, change_varno_context *context)
|
440 | 441 | return expression_tree_walker(node, change_varno_walker, (void *) context);
|
441 | 442 | }
|
442 | 443 |
|
| 444 | +static void |
| 445 | +change_varnos_in_restrinct_info(RestrictInfo *rinfo, change_varno_context *context) |
| 446 | +{ |
| 447 | + ListCell *lc; |
| 448 | + |
| 449 | + change_varno_walker((Node *) rinfo->clause, context); |
| 450 | + if (rinfo->left_em) |
| 451 | + change_varno_walker((Node *) rinfo->left_em->em_expr, context); |
| 452 | + |
| 453 | + if (rinfo->right_em) |
| 454 | + change_varno_walker((Node *) rinfo->right_em->em_expr, context); |
| 455 | + |
| 456 | + if (rinfo->orclause) |
| 457 | + foreach(lc, ((BoolExpr *) rinfo->orclause)->args) |
| 458 | + { |
| 459 | + Node *node = (Node *) lfirst(lc); |
| 460 | + change_varno_walker(node, context); |
| 461 | + } |
| 462 | + |
| 463 | + /* TODO: find some elegant way to do this */ |
| 464 | + if (bms_is_member(context->old_varno, rinfo->clause_relids)) |
| 465 | + { |
| 466 | + rinfo->clause_relids = bms_del_member(rinfo->clause_relids, context->old_varno); |
| 467 | + rinfo->clause_relids = bms_add_member(rinfo->clause_relids, context->new_varno); |
| 468 | + } |
| 469 | + if (bms_is_member(context->old_varno, rinfo->left_relids)) |
| 470 | + { |
| 471 | + rinfo->left_relids = bms_del_member(rinfo->left_relids, context->old_varno); |
| 472 | + rinfo->left_relids = bms_add_member(rinfo->left_relids, context->new_varno); |
| 473 | + } |
| 474 | + if (bms_is_member(context->old_varno, rinfo->right_relids)) |
| 475 | + { |
| 476 | + rinfo->right_relids = bms_del_member(rinfo->right_relids, context->old_varno); |
| 477 | + rinfo->right_relids = bms_add_member(rinfo->right_relids, context->new_varno); |
| 478 | + } |
| 479 | +} |
| 480 | + |
443 | 481 | Oid
|
444 | 482 | str_to_oid(const char *cstr)
|
445 | 483 | {
|
@@ -477,10 +515,6 @@ plan_tree_walker(Plan *plan,
|
477 | 515 | plan_tree_walker((Plan *) lfirst(l), visitor, context);
|
478 | 516 | break;
|
479 | 517 |
|
480 |
| - /* |
481 |
| - * Add proxy PartitionFilter nodes |
482 |
| - * to subplans of ModifyTable node |
483 |
| - */ |
484 | 518 | case T_ModifyTable:
|
485 | 519 | foreach (l, ((ModifyTable *) plan)->plans)
|
486 | 520 | plan_tree_walker((Plan *) lfirst(l), visitor, context);
|
@@ -510,47 +544,10 @@ plan_tree_walker(Plan *plan,
|
510 | 544 | plan_tree_walker(plan->lefttree, visitor, context);
|
511 | 545 | plan_tree_walker(plan->righttree, visitor, context);
|
512 | 546 |
|
| 547 | + /* Apply visitor to the current node */ |
513 | 548 | visitor(plan, context);
|
514 | 549 | }
|
515 | 550 |
|
516 |
| - |
517 |
| -static void |
518 |
| -change_varnos_in_restrinct_info(RestrictInfo *rinfo, change_varno_context *context) |
519 |
| -{ |
520 |
| - ListCell *lc; |
521 |
| - |
522 |
| - change_varno_walker((Node *) rinfo->clause, context); |
523 |
| - if (rinfo->left_em) |
524 |
| - change_varno_walker((Node *) rinfo->left_em->em_expr, context); |
525 |
| - |
526 |
| - if (rinfo->right_em) |
527 |
| - change_varno_walker((Node *) rinfo->right_em->em_expr, context); |
528 |
| - |
529 |
| - if (rinfo->orclause) |
530 |
| - foreach(lc, ((BoolExpr *) rinfo->orclause)->args) |
531 |
| - { |
532 |
| - Node *node = (Node *) lfirst(lc); |
533 |
| - change_varno_walker(node, context); |
534 |
| - } |
535 |
| - |
536 |
| - /* TODO: find some elegant way to do this */ |
537 |
| - if (bms_is_member(context->old_varno, rinfo->clause_relids)) |
538 |
| - { |
539 |
| - rinfo->clause_relids = bms_del_member(rinfo->clause_relids, context->old_varno); |
540 |
| - rinfo->clause_relids = bms_add_member(rinfo->clause_relids, context->new_varno); |
541 |
| - } |
542 |
| - if (bms_is_member(context->old_varno, rinfo->left_relids)) |
543 |
| - { |
544 |
| - rinfo->left_relids = bms_del_member(rinfo->left_relids, context->old_varno); |
545 |
| - rinfo->left_relids = bms_add_member(rinfo->left_relids, context->new_varno); |
546 |
| - } |
547 |
| - if (bms_is_member(context->old_varno, rinfo->right_relids)) |
548 |
| - { |
549 |
| - rinfo->right_relids = bms_del_member(rinfo->right_relids, context->old_varno); |
550 |
| - rinfo->right_relids = bms_add_member(rinfo->right_relids, context->new_varno); |
551 |
| - } |
552 |
| -} |
553 |
| - |
554 | 551 | /*
|
555 | 552 | * Add missing 'TABLEOID_STR%u' junk attributes for inherited partitions
|
556 | 553 | *
|
|
0 commit comments