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/26 02:23:57 UTC

svn commit: r409519 - in /incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne: access/DataRowUtils.java map/EntityDescriptor.java property/BaseClassDescriptor.java property/Property.java

Author: aadamchik
Date: Thu May 25 17:23:56 2006
New Revision: 409519

URL: http://svn.apache.org/viewvc?rev=409519&view=rev
Log:
CAY-525 - further optimizing object creation - faster initialization of value holders (skipoing noop SimpleProperties), lazy checking for partial snapshots

Modified:
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowUtils.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/BaseClassDescriptor.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/Property.java

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowUtils.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowUtils.java?rev=409519&r1=409518&r2=409519&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowUtils.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowUtils.java Thu May 25 17:23:56 2006
@@ -123,14 +123,17 @@
 
             while (it.hasNext()) {
                 Map.Entry entry = (Map.Entry) it.next();
-                String attrName = (String) entry.getKey();
+
                 ObjAttribute attr = (ObjAttribute) entry.getValue();
                 String dbAttrPath = attr.getDbAttributePath();
-                object.writePropertyDirectly(attrName, snapshot.get(dbAttrPath));
+
+                Object value = snapshot.get(dbAttrPath);
+                object.writePropertyDirectly(attr.getName(), value);
 
                 // note that a check "snaphsot.get(..) == null" would be incorrect in this
-                // case, as NULL value is entirely valid.
-                if (!snapshot.containsKey(dbAttrPath)) {
+                // case, as NULL value is entirely valid; still save a map lookup by
+                // checking for the null value first
+                if (value == null && !snapshot.containsKey(dbAttrPath)) {
                     isPartialSnapshot = true;
                 }
             }
@@ -143,7 +146,7 @@
 
                 Map.Entry e = (Map.Entry) it.next();
                 ObjRelationship rel = (ObjRelationship) e.getValue();
-                
+
                 if (rel.isToMany()) {
 
                     // "to many" relationships have no information to collect from

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java?rev=409519&r1=409518&r2=409519&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java Thu May 25 17:23:56 2006
@@ -152,8 +152,16 @@
 
         // init property descriptors...
         Map allDescriptors = new HashMap();
-        compileAttributes(allDescriptors);
+
         compileRelationships(resolver, allDescriptors);
+
+        // before we compile attributes, extract all relationship descriptors to a
+        // separate value holder map
+        if(!allDescriptors.isEmpty()) {
+            this.valueHolderProperties = new HashMap(allDescriptors);
+        }
+
+        compileAttributes(allDescriptors);
 
         this.declaredProperties = allDescriptors;
 

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/BaseClassDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/BaseClassDescriptor.java?rev=409519&r1=409518&r2=409519&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/BaseClassDescriptor.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/BaseClassDescriptor.java Thu May 25 17:23:56 2006
@@ -80,6 +80,7 @@
     // compiled properties ...
     protected Class objectClass;
     protected Map declaredProperties;
+    protected Map valueHolderProperties;
     protected Map subclassDescriptors;
     protected PropertyAccessor persistenceStateProperty;
 
@@ -210,10 +211,12 @@
             getSuperclassDescriptor().injectValueHolders(object);
         }
 
-        Iterator it = declaredProperties.values().iterator();
-        while (it.hasNext()) {
-            Property property = (Property) it.next();
-            property.injectValueHolder(object);
+        if (valueHolderProperties != null) {
+            Iterator it = valueHolderProperties.values().iterator();
+            while (it.hasNext()) {
+                Property property = (Property) it.next();
+                property.injectValueHolder(object);
+            }
         }
     }
 

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/Property.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/Property.java?rev=409519&r1=409518&r2=409519&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/Property.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/Property.java Thu May 25 17:23:56 2006
@@ -83,6 +83,9 @@
      * unfaulted value holder and inject it into the object, if an object doesn't have it
      * set yet.
      */
+    // TODO: andrus 5/25/2006 - maybe move this to ArcProperty as simple properties do not
+    // support ValueHolders and ClassDescriptors are smart enough to avoid calling this
+    // method on non-arc property.
     void injectValueHolder(Object object) throws PropertyAccessException;
 
     /**