From 481487b9647c02b83a7701a0b513e9437c380ccd Mon Sep 17 00:00:00 2001 From: Tom Lane 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 3929c8782a..622ea2ef82 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 e39a60a6a2..5eb7cbb93b 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 e5fbf962a4..479527fc3f 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 /* 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);