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 | 4CFBC9F7.2010903@comcast.net обсуждение исходный текст |
Список | 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 Flost4 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 по дате отправления: