Thread: C Function with Arrays Question
Hi, Is there a way of accessing _float8 (float8[]) values inside of a server-side C function?? For instance imagine: # \d formulatest Table "formulatest" Column | Type | Modifiers ---------+--------------------+----------- formula | double precision[] | # insert into formulatest values('{2.3,3.3}'); # insert into formulatest values('{4.3,5.3}'); and then write a C function named formula float8 *formula(x,formarray) float8 *x; _float8 *formarray; /* This is serious part of the question!! */ { float8 *result = (float8 *) malloc(sizeof(float8)); /* what happened to palloc in pgsql 7.2??, * Also what happened to postgres.h?? */ *result = *formarray[0]; return result; /* This is pseudo code to demonstrate the question */ } Thanx. P.S. 7.2 runs quite stable on my Linux 2.4.7. JDBC built without a problem, and also supports Arrays (at least one dimension for sure). -- Achilleus Mantzios S/W Engineer IT dept Dynacom Tankers Mngmt tel: +30-10-8981112 fax: +30-10-8981877 email: it@dynacomtm.com rnd@gatewaynet.com
Achilleus Mantzios <rnd@gatewaynet.com> writes: > Is there a way of accessing _float8 (float8[]) values inside of > a server-side C function?? There are some examples in the "FLOAT AGGREGATE OPERATORS" section of src/backend/utils/adt/float.c. construct_array() and deconstruct_array() are the most general answers, but for fixed-width element types like float8 you can cheat quite a lot. > /* what happened to palloc in pgsql 7.2??, Nothing. > * Also what happened to postgres.h?? Also nothing. Did you do "make install-all-headers"? regards, tom lane
Dear Tom, regarding the question i posted, after tests and benchmarks, i found that retreiving the _float8 array from JDBC and doing the calculations in java is faster than calling a C function that performs the same calculation on the same _float8 array and returns float8. In the C function there were no DB calls or any other I/O calls but plain arithmetic, so i declared it iscached and the benchmark loop run 1000,10000 times and so on. I was surprised by the result! I am running pgsql 7.2 on a linux 2.4.7, glibc 2.2.2