You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2013/07/13 11:24:16 UTC

svn commit: r1502767 - in /cayenne/main/trunk: docs/doc/src/main/resources/ framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/ framework/cayenne-jdk1.5-unp...

Author: aadamchik
Date: Sat Jul 13 09:24:16 2013
New Revision: 1502767

URL: http://svn.apache.org/r1502767
Log:
CAY-1848  New method: ObjectContext.selectOne(Select query)

Modified:
    cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/Cayenne.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContext.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLSelect.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/MockObjectContext.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SQLSelectTest.java

Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=1502767&r1=1502766&r2=1502767&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Sat Jul 13 09:24:16 2013
@@ -13,8 +13,9 @@ Date: 
 ----------------------------------
 Changes/New Features:
 
-CAY-1842  Remove Listeners support from the Modeler 
-CAY-1845  Upgrade javadoc plugin to 2.9.1 
+CAY-1842 Remove Listeners support from the Modeler 
+CAY-1845 Upgrade javadoc plugin to 2.9.1 
+CAY-1848 New method: ObjectContext.selectOne(Select query) 
 
 Bug Fixes:
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java?rev=1502767&r1=1502766&r2=1502767&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java Sat Jul 13 09:24:16 2013
@@ -288,6 +288,9 @@ public abstract class BaseContext implem
 
     public abstract List performQuery(Query query);
 
+    /**
+     * @since 3.2
+     */
     @SuppressWarnings("unchecked")
     public <T> List<T> select(Select<T> query) {
         return performQuery(query);
@@ -296,6 +299,21 @@ public abstract class BaseContext implem
     /**
      * @since 3.2
      */
+    public <T> T selectOne(Select<T> query) {
+        List<T> objects = select(query);
+
+        if (objects.size() == 0) {
+            return null;
+        } else if (objects.size() > 1) {
+            throw new CayenneRuntimeException("Expected zero or one object, instead query matched: " + objects.size());
+        }
+
+        return objects.get(0);
+    }
+
+    /**
+     * @since 3.2
+     */
     public <T> void iterate(Select<T> query, ResultIteratorCallback<T> callback) {
         ResultIterator<T> it = iterator(query);
         try {
@@ -321,18 +339,23 @@ public abstract class BaseContext implem
                         "Error resolving fault, more than one row exists in the database for ObjectId: " + oid);
             }
 
-            // 5/28/2013 - Commented out this block to allow for modifying objects in the postLoad callback
+            // 5/28/2013 - Commented out this block to allow for modifying
+            // objects in the postLoad callback
             // sanity check...
-//            if (object.getPersistenceState() != PersistenceState.COMMITTED) {
-//
-//                String state = PersistenceState.persistenceStateName(object.getPersistenceState());
-//
-//                // TODO: andrus 4/13/2006, modified and deleted states are
-//                // possible due to
-//                // a race condition, should we handle them here?
-//                throw new FaultFailureException("Error resolving fault for ObjectId: " + oid + " and state (" + state
-//                        + "). Possible cause - matching row is missing from the database.");
-//            }
+            // if (object.getPersistenceState() != PersistenceState.COMMITTED) {
+            //
+            // String state =
+            // PersistenceState.persistenceStateName(object.getPersistenceState());
+            //
+            // // TODO: andrus 4/13/2006, modified and deleted states are
+            // // possible due to
+            // // a race condition, should we handle them here?
+            // throw new
+            // FaultFailureException("Error resolving fault for ObjectId: " +
+            // oid + " and state (" + state
+            // +
+            // "). Possible cause - matching row is missing from the database.");
+            // }
         }
 
         // resolve relationship fault

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/Cayenne.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/Cayenne.java?rev=1502767&r1=1502766&r2=1502767&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/Cayenne.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/Cayenne.java Sat Jul 13 09:24:16 2013
@@ -29,7 +29,6 @@ import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.query.ObjectIdQuery;
 import org.apache.cayenne.query.Query;
-import org.apache.cayenne.query.Select;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.reflect.PropertyDescriptor;
 import org.apache.cayenne.reflect.PropertyUtils;
@@ -474,18 +473,6 @@ public class Cayenne {
         return objects.get(0);
     }
 
-    /**
-     * Returns an object or a DataRow that is a result of a given query. If
-     * query returns more than one object, an exception is thrown. If query
-     * returns no objects, null is returned.
-     * 
-     * @since 3.2
-     */
-    @SuppressWarnings("unchecked")
-    public static <T> T objectForSelect(ObjectContext context, Select<T> query) {
-        return (T) objectForQuery(context, query);
-    }
-
     static ObjectId buildId(ObjectContext context, String objEntityName, Object pk) {
         if (pk == null) {
             throw new IllegalArgumentException("Null PK");

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContext.java?rev=1502767&r1=1502766&r2=1502767&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ObjectContext.java Sat Jul 13 09:24:16 2013
@@ -170,10 +170,21 @@ public interface ObjectContext extends S
     /**
      * Executes a selecting query, returning a list of persistent objects or
      * data rows.
+     * 
+     * @since 3.2
      */
     <T> List<T> select(Select<T> query);
 
     /**
+     * Executes a selecting query, returning either NULL if query matched no
+     * objects, or a single object. If query matches more than one object,
+     * {@link CayenneRuntimeException} is thrown.
+     * 
+     * @since 3.2
+     */
+    <T> T selectOne(Select<T> query);
+
+    /**
      * Creates a ResultIterator based on the provided query and passes it to a
      * callback for processing. The caller does not need to worry about closing
      * the iterator. This method takes care of it.

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLSelect.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLSelect.java?rev=1502767&r1=1502766&r2=1502767&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLSelect.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLSelect.java Sat Jul 13 09:24:16 2013
@@ -23,7 +23,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.cayenne.Cayenne;
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.ObjectContext;
@@ -122,7 +121,7 @@ public class SQLSelect<T> extends Indire
      * of "Cayenne.objectForSelect(context, query)".
      */
     public T selectOne(ObjectContext context) {
-        return Cayenne.objectForSelect(context, this);
+        return context.selectOne(this);
     }
 
     public boolean isFetchingDataRows() {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneTest.java?rev=1502767&r1=1502766&r2=1502767&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/CayenneTest.java Sat Jul 13 09:24:16 2013
@@ -19,7 +19,6 @@
 
 package org.apache.cayenne;
 
-import java.nio.channels.Selector;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -182,7 +181,7 @@ public class CayenneTest extends ServerC
 
         SelectQuery<Artist> query = SelectQuery.query(Artist.class, ExpressionFactory.matchDbExp("ARTIST_NAME", "artist2"));
 
-        Artist object = Cayenne.objectForSelect(context, query);
+        Artist object = context.selectOne(query);
 
         assertNotNull(object);
         assertTrue(object instanceof Artist);

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/MockObjectContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/MockObjectContext.java?rev=1502767&r1=1502766&r2=1502767&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/MockObjectContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/MockObjectContext.java Sat Jul 13 09:24:16 2013
@@ -86,6 +86,10 @@ public class MockObjectContext implement
     public <T> List<T> select(Select<T> query) {
         return performQuery(query);
     }
+    
+    public <T> T selectOne(Select<T> query) {
+        return null;
+    }
 
     public int[] performNonSelectingQuery(Query query) {
         return null;

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SQLSelectTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SQLSelectTest.java?rev=1502767&r1=1502766&r2=1502767&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SQLSelectTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SQLSelectTest.java Sat Jul 13 09:24:16 2013
@@ -102,7 +102,7 @@ public class SQLSelectTest extends Serve
         q1.getParameters().put("a", "artist3");
 
         assertFalse(q1.isFetchingDataRows());
-        Artist a = Cayenne.objectForSelect(context, q1);
+        Artist a = context.selectOne(q1);
         assertEquals("artist3", a.getArtistName());
     }