C Function returning a tuple with a float4 array as column

Поиск
Список
Период
Сортировка
От Tim
Тема C Function returning a tuple with a float4 array as column
Дата
Msg-id 4CFBD14E.9090808@comcast.net
обсуждение исходный текст
Ответы Re: C Function returning a tuple with a float4 array as column
Список pgsql-novice
HI,

Anyone have any ideas what wrong  with my C code to return a tuple with
1 column that is a float4 array. I have tested  functions returning  a
float4 array and a row and both  work independently. When I combine the
  code  I get  the SQL error

ERROR:  cache lookup failed for type 0

********** Error **********

ERROR: cache lookup failed for type 0
SQL state: XX000

from  the SQL  query

select  pg_backend_pid(),  getrecordarray();

The function is  defined

create or replace  function GetRecordArray() returns table (
     Param_1  real[]
)
       AS  .....
      LANGUAGE C STRICT;

The C code is

  PG_FUNCTION_INFO_V1(GetRecordAray);
  /**
     GetRecordArray  Function to return a record with  1 column as a
Float4 array
     @returns record with a float4 array
  **/
  DLLEXPORT  Datum  GetRecordArray(PG_FUNCTION_ARGS)
  {
     Datum        column[1];    /*  Columns for the record */
     bool        isNULL[1]  = { false };
     Datum        results;    /* Results tuple */
     HeapTuple    tuple;        /* Record Tuple */
     TupleDesc    tupleDesc;    /* Tuple descripton */

     float dataArray[2] = { 1.1f, 3.1e-16f };
     ArrayType * arrayType;
     Datum *datum;
     int16 typlen;
     bool typbyval;
     char typalign;

     datum = (Datum *)palloc(sizeof(Datum) * 2);

     datum[0] =  Float4GetDatum(dataArray[0]);
     datum[1] =  Float4GetDatum(dataArray[1]);

     get_typlenbyvalalign(FLOAT4OID, &typlen, &typbyval, &typalign);
     arrayType =  construct_array(datum, 2, FLOAT4OID,  typlen,
typbyval, typalign);

     /* Create and bless the template */
     tupleDesc = CreateTemplateTupleDesc(1, false);

     TupleDescInitEntry(tupleDesc, (AttrNumber) 1, "Param_1",
FLOAT4ARRAYOID, -1, 0);


     tupleDesc = BlessTupleDesc(tupleDesc);

     /**  Set up the column Datum for the Tuple **/
     column[0] = DatumGetPointer(arrayType);



         /**  Build the tuple **/
     tuple = heap_form_tuple(tupleDesc, column, isNULL);
     results = HeapTupleGetDatum(tuple);

     PG_RETURN_DATUM(results);

}









В списке pgsql-novice по дате отправления:

Предыдущее
От: Marco Craveiro
Дата:
Сообщение: Re: Understanding the behaviour of hostname in psql
Следующее
От: Tom Lane
Дата:
Сообщение: Re: C Function returning a tuple with a float4 array as column