eval function

From: Sim Zacks <sim(at)compulab(dot)co(dot)il>
To: PostgreSQL general <pgsql-general(at)postgresql(dot)org>
Subject: eval function
Date: 2011-07-28 11:18:15
Message-ID: 4E314577.8020208@compulab.co.il
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I need an eval function that will evaluate a valid SQL expression and
return the value.

I've seen variations of this asked before with no real answer.

I wrote a function to handle it, but it looks like there should be a
better way to do this (see below).

My use case is a table with date range definitions that should be
evaluated dynamically:

For example:

Period DateFrom
DateTo

Last Month $expr$current_date-interval '1 month'$expr$
$expr$current_date$expr$

...

select datefrom,dateto into v_datefrom, v_dateto from movingperiods
where period='Last Month';

select * from sales where orderdate between eval(v_datefrom)::date and
eval(v_dateto)

...

CREATE OR REPLACE FUNCTION eval(str text)
RETURNS text AS
$BODY$
declare
row record;
res text;
begin
if lower(str) in ('true','false') then
res:=str;
else
for row in execute 'select (' || str || ')::text as res1' loop
res:=row.res1;
end loop;
end if;
return res;
end;
$BODY$
LANGUAGE plpgsql VOLATILE;

Responses

Browse pgsql-general by date

  From Date Subject
Next Message tommaso 2011-07-28 11:51:59 postgres unable to start
Previous Message Samba 2011-07-28 11:03:26 Statistics about Streaming Replication deployments in production