|
40 | 40 | #include "catalog/pg_type.h" |
41 | 41 | #include "foreign/fdwapi.h" |
42 | 42 | #include "hooks.h" |
| 43 | +#include "utils.h" |
43 | 44 | #include "runtimeappend.h" |
44 | 45 | #include "runtime_merge_append.h" |
45 | 46 |
|
46 | 47 | PG_MODULE_MAGIC; |
47 | 48 |
|
48 | | -typedef struct |
49 | | -{ |
50 | | - Oid old_varno; |
51 | | - Oid new_varno; |
52 | | -} change_varno_context; |
53 | | - |
54 | 49 | bool inheritance_disabled; |
55 | 50 | bool pg_pathman_enable; |
56 | 51 | PathmanState *pmstate; |
@@ -84,9 +79,6 @@ static void handle_binary_opexpr(WalkerContext *context, WrapperNode *result, co |
84 | 79 | static WrapperNode *handle_opexpr(const OpExpr *expr, WalkerContext *context); |
85 | 80 | static WrapperNode *handle_boolexpr(const BoolExpr *expr, WalkerContext *context); |
86 | 81 | static WrapperNode *handle_arrexpr(const ScalarArrayOpExpr *expr, WalkerContext *context); |
87 | | -static void change_varnos_in_restrinct_info(RestrictInfo *rinfo, change_varno_context *context); |
88 | | -static void change_varnos(Node *node, Oid old_varno, Oid new_varno); |
89 | | -static bool change_varno_walker(Node *node, change_varno_context *context); |
90 | 82 | static RestrictInfo *rebuild_restrictinfo(Node *clause, RestrictInfo *old_rinfo); |
91 | 83 |
|
92 | 84 | /* copied from allpaths.h */ |
@@ -740,124 +732,6 @@ wrapper_make_expression(WrapperNode *wrap, int index, bool *alwaysTrue) |
740 | 732 | } |
741 | 733 | } |
742 | 734 |
|
743 | | -/* |
744 | | - * Changes varno attribute in all variables nested in the node |
745 | | - */ |
746 | | -static void |
747 | | -change_varnos(Node *node, Oid old_varno, Oid new_varno) |
748 | | -{ |
749 | | - change_varno_context context; |
750 | | - context.old_varno = old_varno; |
751 | | - context.new_varno = new_varno; |
752 | | - |
753 | | - change_varno_walker(node, &context); |
754 | | -} |
755 | | - |
756 | | -static bool |
757 | | -change_varno_walker(Node *node, change_varno_context *context) |
758 | | -{ |
759 | | - ListCell *lc; |
760 | | - Var *var; |
761 | | - EquivalenceClass *ec; |
762 | | - EquivalenceMember *em; |
763 | | - |
764 | | - if (node == NULL) |
765 | | - return false; |
766 | | - |
767 | | - switch(node->type) |
768 | | - { |
769 | | - case T_Var: |
770 | | - var = (Var *) node; |
771 | | - if (var->varno == context->old_varno) |
772 | | - { |
773 | | - var->varno = context->new_varno; |
774 | | - var->varnoold = context->new_varno; |
775 | | - } |
776 | | - return false; |
777 | | - |
778 | | - case T_RestrictInfo: |
779 | | - change_varnos_in_restrinct_info((RestrictInfo *) node, context); |
780 | | - return false; |
781 | | - |
782 | | - case T_PathKey: |
783 | | - change_varno_walker((Node *) ((PathKey *) node)->pk_eclass, context); |
784 | | - return false; |
785 | | - |
786 | | - case T_EquivalenceClass: |
787 | | - ec = (EquivalenceClass *) node; |
788 | | - |
789 | | - foreach(lc, ec->ec_members) |
790 | | - change_varno_walker((Node *) lfirst(lc), context); |
791 | | - foreach(lc, ec->ec_derives) |
792 | | - change_varno_walker((Node *) lfirst(lc), context); |
793 | | - return false; |
794 | | - |
795 | | - case T_EquivalenceMember: |
796 | | - em = (EquivalenceMember *) node; |
797 | | - change_varno_walker((Node *) em->em_expr, context); |
798 | | - if (bms_is_member(context->old_varno, em->em_relids)) |
799 | | - { |
800 | | - em->em_relids = bms_del_member(em->em_relids, context->old_varno); |
801 | | - em->em_relids = bms_add_member(em->em_relids, context->new_varno); |
802 | | - } |
803 | | - return false; |
804 | | - |
805 | | - case T_TargetEntry: |
806 | | - change_varno_walker((Node *) ((TargetEntry *) node)->expr, context); |
807 | | - return false; |
808 | | - |
809 | | - case T_List: |
810 | | - foreach(lc, (List *) node) |
811 | | - change_varno_walker((Node *) lfirst(lc), context); |
812 | | - return false; |
813 | | - |
814 | | - default: |
815 | | - break; |
816 | | - } |
817 | | - |
818 | | - /* Should not find an unplanned subquery */ |
819 | | - Assert(!IsA(node, Query)); |
820 | | - |
821 | | - return expression_tree_walker(node, change_varno_walker, (void *) context); |
822 | | -} |
823 | | - |
824 | | -static void |
825 | | -change_varnos_in_restrinct_info(RestrictInfo *rinfo, change_varno_context *context) |
826 | | -{ |
827 | | - ListCell *lc; |
828 | | - |
829 | | - change_varno_walker((Node *) rinfo->clause, context); |
830 | | - if (rinfo->left_em) |
831 | | - change_varno_walker((Node *) rinfo->left_em->em_expr, context); |
832 | | - |
833 | | - if (rinfo->right_em) |
834 | | - change_varno_walker((Node *) rinfo->right_em->em_expr, context); |
835 | | - |
836 | | - if (rinfo->orclause) |
837 | | - foreach(lc, ((BoolExpr *) rinfo->orclause)->args) |
838 | | - { |
839 | | - Node *node = (Node *) lfirst(lc); |
840 | | - change_varno_walker(node, context); |
841 | | - } |
842 | | - |
843 | | - /* TODO: find some elegant way to do this */ |
844 | | - if (bms_is_member(context->old_varno, rinfo->clause_relids)) |
845 | | - { |
846 | | - rinfo->clause_relids = bms_del_member(rinfo->clause_relids, context->old_varno); |
847 | | - rinfo->clause_relids = bms_add_member(rinfo->clause_relids, context->new_varno); |
848 | | - } |
849 | | - if (bms_is_member(context->old_varno, rinfo->left_relids)) |
850 | | - { |
851 | | - rinfo->left_relids = bms_del_member(rinfo->left_relids, context->old_varno); |
852 | | - rinfo->left_relids = bms_add_member(rinfo->left_relids, context->new_varno); |
853 | | - } |
854 | | - if (bms_is_member(context->old_varno, rinfo->right_relids)) |
855 | | - { |
856 | | - rinfo->right_relids = bms_del_member(rinfo->right_relids, context->old_varno); |
857 | | - rinfo->right_relids = bms_add_member(rinfo->right_relids, context->new_varno); |
858 | | - } |
859 | | -} |
860 | | - |
861 | 735 | /* |
862 | 736 | * Recursive function to walk through conditions tree |
863 | 737 | */ |
@@ -1838,22 +1712,6 @@ get_cheapest_parameterized_child_path(PlannerInfo *root, RelOptInfo *rel, |
1838 | 1712 |
|
1839 | 1713 | //--------------------------------------------------------------- |
1840 | 1714 |
|
1841 | | -/* |
1842 | | - * Returns the same list in reversed order. |
1843 | | - */ |
1844 | | -static List * |
1845 | | -list_reverse(List *l) |
1846 | | -{ |
1847 | | - List *result = NIL; |
1848 | | - ListCell *lc; |
1849 | | - |
1850 | | - foreach (lc, l) |
1851 | | - { |
1852 | | - result = lcons(lfirst(lc), result); |
1853 | | - } |
1854 | | - return result; |
1855 | | -} |
1856 | | - |
1857 | 1715 | /* |
1858 | 1716 | * generate_mergeappend_paths |
1859 | 1717 | * Generate MergeAppend paths for an append relation |
|
0 commit comments