|
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