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/10/24 16:47:20 UTC
svn commit: r829380 - in /ibatis/java/ibatis-3/trunk/ibatis-3-core/src:
main/java/org/apache/ibatis/executor/resultset/
test/java/org/apache/ibatis/submitted/multiple_discriminator/
Author: cbegin
Date: Sat Oct 24 14:47:19 2009
New Revision: 829380
URL: http://svn.apache.org/viewvc?rev=829380&view=rev
Log:
IBATIS-679 Multiple discrimator tags are not supported
Added:
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/CreateDB.sql (with props)
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Director.java (with props)
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Employee.java (with props)
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/MultipleDiscriminatorTest.java (with props)
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.java (with props)
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.xml (with props)
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/PersonMapper.java (with props)
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/ibatisConfig.xml (with props)
Modified:
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java?rev=829380&r1=829379&r2=829380&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java Sat Oct 24 14:47:19 2009
@@ -384,12 +384,19 @@
//
public ResultMap resolveDiscriminatedResultMap(ResultSet rs, ResultMap resultMap) throws SQLException {
- final Discriminator discriminator = resultMap.getDiscriminator();
- if (discriminator != null) {
+ Discriminator discriminator = resultMap.getDiscriminator();
+ while (discriminator != null) {
final Object value = getDiscriminatorValue(rs, discriminator);
final String discriminatedMapId = discriminator.getMapIdFor(String.valueOf(value));
if (configuration.hasResultMap(discriminatedMapId)) {
- return configuration.getResultMap(discriminatedMapId);
+ resultMap = configuration.getResultMap(discriminatedMapId);
+ Discriminator lastDiscriminator = discriminator;
+ discriminator = resultMap.getDiscriminator();
+ if (discriminator == lastDiscriminator) {
+ break;
+ }
+ } else {
+ break;
}
}
return resultMap;
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/CreateDB.sql
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/CreateDB.sql?rev=829380&view=auto
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/CreateDB.sql (added)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/CreateDB.sql Sat Oct 24 14:47:19 2009
@@ -0,0 +1,12 @@
+create table person (
+ id int,
+ firstName varchar(100),
+ lastName varchar(100),
+ jobTitle varchar(100),
+ department varchar(100),
+ personType varchar(100) DEFAULT NULL,
+ employeeType varchar(100) DEFAULT NULL
+);
+
+INSERT INTO person (id, firstName, lastName, jobTitle, department, personType, employeeType)
+VALUES (1, 'John', 'Smith', 'IT director', 'IT', 'EmployeeType', 'DirectorType');
Propchange: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/CreateDB.sql
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Director.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Director.java?rev=829380&view=auto
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Director.java (added)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Director.java Sat Oct 24 14:47:19 2009
@@ -0,0 +1,12 @@
+package org.apache.ibatis.submitted.multiple_discriminator;
+
+public class Director extends Employee {
+ private String department;
+
+ public String getDepartment() {
+ return department;
+ }
+ public void setDepartment(String department) {
+ this.department = department;
+ }
+}
Propchange: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Director.java
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Employee.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Employee.java?rev=829380&view=auto
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Employee.java (added)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Employee.java Sat Oct 24 14:47:19 2009
@@ -0,0 +1,12 @@
+package org.apache.ibatis.submitted.multiple_discriminator;
+
+public class Employee extends Person {
+ private String jobTitle;
+
+ public String getJobTitle() {
+ return jobTitle;
+ }
+ public void setJobTitle(String jobTitle) {
+ this.jobTitle = jobTitle;
+ }
+}
Propchange: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Employee.java
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/MultipleDiscriminatorTest.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/MultipleDiscriminatorTest.java?rev=829380&view=auto
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/MultipleDiscriminatorTest.java (added)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/MultipleDiscriminatorTest.java Sat Oct 24 14:47:19 2009
@@ -0,0 +1,65 @@
+package org.apache.ibatis.submitted.multiple_discriminator;
+
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.jdbc.ScriptRunner;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class MultipleDiscriminatorTest {
+
+ private static SqlSessionFactory sqlSessionFactory;
+
+ @BeforeClass
+ public static void initDatabase() throws Exception {
+ Connection conn = null;
+
+ try {
+ Class.forName("org.hsqldb.jdbcDriver");
+ conn = DriverManager.getConnection("jdbc:hsqldb:mem:multiple_discriminator", "sa",
+ "");
+
+ Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/multiple_discriminator/CreateDB.sql");
+
+ ScriptRunner runner = new ScriptRunner(conn);
+ runner.setLogWriter(null);
+ runner.setErrorLogWriter(new PrintWriter(System.err));
+ runner.runScript(reader);
+ conn.commit();
+ reader.close();
+
+ reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/multiple_discriminator/ibatisConfig.xml");
+ sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
+ reader.close();
+ } finally {
+ if (conn != null) {
+ conn.close();
+ }
+ }
+ }
+
+ @Test
+ public void testMultipleDiscriminator() {
+ SqlSession sqlSession = sqlSessionFactory.openSession();
+ PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
+ Person person = personMapper.get(1L);
+ Assert.assertNotNull("Person must not be null", person);
+ Assert.assertEquals("Person must be a director", (Object)Director.class, (Object)person.getClass());
+ }
+ @Test
+ public void testMultipleDiscriminator2() {
+ SqlSession sqlSession = sqlSessionFactory.openSession();
+ PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
+ Person person = personMapper.get2(1L);
+ Assert.assertNotNull("Person must not be null", person);
+ Assert.assertEquals("Person must be a director", (Object)Director.class, (Object)person.getClass());
+ }
+}
Propchange: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/MultipleDiscriminatorTest.java
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.java?rev=829380&view=auto
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.java (added)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.java Sat Oct 24 14:47:19 2009
@@ -0,0 +1,25 @@
+package org.apache.ibatis.submitted.multiple_discriminator;
+
+public class Person {
+ private Long id;
+ private String firstName;
+ private String lastName;
+ public String getFirstName() {
+ return firstName;
+ }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+ public String getLastName() {
+ return lastName;
+ }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+}
Propchange: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.java
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.xml
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.xml?rev=829380&view=auto
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.xml (added)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.xml Sat Oct 24 14:47:19 2009
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!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.multiple_discriminator.PersonMapper">
+
+ <resultMap id="personMap2" type="Person">
+ <id property="id" column="id"/>
+ <result property="firstName" column="firstName"/>
+ <result property="lastName" column="lastName"/>
+ <discriminator column="personType" javaType="String">
+ <case value="EmployeeType">
+ <discriminator column="employeeType" javaType="String">
+ <case value="DirectorType" resultMap="directorMap"/>
+ </discriminator>
+ </case>
+ </discriminator>
+ </resultMap>
+ <resultMap id="personMap" type="Person">
+ <id property="id" column="id"/>
+ <result property="firstName" column="firstName"/>
+ <result property="lastName" column="lastName"/>
+ <discriminator column="personType" javaType="String">
+ <case value="EmployeeType" resultMap="employeeMap"/>
+ </discriminator>
+ </resultMap>
+ <resultMap id="employeeMap" type="Employee" extends="personMap">
+ <result property="jobTitle" column="jobTitle"/>
+ <discriminator column="employeeType" javaType="String">
+ <case value="DirectorType" resultMap="directorMap"/>
+ </discriminator>
+ </resultMap>
+ <resultMap id="directorMap" type="Director" extends="employeeMap">
+ <result property="department" column="department"/>
+ </resultMap>
+
+ <select id="get" resultMap="personMap" parameterType="long">
+ SELECT id, firstName, lastName, jobTitle, department, personType, employeeType
+ FROM Person
+ WHERE id = #{id}
+ </select>
+ <select id="get2" resultMap="personMap2" parameterType="long">
+ SELECT id, firstName, lastName, jobTitle, department, personType, employeeType
+ FROM Person
+ WHERE id = #{id}
+ </select>
+
+</mapper>
Propchange: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/Person.xml
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/PersonMapper.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/PersonMapper.java?rev=829380&view=auto
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/PersonMapper.java (added)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/PersonMapper.java Sat Oct 24 14:47:19 2009
@@ -0,0 +1,7 @@
+package org.apache.ibatis.submitted.multiple_discriminator;
+
+public interface PersonMapper {
+
+ public Person get(Long id);
+ public Person get2(Long id);
+}
Propchange: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/PersonMapper.java
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/ibatisConfig.xml
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/ibatisConfig.xml?rev=829380&view=auto
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/ibatisConfig.xml (added)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/ibatisConfig.xml Sat Oct 24 14:47:19 2009
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE configuration
+ PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
+ "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
+
+<configuration>
+ <typeAliases>
+ <typeAlias alias="Person" type="org.apache.ibatis.submitted.multiple_discriminator.Person"/>
+ <typeAlias alias="Employee" type="org.apache.ibatis.submitted.multiple_discriminator.Employee"/>
+ <typeAlias alias="Director" type="org.apache.ibatis.submitted.multiple_discriminator.Director"/>
+ </typeAliases>
+
+ <environments default="test">
+ <environment id="test">
+ <transactionManager type="JDBC"></transactionManager>
+ <dataSource type="UNPOOLED">
+ <property name="driver" value="org.hsqldb.jdbcDriver"/>
+ <property name="url" value="jdbc:hsqldb:mem:multiple_discriminator"/>
+ <property name="username" value="sa"/>
+ </dataSource>
+ </environment>
+ </environments>
+
+ <mappers>
+ <mapper resource="org/apache/ibatis/submitted/multiple_discriminator/Person.xml"/>
+ </mappers>
+</configuration>
Propchange: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/multiple_discriminator/ibatisConfig.xml
------------------------------------------------------------------------------
svn:executable = *