Author: jgbutler
Date: Tue Apr 13 21:22:04 2010
New Revision: 933783
URL: http://svn.apache.org/viewvc?rev=933783view=rev
Log:
Fix for IBATIS-777 - Dynamic context should not call every setter
Modified:
ibatis/java/ibatis-3/trunk/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
ibatis/java/ibatis-3/trunk/src/test/java/org/apache/ibatis/submitted/dynsql/Parameter.java
Modified:
ibatis/java/ibatis-3/trunk/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
URL:
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java?rev=933783r1=933782r2=933783view=diff
==
---
ibatis/java/ibatis-3/trunk/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
(original)
+++
ibatis/java/ibatis-3/trunk/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
Tue Apr 13 21:22:04 2010
@@ -17,17 +17,16 @@ public class DynamicContext {
OgnlRuntime.setPropertyAccessor(ContextMap.class, new ContextAccessor());
}
- private final ContextMap bindings = new ContextMap();
+ private final ContextMap bindings;
private final StringBuilder sqlBuilder = new StringBuilder();
private int uniqueNumber = 0;
public DynamicContext(Configuration configuration, Object parameterObject) {
if (parameterObject != null !(parameterObject instanceof Map)) {
MetaObject metaObject = configuration.newMetaObject(parameterObject);
- String[] names = metaObject.getGetterNames();
- for (String name : names) {
-bindings.put(name, metaObject.getValue(name));
- }
+ bindings = new ContextMap(metaObject);
+} else {
+ bindings = new ContextMap(null);
}
bindings.put(PARAMETER_OBJECT_KEY, parameterObject);
}
@@ -54,6 +53,28 @@ public class DynamicContext {
}
static class ContextMap extends HashMapString, Object {
+private MetaObject parameterMetaObject;
+public ContextMap(MetaObject parameterMetaObject) {
+ this.parameterMetaObject = parameterMetaObject;
+}
+
+@Override
+public Object get(Object key) {
+ if (super.containsKey(key)) {
+return super.get(key);
+ }
+
+ if (parameterMetaObject != null) {
+Object object = parameterMetaObject.getValue(key.toString());
+if (object != null) {
+ super.put(key.toString(), object);
+}
+
+return object;
+ }
+
+ return null;
+}
}
static class ContextAccessor implements PropertyAccessor {
@@ -81,5 +102,4 @@ public class DynamicContext {
map.put(name, value);
}
}
-
}
Modified:
ibatis/java/ibatis-3/trunk/src/test/java/org/apache/ibatis/submitted/dynsql/Parameter.java
URL:
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/src/test/java/org/apache/ibatis/submitted/dynsql/Parameter.java?rev=933783r1=933782r2=933783view=diff
==
---
ibatis/java/ibatis-3/trunk/src/test/java/org/apache/ibatis/submitted/dynsql/Parameter.java
(original)
+++
ibatis/java/ibatis-3/trunk/src/test/java/org/apache/ibatis/submitted/dynsql/Parameter.java
Tue Apr 13 21:22:04 2010
@@ -25,6 +25,12 @@ public class Parameter {
private String schema;
private ListInteger ids;
private boolean enabled;
+
+ public String getFred() {
+// added this method to check for bug with DynamicContext
+// IBATIS-777
+throw new RuntimeException(This method should not be called.);
+ }
public String getSchema() {
return schema;