Skip to content

Commit b3122df

Browse files
committed
Code cleaning
1 parent 52a7aa0 commit b3122df

File tree

3 files changed

+18
-46
lines changed

3 files changed

+18
-46
lines changed

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

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,11 @@
1515
*/
1616
package org.apache.ibatis.scripting.defaults;
1717

18-
import java.util.ArrayList;
19-
import java.util.List;
20-
2118
import org.apache.ibatis.builder.BuilderException;
22-
import org.apache.ibatis.executor.parameter.ParameterHandler;
23-
import org.apache.ibatis.mapping.BoundSql;
24-
import org.apache.ibatis.mapping.MappedStatement;
2519
import org.apache.ibatis.mapping.SqlSource;
2620
import org.apache.ibatis.parsing.XNode;
27-
import org.apache.ibatis.scripting.LanguageDriver;
28-
import org.apache.ibatis.scripting.xmltags.MixedSqlNode;
29-
import org.apache.ibatis.scripting.xmltags.SqlNode;
30-
import org.apache.ibatis.scripting.xmltags.StaticTextSqlNode;
21+
import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver;
3122
import org.apache.ibatis.session.Configuration;
32-
import org.w3c.dom.Node;
33-
import org.w3c.dom.NodeList;
3423

3524
/**
3625
* As of 3.2.4 the default XML language is able to identify static statements
@@ -39,32 +28,26 @@
3928
*
4029
* @since 3.2.0
4130
*/
42-
public class RawLanguageDriver implements LanguageDriver {
43-
44-
public ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
45-
return new DefaultParameterHandler(mappedStatement, parameterObject, boundSql);
46-
}
31+
public class RawLanguageDriver extends XMLLanguageDriver {
4732

33+
@Override
4834
public SqlSource createSqlSource(Configuration configuration, XNode script, Class<?> parameterType) {
49-
return new RawSqlSource(configuration, parseXML(script), parameterType);
35+
SqlSource source = super.createSqlSource(configuration, script, parameterType);
36+
checkIsNotDynamic(source);
37+
return source;
5038
}
5139

40+
@Override
5241
public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) {
53-
return new RawSqlSource(configuration, script, parameterType);
42+
SqlSource source = super.createSqlSource(configuration, script, parameterType);
43+
checkIsNotDynamic(source);
44+
return source;
5445
}
5546

56-
private static SqlNode parseXML(XNode script) {
57-
List<SqlNode> contents = new ArrayList<SqlNode>();
58-
NodeList children = script.getNode().getChildNodes();
59-
for (int i = 0; i < children.getLength(); i++) {
60-
XNode child = script.newXNode(children.item(i));
61-
if (child.getNode().getNodeType() == Node.CDATA_SECTION_NODE || child.getNode().getNodeType() == Node.TEXT_NODE) {
62-
contents.add(new StaticTextSqlNode(child.getStringBody("")));
63-
} else if (child.getNode().getNodeType() == Node.ELEMENT_NODE) {
64-
throw new BuilderException("Found an invalid element <" + child.getNode().getNodeName() + "> for RAW language.");
65-
}
47+
private void checkIsNotDynamic(SqlSource source) {
48+
if (!RawSqlSource.class.equals(source.getClass())) {
49+
throw new BuilderException("Dynamic content is not allowed when using RAW language");
6650
}
67-
return new MixedSqlNode(contents);
6851
}
6952

7053
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
*/
1616
package org.apache.ibatis.scripting.xmltags;
1717

18+
import org.apache.ibatis.builder.xml.XMLMapperEntityResolver;
1819
import org.apache.ibatis.executor.parameter.ParameterHandler;
1920
import org.apache.ibatis.mapping.BoundSql;
2021
import org.apache.ibatis.mapping.MappedStatement;
2122
import org.apache.ibatis.mapping.SqlSource;
2223
import org.apache.ibatis.parsing.PropertyParser;
2324
import org.apache.ibatis.parsing.XNode;
25+
import org.apache.ibatis.parsing.XPathParser;
2426
import org.apache.ibatis.scripting.LanguageDriver;
2527
import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
2628
import org.apache.ibatis.scripting.defaults.RawSqlSource;
@@ -39,8 +41,8 @@ public SqlSource createSqlSource(Configuration configuration, XNode script, Clas
3941

4042
public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) {
4143
if (script.startsWith("<script>")) { // issue #3
42-
XMLScriptBuilder builder = new XMLScriptBuilder(configuration, script, parameterType);
43-
return builder.parseScriptNode();
44+
XPathParser parser = new XPathParser(script, false, configuration.getVariables(), new XMLMapperEntityResolver());
45+
return createSqlSource(configuration, parser.evalNode("/script"), parameterType);
4446
} else {
4547
script = PropertyParser.parse(script, configuration.getVariables()); // issue #127
4648
TextSqlNode textSqlNode = new TextSqlNode(script);

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

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@
2222

2323
import org.apache.ibatis.builder.BaseBuilder;
2424
import org.apache.ibatis.builder.BuilderException;
25-
import org.apache.ibatis.builder.xml.XMLMapperEntityResolver;
2625
import org.apache.ibatis.mapping.SqlSource;
2726
import org.apache.ibatis.parsing.XNode;
28-
import org.apache.ibatis.parsing.XPathParser;
2927
import org.apache.ibatis.scripting.defaults.RawSqlSource;
3028
import org.apache.ibatis.session.Configuration;
3129
import org.w3c.dom.Node;
@@ -41,23 +39,12 @@ public XMLScriptBuilder(Configuration configuration, XNode context) {
4139
this(configuration, context, null);
4240
}
4341

44-
public XMLScriptBuilder(Configuration configuration, String context) {
45-
this(configuration, context, null);
46-
}
47-
4842
public XMLScriptBuilder(Configuration configuration, XNode context, Class<?> parameterType) {
4943
super(configuration);
5044
this.context = context;
5145
this.parameterType = parameterType;
5246
}
5347

54-
public XMLScriptBuilder(Configuration configuration, String context, Class<?> parameterType) {
55-
super(configuration);
56-
XPathParser parser = new XPathParser(context, false, configuration.getVariables(), new XMLMapperEntityResolver());
57-
this.context = parser.evalNode("/script");
58-
this.parameterType = parameterType;
59-
}
60-
6148
public SqlSource parseScriptNode() {
6249
List<SqlNode> contents = parseDynamicTags(context);
6350
MixedSqlNode rootSqlNode = new MixedSqlNode(contents);
@@ -75,7 +62,6 @@ private List<SqlNode> parseDynamicTags(XNode node) {
7562
NodeList children = node.getNode().getChildNodes();
7663
for (int i = 0; i < children.getLength(); i++) {
7764
XNode child = node.newXNode(children.item(i));
78-
String nodeName = child.getNode().getNodeName();
7965
if (child.getNode().getNodeType() == Node.CDATA_SECTION_NODE || child.getNode().getNodeType() == Node.TEXT_NODE) {
8066
String data = child.getStringBody("");
8167
TextSqlNode textSqlNode = new TextSqlNode(data);
@@ -86,6 +72,7 @@ private List<SqlNode> parseDynamicTags(XNode node) {
8672
contents.add(new StaticTextSqlNode(data));
8773
}
8874
} else if (child.getNode().getNodeType() == Node.ELEMENT_NODE) { // issue #628
75+
String nodeName = child.getNode().getNodeName();
8976
NodeHandler handler = nodeHandlers.get(nodeName);
9077
if (handler == null) {
9178
throw new BuilderException("Unknown element <" + nodeName + "> in SQL statement.");

0 commit comments

Comments
 (0)