Ok, I know approximately where the bug is but I don't have enough
experience to fix it. This is probably Andrus' thing.
In SelectQuery line 397:
query.setQualifier(qualifier.expWithParameters(parameters, pruneMissing));
this seems to prune the qualifier to an empty string, regardless of
whether pruneMissing is true or false. Inside expWithParameters() it
executes:
else if (pruneNodeForPrunedChild(operand)) {
// bail out early...
return null;
}
and bails out. It looks like a bug to me that pruneNodeForPrunedChild()
is executing even if pruneMissing is false, but this is just a guess.
Andrus can you please take a look at this? The qualifier string is
"parent = null".
Gili
Gili wrote:
>
> Ah ha! Found it! It's a bug in the cached mapped query support
> again. DataContext line 1237, when we generate a new query we don't copy
> over the qualifier string. I've moved this email over to the dev list.
>
> The problem is that the code invokes select.createQuery() which
> constructs a new Query based upon the old one but defaults to
> pruneMissing = true... for some unknown reason, this strips away my
> qualifier. It is true it has no parameters, but none of them are bound
> parameters either, so I don't think it should be stripping them away. So
> that's one bug (I think) and I think there is also a second one in that
> that we shouldn't be using pruneMissing = true in the first place for
> constructing a cached SelectQuery based upon the original SelectQuery.
> The parameters before and after should match up 100% and if not we
> should throw an error.
>
> Gili
>
> Gili wrote:
>
>>
>> Well, I know that MySQL (which I use) expects "is null" but when I
>> enter this in modeler the field turns red (indicating invalid syntax)
>> and it rejects the value. So either this is a modeler bug or a Cayenne
>> one because I honestly don't see how I'm supposed to get this working :)
>> in-so-far as I'm concerned it would be great if I could consistently
>> enter "= null" in the modeler and Cayenne would translate it to the
>> appropriate syntax for me. Looking at the code, I'm pretty sure that's
>> sort of what it was meant to do.
>>
>> Gili
>>
>> Mike Kienenberger wrote:
>>
>>> Qualifier null handling is database-dependent.
>>> Some databases require "is null" and some require "= null" while some
>>> will accept both.
>>>
>>> You'd either have to explicitly choose the supported type for your
>>> query or (probably better) use "value = $nullValue" and set $nullValue
>>> to null in your use of the qualifier. That should allow Cayenne to
>>> correctly choose the right operator.
>>>
>>> On 9/9/05, Gili <cowwo..bs.darktech.org> wrote:
>>>
>>>> Hi,
>>>>
>>>> I've declared a SelectQuery in the modeler. The qualifier is
>>>> set to
>>>> "parent = null" where "parent" is a to-one relationship. Anyway, at
>>>> runtime with logging enabled I can see that "parent is null" is never
>>>> passed onto the SQL query, as a result I am getting results back where
>>>> the parent is non-null. I am invoking the query using:
>>>>
>>>> context.performQuery("DefaultTheme.getRoot", false);
>>>>
>>>> it does not take any parameters. I tried searching the
>>>> mailing list but
>>>> found no mention of this. Is my qualifier syntax wrong or is something
>>>> wrong with the modeler?
>>>>
>>>> Thank you,
>>>> Gili
>>>> --
>>>> http://www.desktopbeautifier.com/
>>>>
>>>
>>>
>>
>
-- http://www.desktopbeautifier.com/
This archive was generated by hypermail 2.0.0 : Fri Sep 09 2005 - 12:39:21 EDT