parameterized inList expr supported; example: IN ( ? , ? , ? , ? )

This commit is contained in:
林夕
2017-12-07 17:45:22 +08:00
parent f3fcc588ba
commit 1fd31a9d42
4 changed files with 61 additions and 5 deletions
@@ -61,9 +61,18 @@ public class ParameterizedOutputVisitorUtils {
return parameterize(sql, dbType, null, outParameters);
}
private static void configVisitorFeatures(ParameterizedVisitor visitor, VisitorFeature ...features) {
if(features != null) {
for (int i = 0; i < features.length; i++) {
visitor.config(features[i], true);
}
}
}
public static String parameterize(String sql
, String dbType
, SQLSelectListCache selectListCache, List<Object> outParameters) {
, SQLSelectListCache selectListCache, List<Object> outParameters, VisitorFeature ...visitorFeatures) {
final SQLParserFeature[] features = outParameters == null
? defaultFeatures2
@@ -85,6 +94,7 @@ public class ParameterizedOutputVisitorUtils {
if (outParameters != null) {
visitor.setOutputParameters(outParameters);
}
configVisitorFeatures(visitor, visitorFeatures);
for (int i = 0; i < statementList.size(); i++) {
SQLStatement stmt = statementList.get(i);
@@ -133,13 +143,13 @@ public class ParameterizedOutputVisitorUtils {
public static long parameterizeHash(String sql
, String dbType
, List<Object> outParameters) {
return parameterizeHash(sql, dbType, null, outParameters);
return parameterizeHash(sql, dbType, null, outParameters, null);
}
public static long parameterizeHash(String sql
, String dbType
, SQLSelectListCache selectListCache
, List<Object> outParameters) {
, List<Object> outParameters, VisitorFeature ...visitorFeatures) {
final SQLParserFeature[] features = outParameters == null
? defaultFeatures2
@@ -162,6 +172,7 @@ public class ParameterizedOutputVisitorUtils {
if (outParameters != null) {
visitor.setOutputParameters(outParameters);
}
configVisitorFeatures(visitor, visitorFeatures);
if (stmtSize == 1) {
SQLStatement stmt = statementList.get(0);
@@ -77,6 +77,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
protected int replaceCount;
protected boolean parameterizedMergeInList = false;
protected boolean parameterizedQuesUnMergeInList = false;
protected boolean parameterized = false;
protected boolean shardingSupport = false;
@@ -102,6 +103,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
public SQLASTOutputVisitor(Appendable appender, boolean parameterized){
this.appender = appender;
this.config(VisitorFeature.OutputParameterized, parameterized);
this.config(VisitorFeature.OutputParameterizedQuesUnMergeInList, parameterizedQuesUnMergeInList);
}
public int getReplaceCount() {
@@ -216,6 +218,14 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
this.parameterizedMergeInList = parameterizedMergeInList;
}
public boolean isParameterizedQuesUnMergeInList() {
return isEnabled(VisitorFeature.OutputParameterizedQuesUnMergeInList);
}
public void setParameterizedQuesUnMergeInList(boolean parameterizedQuesUnMergeInList) {
config(VisitorFeature.OutputParameterizedQuesUnMergeInList, parameterizedQuesUnMergeInList);
}
public boolean isExportTables() {
return exportTables;
}
@@ -1208,9 +1218,22 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
printExpr(x.getExpr());
if (x.isNot()) {
print(ucase ? " NOT IN (?)" : " not in (?)");
print(ucase ? " NOT" : " not");
} else {
print(ucase ? " IN (?)" : " in (?)");
print(ucase ? " IN" : " in");
}
if(!isParameterizedQuesUnMergeInList() || targetList.size() == 1) {
print(" (?)");
} else {
print(" (");
for (int i = 0; i < targetList.size(); i++) {
if(i != 0) {
print(",");
}
print(" ?");
}
print(")");
}
if (changed) {
@@ -5794,6 +5817,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
super.setFeatures(features);
this.ucase = isEnabled(VisitorFeature.OutputUCase);
this.parameterized = isEnabled(VisitorFeature.OutputParameterized);
this.parameterizedQuesUnMergeInList = isEnabled(VisitorFeature.OutputParameterizedQuesUnMergeInList);
}
/////////////// for oracle
@@ -23,6 +23,7 @@ public enum VisitorFeature {
OutputUseInsertValueClauseOriginalString,
OutputSkipSelectListCacheString,
OutputSkipInsertColumnsString,
OutputParameterizedQuesUnMergeInList
;
private VisitorFeature(){