[HACKERS] small makeVar refactoring

2010-08-21 Thread Peter Eisentraut
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),
-			 

Re: [HACKERS] small makeVar refactoring

2010-08-21 Thread Tom Lane
Peter Eisentraut pete...@gmx.net writes:
 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?

I'm not real thrilled with importing catalog/pg_attribute.h into
makefuncs.h; that seems like a lot of namespace pollution for not much
return.  So -1 to makeVarFromAttribute.  The other is okay although I'm
not convinced it's useful enough to bother with.

regards, tom lane

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers