Greetings,

I have spent a couple of days working on separated lib in PostgreSql, and I
am facing some issues with the return of data using SPI (Server Programming
Interface).
I have this simple get_tuples function used in the main function foobar. My
example is very simple too (Using a previously created table a with a
single column and with some data):
SELECT  foobar('select * from a');
I am not able to get the array returned by get_tuples function, and I am
thinking it's SPI_finish(). When I tried to print my array tuples itens
after SPI_finish(), It is not working.

####################
###### My Code ######
####################
static char**
get_tuples(char *command) {
    int ret;
    int8 rows;
    char **tuples;

    SPI_connect();
    ret = SPI_exec(command, 0);
    rows = SPI_processed;

    tuples = palloc(sizeof(char*)*rows);

    if (ret > 0 && SPI_tuptable != NULL) {
        TupleDesc tupdesc = SPI_tuptable->tupdesc;
        SPITupleTable *tuptable = SPI_tuptable;
        uint64 j;

        for (j = 0; j < rows; j++){
            HeapTuple tuple = tuptable->vals[j];
            int i;
            for (i = 1; i <= tupdesc->natts; i++){
            char *rowid;
            rowid = SPI_getvalue(tuple, tupdesc, i);
            tuples[j] = palloc(strlen(rowid)*sizeof(char));
            tuples[j]= rowid;
            }
        }
    }

    // Printing my array to verify if I have all tuples, in fact I have all
of the
    for (int i = 0; i < rows; ++i) {
           elog(INFO, "Item: %s", *(tuples + i));
    }

    pfree(command);
    SPI_finish();
    return tuples;
}
####################
Datum
foobar (PG_FUNCTION_ARGS) {
    char *command;
    command = text_to_cstring(PG_GETARG_TEXT_PP(0));
    get_tuples(command);

    // *When I tried to do something like this, I am losing the connection
with the server (error)*
    //elog(INFO, "*****: %s", *(get_tuples(command) + 1));
    PG_RETURN_INT64(1);
}
####################
CREATE FUNCTION foobar(text) RETURNS int8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
####################

regards,

*Andjasubu Bungama, Patrick *

Reply via email to