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>