Author: cbegin Date: Sat Dec 5 02:22:23 2009 New Revision: 887483 URL: http://svn.apache.org/viewvc?rev=887483&view=rev Log: IBATIS-686 Unit tests: Solution for enums is to use toString in the OGJL. Not entirely ideal, but it's a simple approach that works without hacking OGNL. Perhaps a more intuitive solution in the future.
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/CreateDB.sql ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/EnumWithOgnlTest.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.xml ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/PersonMapper.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/CreateDB.sql URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/CreateDB.sql?rev=887483&view=auto ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/CreateDB.sql (added) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/CreateDB.sql Sat Dec 5 02:22:23 2009 @@ -0,0 +1,15 @@ +create table person ( + id int, + firstName varchar(100), + lastName varchar(100), + personType varchar(100) DEFAULT NULL +); + +INSERT INTO person (id, firstName, lastName, personType) +VALUES (1, 'John', 'Smith', 'DIRECTOR'); + +INSERT INTO person (id, firstName, lastName, personType) +VALUES (2, 'Christian', 'Poitras', null); + +INSERT INTO person (id, firstName, lastName, personType) +VALUES (3, 'Clinton', 'Begin', 'EMPLOYEE'); Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/EnumWithOgnlTest.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/EnumWithOgnlTest.java?rev=887483&view=auto ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/EnumWithOgnlTest.java (added) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/EnumWithOgnlTest.java Sat Dec 5 02:22:23 2009 @@ -0,0 +1,95 @@ +package org.apache.ibatis.submitted.ognl_enum; + +import java.io.PrintWriter; +import java.io.Reader; +import java.sql.Connection; +import java.sql.DriverManager; +import java.util.List; + +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.apache.ibatis.submitted.ognl_enum.Person.Type; +import org.apache.ibatis.submitted.ognl_enum.PersonMapper.PersonType; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class EnumWithOgnlTest { + + 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:ognl_enum", "sa", + ""); + + Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/ognl_enum/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/ognl_enum/ibatisConfig.xml"); + sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); + reader.close(); + } finally { + if (conn != null) { + conn.close(); + } + } + } + + @Test + public void testEnumWithOgnl() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + List<Person> persons = personMapper.selectAllByType(null); + Assert.assertEquals("Persons must contain 3 persons", 3, persons.size()); + } + @Test + public void testEnumWithOgnlDirector() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + List<Person> persons = personMapper.selectAllByType(Person.Type.DIRECTOR); + Assert.assertEquals("Persons must contain 1 persons", 1, persons.size()); + } + @Test + public void testEnumWithOgnlDirectorNameAttribute() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + List<Person> persons = personMapper.selectAllByTypeNameAttribute(Person.Type.DIRECTOR); + Assert.assertEquals("Persons must contain 1 persons", 1, persons.size()); + } + @Test + public void testEnumWithOgnlDirectorWithInterface() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + List<Person> persons = personMapper.selectAllByTypeWithInterface(new PersonType() { + public Type getType() { + return Person.Type.DIRECTOR; + } + }); + Assert.assertEquals("Persons must contain 1 persons", 1, persons.size()); + } + @Test + public void testEnumWithOgnlDirectorNameAttributeWithInterface() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + List<Person> persons = personMapper.selectAllByTypeNameAttributeWithInterface(new PersonType() { + public Type getType() { + return Person.Type.DIRECTOR; + } + }); + Assert.assertEquals("Persons must contain 1 persons", 1, persons.size()); + } +} Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.java?rev=887483&view=auto ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.java (added) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.java Sat Dec 5 02:22:23 2009 @@ -0,0 +1,30 @@ +package org.apache.ibatis.submitted.ognl_enum; + +public class Person { + public enum Type { + EMPLOYEE, + DIRECTOR + } + + 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; + } +} Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.xml URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.xml?rev=887483&view=auto ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.xml (added) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.xml Sat Dec 5 02:22:23 2009 @@ -0,0 +1,64 @@ +<?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.ognl_enum.PersonMapper"> + + <resultMap id="personMap" type="Person"> + <id property="id" column="id"/> + <result property="firstName" column="firstName"/> + <result property="lastName" column="lastName"/> + </resultMap> + + + <select id="selectAllByType" resultMap="personMap" parameterType="org.apache.ibatis.submitted.ognl_enum.Person$Type"> + SELECT id, firstName, lastName, personType + FROM person + <where> + <if test="_parameter != null and _parameter.toString() == 'EMPLOYEE'"> + AND personType = #{type} + </if> + <if test="_parameter != null and _parameter.toString() == 'DIRECTOR'"> + AND personType = #{type} + </if> + </where> + </select> + <select id="selectAllByTypeNameAttribute" resultMap="personMap" parameterType="org.apache.ibatis.submitted.ognl_enum.Person$Type"> + SELECT id, firstName, lastName, personType + FROM person + <where> + <if test="name == 'EMPLOYEE'"> + AND personType = #{type} + </if> + <if test="name == 'DIRECTOR'"> + AND personType = #{type} + </if> + </where> + </select> + + <select id="selectAllByTypeWithInterface" resultMap="personMap" parameterType="org.apache.ibatis.submitted.ognl_enum.PersonMapper$PersonType"> + SELECT id, firstName, lastName, personType + FROM person + <where> + <if test="type.toString() == 'EMPLOYEE'"> + AND personType = #{type} + </if> + <if test="type.toString() == 'DIRECTOR'"> + AND personType = #{type} + </if> + </where> + </select> + <select id="selectAllByTypeNameAttributeWithInterface" resultMap="personMap" parameterType="org.apache.ibatis.submitted.ognl_enum.PersonMapper$PersonType"> + SELECT id, firstName, lastName, personType + FROM person + <where> + <if test="type.toString() == 'EMPLOYEE'"> + AND personType = #{type} + </if> + <if test="type.toString() == 'DIRECTOR'"> + AND personType = #{type} + </if> + </where> + </select> +</mapper> Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/PersonMapper.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/PersonMapper.java?rev=887483&view=auto ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/PersonMapper.java (added) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/PersonMapper.java Sat Dec 5 02:22:23 2009 @@ -0,0 +1,15 @@ +package org.apache.ibatis.submitted.ognl_enum; + +import java.util.List; + +public interface PersonMapper { + + public interface PersonType { + public Person.Type getType(); + } + + public List<Person> selectAllByType(Person.Type type); + public List<Person> selectAllByTypeNameAttribute(Person.Type type); + public List<Person> selectAllByTypeWithInterface(PersonType personType); + public List<Person> selectAllByTypeNameAttributeWithInterface(PersonType personType); +} Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml?rev=887483&view=auto ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml (added) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml Sat Dec 5 02:22:23 2009 @@ -0,0 +1,25 @@ +<?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.ognl_enum.Person"/> + </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:ognl_enum"/> + <property name="username" value="sa"/> + </dataSource> + </environment> + </environments> + + <mappers> + <mapper resource="org/apache/ibatis/submitted/ognl_enum/Person.xml"/> + </mappers> +</configuration>