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 2006/05/24 03:45:32 UTC
svn commit: r409034 -
/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java
Author: aadamchik
Date: Tue May 23 18:45:32 2006
New Revision: 409034
URL: http://svn.apache.org/viewvc?rev=409034&view=rev
Log:
CAY-525 - a very minor performance enhancement that speeds up batch row-to-object conversions by reusing
snapshot query instance.
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java?rev=409034&r1=409033&r2=409034&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java Tue May 23 18:45:32 2006
@@ -64,6 +64,7 @@
import java.util.List;
import java.util.Map;
+import org.objectstyle.cayenne.DataChannel;
import org.objectstyle.cayenne.DataObject;
import org.objectstyle.cayenne.DataRow;
import org.objectstyle.cayenne.Fault;
@@ -516,6 +517,12 @@
synchronized (this) {
int size = objects.size();
+
+ // used to manually do what 'getCachedSnapshot' does, saving some CPU
+ // cycles in the loop....
+ CachedSnapshotQuery idQuery = null;
+ DataChannel channel = context.getChannel();
+
for (int i = 0; i < size; i++) {
DataObject object = (DataObject) objects.get(i);
@@ -528,7 +535,19 @@
// add snapshots if refresh is forced, or if a snapshot is
// missing
- DataRow cachedSnapshot = getCachedSnapshot(oid);
+
+ if (idQuery == null) {
+ idQuery = new CachedSnapshotQuery(oid);
+ }
+ else {
+ idQuery.resetId(oid);
+ }
+
+ List cachedSnapshotList = channel.onQuery(context, idQuery).firstList();
+
+ DataRow cachedSnapshot = cachedSnapshotList.isEmpty()
+ ? null
+ : (DataRow) cachedSnapshotList.get(0);
if (refresh || cachedSnapshot == null) {
DataRow newSnapshot = (DataRow) snapshots.get(i);
@@ -728,10 +747,7 @@
public DataRow getCachedSnapshot(ObjectId oid) {
if (context != null && context.getChannel() != null) {
- ObjectIdQuery query = new ObjectIdQuery(
- oid,
- true,
- ObjectIdQuery.CACHE_NOREFRESH);
+ ObjectIdQuery query = new CachedSnapshotQuery(oid);
List results = context.getChannel().onQuery(context, query).firstList();
return results.isEmpty() ? null : (DataRow) results.get(0);
}
@@ -1359,6 +1375,21 @@
*/
public void arcDeleted(Object nodeId, Object targetNodeId, Object arcId) {
// noop
+ }
+
+
+ // an ObjectIdQuery optimized for retrieval of multiple snapshots - it can be reset
+ // with the new id
+ final class CachedSnapshotQuery extends ObjectIdQuery {
+
+ CachedSnapshotQuery(ObjectId oid) {
+ super(oid, true, ObjectIdQuery.CACHE_NOREFRESH);
+ }
+
+ void resetId(ObjectId oid) {
+ this.objectId = oid;
+ this.replacementQuery = null;
+ }
}
class SnapshotEventDecorator implements GraphDiff {