This commit is contained in:
wenshao
2013-03-28 09:21:08 +08:00
parent 4d85e96301
commit d22d27ef01
20 changed files with 195 additions and 63 deletions
@@ -165,8 +165,12 @@ public class MySqlExprParser extends SQLExprParser {
return this.methodRest(new SQLIdentifierExpr("VALUES"), true);
case BINARY:
lexer.nextToken();
SQLUnaryExpr binaryExpr = new SQLUnaryExpr(SQLUnaryOperator.BINARY, expr());
return primaryRest(binaryExpr);
if (lexer.token() == Token.COMMA || lexer.token() == Token.SEMI || lexer.token() == Token.EOF) {
return new SQLIdentifierExpr("BINARY");
} else {
SQLUnaryExpr binaryExpr = new SQLUnaryExpr(SQLUnaryOperator.BINARY, expr());
return primaryRest(binaryExpr);
}
default:
return super.primary();
}
@@ -550,8 +554,9 @@ public class MySqlExprParser extends SQLExprParser {
SQLExpr var = primary();
String ident = null;
if (var instanceof SQLIdentifierExpr) {
String ident = ((SQLIdentifierExpr) var).getName();
ident = ((SQLIdentifierExpr) var).getName();
if ("GLOBAL".equalsIgnoreCase(ident)) {
ident = lexer.stringVal();
@@ -565,18 +570,26 @@ public class MySqlExprParser extends SQLExprParser {
var = new SQLVariantRefExpr(ident);
}
}
if ("NAMES".equalsIgnoreCase(ident)) {
// skip
} else if ("CHARACTER".equalsIgnoreCase(ident)) {
var = new SQLIdentifierExpr("CHARACTER SET");
accept(Token.SET);
if (lexer.token() == Token.EQ) {
lexer.nextToken();
}
} else {
if (lexer.token() == Token.COLONEQ) {
lexer.nextToken();
} else {
accept(Token.EQ);
}
}
item.setValue(this.expr());
item.setTarget(var);
if (lexer.token() == Token.COLONEQ) {
lexer.nextToken();
} else {
accept(Token.EQ);
}
if (lexer.token() == Token.BINARY) {
lexer.nextToken();
item.setValue(new SQLIdentifierExpr("BINARY"));
} else {
item.setValue(expr());
}
return item;
}
@@ -27,6 +27,7 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
import com.alibaba.druid.sql.ast.statement.SQLCharactorDataType;
import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
@@ -2812,4 +2813,14 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
public void endVisit(MySqlAlterTableImportTablespace x) {
}
@Override
public boolean visit(SQLAssignItem x) {
x.getTarget().accept(this);
if (!"NAMES".equalsIgnoreCase(x.getTarget().toString())) {
print(" = ");
}
x.getValue().accept(this);
return false;
}
} //
@@ -131,7 +131,8 @@ public class OracleExprParser extends SQLExprParser {
"SUM", //
"VAR_POP", //
"VAR_SAMP", //
"VARIANCE" //
"VARIANCE", //
"WM_CONCAT"
};
public OracleExprParser(Lexer lexer){