Hello hackers

At the moment I need to pass from a SQL array to a C array.  

I have the following table:

CREATE TABLE emps
(
  name text,
  array int4[]
)

For example, array have this values: {4000,1,0,0}

I wrote this function for test in order to see something that could help me:

extern Datum vector(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(vector);
Datum
vector(PG_FUNCTION_ARGS)
{
        text            *table_text = PG_GETARG_TEXT_P(0);
        TupleDesc       tupdesc;
        bool            isnull;
        char            *table_char, *type, *cmd;
        int             n1, ret;

        table_char = text_2_char(table_text);   /* pass text to c string */
        cmd = (char *) palloc(14 + strlen(table_char) + 1);
        tupdesc = (TupleDesc) RelationNameGetTupleDesc(table_char);
        sprintf(cmd, "select * from %s", table_char);

        SPI_connect();
        type = SPI_gettype(tupdesc, 2);         /* to obtain the c data type of 
the
sql array?? */
        ret = SPI_exec(cmd, 0);

        /* for this test I take only the first table row */
        n1 = DatumGetInt32(SPI_getbinval(SPI_tuptable->vals[0],
SPI_tuptable->tupdesc, 2, &isnull));
        SPI_finish();

        elog(INFO, "The data type of the column no. 2 is %s and its value is
%d", type, n1);
        return PointerGetDatum(ret);
}

Then, the result of the "select vector('emps');" was
INFO:  The data type of the column no. 2 is _int4 and its value is 137606808

I wanted that n1 collects the data of the SQL array.  I really
appreciate any suggestions, thanks in advance, regards.


Juan P. Espino

PS. I ignore if the term I'm using SQL array is correct.

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to