GetAttributeByName and GetAttributeByNum should be declared to return

Datum, not char*, for portability's sake.
This commit is contained in:
Tom Lane 2000-08-24 23:34:11 +00:00
parent d9eb7d8fa1
commit 481487b964
3 changed files with 18 additions and 21 deletions

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 * named attribute out of the tuple from the arg slot. User defined
* C functions which take a tuple as an argument are expected * C functions which take a tuple as an argument are expected
* to use this. Ex: overpaid(EMP) might call GetAttributeByNum(). * 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, GetAttributeByNum(TupleTableSlot *slot,
AttrNumber attrno, AttrNumber attrno,
bool *isNull) bool *isNull)
@ -527,7 +522,7 @@ GetAttributeByNum(TupleTableSlot *slot,
if (TupIsNull(slot)) if (TupIsNull(slot))
{ {
*isNull = true; *isNull = true;
return (char *) NULL; return (Datum) 0;
} }
retval = heap_getattr(slot->val, retval = heap_getattr(slot->val,
@ -535,11 +530,12 @@ GetAttributeByNum(TupleTableSlot *slot,
slot->ttc_tupleDescriptor, slot->ttc_tupleDescriptor,
isNull); isNull);
if (*isNull) if (*isNull)
return (char *) NULL; return (Datum) 0;
return (char *) retval;
return retval;
} }
char * Datum
GetAttributeByName(TupleTableSlot *slot, char *attname, bool *isNull) GetAttributeByName(TupleTableSlot *slot, char *attname, bool *isNull)
{ {
AttrNumber attrno; AttrNumber attrno;
@ -557,7 +553,7 @@ GetAttributeByName(TupleTableSlot *slot, char *attname, bool *isNull)
if (TupIsNull(slot)) if (TupIsNull(slot))
{ {
*isNull = true; *isNull = true;
return (char *) NULL; return (Datum) 0;
} }
tupdesc = slot->ttc_tupleDescriptor; tupdesc = slot->ttc_tupleDescriptor;
@ -581,8 +577,9 @@ GetAttributeByName(TupleTableSlot *slot, char *attname, bool *isNull)
tupdesc, tupdesc,
isNull); isNull);
if (*isNull) if (*isNull)
return (char *) NULL; return (Datum) 0;
return (char *) retval;
return retval;
} }
/* /*

View File

@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * 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, extern Datum ExecEvalParam(Param *expression, ExprContext *econtext,
bool *isNull); bool *isNull);
extern char *GetAttributeByNum(TupleTableSlot *slot, AttrNumber attrno, extern Datum GetAttributeByNum(TupleTableSlot *slot, AttrNumber attrno,
bool *isNull); bool *isNull);
extern char *GetAttributeByName(TupleTableSlot *slot, char *attname, extern Datum GetAttributeByName(TupleTableSlot *slot, char *attname,
bool *isNull); bool *isNull);
extern Datum ExecMakeFunctionResult(FunctionCachePtr fcache, extern Datum ExecMakeFunctionResult(FunctionCachePtr fcache,
List *arguments, List *arguments,

View File

@ -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 */ #include <float.h> /* faked on sunos */
@ -187,9 +187,9 @@ overpaid(PG_FUNCTION_ARGS)
{ {
TUPLE tuple = (TUPLE) PG_GETARG_POINTER(0); TUPLE tuple = (TUPLE) PG_GETARG_POINTER(0);
bool isnull; bool isnull;
long salary; int32 salary;
salary = (long) GetAttributeByName(tuple, "salary", &isnull); salary = DatumGetInt32(GetAttributeByName(tuple, "salary", &isnull));
if (isnull) if (isnull)
PG_RETURN_NULL(); PG_RETURN_NULL();
PG_RETURN_BOOL(salary > 699); PG_RETURN_BOOL(salary > 699);