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());
}