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/06/07 06:09:00 UTC

svn commit: r782329 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src: main/java/org/apache/ibatis/builder/annotation/ main/java/org/apache/ibatis/builder/xml/ test/java/org/apache/ibatis/submitted/includes/

Author: cbegin
Date: Sun Jun  7 04:08:59 2009
New Revision: 782329

URL: http://svn.apache.org/viewvc?rev=782329&view=rev
Log:
Fixed sql/include reference problem

Added:
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/Fragments.xml
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/IncludeTest.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/Mapper.xml
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/MapperConfig.xml
Modified:
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java?rev=782329&r1=782328&r2=782329&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java Sun Jun  7 04:08:59 2009
@@ -46,7 +46,7 @@
       // ignore, resource is not required
     }
     if (xmlReader != null) {
-      XMLMapperBuilder xmlParser = new XMLMapperBuilder(xmlReader, assistant.getConfiguration(), xmlResource, type.getName());
+      XMLMapperBuilder xmlParser = new XMLMapperBuilder(xmlReader, assistant.getConfiguration(), xmlResource, new HashMap(), type.getName());
       xmlParser.parse();
     }
   }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java?rev=782329&r1=782328&r2=782329&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java Sun Jun  7 04:08:59 2009
@@ -19,6 +19,7 @@
   private boolean parsed;
   private XPathParser parser;
   private String environment;
+  private Map<String, XNode> sqlFragments = new HashMap<String, XNode>();  
 
   public XMLConfigBuilder(Reader reader) {
     this(reader, null, null);
@@ -206,12 +207,12 @@
         if (resource != null && url == null) {
           ErrorContext.instance().resource(resource);
           reader = Resources.getResourceAsReader(resource);
-          XMLMapperBuilder mapperParser = new XMLMapperBuilder(reader, configuration, resource);
+          XMLMapperBuilder mapperParser = new XMLMapperBuilder(reader, configuration, resource, sqlFragments);
           mapperParser.parse();
         } else if (url != null && resource == null) {
           ErrorContext.instance().resource(url);
           reader = Resources.getUrlAsReader(url);
-          XMLMapperBuilder mapperParser = new XMLMapperBuilder(reader, configuration, url);
+          XMLMapperBuilder mapperParser = new XMLMapperBuilder(reader, configuration, url, sqlFragments);
           mapperParser.parse();
         } else {
           throw new BuilderException("A mapper element may only specify a url or resource, but not both.");

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java?rev=782329&r1=782328&r2=782329&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java Sun Jun  7 04:08:59 2009
@@ -12,18 +12,19 @@
 public class XMLMapperBuilder extends BaseBuilder {
 
   private XPathParser parser;
-  private MapperBuilderAssistant assistant;
-  private Map<String, XNode> sqlFragments = new HashMap<String, XNode>();
+  private MapperBuilderAssistant builderAssistant;
+  private Map<String, XNode> sqlFragments;
 
-  public XMLMapperBuilder(Reader reader, Configuration configuration, String resource, String namespace) {
-    this(reader, configuration, resource);
-    this.assistant.setCurrentNamespace(namespace);
+  public XMLMapperBuilder(Reader reader, Configuration configuration, String resource, Map<String, XNode> sqlFragments, String namespace) {
+    this(reader, configuration, resource,sqlFragments);
+    this.builderAssistant.setCurrentNamespace(namespace);
   }
 
-  public XMLMapperBuilder(Reader reader, Configuration configuration, String resource) {
+  public XMLMapperBuilder(Reader reader, Configuration configuration, String resource, Map<String, XNode> sqlFragments) {
     super(configuration);
-    this.assistant = new MapperBuilderAssistant(configuration, resource);
+    this.builderAssistant = new MapperBuilderAssistant(configuration, resource);
     this.parser = new XPathParser(reader, true, new XMLMapperEntityResolver(), configuration.getVariables());
+    this.sqlFragments = sqlFragments;
   }
 
   public void parse() {
@@ -38,7 +39,7 @@
   private void configurationElement(XNode context) {
     try {
       String namespace = context.getStringAttribute("namespace");
-      assistant.setCurrentNamespace(namespace);
+      builderAssistant.setCurrentNamespace(namespace);
       cacheRefElement(context.evalNode("cache-ref"));
       cacheElement(context.evalNode("cache"));
       parameterMapElement(context.evalNodes("/mapper/parameterMap"));
@@ -53,7 +54,7 @@
 
   private void cacheRefElement(XNode context) {
     if (context != null) {
-      assistant.useCacheRef(context.getStringAttribute("namespace"));
+      builderAssistant.useCacheRef(context.getStringAttribute("namespace"));
     }
   }
 
@@ -69,7 +70,7 @@
       Integer size = context.getIntAttribute("size");
       boolean readOnly = context.getBooleanAttribute("readOnly", false);
       Properties props = context.getChildrenAsProperties();
-      assistant.useNewCache(typeClass, evictionClass, flushInterval, size, readOnly, props);
+      builderAssistant.useNewCache(typeClass, evictionClass, flushInterval, size, readOnly, props);
     }
   }
 
@@ -92,10 +93,10 @@
         Class javaTypeClass = resolveClass(javaType);
         JdbcType jdbcTypeEnum = resolveJdbcType(jdbcType);
         Class typeHandlerClass = resolveClass(typeHandler);
-        ParameterMapping parameterMapping = assistant.buildParameterMapping(parameterClass, property, javaTypeClass, jdbcTypeEnum, resultMap, modeEnum, typeHandlerClass, numericScale);
+        ParameterMapping parameterMapping = builderAssistant.buildParameterMapping(parameterClass, property, javaTypeClass, jdbcTypeEnum, resultMap, modeEnum, typeHandlerClass, numericScale);
         parameterMappings.add(parameterMapping);
       }
-      assistant.addParameterMap(id, parameterClass, parameterMappings);
+      builderAssistant.addParameterMap(id, parameterClass, parameterMappings);
     }
   }
 
@@ -137,7 +138,7 @@
         resultMappings.add(buildResultMappingFromContext(resultChild, typeClass, flags));
       }
     }
-    return assistant.addResultMap(id, typeClass, extend, discriminator, resultMappings);
+    return builderAssistant.addResultMap(id, typeClass, extend, discriminator, resultMappings);
   }
 
   private void processConstructorElement(XNode resultChild, Class resultType, List<ResultMapping> resultMappings) throws Exception {
@@ -167,19 +168,20 @@
           processNestedResultMappings(caseChild, resultMappings));
       discriminatorMap.put(value, resultMap);
     }
-    return assistant.buildDiscriminator(resultType, column, javaTypeClass, jdbcTypeEnum, typeHandlerClass, discriminatorMap);
+    return builderAssistant.buildDiscriminator(resultType, column, javaTypeClass, jdbcTypeEnum, typeHandlerClass, discriminatorMap);
   }
 
   private void sqlElement(List<XNode> list) throws Exception {
     for (XNode context : list) {
       String id = context.getStringAttribute("id");
+      id = builderAssistant.applyCurrentNamespace(id);
       sqlFragments.put(id, context);
     }
   }
 
   private void buildStatementFromContext(List<XNode> list) {
     for (XNode context : list) {
-      final XMLStatementBuilder statementParser = new XMLStatementBuilder(configuration, assistant, this);
+      final XMLStatementBuilder statementParser = new XMLStatementBuilder(configuration, builderAssistant, this);
       statementParser.parseStatementNode(context);
     }
   }
@@ -196,7 +198,7 @@
     Class javaTypeClass = resolveClass(javaType);
     Class typeHandlerClass = resolveClass(typeHandler);
     JdbcType jdbcTypeEnum = resolveJdbcType(jdbcType);
-    return assistant.buildResultMapping(resultType, property, column, javaTypeClass, jdbcTypeEnum, nestedSelect, nestedResultMap, typeHandlerClass, flags);
+    return builderAssistant.buildResultMapping(resultType, property, column, javaTypeClass, jdbcTypeEnum, nestedSelect, nestedResultMap, typeHandlerClass, flags);
   }
 
   private String processNestedResultMappings(XNode context, List<ResultMapping> resultMappings) throws Exception {
@@ -212,7 +214,7 @@
   }
 
   private void bindMapperForNamespace() {
-    String namespace = assistant.getCurrentNamespace();
+    String namespace = builderAssistant.getCurrentNamespace();
     if (namespace != null) {
       Class boundType = null;
       try {

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java?rev=782329&r1=782328&r2=782329&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java Sun Jun  7 04:08:59 2009
@@ -11,12 +11,12 @@
 
 public class XMLStatementBuilder extends BaseBuilder {
 
-  private MapperBuilderAssistant sequentialBuilder;
+  private MapperBuilderAssistant builderAssistant;
   private XMLMapperBuilder xmlMapperParser;
 
-  public XMLStatementBuilder(Configuration configuration, MapperBuilderAssistant sequentialBuilder, XMLMapperBuilder xmlMapperParser) {
+  public XMLStatementBuilder(Configuration configuration, MapperBuilderAssistant builderAssistant, XMLMapperBuilder xmlMapperParser) {
     super(configuration);
-    this.sequentialBuilder = sequentialBuilder;
+    this.builderAssistant = builderAssistant;
     this.xmlMapperParser = xmlMapperParser;
   }
 
@@ -55,7 +55,7 @@
         ? new Jdbc3KeyGenerator() : new NoKeyGenerator();
     }
 
-    sequentialBuilder.addMappedStatement(id, sqlSource, statementType, sqlCommandType,
+    builderAssistant.addMappedStatement(id, sqlSource, statementType, sqlCommandType,
         fetchSize, timeout, parameterMap, parameterTypeClass, resultMap, resultTypeClass,
         resultSetTypeEnum, flushCache, useCache, keyGenerator,keyProperty);
   }
@@ -129,11 +129,11 @@
       SqlSource sqlSource = new DynamicSqlSource(configuration, rootSqlNode);
       SqlCommandType sqlCommandType = SqlCommandType.SELECT;
 
-      sequentialBuilder.addMappedStatement(id, sqlSource, statementType, sqlCommandType,
+      builderAssistant.addMappedStatement(id, sqlSource, statementType, sqlCommandType,
           fetchSize, timeout, parameterMap, parameterTypeClass, resultMap, resultTypeClass,
           resultSetTypeEnum, flushCache, useCache, keyGenerator,keyProperty);
 
-      MappedStatement keyStatement = configuration.getMappedStatement(sequentialBuilder.applyCurrentNamespace(id));
+      MappedStatement keyStatement = configuration.getMappedStatement(builderAssistant.applyCurrentNamespace(id));
 
       configuration.addKeyGenerator(id, new SelectKeyGenerator(keyStatement,executeBefore));
     }
@@ -142,9 +142,10 @@
   private class IncludeNodeHandler implements NodeHandler {
     public void handleNode(XNode nodeToHandle, List<SqlNode> targetContents) {
       String refid = nodeToHandle.getStringAttribute("refid");
+      refid = builderAssistant.applyCurrentNamespace(refid);
       XNode includeNode = xmlMapperParser.getSqlFragment(refid);
       if (includeNode == null) {
-        String nsrefid = sequentialBuilder.applyCurrentNamespace(refid);
+        String nsrefid = builderAssistant.applyCurrentNamespace(refid);
         includeNode = xmlMapperParser.getSqlFragment(nsrefid);
         if (includeNode == null) {
           throw new BuilderException("Could not find SQL statement to include with refid '" + refid + "'");

Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/Fragments.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/Fragments.xml?rev=782329&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/Fragments.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/Fragments.xml Sun Jun  7 04:08:59 2009
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
+<mapper namespace="org.apache.ibatis.submitted.includes.fragments">
+  <sql id="select">
+    select
+  </sql>
+  <sql id="update">
+    update
+  </sql>
+</mapper>
\ No newline at end of file

Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/IncludeTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/IncludeTest.java?rev=782329&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/IncludeTest.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/IncludeTest.java Sun Jun  7 04:08:59 2009
@@ -0,0 +1,20 @@
+package org.apache.ibatis.submitted.includes;
+
+import java.io.Reader;
+
+import junit.framework.TestCase;
+
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
+
+public class IncludeTest extends TestCase {
+
+    public void testIncludes() throws Exception {
+        String resource = "org/apache/ibatis/submitted/includes/MapperConfig.xml";
+        Reader reader = Resources.getResourceAsReader(resource);
+        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
+        SqlSessionFactory sqlMapper = builder.build(reader);
+        assertNotNull(sqlMapper);
+    }
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/Mapper.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/Mapper.xml?rev=782329&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/Mapper.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/Mapper.xml Sun Jun  7 04:08:59 2009
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
+<mapper namespace="org.apache.ibatis.submitted.includes.mapper">
+  <sql id="sometable">
+    SomeTable
+  </sql>
+  
+  <select id="select" resultType="map">
+    <include refid="org.apache.ibatis.submitted.includes.fragments.select"/>
+    field1, field2, field3
+    from
+    <include refid="sometable" />
+  </select>
+  
+  <update id="update" parameterType="map">
+    <include refid="org.apache.ibatis.submitted.includes.fragments.update"/>
+    <include refid="org.apache.ibatis.submitted.includes.mapper.sometable" />
+    set Field2 = #{field2,jdbcType=INTEGER},
+      Field3 = #{field3,jdbcType=VARCHAR},
+    where field1 = #{field1,jdbcType=INTEGER}
+  </update>
+</mapper>
\ No newline at end of file

Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/MapperConfig.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/MapperConfig.xml?rev=782329&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/MapperConfig.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/includes/MapperConfig.xml Sun Jun  7 04:08:59 2009
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE configuration
+    PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
+    "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
+<configuration>
+
+  <mappers>
+    <mapper resource="org/apache/ibatis/submitted/includes/Fragments.xml" />
+    <mapper resource="org/apache/ibatis/submitted/includes/Mapper.xml" />
+  </mappers>
+
+</configuration>