I may be wrong, but I feel it might be useful for a naive outsider to enter this discussion, even if it does mean I get burnt to a crisp. I'm neither a Wine nor a parser developer (though I do have a few years C/++ experience) and fully accept that I may be flamed to a tiny cinder for my comments, but from what I can ascertain, cond.y is a composite file, containing C and bison code. As far as I can tell (not quite brave enough to say AFAICT) the file is first read by the bison processor, which reads the bison parser rules and C code and generates compilable files for the C compiler. Having read what bison is (I think) supposed to do, the tokens declared DO look is if they might be wrong [having looked up 'tilde' and MSI on Google, it looks as though COND_I* actually relates to strings, as it seems that the tilde means 'case insensitive', but I wonder if it has been inadvertently used on integer comparisons by some installers]. It also looks as if the tests in compare_int() for COND_LE and COND_ILE may be wrong, unless there is some kind of (uncommented) logic inversion somewhere. However, uppermost in my mind is Mike McCormack's statement that 'Unfortunately cond.y has nothing to do with SQL.'. If this is indeed the case then everything I have said amounts to nought because I have assumed (very likely incorrectly) that the parser code in cond.y, being part of the MSI dll, relates to the parsing of SQL statements in MSI. If this is the case I fully expect to burn in newbie-land, and apologise for my presumption.
Torch me if you want. Just trying to help, and open the discussion :)