StatFilter mergeSql support tddl

This commit is contained in:
wenshao
2013-04-30 02:34:59 +08:00
parent b45031a787
commit 1b2ffe9d80
8 changed files with 230 additions and 37 deletions
@@ -17,17 +17,20 @@ 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() {
public MySqlParameterizedOutputVisitor(){
this(new StringBuilder());
}
@@ -39,6 +42,30 @@ public class MySqlParameterizedOutputVisitor extends MySqlOutputVisitor {
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;
}
}
}
print(name);
return false;
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);