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

Help me, please,
i have a module, which converts the WHERE clause to a canonical form, i.e. converting a logical clause to a
conjuntionalor 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
comparequeries. Beacause of the same query can be writen in different forms, so to compare queries we must to convert
themto the same form of presentation.
 

--
stvalentine
      


"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