diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/presto/visitor/PrestoOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/dialect/presto/visitor/PrestoOutputVisitor.java index aed08e1c35..560b7d03bd 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/presto/visitor/PrestoOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/presto/visitor/PrestoOutputVisitor.java @@ -16,9 +16,12 @@ package com.alibaba.druid.sql.dialect.presto.visitor; import com.alibaba.druid.sql.ast.SQLLimit; +import com.alibaba.druid.sql.ast.expr.SQLDecimalExpr; import com.alibaba.druid.sql.dialect.phoenix.visitor.PhoenixASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; +import java.math.BigDecimal; + /** * presto 的输出的视图信息 * @@ -44,4 +47,13 @@ public class PrestoOutputVisitor extends SQLASTOutputVisitor implements PhoenixA x.getRowCount().accept(this); return false; } + + public boolean visit(SQLDecimalExpr x) { + BigDecimal value = x.getValue(); + print0(ucase ? "DECIMAL '" : "decimal '"); + print(value.toString()); + print('\''); + + return false; + } } diff --git a/core/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/core/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 3ed05b3819..b28fdf74cf 100644 --- a/core/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/core/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -1612,6 +1612,9 @@ public class SQLExprParser extends SQLParser { accept(Token.RPAREN); return groupingSets; + } else if (lexer.token == Token.LITERAL_CHARS && expr instanceof SQLIdentifierExpr && ((SQLIdentifierExpr) expr).hashCode64() == FnvHash.Constants.DECIMAL) { + expr = new SQLDecimalExpr(lexer.stringVal()); + lexer.nextToken(); } else { if (lexer.token == Token.LPAREN && !(expr instanceof SQLIntegerExpr) && !(expr instanceof SQLHexExpr)) {