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;
 
     /**


Reply via email to