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 2009/01/03 23:04:12 UTC

svn commit: r731095 - in /ibatis/trunk/java/ibatis-3: ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/ ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/impl/ ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/ ibatis-...

Author: cbegin
Date: Sat Jan  3 14:04:11 2009
New Revision: 731095

URL: http://svn.apache.org/viewvc?rev=731095&view=rev
Log:
implemented strict map for result maps

Modified:
    ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlMapParser.java
    ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/impl/SqlMapSessionImpl.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/Configuration.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperParser.java

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlMapParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlMapParser.java?rev=731095&r1=731094&r2=731095&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlMapParser.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlMapParser.java Sat Jan  3 14:04:11 2009
@@ -178,14 +178,10 @@
 
     if (extendedId != null) {
       ResultMap extendedResultMap = config.getResultMap(extendedId);
-      if (extendedResultMap != null) {
-        for (ResultMapping mapping : extendedResultMap.getResultMappings()) {
-          resultMappingList.add(mapping);
-        }
-        resultMapBuilder.discriminator(extendedResultMap.getDiscriminator());
-      } else {
-        throw new SqlMapException("Could not extend non-existant result map named " + extendedId);
+      for (ResultMapping mapping : extendedResultMap.getResultMappings()) {
+        resultMappingList.add(mapping);
       }
+      resultMapBuilder.discriminator(extendedResultMap.getDiscriminator());
     }
 
   }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/impl/SqlMapSessionImpl.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/impl/SqlMapSessionImpl.java?rev=731095&r1=731094&r2=731095&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/impl/SqlMapSessionImpl.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/impl/SqlMapSessionImpl.java Sat Jan  3 14:04:11 2009
@@ -269,8 +269,15 @@
   }
 
   private int getKey(String id, final Object parameterObject) throws SQLException {
-    final MappedStatement keyStatement = configuration.getMappedStatement(selectKeyIdFor(id));
     int key = Integer.MIN_VALUE;
+    String selectKeyId = selectKeyIdFor(id);
+    final MappedStatement keyStatement;
+
+    if (configuration.getMappedStatementNames().contains(selectKeyId)) {
+      keyStatement = configuration.getMappedStatement(selectKeyId);
+    } else {
+      keyStatement = null;
+    }
     if (keyStatement != null) {
       List results = (List) transactionManager.doInTransaction(new TransactionScope() {
         public Object execute(Transaction transaction) throws SQLException {

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java?rev=731095&r1=731094&r2=731095&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java Sat Jan  3 14:04:11 2009
@@ -90,13 +90,14 @@
           // TODO: We need an easy way to unit test this without installing Oracle.
           // Mocks are obvious, but will they be effective enough?  DBunit?
           ResultSet rs = (ResultSet) callableStatement.getObject(i + 1);
-          ResultMap resultMap = mappedStatement.getConfiguration().getResultMap(parameterMapping.getResultMapId());
-          if (resultMap == null) {
-            throw new ExecutorException("Parameter requires ResultMap for output types of java.sql.ResultSet");
-          } else {
+          String resultMapId = parameterMapping.getResultMapId();
+          if (resultMapId != null) {
+            ResultMap resultMap = mappedStatement.getConfiguration().getResultMap(resultMapId);
             DefaultResultHandler resultHandler = new DefaultResultHandler();
             handleResults(rs, resultMap, resultHandler, Executor.NO_ROW_OFFSET, Executor.NO_ROW_LIMIT);
             metaParam.setValue(parameterMapping.getProperty(), resultHandler.getResultList());
+          } else {
+            throw new ExecutorException("Parameter requires ResultMap for output types of java.sql.ResultSet");
           }
           rs.close();
         } else {
@@ -275,8 +276,9 @@
       if (knownResultObject != null && knownResultObject != NO_VALUE) {
         for (ResultMapping resultMapping : resultMappings) {
           Configuration configuration = mappedStatement.getConfiguration();
-          ResultMap nestedResultMap = configuration.getResultMap(resultMapping.getNestedResultMapId());
-          if (nestedResultMap != null) {
+          String nestedResultMapId = resultMapping.getNestedResultMapId();
+          if (nestedResultMapId != null) {
+            ResultMap nestedResultMap = configuration.getResultMap(nestedResultMapId);
             try {
 
               // get the discriminated submap if it exists
@@ -369,11 +371,14 @@
       ResultMapping resultMapping = discriminator.getResultMapping();
       Object value = getPrimitiveResultMappingValue(rs, resultMapping);
       String subMapId = discriminator.getMapIdFor(String.valueOf(value));
-      subMap = mappedStatement.getConfiguration().getResultMap(subMapId);
 
-      if (subMap == null) {
+      try {
+        subMap = mappedStatement.getConfiguration().getResultMap(subMapId);
+      } catch (Exception e) {
         subMap = rm;
-      } else if (subMap != rm) {
+      }
+       
+      if (subMap != rm) {
         subMap = resolveSubMap(rs, subMap);
       }
     }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/Configuration.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/Configuration.java?rev=731095&r1=731094&r2=731095&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/Configuration.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/Configuration.java Sat Jan  3 14:04:11 2009
@@ -42,7 +42,7 @@
   private final TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry();
   private final Map<String, MappedStatement> mappedStatements = new StrictMap<String, MappedStatement>("Mapped Statements collection");
   private final Map<String, Cache> caches = new StrictMap<String, Cache>("Caches collection");
-  private final Map<String, ResultMap> resultMaps = new HashMap<String, ResultMap>();//("Result Maps collection");
+  private final Map<String, ResultMap> resultMaps = new StrictMap<String, ResultMap>("Result Maps collection");
   private final Map<String, ParameterMap> parameterMaps = new StrictMap<String, ParameterMap>("Parameter Maps collection");
 
   public Configuration() {
@@ -193,6 +193,10 @@
     caches.put(cache.getId(), cache);
   }
 
+  public Collection<String> getCacheNames() {
+    return caches.keySet();
+  }
+
   public Collection<Cache> getCaches() {
     return caches.values();
   }
@@ -205,6 +209,10 @@
     resultMaps.put(rm.getId(), rm);
   }
 
+  public Collection<String> getResultMapNames() {
+    return resultMaps.keySet();
+  }
+
   public Collection<ResultMap> getResultMaps() {
     return resultMaps.values();
   }
@@ -217,6 +225,10 @@
     parameterMaps.put(pm.getId(), pm);
   }
 
+  public Collection<String> getParameterMapNames() {
+    return parameterMaps.keySet();
+  }
+
   public Collection<ParameterMap> getParameterMaps() {
     return parameterMaps.values();
   }
@@ -229,6 +241,10 @@
     mappedStatements.put(ms.getId(), ms);
   }
 
+  public Collection<String> getMappedStatementNames() {
+    return mappedStatements.keySet();
+  }
+
   public Collection<MappedStatement> getMappedStatements() {
     return mappedStatements.values();
   }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperParser.java?rev=731095&r1=731094&r2=731095&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperParser.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperParser.java Sat Jan  3 14:04:11 2009
@@ -148,9 +148,6 @@
 
     if (extend != null) {
       ResultMap resultMap = configuration.getResultMap(extend);
-      if (resultMap == null) {
-        throw new ParserException("ResultMap named in extends attribute of " + id + "does not exist or is not defined yet.");
-      }
       resultMappings.addAll(resultMap.getResultMappings());
     }
   }