diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 44094ba2c7..57a59a9641 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -1327,9 +1327,9 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet } protected void printInteger(SQLIntegerExpr x, boolean parameterized) { - long val = x.getNumber().longValue(); + String val = x.getNumber().toString(); - if (val == 1) { + if ("1".equals(val)) { if (JdbcConstants.ORACLE.equals(dbType)) { SQLObject parent = x.getParent(); if (parent instanceof SQLBinaryOpExpr) { diff --git a/src/test/java/com/alibaba/druid/bvt/sql/UnsignedBigIntTest.java b/src/test/java/com/alibaba/druid/bvt/sql/UnsignedBigIntTest.java new file mode 100644 index 0000000000..38c05c7ed3 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/UnsignedBigIntTest.java @@ -0,0 +1,33 @@ +package com.alibaba.druid.bvt.sql; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; +import junit.framework.TestCase; + +public class UnsignedBigIntTest extends TestCase { + + public void test_mysqlUnsignedBitInt() throws Exception { + String sql = "SELECT a from b where c <> 1 LIMIT 18446744073709551615 OFFSET 0"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement sqlStatement = parser.parseStatement(); + StringBuilder sb = new StringBuilder(); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(sb); + visitor.setPrettyFormat(false); + sqlStatement.accept(visitor); + assertEquals("SELECT a FROM b WHERE c <> 1 LIMIT 0, 18446744073709551615", sb.toString()); + } + + public void test_postgresqlUnsignedBitInt() { + String sql = "SELECT a from b where c <> 1 LIMIT 18446744073709551615 OFFSET 1"; + PGSQLStatementParser parser = new PGSQLStatementParser(sql); + SQLStatement sqlStatement = parser.parseStatement(); + StringBuilder sb = new StringBuilder(); + PGOutputVisitor visitor = new PGOutputVisitor(sb); + visitor.setPrettyFormat(false); + sqlStatement.accept(visitor); + assertEquals("SELECT a FROM b WHERE c <> 1 LIMIT 18446744073709551615 OFFSET 1", sb.toString()); + } +}