From 95adaa6086f9e77514ec5e3ef0094017f027e0df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Fri, 2 Apr 2021 22:12:42 +0800 Subject: [PATCH] improved postgresql parser, fix #4221 --- src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java | 3 +++ .../druid/bvt/sql/postgresql/PostgresqlResourceTest.java | 4 ++++ src/test/resources/bvt/parser/postgresql-11.txt | 4 ++++ 3 files changed, 11 insertions(+) create mode 100644 src/test/resources/bvt/parser/postgresql-11.txt diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 974f839fc8..f01a40f1aa 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -1584,6 +1584,9 @@ public class SQLExprParser extends SQLParser { aggregateExpr.setOption(SQLAggregateOption.DISTINCT); } + if (lexer.token == Token.COLONCOLON) { + return primaryRest(aggregateExpr); + } return aggregateExpr; } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PostgresqlResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PostgresqlResourceTest.java index 3a6b3ff052..e27b029e56 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PostgresqlResourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PostgresqlResourceTest.java @@ -80,6 +80,10 @@ public class PostgresqlResourceTest extends PGTest { exec_test("bvt/parser/postgresql-10.txt"); } + public void test_11() throws Exception { + exec_test("bvt/parser/postgresql-11.txt"); + } + public void exec_test(String resource) throws Exception { System.out.println(resource); InputStream is = null; diff --git a/src/test/resources/bvt/parser/postgresql-11.txt b/src/test/resources/bvt/parser/postgresql-11.txt new file mode 100644 index 0000000000..cf9bde3821 --- /dev/null +++ b/src/test/resources/bvt/parser/postgresql-11.txt @@ -0,0 +1,4 @@ +select v_date_desc::date - max(access_time)::date from table1; +--------------------------- +SELECT v_date_desc::date - max(access_time)::date +FROM table1; \ No newline at end of file