*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/plan/setrefs.c,v 1.134 2007/04/06 22:57:20 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/plan/setrefs.c,v 1.135 2007/04/30 00:16:43 tgl Exp $
*
*-------------------------------------------------------------------------
*/
return true;
}
+/*
+ * copyVar
+ * Copy a Var node.
+ *
+ * fix_scan_expr and friends do this enough times that it's worth having
+ * a bespoke routine instead of using the generic copyObject() function.
+ */
+static inline Var *
+copyVar(Var *var)
+{
+ Var *newvar = (Var *) palloc(sizeof(Var));
+
+ *newvar = *var;
+ return newvar;
+}
+
/*
* fix_scan_expr
* Do set_plan_references processing on a scan-level expression
return NULL;
if (IsA(node, Var))
{
- Var *var = (Var *) copyObject(node);
+ Var *var = copyVar((Var *) node);
Assert(var->varlevelsup == 0);
/*
if (vinfo->varno == varno && vinfo->varattno == varattno)
{
/* Found a match */
- Var *newvar = (Var *) copyObject(var);
+ Var *newvar = copyVar(var);
newvar->varno = newvarno;
newvar->varattno = vinfo->resno;
/* If it's for acceptable_rel, adjust and return it */
if (var->varno == context->acceptable_rel)
{
- var = (Var *) copyObject(var);
+ var = copyVar(var);
var->varno += context->rtoffset;
var->varnoold += context->rtoffset;
return (Node *) var;