*** 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);