Author: cbegin
Date: Mon Sep 28 07:35:39 2009
New Revision: 819468
URL: http://svn.apache.org/viewvc?rev=819468&view=rev
Log:
Fixed one of 2 failing legacy tests. 1 to go.
Modified:
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
Modified:
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
URL:
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java?rev=819468&r1=819467&r2=819468&view=diff
==============================================================================
---
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
(original)
+++
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
Mon Sep 28 07:35:39 2009
@@ -180,12 +180,14 @@
final List<String> unmappedColumnNames = new ArrayList<String>();
final ResultLoaderRegistry lazyLoader =
instantiateResultLoaderRegistry();
Object resultObject = createResultObject(rs, resultMap, lazyLoader);
- if (!PlatformType.isPlatformType(resultMap.getType())) {
+ if (resultObject != null &&
!PlatformType.isPlatformType(resultMap.getType())) {
final MetaObject metaObject = MetaObject.forObject(resultObject);
loadMappedAndUnmappedColumnNames(rs, resultMap, mappedColumnNames,
unmappedColumnNames);
- applyPropertyMappings(rs, resultMap, mappedColumnNames, metaObject,
lazyLoader);
- applyAutomaticMappings(rs, unmappedColumnNames, metaObject);
- applyNestedResultMappings(rs, resultMap, metaObject);
+ boolean foundValues = resultMap.getConstructorResultMappings().size()
> 0;
+ foundValues = applyPropertyMappings(rs, resultMap, mappedColumnNames,
metaObject, lazyLoader) || foundValues;
+ foundValues = applyAutomaticMappings(rs, unmappedColumnNames,
metaObject) || foundValues;
+ foundValues = applyNestedResultMappings(rs, resultMap, metaObject) ||
foundValues;
+ resultObject = foundValues ? resultObject : null;
}
if (rowKey != NULL_ROW_KEY) {
rowValueCache.put(rowKey, resultObject);
@@ -206,7 +208,8 @@
// PROPERTY MAPPINGS
//
- private void applyPropertyMappings(ResultSet rs, ResultMap resultMap,
List<String> mappedColumnNames, MetaObject metaObject, ResultLoaderRegistry
lazyLoader) throws SQLException {
+ private boolean applyPropertyMappings(ResultSet rs, ResultMap resultMap,
List<String> mappedColumnNames, MetaObject metaObject, ResultLoaderRegistry
lazyLoader) throws SQLException {
+ boolean foundValues = false;
final List<ResultMapping> propertyMappings =
resultMap.getPropertyResultMappings();
for (ResultMapping propertyMapping : propertyMappings) {
final String column = propertyMapping.getColumn();
@@ -215,9 +218,11 @@
if (value != null) {
final String property = propertyMapping.getProperty();
metaObject.setValue(property, value);
+ foundValues = true;
}
}
}
+ return foundValues;
}
private Object getPropertyMappingValue(ResultSet rs, MetaObject
metaResultObject, ResultMapping propertyMapping, ResultLoaderRegistry
lazyLoader) throws SQLException {
@@ -231,7 +236,8 @@
return null;
}
- private void applyAutomaticMappings(ResultSet rs, List<String>
unmappedColumnNames, MetaObject metaObject) throws SQLException {
+ private boolean applyAutomaticMappings(ResultSet rs, List<String>
unmappedColumnNames, MetaObject metaObject) throws SQLException {
+ boolean foundValues = false;
for (String columnName : unmappedColumnNames) {
final String property = metaObject.findProperty(columnName);
if (property != null) {
@@ -241,10 +247,12 @@
final Object value = typeHandler.getResult(rs, columnName);
if (value != null) {
metaObject.setValue(property, value);
+ foundValues = true;
}
}
}
}
+ return foundValues;
}
private void loadMappedAndUnmappedColumnNames(ResultSet rs, ResultMap
resultMap, List<String> mappedColumnNames, List<String> unmappedColumnNames)
throws SQLException {
@@ -270,7 +278,7 @@
private Object createResultObject(ResultSet rs, ResultMap resultMap,
ResultLoaderRegistry lazyLoader) throws SQLException {
final Object resultObject = createResultObject(rs, resultMap);
- if (configuration.isLazyLoadingEnabled()) {
+ if (resultObject != null && configuration.isLazyLoadingEnabled()) {
return ResultObjectProxy.createProxy(resultMap.getType(), resultObject,
lazyLoader);
}
return resultObject;
@@ -279,7 +287,7 @@
private Object createResultObject(ResultSet rs, ResultMap resultMap) throws
SQLException {
final Class resultType = resultMap.getType();
final List<ResultMapping> constructorMappings =
resultMap.getConstructorResultMappings();
- if (typeHandlerRegistry.hasTypeHandler(resultType)) {
+ if (PlatformType.isPlatformType(resultType)) {
return createPrimitiveResultObject(rs, resultType);
} else if (constructorMappings.size() > 0) {
return createParameterizedResultObject(rs, resultType,
constructorMappings);
@@ -289,6 +297,7 @@
}
private Object createParameterizedResultObject(ResultSet rs, Class
resultType, List<ResultMapping> constructorMappings) throws SQLException {
+ boolean foundValues = false;
final List<Class> parameterTypes = new ArrayList<Class>();
final List<Object> parameterValues = new ArrayList<Object>();
for (ResultMapping constructorMapping : constructorMappings) {
@@ -298,8 +307,9 @@
final Object value = typeHandler.getResult(rs, column);
parameterTypes.add(parameterType);
parameterValues.add(value);
+ foundValues = value != null || foundValues;
}
- return objectFactory.create(resultType, parameterTypes, parameterValues);
+ return foundValues ? objectFactory.create(resultType, parameterTypes,
parameterValues) : null;
}
private Object createPrimitiveResultObject(ResultSet rs, Class resultType)
throws SQLException {
@@ -404,7 +414,8 @@
// NESTED RESULT MAP (JOIN MAPPING)
//
- private void applyNestedResultMappings(ResultSet rs, ResultMap resultMap,
MetaObject metaObject) {
+ private boolean applyNestedResultMappings(ResultSet rs, ResultMap resultMap,
MetaObject metaObject) {
+ boolean foundValues = false;
for (ResultMapping resultMapping : resultMap.getPropertyResultMappings()) {
final String nestedResultMapId = resultMapping.getNestedResultMapId();
if (nestedResultMapId != null) {
@@ -422,6 +433,7 @@
} else {
metaObject.setValue(resultMapping.getProperty(), rowValue);
}
+ foundValues = true;
}
} catch (Exception e) {
@@ -429,6 +441,7 @@
}
}
}
+ return foundValues;
}
private Object instantiateCollectionPropertyIfAppropriate(ResultMapping
resultMapping, MetaObject metaObject) {