Author: jgbutler Date: Tue Jun 30 19:15:12 2009 New Revision: 789882 URL: http://svn.apache.org/viewvc?rev=789882&view=rev Log: Fix and test for allowing OGNL expressions in string substitutions
Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/CreateDB.sql ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Criterion.java ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Criterion.xml ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/CriterionTest.java ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/MapperConfig.xml ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Parameter.java Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/TextSqlNode.java Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/TextSqlNode.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/TextSqlNode.java?rev=789882&r1=789881&r2=789882&view=diff ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/TextSqlNode.java (original) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/TextSqlNode.java Tue Jun 30 19:15:12 2009 @@ -1,5 +1,8 @@ package org.apache.ibatis.builder.xml.dynamic; +import org.apache.ibatis.builder.BuilderException; +import org.apache.ibatis.ognl.Ognl; +import org.apache.ibatis.ognl.OgnlException; import org.apache.ibatis.parsing.GenericTokenParser; public class TextSqlNode implements SqlNode { @@ -24,7 +27,12 @@ } public String handleToken(String content) { - return String.valueOf(context.getBindings().get(content)); + try { + Object value = Ognl.getValue(content, context.getBindings()); + return String.valueOf(value); + } catch (OgnlException e) { + throw new BuilderException("Error evaluating expression '"+content+"'. Cause: " + e, e); + } } } Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/CreateDB.sql URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/CreateDB.sql?rev=789882&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/CreateDB.sql (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/CreateDB.sql Tue Jun 30 19:15:12 2009 @@ -0,0 +1,12 @@ +create table names ( + id int, + firstName varchar(20), + lastName varchar(20) +); + +insert into names (id, firstName, lastName) values(1, 'Fred', 'Flintstone'); +insert into names (id, firstName, lastName) values(2, 'Wilma', 'Flintstone'); +insert into names (id, firstName, lastName) values(3, 'Pebbles', 'Flintstone'); +insert into names (id, firstName, lastName) values(4, 'Barney', 'Rubble'); +insert into names (id, firstName, lastName) values(5, 'Betty', 'Rubble'); +insert into names (id, firstName, lastName) values(6, 'Bamm Bamm', 'Rubble'); Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Criterion.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Criterion.java?rev=789882&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Criterion.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Criterion.java Tue Jun 30 19:15:12 2009 @@ -0,0 +1,18 @@ +package org.apache.ibatis.submitted.criterion; + +public class Criterion { + private String test; + private Object value; + public String getTest() { + return test; + } + public void setTest(String test) { + this.test = test; + } + public Object getValue() { + return value; + } + public void setValue(Object value) { + this.value = value; + } +} Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Criterion.xml URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Criterion.xml?rev=789882&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Criterion.xml (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Criterion.xml Tue Jun 30 19:15:12 2009 @@ -0,0 +1,11 @@ +<?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.criterion"> + <select id="simpleSelect" parameterType="Parameter" resultType="map"> + select * + from names + <where> + ${criterion.test} #{criterion.value} + </where> + </select> +</mapper> Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/CriterionTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/CriterionTest.java?rev=789882&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/CriterionTest.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/CriterionTest.java Tue Jun 30 19:15:12 2009 @@ -0,0 +1,71 @@ +package org.apache.ibatis.submitted.criterion; + +import static org.junit.Assert.assertEquals; + +import java.io.PrintWriter; +import java.io.Reader; +import java.sql.Connection; +import java.sql.DriverManager; +import java.util.List; +import java.util.Map; + +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.BeforeClass; +import org.junit.Test; + +public class CriterionTest { + + protected static SqlSessionFactory sqlSessionFactory; + + @BeforeClass + public static void setUp() throws Exception { + Connection conn = null; + + try { + Class.forName("org.hsqldb.jdbcDriver"); + conn = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", + ""); + + Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/criterion/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/criterion/MapperConfig.xml"); + sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); + reader.close(); + } finally { + if (conn != null) { + conn.close(); + } + } + } + + @Test + @SuppressWarnings("unchecked") + public void testSimpleSelect() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + try { + Criterion criterion = new Criterion(); + criterion.setTest("firstName ="); + criterion.setValue("Fred"); + Parameter parameter = new Parameter(); + parameter.setCriterion(criterion); + + List<Map<String, Object>> answer = + sqlSession.selectList("org.apache.ibatis.submitted.criterion.simpleSelect", parameter); + + assertEquals(1, answer.size()); + } finally { + sqlSession.close(); + } + } +} Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/MapperConfig.xml URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/MapperConfig.xml?rev=789882&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/MapperConfig.xml (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/MapperConfig.xml Tue Jun 30 19:15:12 2009 @@ -0,0 +1,29 @@ +<?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> + + <typeAliases> + <typeAlias alias="Parameter" type="org.apache.ibatis.submitted.criterion.Parameter"/> + </typeAliases> + + <environments default="development"> + <environment id="development"> + <transactionManager type="JDBC"> + <property name="" value=""/> + </transactionManager> + <dataSource type="UNPOOLED"> + <property name="driver" value="org.hsqldb.jdbcDriver"/> + <property name="url" value="jdbc:hsqldb:mem:aname"/> + <property name="username" value="sa"/> + </dataSource> + </environment> + </environments> + + <mappers> + <mapper resource="org/apache/ibatis/submitted/criterion/Criterion.xml" /> + </mappers> + +</configuration> Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Parameter.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Parameter.java?rev=789882&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Parameter.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/criterion/Parameter.java Tue Jun 30 19:15:12 2009 @@ -0,0 +1,11 @@ +package org.apache.ibatis.submitted.criterion; + +public class Parameter { + private Criterion criterion; + public Criterion getCriterion() { + return criterion; + } + public void setCriterion(Criterion criterion) { + this.criterion = criterion; + } +}