Thread: Executing SQL expression from C-functions
Hello, I need to write a C-function to extend my PostgreSQL server functionality. One of the arguments of that function is a string representing any PostgreSQL valid expression returning a number. For example: 3+5*cos(7.4)/8 7 2+2 log(34) degrees(0.5) power(9.0, 3.0) case when 8 > 2 then 1 when 7*5 < 43 then 2 else 3 end and so on The point is my function first replace some values in the expression (variable names) for numbers and then it should execute the expression and returns the result (a number). With PL/pgSQL I can use EXECUTE expr INTO val, but how could I do it in a C function? Many thanks in advance, and best regards -- Jorge Arévalo Internet & Mobilty Division, DEIMOS jorge.arevalo@deimos-space.com http://mobility.grupodeimos.com/ http://gis4free.wordpress.com http://geohash.org/ezjqgrgzz0g
Hello see SPI interface http://www.postgresql.org/docs/8.4/interactive/spi-examples.html Regards Pavel Stehule 2011/1/28 Jorge Arévalo <jorge.arevalo@deimos-space.com>: > Hello, > > I need to write a C-function to extend my PostgreSQL server > functionality. One of the arguments of that function is a string > representing any PostgreSQL valid expression returning a number. For > example: > > 3+5*cos(7.4)/8 > 7 > 2+2 > log(34) > degrees(0.5) > power(9.0, 3.0) > case when 8 > 2 then 1 when 7*5 < 43 then 2 else 3 end > > and so on > > The point is my function first replace some values in the expression > (variable names) for numbers and then it should execute the expression > and returns the result (a number). With PL/pgSQL I can use EXECUTE > expr INTO val, but how could I do it in a C function? > > Many thanks in advance, and best regards > > -- > Jorge Arévalo > Internet & Mobilty Division, DEIMOS > jorge.arevalo@deimos-space.com > http://mobility.grupodeimos.com/ > http://gis4free.wordpress.com > http://geohash.org/ezjqgrgzz0g > > -- > Sent via pgsql-general mailing list (pgsql-general@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-general >
2011/1/28 Pavel Stehule <pavel.stehule@gmail.com>: > Hello > > see SPI interface > > http://www.postgresql.org/docs/8.4/interactive/spi-examples.html > > Regards > > Pavel Stehule > Hi Pavel, Thanks a lot! Best regards, -- Jorge Arévalo Internet & Mobilty Division, DEIMOS jorge.arevalo@deimos-space.com http://mobility.grupodeimos.com/ http://gis4free.wordpress.com http://geohash.org/ezjqgrgzz0g > 2011/1/28 Jorge Arévalo <jorge.arevalo@deimos-space.com>: >> Hello, >> >> I need to write a C-function to extend my PostgreSQL server >> functionality. One of the arguments of that function is a string >> representing any PostgreSQL valid expression returning a number. For >> example: >> >> 3+5*cos(7.4)/8 >> 7 >> 2+2 >> log(34) >> degrees(0.5) >> power(9.0, 3.0) >> case when 8 > 2 then 1 when 7*5 < 43 then 2 else 3 end >> >> and so on >> >> The point is my function first replace some values in the expression >> (variable names) for numbers and then it should execute the expression >> and returns the result (a number). With PL/pgSQL I can use EXECUTE >> expr INTO val, but how could I do it in a C function? >> >> Many thanks in advance, and best regards >> >> -- >> Jorge Arévalo >> Internet & Mobilty Division, DEIMOS >> jorge.arevalo@deimos-space.com >> http://mobility.grupodeimos.com/ >> http://gis4free.wordpress.com >> http://geohash.org/ezjqgrgzz0g >> >> -- >> Sent via pgsql-general mailing list (pgsql-general@postgresql.org) >> To make changes to your subscription: >> http://www.postgresql.org/mailpref/pgsql-general >> >