C Function with Arrays Question

Started by Achilleus Mantziosabout 24 years ago3 messagesgeneral
Jump to latest
#1Achilleus Mantzios
rnd@gatewaynet.com

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Achilleus Mantzios (#1)
Re: C Function with Arrays Question

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

#3Achilleus Mantzios
rnd@gatewaynet.com
In reply to: Tom Lane (#2)
Re: C Function with Arrays Question

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