improve parser & wall-filter

This commit is contained in:
wenshao
2013-07-30 23:25:56 +08:00
parent 30fcdc8a4e
commit 21c681dd0f
10 changed files with 455 additions and 390 deletions
@@ -23,8 +23,11 @@ import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
import com.alibaba.druid.sql.visitor.ParameterizedVisitor;
public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor {
public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor implements ParameterizedVisitor {
private int replaceCount;
public DB2ParameterizedOutputVisitor(){
this(new StringBuilder());
@@ -34,6 +37,14 @@ public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor {
super(appender);
}
public int getReplaceCount() {
return this.replaceCount;
}
public void incrementReplaceCunt() {
replaceCount++;
}
public boolean visit(SQLInListExpr x) {
return ParameterizedOutputVisitorUtils.visit(this, x);
}
@@ -46,6 +57,7 @@ public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor {
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
@@ -55,6 +67,7 @@ public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -64,6 +77,7 @@ public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -73,6 +87,7 @@ public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -82,6 +97,7 @@ public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -901,20 +901,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
if (x.getValuesList().size() != 0) {
println();
print("VALUES ");
if (x.getValuesList().size() > 1) {
incrementIndent();
}
for (int i = 0, size = x.getValuesList().size(); i < size; ++i) {
if (i != 0) {
print(",");
println();
}
x.getValuesList().get(i).accept(this);
}
if (x.getValuesList().size() > 1) {
decrementIndent();
}
printValuesList(x);
}
if (x.getQuery() != null) {
@@ -939,6 +926,23 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
return false;
}
protected void printValuesList(MySqlInsertStatement x) {
print("VALUES ");
if (x.getValuesList().size() > 1) {
incrementIndent();
}
for (int i = 0, size = x.getValuesList().size(); i < size; ++i) {
if (i != 0) {
print(",");
println();
}
x.getValuesList().get(i).accept(this);
}
if (x.getValuesList().size() > 1) {
decrementIndent();
}
}
@Override
public void endVisit(MySqlLoadDataInFileStatement x) {
@@ -1,194 +1,157 @@
/*
* Copyright 1999-2011 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.sql.dialect.mysql.visitor;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
public class MySqlParameterizedOutputVisitor extends MySqlOutputVisitor {
public MySqlParameterizedOutputVisitor(){
this(new StringBuilder());
}
public MySqlParameterizedOutputVisitor(Appendable appender){
super(appender);
}
public boolean visit(SQLInListExpr x) {
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLIdentifierExpr x) {
String name = x.getName();
if (x.getParent() instanceof SQLExprTableSource || x.getParent() instanceof SQLPropertyExpr) {
int pos = name.lastIndexOf('_');
if (pos != -1 && pos != name.length()) {
boolean isNumber = true;
for (int i = pos + 1; i < name.length(); ++i) {
char ch = name.charAt(i);
if (ch < '0' || ch > '9') {
isNumber = false;
break;
}
}
if (isNumber) {
String realName = name.substring(0, pos);
print(realName);
return false;
}
}
int numberCount = 0;
for (int i = name.length() - 1; i >= 0; --i) {
char ch = name.charAt(i);
if (ch < '0' || ch > '9') {
break;
} else {
numberCount++;
}
}
if (numberCount > 1) {
int numPos = name.length() - numberCount;
String realName = name.substring(0, numPos);
print(realName);
return false;
}
}
print(name);
return false;
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);
return super.visit(x);
}
public boolean visit(SQLNullExpr x) {
print('?');
return false;
}
public boolean visit(SQLIntegerExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
return false;
}
public boolean visit(SQLNumberExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
return false;
}
public boolean visit(SQLCharExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
return false;
}
public boolean visit(SQLNCharExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
return false;
}
@Override
public boolean visit(MySqlInsertStatement x) {
print("INSERT ");
if (x.isLowPriority()) {
print("LOW_PRIORITY ");
}
if (x.isDelayed()) {
print("DELAYED ");
}
if (x.isHighPriority()) {
print("HIGH_PRIORITY ");
}
if (x.isIgnore()) {
print("IGNORE ");
}
print("INTO ");
x.getTableSource().accept(this);
if (x.getColumns().size() > 0) {
print(" (");
for (int i = 0, size = x.getColumns().size(); i < size; ++i) {
if (i != 0) {
print(", ");
}
x.getColumns().get(i).accept(this);
}
print(")");
}
if (x.getValuesList().size() != 0) {
print(" VALUES ");
int size = x.getValuesList().size();
if (size == 0) {
print("()");
} else {
for (int i = 0; i < 1; ++i) {
if (i != 0) {
print(", ");
}
x.getValuesList().get(i).accept(this);
}
}
}
if (x.getQuery() != null) {
print(" ");
x.getQuery().accept(this);
}
if (x.getDuplicateKeyUpdate().size() != 0) {
print(" ON DUPLICATE KEY UPDATE ");
printAndAccept(x.getDuplicateKeyUpdate(), ", ");
}
return false;
}
}
/*
* Copyright 1999-2011 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.sql.dialect.mysql.visitor;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
import com.alibaba.druid.sql.visitor.ParameterizedVisitor;
public class MySqlParameterizedOutputVisitor extends MySqlOutputVisitor implements ParameterizedVisitor {
private int replaceCount;
public MySqlParameterizedOutputVisitor(){
this(new StringBuilder());
}
public MySqlParameterizedOutputVisitor(Appendable appender){
super(appender);
}
public int getReplaceCount() {
return this.replaceCount;
}
public void incrementReplaceCunt() {
replaceCount++;
}
public boolean visit(SQLInListExpr x) {
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLIdentifierExpr x) {
final String name = x.getName();
if (x.getParent() instanceof SQLExprTableSource || x.getParent() instanceof SQLPropertyExpr) {
int pos = name.lastIndexOf('_');
if (pos != -1 && pos != name.length()) {
boolean isNumber = true;
for (int i = pos + 1; i < name.length(); ++i) {
char ch = name.charAt(i);
if (ch < '0' || ch > '9') {
isNumber = false;
break;
}
}
if (isNumber) {
String realName = name.substring(0, pos);
print(realName);
incrementReplaceCunt();
return false;
}
}
int numberCount = 0;
for (int i = name.length() - 1; i >= 0; --i) {
char ch = name.charAt(i);
if (ch < '0' || ch > '9') {
break;
} else {
numberCount++;
}
}
if (numberCount > 1) {
int numPos = name.length() - numberCount;
String realName = name.substring(0, numPos);
print(realName);
incrementReplaceCunt();
return false;
}
}
print(name);
return false;
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);
return super.visit(x);
}
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLIntegerExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLNumberExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLCharExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLNCharExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
}
protected void printValuesList(MySqlInsertStatement x) {
print("VALUES ");
incrementIndent();
x.getValuesList().get(0).accept(this);
decrementIndent();
}
}
@@ -1,92 +1,108 @@
/*
* Copyright 1999-2011 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.sql.dialect.oracle.visitor;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
public class OracleParameterizedOutputVisitor extends OracleOutputVisitor {
public OracleParameterizedOutputVisitor() {
this (new StringBuilder());
}
public OracleParameterizedOutputVisitor(Appendable appender){
super(appender);
}
public OracleParameterizedOutputVisitor(Appendable appender, boolean printPostSemi){
super (appender, printPostSemi);
}
public boolean visit(SQLInListExpr x) {
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);
return super.visit(x);
}
public boolean visit(SQLNullExpr x) {
print('?');
return false;
}
public boolean visit(SQLIntegerExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
return false;
}
public boolean visit(SQLNumberExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
return false;
}
public boolean visit(SQLCharExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
return false;
}
public boolean visit(SQLNCharExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
return false;
}
}
/*
* Copyright 1999-2011 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.sql.dialect.oracle.visitor;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
import com.alibaba.druid.sql.visitor.ParameterizedVisitor;
public class OracleParameterizedOutputVisitor extends OracleOutputVisitor implements ParameterizedVisitor {
private int replaceCount;
public OracleParameterizedOutputVisitor(){
this(new StringBuilder());
}
public OracleParameterizedOutputVisitor(Appendable appender){
super(appender);
}
public OracleParameterizedOutputVisitor(Appendable appender, boolean printPostSemi){
super(appender, printPostSemi);
}
public int getReplaceCount() {
return this.replaceCount;
}
public void incrementReplaceCunt() {
replaceCount++;
}
public boolean visit(SQLInListExpr x) {
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);
return super.visit(x);
}
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLIntegerExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLNumberExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLCharExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLNCharExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
}
}
@@ -23,16 +23,28 @@ import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
import com.alibaba.druid.sql.visitor.ParameterizedVisitor;
public class PGParameterizedOutputVisitor extends PGOutputVisitor {
public PGParameterizedOutputVisitor() {
this (new StringBuilder());
public class PGParameterizedOutputVisitor extends PGOutputVisitor implements ParameterizedVisitor {
private int replaceCount;
public PGParameterizedOutputVisitor(){
this(new StringBuilder());
}
public PGParameterizedOutputVisitor(Appendable appender){
super(appender);
}
public int getReplaceCount() {
return this.replaceCount;
}
public void incrementReplaceCunt() {
replaceCount++;
}
public boolean visit(SQLInListExpr x) {
return ParameterizedOutputVisitorUtils.visit(this, x);
}
@@ -45,6 +57,7 @@ public class PGParameterizedOutputVisitor extends PGOutputVisitor {
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
@@ -54,6 +67,7 @@ public class PGParameterizedOutputVisitor extends PGOutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -63,6 +77,7 @@ public class PGParameterizedOutputVisitor extends PGOutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -72,6 +87,7 @@ public class PGParameterizedOutputVisitor extends PGOutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -81,6 +97,7 @@ public class PGParameterizedOutputVisitor extends PGOutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -23,13 +23,24 @@ import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
import com.alibaba.druid.sql.visitor.ParameterizedVisitor;
public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor {
public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor implements ParameterizedVisitor {
private int replaceCount;
public SQLServerParameterizedOutputVisitor(Appendable appender){
super(appender);
}
public int getReplaceCount() {
return this.replaceCount;
}
public void incrementReplaceCunt() {
replaceCount++;
}
public boolean visit(SQLInListExpr x) {
return ParameterizedOutputVisitorUtils.visit(this, x);
}
@@ -42,6 +53,7 @@ public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
@@ -51,6 +63,7 @@ public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -60,6 +73,7 @@ public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -69,6 +83,7 @@ public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -78,6 +93,7 @@ public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor
}
print('?');
incrementReplaceCunt();
return false;
}
}
@@ -23,7 +23,9 @@ import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
public class ParameterizedOutputVisitor extends SQLASTOutputVisitor {
public class ParameterizedOutputVisitor extends SQLASTOutputVisitor implements ParameterizedVisitor {
private int replaceCount;
public ParameterizedOutputVisitor() {
this (new StringBuilder());
}
@@ -31,6 +33,14 @@ public class ParameterizedOutputVisitor extends SQLASTOutputVisitor {
public ParameterizedOutputVisitor(Appendable appender){
super(appender);
}
public int getReplaceCount() {
return this.replaceCount;
}
public void incrementReplaceCunt() {
replaceCount++;
}
public boolean visit(SQLInListExpr x) {
return ParameterizedOutputVisitorUtils.visit(this, x);
@@ -44,6 +54,7 @@ public class ParameterizedOutputVisitor extends SQLASTOutputVisitor {
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
@@ -53,6 +64,7 @@ public class ParameterizedOutputVisitor extends SQLASTOutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -62,6 +74,7 @@ public class ParameterizedOutputVisitor extends SQLASTOutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -71,6 +84,7 @@ public class ParameterizedOutputVisitor extends SQLASTOutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
@@ -80,6 +94,7 @@ public class ParameterizedOutputVisitor extends SQLASTOutputVisitor {
}
print('?');
incrementReplaceCunt();
return false;
}
}
@@ -0,0 +1,8 @@
package com.alibaba.druid.sql.visitor;
public interface ParameterizedVisitor extends SQLASTVisitor {
int getReplaceCount();
void incrementReplaceCunt();
}
@@ -227,7 +227,12 @@ public abstract class WallProvider {
WallSqlStat wallStat = whiteList.get(sql);
if (wallStat == null) {
String mergedSql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType);
String mergedSql;
try {
mergedSql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType);
} catch (Exception ex) {
mergedSql = sql;
}
wallStat = sqlList.get(mergedSql);
if (wallStat == null) {
wallStat = new WallSqlStat(tableStats, functionStats, syntaxError);
@@ -259,7 +264,12 @@ public abstract class WallProvider {
WallSqlStat wallStat = blackList.get(sql);
if (wallStat == null) {
String mergedSql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType);
String mergedSql;
try {
mergedSql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType);
} catch (Exception ex) {
mergedSql = sql;
}
wallStat = sqlList.get(mergedSql);
if (wallStat == null) {
wallStat = new WallSqlStat(tableStats, functionStats, violations, syntaxError);
@@ -289,7 +299,7 @@ public abstract class WallProvider {
return Collections.<String> unmodifiableSet(hashSet);
}
public Set<String> getSqlList() {
Set<String> hashSet = new HashSet<String>();
lock.readLock().lock();
@@ -352,11 +362,11 @@ public abstract class WallProvider {
if (whiteList != null) {
whiteList = null;
}
if (blackList != null) {
blackList = null;
}
if (sqlList != null) {
sqlList = null;
}