You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2008/07/18 08:30:03 UTC

svn commit: r677835 - in /ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine: builder/xml/SqlMapParser.java builder/xml/sql-map-2.dtd config/ResultMapConfig.java mapping/result/ResultMap.java mapping/result/ResultMapping.java

Author: cbegin
Date: Thu Jul 17 23:30:03 2008
New Revision: 677835

URL: http://svn.apache.org/viewvc?rev=677835&view=rev
Log:
JIRA 375 "Provide a way for not creating items from nested ResultMaps when the items contain only null values"

Modified:
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/config/ResultMapConfig.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/result/ResultMap.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/result/ResultMapping.java

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java?rev=677835&r1=677834&r2=677835&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java Thu Jul 17 23:30:03 2008
@@ -243,6 +243,7 @@
         String statementName = childAttributes.getProperty("select");
         String resultMapName = childAttributes.getProperty("resultMap");
         String callback = childAttributes.getProperty("typeHandler");
+        String notNullColumn = childAttributes.getProperty("notNullColumn");
 
         state.getConfig().getErrorContext().setMoreInfo("Check the result mapping property type or name.");
         Class javaClass = null;
@@ -275,7 +276,7 @@
           }
         }
 
-        state.getResultConfig().addResultMapping(propertyName, columnName, columnIndex, javaClass, jdbcType, nullValue, statementName, resultMapName, typeHandlerImpl);
+        state.getResultConfig().addResultMapping(propertyName, columnName, columnIndex, javaClass, jdbcType, nullValue, notNullColumn, statementName, resultMapName, typeHandlerImpl);
       }
     });
 

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd?rev=677835&r1=677834&r2=677835&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd Thu Jul 17 23:30:03 2008
@@ -91,6 +91,7 @@
 columnIndex CDATA #IMPLIED
 jdbcType CDATA #IMPLIED
 nullValue CDATA #IMPLIED
+notNullColumn CDATA #IMPLIED
 select CDATA #IMPLIED
 resultMap CDATA #IMPLIED
 typeHandler CDATA #IMPLIED

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/config/ResultMapConfig.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/config/ResultMapConfig.java?rev=677835&r1=677834&r2=677835&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/config/ResultMapConfig.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/config/ResultMapConfig.java Thu Jul 17 23:30:03 2008
@@ -101,7 +101,7 @@
     discriminator.addSubMap(value.toString(), resultMap);
   }
 
-  public void addResultMapping(String propertyName, String columnName, Integer columnIndex, Class javaClass, String jdbcType, String nullValue, String statementName, String resultMapName, Object impl) {
+  public void addResultMapping(String propertyName, String columnName, Integer columnIndex, Class javaClass, String jdbcType, String nullValue, String notNullColumn, String statementName, String resultMapName, Object impl) {
     errorContext.setObjectId(propertyName + " mapping of the " + resultMap.getId() + " result map");
     TypeHandler handler;
     if (impl != null) {
@@ -121,6 +121,7 @@
     mapping.setJdbcTypeName(jdbcType);
     mapping.setTypeHandler(handler);
     mapping.setNullValue(nullValue);
+    mapping.setNotNullColumn(notNullColumn);
     mapping.setStatementName(statementName);
     mapping.setNestedResultMapName(resultMapName);
     if (resultMapName != null && resultMapName.length() > 0) {

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/result/ResultMap.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/result/ResultMap.java?rev=677835&r1=677834&r2=677835&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/result/ResultMap.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/result/ResultMap.java Thu Jul 17 23:30:03 2008
@@ -443,14 +443,23 @@
         }
       }
 
-      values = resultMap.getResults(statementScope, statementScope.getResultSet());
-      if (statementScope.isRowDataFound()) {
-        Object o = resultMap.setResultObjectValues(statementScope, null, values);
-        if (o != NO_VALUE) {
-          if (obj != null && obj instanceof Collection) {
-            ((Collection) obj).add(o);
-          } else {
-            PROBE.setObject(resultObject, propertyName, o);
+      //JIRA 375 "Provide a way for not creating items from nested ResultMaps when the items contain only null values"
+      boolean subResultObjectAbsent = false;
+      if(mapping.getNotNullColumn() != null) {
+        if(statementScope.getResultSet().getObject(mapping.getNotNullColumn()) == null) {
+          subResultObjectAbsent = true;
+        }
+      }
+      if(!subResultObjectAbsent) {
+        values = resultMap.getResults(statementScope, statementScope.getResultSet());
+        if (statementScope.isRowDataFound()) {
+          Object o = resultMap.setResultObjectValues(statementScope, null, values);
+          if (o != NO_VALUE) {
+            if (obj != null && obj instanceof Collection) {
+              ((Collection) obj).add(o);
+            } else {
+              PROBE.setObject(resultObject, propertyName, o);
+            }
           }
         }
       }
@@ -631,4 +640,4 @@
         return value;
       }
   }
-}
\ No newline at end of file
+}

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/result/ResultMapping.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/result/ResultMapping.java?rev=677835&r1=677834&r2=677835&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/result/ResultMapping.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/result/ResultMapping.java Thu Jul 17 23:30:03 2008
@@ -30,6 +30,7 @@
   private int jdbcType;
   private String jdbcTypeName;
   private String nullValue;
+  private String notNullColumn;
   private String statementName;
   private Class javaType;
 
@@ -178,6 +179,24 @@
   }
 
   /**
+   * Getter for the name of the column to check for null before instantiating a nested resultMapping value
+   *
+   * @return - the null substitution
+   */
+  public String getNotNullColumn() {
+    return notNullColumn;
+  }
+
+  /**
+   * Setter for the name of the column to check for null before instantiating a nested resultMapping value
+   *
+   * @param notNullColumn - the column name
+   */
+  public void setNotNullColumn(String notNullColumn) {
+    this.notNullColumn = notNullColumn;
+  }
+
+  /**
    * Getter for the name of the statement
    * 
    * @return - the name