Skip to content

Commit 5396486

Browse files
committed
Fixes #129. Make sure that RawSqlSource makes exactly the same SQL than
DynamicSqlSource.
1 parent bf3fd5f commit 5396486

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

src/main/java/org/apache/ibatis/scripting/defaults/RawSqlSource.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,22 @@
2121
import org.apache.ibatis.mapping.BoundSql;
2222
import org.apache.ibatis.mapping.SqlSource;
2323
import org.apache.ibatis.parsing.XNode;
24+
import org.apache.ibatis.scripting.xmltags.DynamicContext;
25+
import org.apache.ibatis.scripting.xmltags.SqlNode;
2426
import org.apache.ibatis.session.Configuration;
2527
import org.w3c.dom.Node;
2628
import org.w3c.dom.NodeList;
2729

2830
public class RawSqlSource implements SqlSource {
2931

3032
private final SqlSource sqlSource;
33+
34+
public RawSqlSource(Configuration configuration, SqlNode rootSqlNode, Class<?> parameterType) {
35+
this(configuration, getSql(configuration, rootSqlNode), parameterType);
36+
}
3137

3238
public RawSqlSource(Configuration configuration, XNode script, Class<?> parameterType) {
33-
this(configuration, getString(script), parameterType);
39+
this(configuration, getStringFromXNode(script), parameterType);
3440
}
3541

3642
public RawSqlSource(Configuration configuration, String sql, Class<?> parameterType) {
@@ -39,7 +45,13 @@ public RawSqlSource(Configuration configuration, String sql, Class<?> parameterT
3945
sqlSource = sqlSourceParser.parse(sql, clazz, new HashMap<String, Object>());
4046
}
4147

42-
private static String getString(XNode script) {
48+
private static String getSql(Configuration configuration, SqlNode rootSqlNode) {
49+
DynamicContext context = new DynamicContext(configuration, null);
50+
rootSqlNode.apply(context);
51+
return context.getSql();
52+
}
53+
54+
private static String getStringFromXNode(XNode script) {
4355
StringBuilder contents = new StringBuilder();
4456
NodeList children = script.getNode().getChildNodes();
4557
for (int i = 0; i < children.getLength(); i++) {

src/main/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public SqlSource parseScriptNode() {
6565
if (isDynamic) {
6666
sqlSource = new DynamicSqlSource(configuration, rootSqlNode);
6767
} else {
68-
sqlSource = new RawSqlSource(configuration, context, parameterType);
68+
sqlSource = new RawSqlSource(configuration, rootSqlNode, parameterType);
6969
}
7070
return sqlSource;
7171
}

src/test/java/org/apache/ibatis/submitted/raw_sql_source/RawSqlSourceTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ private void test(String statement, Class<? extends SqlSource> sqlSource) {
7171
SqlSession sqlSession = sqlSessionFactory.openSession();
7272
try {
7373
Assert.assertEquals(sqlSource, sqlSession.getConfiguration().getMappedStatement(statement).getSqlSource().getClass());
74+
String sql = sqlSession.getConfiguration().getMappedStatement(statement).getSqlSource().getBoundSql('?').getSql();
75+
Assert.assertEquals("select * from users where id = ?", sql);
7476
User user = sqlSession.selectOne(statement, 1);
7577
Assert.assertEquals("User1", user.getName());
7678
} finally {

0 commit comments

Comments
 (0)