Re: NPE in DataDomainQueryAction.java

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Tue Aug 14 2007 - 16:38:02 EDT

  • Next message: Andrus Adamchik (JIRA): "[JIRA] Created: (CAY-847) Expression NULL handling"

    I just committed this fix - figured there's nothing controversial
    about it :-)

    Andrus

    On Aug 11, 2007, at 8:19 PM, Andrus Adamchik wrote:

    > Hi Kevin,
    >
    > I was able to reproduce it based on your earlier note that you
    > turned off caching. No shared cache was the cause of the error, so
    > instead of refreshing I added a check for NULL cache. Additionally
    > following your hint that this code is meaningless for new objects
    > anyways, I added a check for temporary ObjectId. This seems to fix
    > it for me. I am ready to commit it - let me know what you think?
    >
    > Andrus
    >
    >
    > Index: framework/cayenne-jdk1.4-unpublished/src/main/java/org/
    > apache/cayenne/access/DataDomainQueryAction.java
    > ===================================================================
    > --- framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
    > cayenne/access/DataDomainQueryAction.java (revision 560823)
    > +++ framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
    > cayenne/access/DataDomainQueryAction.java (working copy)
    >.. -168,10 +168,10 @@
    > if (query instanceof ObjectIdQuery) {
    > ObjectIdQuery oidQuery = (ObjectIdQuery) query;
    > -
    > DataRow row = null;
    > - if (!oidQuery.isFetchMandatory()) {
    > + if (cache != null
    > + && !oidQuery.isFetchMandatory()) {
    > row = cache.getCachedSnapshot(oidQuery.getObjectId
    > ());
    > }
    >.. -214,8 +214,11 @@
    > return !DONE;
    > }
    > + if(cache == null) {
    > + return !DONE;
    > + }
    > +
    > DataRow sourceRow = cache.getCachedSnapshot
    > (relationshipQuery.getObjectId());
    > -
    > if (sourceRow == null) {
    > return !DONE;
    > }
    > Index: framework/cayenne-jdk1.4-unpublished/src/main/java/org/
    > apache/cayenne/map/AshwoodEntitySorter.java
    > ===================================================================
    > --- framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
    > cayenne/map/AshwoodEntitySorter.java (revision 560823)
    > +++ framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
    > cayenne/map/AshwoodEntitySorter.java (working copy)
    >.. -302,16 +302,22 @@
    > // find committed snapshot - so we can't fetch from the
    > context as it will return
    > // dirty snapshot; must go down the stack instead
    > +
    > + // how do we handle this for NEW objects correctly? For
    > now bail from the method
    > + if (object.getObjectId().isTemporary()) {
    > + return null;
    > + }
    > +
    > ObjectIdQuery query = new ObjectIdQuery(
    > object.getObjectId(),
    > true,
    > ObjectIdQuery.CACHE);
    > QueryResponse response = context.getChannel().onQuery
    > (null, query);
    > List result = response.firstList();
    > - if(result == null || result.size() == 0) {
    > + if (result == null || result.size() == 0) {
    > return null;
    > }
    > -
    > +
    > DataRow snapshot = (DataRow) result.get(0);
    > ObjectId id = snapshot.createTargetObjectId
    > (targetEntityName, finalRel);
    >
    >
    >
    > On Aug 9, 2007, at 6:17 PM, Kevin Menard wrote:
    >
    >>
    >> On Aug 9, 2007, at 3:02 AM, Andrus Adamchik wrote:
    >>
    >>> Kevin,
    >>>
    >>> If you don't mind waiting a few more days, let me play with it
    >>> during the weekend. A test case would help.
    >>>
    >>> Andrus
    >>
    >> That's fine. I patched my local version as a "works for me"
    >> solution, but didn't want to commit it until I was sure it was
    >> correct. I'll try to get together the test case.
    >>
    >> --
    >> Kevin
    >>
    >
    >



    This archive was generated by hypermail 2.0.0 : Tue Aug 14 2007 - 16:38:35 EDT