This commit is contained in:
温少
2012-05-18 16:42:55 +08:00
parent 3fb948e9e8
commit a8ab7b14d6
6 changed files with 62 additions and 11 deletions
@@ -16,6 +16,8 @@
package com.alibaba.druid.sql.dialect.mysql.ast.expr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class MySqlCharExpr extends SQLCharExpr implements MySqlExpr {
@@ -61,4 +63,19 @@ public class MySqlCharExpr extends SQLCharExpr implements MySqlExpr {
buf.append(collate);
}
}
@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor instanceof MySqlASTVisitor) {
accept0((MySqlASTVisitor) visitor);
} else {
visitor.visit(this);
visitor.endVisit(this);
}
}
public void accept0(MySqlASTVisitor visitor) {
visitor.visit(this);
visitor.endVisit(this);
}
}
@@ -38,7 +38,12 @@ public class MySqlSelectGroupBy extends SQLSelectGroupByClause {
if (visitor instanceof MySqlASTVisitor) {
accept0((MySqlASTVisitor) visitor);
} else {
throw new IllegalArgumentException("not support visitor type : " + visitor.getClass().getName());
if (visitor.visit(this)) {
acceptChild(visitor, this.getItems());
acceptChild(visitor, this.getHaving());
}
visitor.endVisit(this);
}
}
@@ -22,6 +22,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBinaryExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr;
@@ -505,4 +506,8 @@ public interface MySqlASTVisitor extends SQLASTVisitor {
boolean visit(MySqlHelpStatement x);
void endVisit(MySqlHelpStatement x);
boolean visit(MySqlCharExpr x);
void endVisit(MySqlCharExpr x);
}
@@ -7,6 +7,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBinaryExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr;
@@ -1101,4 +1102,14 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements
public void endVisit(MySqlHelpStatement x) {
}
@Override
public boolean visit(MySqlCharExpr x) {
return false;
}
@Override
public void endVisit(MySqlCharExpr x) {
}
}
@@ -486,16 +486,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
}
public boolean visit(SQLCharExpr x) {
if (x instanceof MySqlCharExpr) {
print(x.toString());
} else if ((x.getText() == null) || (x.getText().length() == 0)) {
print("NULL");
} else {
print("'");
print(x.getText().replaceAll("'", "''"));
print("'");
}
print(x.toString());
return false;
}
@@ -2603,4 +2594,15 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
public void endVisit(MySqlHelpStatement x) {
}
@Override
public boolean visit(MySqlCharExpr x) {
print(x.toString());
return false;
}
@Override
public void endVisit(MySqlCharExpr x) {
}
}
@@ -18,6 +18,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBinaryExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr;
@@ -1166,4 +1167,14 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS
public void endVisit(MySqlHelpStatement x) {
}
@Override
public boolean visit(MySqlCharExpr x) {
return false;
}
@Override
public void endVisit(MySqlCharExpr x) {
}
}