*** a/doc/src/sgml/spi.sgml
--- b/doc/src/sgml/spi.sgml
***************
*** 3186,3191 **** Oid SPI_gettypeid(TupleDesc rowdesc, int colnu
--- 3186,3257 ----
+
+
+ SPI_gettypmod
+ 3
+
+
+
+ SPI_gettypmod
+ return the type-specific data of the specified column
+
+
+ SPI_gettypmod
+
+
+
+ int32 SPI_gettypmod(TupleDesc rowdesc, int colnumber)
+
+
+
+
+ Description
+
+
+ SPI_gettypmod returns the
+ type-specific data of the data type of the specified column.
+
+
+
+
+ Arguments
+
+
+
+ TupleDesc rowdesc
+
+
+ input row description
+
+
+
+
+
+ int colnumber
+
+
+ column number (count starts at 1)
+
+
+
+
+
+
+
+ Return Value
+
+
+ The type-specific data of the data type of the specified column
+ or -1 for types that do not need type-specific data or error. On error,
+ SPI_result is set to
+ SPI_ERROR_NOATTRIBUTE.
+
+
+
+
+
+
SPI_getrelname
*** a/src/backend/executor/spi.c
--- b/src/backend/executor/spi.c
***************
*** 958,963 **** SPI_gettypeid(TupleDesc tupdesc, int fnumber)
--- 958,981 ----
return (SystemAttributeDefinition(fnumber, true))->atttypid;
}
+ int32
+ SPI_gettypmod(TupleDesc tupdesc, int fnumber)
+ {
+ SPI_result = 0;
+
+ if (fnumber > tupdesc->natts || fnumber == 0 ||
+ fnumber <= FirstLowInvalidHeapAttributeNumber)
+ {
+ SPI_result = SPI_ERROR_NOATTRIBUTE;
+ return -1;
+ }
+
+ if (fnumber > 0)
+ return tupdesc->attrs[fnumber - 1]->atttypmod;
+ else
+ return (SystemAttributeDefinition(fnumber, true))->atttypmod;
+ }
+
char *
SPI_getrelname(Relation rel)
{
*** a/src/include/executor/spi.h
--- b/src/include/executor/spi.h
***************
*** 116,121 **** extern char *SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber);
--- 116,122 ----
extern Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull);
extern char *SPI_gettype(TupleDesc tupdesc, int fnumber);
extern Oid SPI_gettypeid(TupleDesc tupdesc, int fnumber);
+ extern int32 SPI_gettypmod(TupleDesc tupdesc, int fnumber);
extern char *SPI_getrelname(Relation rel);
extern char *SPI_getnspname(Relation rel);
extern void *SPI_palloc(Size size);