evaluating expressions stored in table

Started by Little, Douglasover 13 years ago4 messagesgeneral
Jump to latest
#1Little, Douglas
DOUGLAS.LITTLE@orbitz.com

Hi,

I need to evaluate an expression that I have stored in a table, and not sure how to force evaluation of a column value.

Some background. This is a generic testing application that we're using to test source to target ETL's.
The specifics of the test expression depend on the actual tables involved. Typicallly it's been table_a.col_a = table_b.col_b but now they want to use inequality or other operators.
The tester's define the test criteria in a table, then we use that criteria to actually score the runtime results.

In my design I have 3 tables.
Test - stores the test definition
Testrun - stores the actual sql for a specific execution of a test
Testscore - stores the actual values of the source and target values. The scores are stored in different rows, with a common name to allow them to be matched in the query.

The pass/fail query looks something like this

Update testscore
Set metricstatus = case when table_a.col_a = table_b.col_b then 'PASS' else 'FAIL' end
..
Where testrunid=x

I want to replace the table_a.col_a = table_b.col_b with the expression stored in the test table and evaluate.

I'm thinking - it's dynamic sql, so I need to build the statement and then evaluate using a function.

Anybody have any comments?

Thanks

Doug Little

Sr. Data Warehouse Architect | Business Intelligence Architecture | Orbitz Worldwide
500 W. Madison, Suite 1000 Chicago IL 60661| Office 312.260.2588 | Fax 312.894.5164 | Cell 847-997-5741
Douglas.Little@orbitz.com<mailto:Douglas.Little@orbitz.com>
[cid:image001.jpg@01CDDD06.E43D5760] orbitz.com<http://www.orbitz.com/&gt; | ebookers.com<http://www.ebookers.com/&gt; | hotelclub.com<http://www.hotelclub.com/&gt; | cheaptickets.com<http://www.cheaptickets.com/&gt; | ratestogo.com<http://www.ratestogo.com/&gt; | asiahotels.com<http://www.asiahotels.com/&gt;

Attachments:

image001.jpgimage/jpeg; name=image001.jpgDownload
#2Merlin Moncure
mmoncure@gmail.com
In reply to: Little, Douglas (#1)
Re: evaluating expressions stored in table

On Tue, Dec 18, 2012 at 10:03 AM, Little, Douglas <DOUGLAS.LITTLE@orbitz.com

wrote:

Hi,****

** **

I need to evaluate an expression that I have stored in a table, and not
sure how to force evaluation of a column value.****

** **

Some background. This is a generic testing application that we’re using
to test source to target ETL’s.****

The specifics of the test expression depend on the actual tables
involved. Typicallly it’s been table_a.col_a = table_b.col_b but now
they want to use inequality or other operators.****

The tester’s define the test criteria in a table, then we use that
criteria to actually score the runtime results.****

** **

In my design I have 3 tables.****

Test – stores the test definition****

Testrun – stores the actual sql for a specific execution of a test****

Testscore – stores the actual values of the source and target values.
The scores are stored in different rows, with a common name to allow them
to be matched in the query. ****

** **

The pass/fail query looks something like this****

** **

Update testscore****

Set metricstatus = case when table_a.col_a = table_b.col_b then
‘PASS’ else ‘FAIL’ end****

..****

Where testrunid=x****

** **

I want to replace the table_a.col_a = table_b.col_b with the expression
stored in the test table and evaluate. ****

** **

I’m thinking – it’s dynamic sql, so I need to build the statement and then
evaluate using a function.****

** **

Anybody have any comments?

probably you need a pl/pgsql function which wraps your argument table,
builds the query, and invokes the query with EXECUTE.

beware sql injection.

merlin

#3Joe Conway
mail@joeconway.com
In reply to: Merlin Moncure (#2)
Re: evaluating expressions stored in table

On 12/18/2012 08:50 AM, Merlin Moncure wrote:

On Tue, Dec 18, 2012 at 10:03 AM, Little, Douglas
Anybody have any comments?

probably you need a pl/pgsql function which wraps your argument table,
builds the query, and invokes the query with EXECUTE.

For an example see slide 19 here:
http://www.joeconway.com/presentations/LISA2012-PredSrvAnalytics.pdf

beware sql injection.

good point!

Joe

--
Joe Conway
credativ LLC: http://www.credativ.us
Linux, PostgreSQL, and general Open Source
Training, Service, Consulting, & 24x7 Support

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#4Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Little, Douglas (#1)
Re: evaluating expressions stored in table

Douglas Little wrote:

I need to evaluate an expression that I have stored in a table, and not sure how to force evaluation
of a column value.

[...]

The pass/fail query looks something like this

Update testscore
Set metricstatus = case when table_a.col_a = table_b.col_b then 'PASS' else 'FAIL' end
..
Where testrunid=x

I want to replace the table_a.col_a = table_b.col_b with the expression stored in the test table and
evaluate.

I'm thinking - it's dynamic sql, so I need to build the statement and then evaluate using a function.

Anybody have any comments?

I would consider composing the statement in the application code:
SELECT the expression you need, compose the statement, send it
to the database.

If you need to do it on the database side, PL/pgSQL is your friend.
Since PostgreSQL 9.0 you can also use PL/pgSQL in the DO
SQL statement without having to define a function, but that will
probably not help if you need a return value.

Yours,
Laurenz Albe

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general