|
25 | 25 |
|
26 | 26 |
|
27 | 27 | staticboolclause_contains_params_walker(Node*node,void*context);
|
28 |
| -staticvoidchange_varnos_in_restrinct_info(RestrictInfo*rinfo,change_varno_context*context); |
| 28 | +staticvoidchange_varnos_in_restrinct_info(RestrictInfo*rinfo, |
| 29 | +change_varno_context*context); |
29 | 30 | staticboolchange_varno_walker(Node*node,change_varno_context*context);
|
30 | 31 | staticList*get_tableoids_list(List*tlist);
|
31 | 32 | staticvoidlock_rows_visitor(Plan*plan,void*context);
|
@@ -440,6 +441,43 @@ change_varno_walker(Node *node, change_varno_context *context)
|
440 | 441 | returnexpression_tree_walker(node,change_varno_walker, (void*)context);
|
441 | 442 | }
|
442 | 443 |
|
| 444 | +staticvoid |
| 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(constchar*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 | caseT_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 |
| -staticvoid |
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 | *
|
|