C++ -> C : Module for converting the WHERE clause to the canonical form with PostgreSQL

Started by St Valentineover 20 years ago2 messageshackers
Jump to latest
#1St Valentine
valentinest@ukr.net

Help me, please,
i have a module, which converts the WHERE clause to a canonical form, i.e. converting a logical clause to a conjuntional or dicjuntional clauses. For example:

(ves > 100 or bbbb = 10) AND (bbbb = aaa + 1 OR (aaaa AND caa))

will be converted to dicjuntional form:

ves>100 AND bbbb=10 AND bbbb=aaa+1 OR пїЅпїЅпїЅ>100 AND bbbb=10 AND aaaa OR ves>100
AND bbbb=10 AND caa

That module is writen in the C++ langguage, how can i connect it to the PostgreSQL sources? In our project we must to compare queries. Beacause of the same query can be writen in different forms, so to compare queries we must to convert them to the same form of presentation.

--
stvalentine

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: St Valentine (#1)
Re: C++ -> C : Module for converting the WHERE clause to the canonical form with PostgreSQL

"St Valentine" <valentinest@ukr.net> writes:

That module is writen in the C++ langguage, how can i connect it to
the PostgreSQL sources?

Convert it to C ;-) Seriously, I think this would be a major pain in
the neck to do --- there are various gotchas like the system headers not
being C++-clean. Why don't you just resurrect the qual canonicalization
logic that existed in src/backend/optimizer/prep/prepqual.c not too long
ago?

In our project we must to compare
queries. Beacause of the same query can be writen in different forms,
so to compare queries we must to convert them to the same form of
presentation.

I find this argument fairly dubious, though, as there are plenty of ways
to write the same query differently. Forcing the condition into CNF or
DNF will fix only some of them.

regards, tom lane