While hacking around, I noticed that a lot of makeVar() calls could be
refactored into some convenience functions, to save some redundancy and
so that the unusual call patterns stand out better. Useful?
Index: src/backend/commands/tablecmds.c
===
RCS file: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v
retrieving revision 1.341
diff -u -3 -p -r1.341 tablecmds.c
--- src/backend/commands/tablecmds.c 18 Aug 2010 18:35:19 - 1.341
+++ src/backend/commands/tablecmds.c 21 Aug 2010 21:09:30 -
@@ -6077,9 +6077,7 @@ ATPrepAlterColumnType(List **wqueue,
}
else
{
- transform = (Node *) makeVar(1, attnum,
- attTup-atttypid, attTup-atttypmod,
- 0);
+ transform = (Node *) makeVarFromAttribute(1, attnum, attTup);
}
transform = coerce_to_target_type(pstate,
Index: src/backend/nodes/makefuncs.c
===
RCS file: /cvsroot/pgsql/src/backend/nodes/makefuncs.c,v
retrieving revision 1.66
diff -u -3 -p -r1.66 makefuncs.c
--- src/backend/nodes/makefuncs.c 2 Jan 2010 16:57:46 - 1.66
+++ src/backend/nodes/makefuncs.c 21 Aug 2010 21:09:30 -
@@ -17,6 +17,7 @@
#include catalog/pg_type.h
#include nodes/makefuncs.h
+#include nodes/nodeFuncs.h
#include utils/lsyscache.h
@@ -91,6 +92,39 @@ makeVar(Index varno,
}
/*
+ * makeVarFromTargetEntry -
+ * convenience function to create a same-level Var node from a
+ * TargetEntry
+ */
+Var *
+makeVarFromTargetEntry(Index varno,
+ TargetEntry *tle)
+{
+ return makeVar(varno,
+ tle-resno,
+ exprType((Node *) tle-expr),
+ exprTypmod((Node *) tle-expr),
+ 0);
+}
+
+/*
+ * makeVarFromAttribute -
+ * convenience function to create a same-level Var node from a
+ * pg_attribute tuple structure
+ */
+Var *
+makeVarFromAttribute(Index varno,
+ AttrNumber varattno,
+ Form_pg_attribute att)
+{
+ return makeVar(varno,
+ varattno,
+ att-atttypid,
+ att-atttypmod,
+ 0);
+}
+
+/*
* makeTargetEntry -
* creates a TargetEntry node
*/
Index: src/backend/optimizer/path/pathkeys.c
===
RCS file: /cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v
retrieving revision 1.101
diff -u -3 -p -r1.101 pathkeys.c
--- src/backend/optimizer/path/pathkeys.c 26 Feb 2010 02:00:45 - 1.101
+++ src/backend/optimizer/path/pathkeys.c 21 Aug 2010 21:09:30 -
@@ -629,12 +629,7 @@ convert_subquery_pathkeys(PlannerInfo *r
Assert(list_length(sub_eclass-ec_members) == 1);
sub_member = (EquivalenceMember *) linitial(sub_eclass-ec_members);
-outer_expr = (Expr *)
- makeVar(rel-relid,
- tle-resno,
- exprType((Node *) tle-expr),
- exprTypmod((Node *) tle-expr),
- 0);
+outer_expr = (Expr *) makeVarFromTargetEntry(rel-relid, tle);
/*
* Note: it might look funny to be setting sortref = 0 for a
@@ -712,12 +707,7 @@ convert_subquery_pathkeys(PlannerInfo *r
if (equal(tle-expr, sub_expr))
{
/* Exact match */
- outer_expr = (Expr *)
- makeVar(rel-relid,
- tle-resno,
- exprType((Node *) tle-expr),
- exprTypmod((Node *) tle-expr),
- 0);
+ outer_expr = (Expr *) makeVarFromTargetEntry(rel-relid, tle);
}
else
{
@@ -730,12 +720,7 @@ convert_subquery_pathkeys(PlannerInfo *r
if (equal(tle_stripped, sub_stripped))
{
/* Match after discarding RelabelType */
- outer_expr = (Expr *)
-makeVar(rel-relid,
- tle-resno,
- exprType((Node *) tle-expr),
- exprTypmod((Node *) tle-expr),
- 0);
+ outer_expr = (Expr *) makeVarFromTargetEntry(rel-relid, tle);
if (exprType((Node *) outer_expr) !=
exprType((Node *) sub_expr))
outer_expr = (Expr *)
Index: src/backend/optimizer/plan/setrefs.c
===
RCS file: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v
retrieving revision 1.161
diff -u -3 -p -r1.161 setrefs.c
--- src/backend/optimizer/plan/setrefs.c 12 Jul 2010 17:01:06 - 1.161
+++ src/backend/optimizer/plan/setrefs.c 21 Aug 2010 21:09:30 -
@@ -1283,11 +1283,7 @@ search_indexed_tlist_for_non_var(Node *n
/* Found a matching subplan output expression */
Var *newvar;
- newvar = makeVar(newvarno,
- tle-resno,
- exprType((Node *) tle-expr),
- exprTypmod((Node *) tle-expr),
- 0);
+ newvar = makeVarFromTargetEntry(newvarno, tle);
newvar-varnoold = 0; /* wasn't ever a plain Var */
newvar-varoattno = 0;
return newvar;
@@ -1325,11 +1321,7 @@ search_indexed_tlist_for_sortgroupref(No
/* Found a matching subplan output expression */
Var *newvar;
- newvar = makeVar(newvarno,
- tle-resno,
- exprType((Node *) tle-expr),
- exprTypmod((Node *) tle-expr),
-