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>