I’m not sure how useful my work would be since I’m writing against a 15 year 
old Informix version, incompatible with modern JDBC-drivers (for example, 
modern Informix JDBC drivers support {fn ucase} just fine). We’re planning to 
switch this customer to Postgres as soon as they have the resources.

But I’ll of course be happy to contribute any code I create if anyone happens 
to need to communicate with Informix 9.30 in the future :)

Cheers,
- hugi



> On 13. okt. 2015, at 14:55, Andrus Adamchik <[email protected]> wrote:
> 
> Awesome. Congrats :)
> 
> Perhaps with your help we can create a fully working Informix adapter in 
> Cayenne?
> 
> Andrus
> 
>> On Oct 13, 2015, at 10:49 AM, Hugi Thordarson <[email protected]> wrote:
>> 
>> Eeek—I actually did it, and it works like a charm! Found out my factory 
>> needed to override getConditionTranslator(), not getSelectTranslator().
>> 
>> https://gist.github.com/hugith/f04fd044b59c4ce60aa9
>> 
>> For the first time, I feel like a total Cayenne Boss™ :)
>> 
>> - hugi
>> 
>> 
>> 
>>> On 13. okt. 2015, at 14:45, Hugi Thordarson <[email protected]> wrote:
>>> 
>>>> {fn ucase} is JDBC escape syntax, so presumably the driver should convert 
>>>> that to the proper syntax. If a given driver is not capable of doing that, 
>>>> that has to be addressed in DbAdapter for that DB. 
>>>> DbAdapter.getEjbqlTranslatorFactory() is how you customize EJBQL 
>>>> translation. So Mike is right about that.
>>> 
>>> Thanks… I’ve created my adaptor and ensured that it’s being used along with 
>>> my new InformixEJBQLSelectTranslator—but I’m not getting any invocations of 
>>> visitUpper and the code generated still contains {fn ucase(…)}. Shouldn’t 
>>> visitUpper() be where I hook into the generation of the upper statement for 
>>> the DB?
>>> 
>>> https://gist.github.com/hugith/bb68f1944f7a7d754363
>>> 
>>>> BTW, which DB are we talking about?
>>> 
>>> Ah, well… It’s informix— and an old version at that. So I would probably 
>>> always have had to create my own DbAdaptor anyway.
>>> 
>>> Cheers,
>>> - hugi
>>> 
>>> 
>>>> 
>>>> Andrus
>>>> 
>>>> 
>>>>> On Oct 13, 2015, at 5:31 AM, Hugi Thordarson <[email protected]> wrote:
>>>>> 
>>>>> Thanks Mike!
>>>>> 
>>>>> I’m not sure it this is a database plugin problem though. Doing regular 
>>>>> case insensitive queries works fine, it’s only queries created from EJBQL 
>>>>> that fail. Also, the only place in the Cayenne sources I can find a 
>>>>> mention of “ucase" is in EJBQLTranslator’s visitUpper(). Perhaps changing 
>>>>> that method to do upper( rather than {fn ucase. might solve the problem? 
>>>>> I’m going to try that out :).
>>>>> 
>>>>> https://github.com/apache/cayenne/blob/master/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLConditionTranslator.java#L1058
>>>>> 
>>>>> Cheers,
>>>>> - hugi
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>>> Sounds like the DbAdaptor for that database needs to be special-cased.
>>>>>> Lots of examples of how this is done in cayenne/dba/<database>/*,
>>>>>> especially for oracle
>>>>>> 
>>>>>> And it's pretty simple to set your app up to use a custom version of
>>>>>> the dbAdaptor if you don't want to build your own custom version of
>>>>>> cayenne while you wait until it's included in a release.
>>>>>> 
>>>>>> On Mon, Oct 12, 2015 at 12:46 PM, Hugi Thordarson <[email protected]> 
>>>>>> wrote:
>>>>>>> Hi all.
>>>>>>> 
>>>>>>> I’m communicating with a database that doesn’t have the UCASE function, 
>>>>>>> only UPPER.
>>>>>>> 
>>>>>>> When I use case insensitive expressions (for example, 
>>>>>>> User.NAME.likeIgnoreCase(“Bob”)) in a regular SelectQuery, Cayenne 
>>>>>>> generates SQL using the “UPPER” function (for expressions generated 
>>>>>>> using likeIgnoreCase). This works fine.
>>>>>>> 
>>>>>>> But if I generate EJBQL from the expression and then use the resulting 
>>>>>>> string to perform an EJBQLQuery, Cayenne will attempt to use UCASE 
>>>>>>> function in the resulting SQL and things go awry.
>>>>>>> 
>>>>>>> Can I tell the EJBQL SQL translator to use “upper” rather than “ucase” 
>>>>>>> when performing these queries?
>>>>>>> 
>>>>>>> Cheers,
>>>>>>> - hugi
>>>>> 
>>>>> 
>>>> 
>>> 
>> 
>> 
> 

Reply via email to