mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
parameterized inList expr supported; example: IN ( ? , ? , ? , ? )
This commit is contained in:
@@ -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(){
|
||||
|
||||
Reference in New Issue
Block a user