From 481487b9647c02b83a7701a0b513e9437c380ccd Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu, 24 Aug 2000 23:34:11 +0000
Subject: [PATCH] GetAttributeByName and GetAttributeByNum should be declared
 to return Datum, not char*, for portability's sake.

---
 src/backend/executor/execQual.c | 25 +++++++++++--------------
 src/include/executor/executor.h |  8 ++++----
 src/test/regress/regress.c      |  6 +++---
 3 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index 3929c8782a9..622ea2ef82c 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.79 2000/08/24 03:29:03 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.80 2000/08/24 23:34:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -502,13 +502,8 @@ ExecEvalParam(Param *expression, ExprContext *econtext, bool *isNull)
  *		named attribute out of the tuple from the arg slot.  User defined
  *		C functions which take a tuple as an argument are expected
  *		to use this.  Ex: overpaid(EMP) might call GetAttributeByNum().
- *
- * XXX these two functions are misdeclared: they should be declared to
- * return Datum.  They are not used anywhere in the backend proper, and
- * exist only for use by user-defined functions.  Should we change their
- * definitions, at risk of breaking user code?
  */
-char *
+Datum
 GetAttributeByNum(TupleTableSlot *slot,
 				  AttrNumber attrno,
 				  bool *isNull)
@@ -527,7 +522,7 @@ GetAttributeByNum(TupleTableSlot *slot,
 	if (TupIsNull(slot))
 	{
 		*isNull = true;
-		return (char *) NULL;
+		return (Datum) 0;
 	}
 
 	retval = heap_getattr(slot->val,
@@ -535,11 +530,12 @@ GetAttributeByNum(TupleTableSlot *slot,
 						  slot->ttc_tupleDescriptor,
 						  isNull);
 	if (*isNull)
-		return (char *) NULL;
-	return (char *) retval;
+		return (Datum) 0;
+
+	return retval;
 }
 
-char *
+Datum
 GetAttributeByName(TupleTableSlot *slot, char *attname, bool *isNull)
 {
 	AttrNumber	attrno;
@@ -557,7 +553,7 @@ GetAttributeByName(TupleTableSlot *slot, char *attname, bool *isNull)
 	if (TupIsNull(slot))
 	{
 		*isNull = true;
-		return (char *) NULL;
+		return (Datum) 0;
 	}
 
 	tupdesc = slot->ttc_tupleDescriptor;
@@ -581,8 +577,9 @@ GetAttributeByName(TupleTableSlot *slot, char *attname, bool *isNull)
 						  tupdesc,
 						  isNull);
 	if (*isNull)
-		return (char *) NULL;
-	return (char *) retval;
+		return (Datum) 0;
+
+	return retval;
 }
 
 /*
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h
index e39a60a6a24..5eb7cbb93ba 100644
--- a/src/include/executor/executor.h
+++ b/src/include/executor/executor.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: executor.h,v 1.49 2000/08/24 03:29:10 tgl Exp $
+ * $Id: executor.h,v 1.50 2000/08/24 23:34:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -74,9 +74,9 @@ extern void ExecEndNode(Plan *node, Plan *parent);
  */
 extern Datum ExecEvalParam(Param *expression, ExprContext *econtext,
 			  bool *isNull);
-extern char *GetAttributeByNum(TupleTableSlot *slot, AttrNumber attrno,
-				  bool *isNull);
-extern char *GetAttributeByName(TupleTableSlot *slot, char *attname,
+extern Datum GetAttributeByNum(TupleTableSlot *slot, AttrNumber attrno,
+							   bool *isNull);
+extern Datum GetAttributeByName(TupleTableSlot *slot, char *attname,
 								bool *isNull);
 extern Datum ExecMakeFunctionResult(FunctionCachePtr fcache,
 									List *arguments,
diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c
index e5fbf962a4f..479527fc3fc 100644
--- a/src/test/regress/regress.c
+++ b/src/test/regress/regress.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /cvsroot/pgsql/src/test/regress/regress.c,v 1.43 2000/07/30 20:43:54 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/test/regress/regress.c,v 1.44 2000/08/24 23:34:11 tgl Exp $
  */
 
 #include <float.h>				/* faked on sunos */
@@ -187,9 +187,9 @@ overpaid(PG_FUNCTION_ARGS)
 {
 	TUPLE		tuple = (TUPLE) PG_GETARG_POINTER(0);
 	bool		isnull;
-	long		salary;
+	int32		salary;
 
-	salary = (long) GetAttributeByName(tuple, "salary", &isnull);
+	salary = DatumGetInt32(GetAttributeByName(tuple, "salary", &isnull));
 	if (isnull)
 		PG_RETURN_NULL();
 	PG_RETURN_BOOL(salary > 699);
-- 
GitLab