Index: src/backend/optimizer/path/allpaths.c =================================================================== RCS file: /home/alvherre/cvs/pgsql-server/src/backend/optimizer/path/allpaths.c,v retrieving revision 1.112 diff -c -r1.112 allpaths.c *** src/backend/optimizer/path/allpaths.c 14 Jan 2004 23:01:55 -0000 1.112 --- src/backend/optimizer/path/allpaths.c 24 Apr 2004 01:53:10 -0000 *************** *** 531,546 **** { rel = (RelOptInfo *) lfirst(x); - #ifdef NOT_USED - - /* - * * for each expensive predicate in each path in each - * distinct rel, * consider doing pullup -- JMH - */ - if (XfuncMode != XFUNC_NOPULL && XfuncMode != XFUNC_OFF) - xfunc_trypullup(rel); - #endif - /* Find and save the cheapest paths for this rel */ set_cheapest(rel); --- 531,536 ---- Index: src/backend/optimizer/plan/createplan.c =================================================================== RCS file: /home/alvherre/cvs/pgsql-server/src/backend/optimizer/plan/createplan.c,v retrieving revision 1.168 diff -c -r1.168 createplan.c *** src/backend/optimizer/plan/createplan.c 29 Feb 2004 17:36:05 -0000 1.168 --- src/backend/optimizer/plan/createplan.c 24 Apr 2004 01:29:14 -0000 *************** *** 167,185 **** break; } - #ifdef NOT_USED /* fix xfunc */ - /* sort clauses by cost/(1-selectivity) -- JMH 2/26/92 */ - if (XfuncMode != XFUNC_OFF) - { - set_qpqual((Plan) plan, - lisp_qsort(get_qpqual((Plan) plan), - xfunc_clause_compare)); - if (XfuncMode != XFUNC_NOR) - /* sort the disjuncts within each clause by cost -- JMH 3/4/92 */ - xfunc_disjunct_sort(plan->qpqual); - } - #endif - return plan; } --- 167,172 ---- Index: src/backend/optimizer/util/pathnode.c =================================================================== RCS file: /home/alvherre/cvs/pgsql-server/src/backend/optimizer/util/pathnode.c,v retrieving revision 1.103 diff -c -r1.103 pathnode.c *** src/backend/optimizer/util/pathnode.c 29 Mar 2004 19:58:04 -0000 1.103 --- src/backend/optimizer/util/pathnode.c 24 Apr 2004 01:39:45 -0000 *************** *** 243,251 **** * A path is worthy if it has either a better sort order (better pathkeys) * or cheaper cost (on either dimension) than any of the existing old paths. * ! * Unless parent_rel->pruneable is false, we also remove from the rel's ! * pathlist any old paths that are dominated by new_path --- that is, ! * new_path is both cheaper and at least as well ordered. * * The pathlist is kept sorted by TOTAL_COST metric, with cheaper paths * at the front. No code depends on that for correctness; it's simply --- 243,251 ---- * A path is worthy if it has either a better sort order (better pathkeys) * or cheaper cost (on either dimension) than any of the existing old paths. * ! * We also remove from the rel's pathlist any old paths that are dominated ! * by new_path --- that is, new_path is both cheaper and at least as well ! * ordered. * * The pathlist is kept sorted by TOTAL_COST metric, with cheaper paths * at the front. No code depends on that for correctness; it's simply *************** *** 342,351 **** } /* ! * Remove current element from pathlist if dominated by new, ! * unless xfunc told us not to remove any paths. */ ! if (remove_old && parent_rel->pruneable) { List *p1_next = lnext(p1); --- 342,350 ---- } /* ! * Remove current element from pathlist if dominated by new. */ ! if (remove_old) { List *p1_next = lnext(p1); Index: src/backend/optimizer/util/relnode.c =================================================================== RCS file: /home/alvherre/cvs/pgsql-server/src/backend/optimizer/util/relnode.c,v retrieving revision 1.55 diff -c -r1.55 relnode.c *** src/backend/optimizer/util/relnode.c 17 Feb 2004 00:52:53 -0000 1.55 --- src/backend/optimizer/util/relnode.c 24 Apr 2004 01:39:03 -0000 *************** *** 135,141 **** rel->cheapest_startup_path = NULL; rel->cheapest_total_path = NULL; rel->cheapest_unique_path = NULL; - rel->pruneable = true; rel->relid = relid; rel->rtekind = rte->rtekind; /* min_attr, max_attr, attr_needed, attr_widths are set below */ --- 135,140 ---- *************** *** 291,297 **** joinrel->cheapest_startup_path = NULL; joinrel->cheapest_total_path = NULL; joinrel->cheapest_unique_path = NULL; - joinrel->pruneable = true; joinrel->relid = 0; /* indicates not a baserel */ joinrel->rtekind = RTE_JOIN; joinrel->min_attr = 0; --- 290,295 ---- Index: src/backend/tcop/postgres.c =================================================================== RCS file: /home/alvherre/cvs/pgsql-server/src/backend/tcop/postgres.c,v retrieving revision 1.400 diff -c -r1.400 postgres.c *** src/backend/tcop/postgres.c 19 Apr 2004 17:42:58 -0000 1.400 --- src/backend/tcop/postgres.c 24 Apr 2004 04:29:40 -0000 *************** *** 89,99 **** LogStmtLevel log_statement = LOGSTMT_NONE; - /* - * Flags for expensive function optimization -- JMH 3/9/92 - */ - int XfuncMode = 0; - /* GUC variable for maximum stack depth (measured in kilobytes) */ int max_stack_depth = 2048; --- 89,94 ---- *************** *** 2223,2229 **** ctx = debug_context = PGC_POSTMASTER; gucsource = PGC_S_ARGV; /* initial switches came from command line */ ! while ((flag = getopt(argc, argv, "A:B:c:D:d:Eef:FiNOPo:p:S:st:v:W:x:-:")) != -1) switch (flag) { case 'A': --- 2218,2224 ---- ctx = debug_context = PGC_POSTMASTER; gucsource = PGC_S_ARGV; /* initial switches came from command line */ ! while ((flag = getopt(argc, argv, "A:B:c:D:d:Eef:FiNOPo:p:S:st:v:W:-:")) != -1) switch (flag) { case 'A': *************** *** 2459,2497 **** pg_usleep(atoi(optarg)*1000000L); break; - case 'x': - #ifdef NOT_USED /* planner/xfunc.h */ - - /* - * control joey hellerstein's expensive function - * optimization - */ - if (XfuncMode != 0) - { - elog(WARNING, "only one -x flag is allowed"); - errs++; - break; - } - if (strcmp(optarg, "off") == 0) - XfuncMode = XFUNC_OFF; - else if (strcmp(optarg, "nor") == 0) - XfuncMode = XFUNC_NOR; - else if (strcmp(optarg, "nopull") == 0) - XfuncMode = XFUNC_NOPULL; - else if (strcmp(optarg, "nopm") == 0) - XfuncMode = XFUNC_NOPM; - else if (strcmp(optarg, "pullall") == 0) - XfuncMode = XFUNC_PULLALL; - else if (strcmp(optarg, "wait") == 0) - XfuncMode = XFUNC_WAIT; - else - { - elog(WARNING, "use -x {off,nor,nopull,nopm,pullall,wait}"); - errs++; - } - #endif - break; - case 'c': case '-': { --- 2454,2459 ---- Index: src/include/nodes/relation.h =================================================================== RCS file: /home/alvherre/cvs/pgsql-server/src/include/nodes/relation.h,v retrieving revision 1.93 diff -c -r1.93 relation.h *** src/include/nodes/relation.h 5 Jan 2004 23:39:54 -0000 1.93 --- src/include/nodes/relation.h 24 Apr 2004 01:36:55 -0000 *************** *** 99,106 **** * (regardless of its ordering) * cheapest_unique_path - for caching cheapest path to produce unique * (no duplicates) output from relation - * pruneable - flag to let the planner know whether it can prune the - * pathlist of this RelOptInfo or not. * * If the relation is a base relation it will have these fields set: * --- 99,104 ---- *************** *** 193,199 **** struct Path *cheapest_startup_path; struct Path *cheapest_total_path; struct Path *cheapest_unique_path; - bool pruneable; /* information about a base rel (not set for join rels!) */ Index relid; --- 191,196 ----