mysql parser support DIV operator. issue #1526

This commit is contained in:
wenshao
2016-12-04 21:04:06 +08:00
parent 47891422c4
commit b3ca3e74b6
6 changed files with 98 additions and 5 deletions
@@ -87,13 +87,19 @@ public class MySqlExprParser extends SQLExprParser {
}
public SQLExpr multiplicativeRest(SQLExpr expr) {
if (lexer.token() == Token.IDENTIFIER && "MOD".equalsIgnoreCase(lexer.stringVal())) {
final Token token = lexer.token();
if (token == Token.IDENTIFIER && "MOD".equalsIgnoreCase(lexer.stringVal())) {
lexer.nextToken();
SQLExpr rightExp = primary();
rightExp = relationalRest(rightExp);
return new SQLBinaryOpExpr(expr, SQLBinaryOperator.Modulus, rightExp, JdbcConstants.MYSQL);
} else if (token == Token.DIV) {
lexer.nextToken();
SQLExpr rightExp = bitXor();
expr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.DIV, rightExp, getDbType());
expr = multiplicativeRest(expr);
}
return super.multiplicativeRest(expr);
@@ -52,6 +52,7 @@ public class MySqlLexer extends Lexer {
map.put("ROW", Token.ROW);
map.put("BEGIN", Token.BEGIN);
map.put("END", Token.END);
map.put("DIV", Token.DIV);
// for oceanbase & mysql 5.7
map.put("PARTITION", Token.PARTITION);