Author: jgbutler
Date: Tue Apr 13 21:22:04 2010
New Revision: 933783
URL: http://svn.apache.org/viewvc?rev=933783&view=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=933783&r1=933782&r2=933783&view=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 HashMap<String, 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=933783&r1=933782&r2=933783&view=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 List<Integer> 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;