diff --git a/core/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/core/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index 2673b1e1de..ae7a49a6d6 100644 --- a/core/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/core/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -1037,11 +1037,12 @@ public SQLStatement parseRefresh() { acceptIdentifier("MATERIALIZED"); + accept(Token.VIEW); + if (lexer.identifierEquals("CONCURRENTLY")) { lexer.nextToken(); stmt.setConcurrently(true); } - accept(Token.VIEW); stmt.setName(this.exprParser.name()); diff --git a/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index bb30110f55..59641dc48f 100644 --- a/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -9302,12 +9302,12 @@ public boolean visit(SQLShowCreateMaterializedViewStatement x) { public boolean visit(SQLRefreshMaterializedViewStatement x) { print0(ucase ? "REFRESH MATERIALIZED" : "refresh materialized"); + print0(ucase ? " VIEW " : " view "); + if (x.isConcurrently()) { - print0(ucase ? " CONCURRENTLY" : " concurrently"); + print0(ucase ? "CONCURRENTLY " : "concurrently "); } - print0(ucase ? " VIEW " : " view "); - x.getName().accept(this); if (x.isWithNoData()) { diff --git a/core/src/test/resources/bvt/parser/postgresql/15.txt b/core/src/test/resources/bvt/parser/postgresql/15.txt index 7d2471ad68..0508566c84 100644 --- a/core/src/test/resources/bvt/parser/postgresql/15.txt +++ b/core/src/test/resources/bvt/parser/postgresql/15.txt @@ -1,3 +1,3 @@ -refresh materialized concurrently view v1 with no data +refresh materialized view concurrently v1 with no data -------------------- -REFRESH MATERIALIZED CONCURRENTLY VIEW v1 WITH NO DATA \ No newline at end of file +REFRESH MATERIALIZED VIEW CONCURRENTLY v1 WITH NO DATA \ No newline at end of file