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;
+    }
+}


Reply via email to