Обсуждение: 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