"PostgreSQL Bugs List" <[EMAIL PROTECTED]> writes: > The following query updates 0 rows, when 1 row is > expected to be updated:
Nice catch. The attached patch seems to fix it. regards, tom lane *** src/backend/optimizer/util/clauses.c.orig Sat Nov 29 14:51:51 2003 --- src/backend/optimizer/util/clauses.c Mon Dec 8 20:41:07 2003 *************** *** 2960,2995 **** RangeTblEntry *rte = (RangeTblEntry *) lfirst(rt); RangeTblEntry *newrte; switch (rte->rtekind) { case RTE_RELATION: case RTE_SPECIAL: ! /* nothing to do, don't bother to make a copy */ break; case RTE_SUBQUERY: if (!(flags & QTW_IGNORE_RT_SUBQUERIES)) { - FLATCOPY(newrte, rte, RangeTblEntry); CHECKFLATCOPY(newrte->subquery, rte->subquery, Query); MUTATE(newrte->subquery, newrte->subquery, Query *); - rte = newrte; } break; case RTE_JOIN: if (!(flags & QTW_IGNORE_JOINALIASES)) { - FLATCOPY(newrte, rte, RangeTblEntry); MUTATE(newrte->joinaliasvars, rte->joinaliasvars, List *); - rte = newrte; } break; case RTE_FUNCTION: - FLATCOPY(newrte, rte, RangeTblEntry); MUTATE(newrte->funcexpr, rte->funcexpr, Node *); - rte = newrte; break; } ! FastAppend(&newrt, rte); } query->rtable = FastListValue(&newrt); return query; --- 2960,2990 ---- RangeTblEntry *rte = (RangeTblEntry *) lfirst(rt); RangeTblEntry *newrte; + FLATCOPY(newrte, rte, RangeTblEntry); switch (rte->rtekind) { case RTE_RELATION: case RTE_SPECIAL: ! /* we don't bother to copy eref, aliases, etc; OK? */ break; case RTE_SUBQUERY: if (!(flags & QTW_IGNORE_RT_SUBQUERIES)) { CHECKFLATCOPY(newrte->subquery, rte->subquery, Query); MUTATE(newrte->subquery, newrte->subquery, Query *); } break; case RTE_JOIN: if (!(flags & QTW_IGNORE_JOINALIASES)) { MUTATE(newrte->joinaliasvars, rte->joinaliasvars, List *); } break; case RTE_FUNCTION: MUTATE(newrte->funcexpr, rte->funcexpr, Node *); break; } ! FastAppend(&newrt, newrte); } query->rtable = FastListValue(&newrt); return query; ---------------------------(end of broadcast)--------------------------- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match