From 7d1b290c435647134be4f1d87ea62437755272b8 Mon Sep 17 00:00:00 2001 From: huangtiande Date: Thu, 6 Aug 2015 16:07:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20with=20as=20=E8=AF=AD?= =?UTF-8?q?=E5=8F=A5=E5=88=97=E8=A7=A3=E6=9E=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../postgresql/parser/PGSQLStatementParser.java | 10 +++++++++- .../bvt/sql/postgresql/PGSelectTest21.java | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java index 30558e5269..8cc0a0fd0c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java @@ -21,6 +21,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.expr.SQLCurrentOfCursorExpr; +import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; @@ -238,7 +239,14 @@ public class PGSQLStatementParser extends SQLStatementParser { private PGWithQuery withQuery() { PGWithQuery withQuery = new PGWithQuery(); - withQuery.setName(this.exprParser.expr()); + + if (lexer.token() == Token.LITERAL_ALIAS) { + withQuery.setName(new SQLIdentifierExpr("\"" + lexer.stringVal() + + "\"")); + } else { + withQuery.setName(new SQLIdentifierExpr(lexer.stringVal())); + } + lexer.nextToken(); if (lexer.token() == Token.LPAREN) { lexer.nextToken(); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest21.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest21.java index d9286b3d90..eb9f4705c2 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest21.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest21.java @@ -21,6 +21,7 @@ import org.junit.Assert; import com.alibaba.druid.sql.PGTest; import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement; import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor; @@ -48,4 +49,20 @@ public class PGSelectTest21 extends PGTest { Assert.assertEquals(1, visitor.getColumns().size()); Assert.assertEquals(1, visitor.getTables().size()); } + + public void test_1() throws Exception { + String sql = "with a(a1,b1) as (select * from b) select * from a"; + + PGSQLStatementParser parser = new PGSQLStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + assertTrue(statemen instanceof PGSelectStatement); + assertTrue(((PGSelectStatement)statemen).getWith().getWithQuery().size()==1); + StringBuffer sb = new StringBuffer(); + ((PGSelectStatement)statemen).getWith().getWithQuery().get(0).getName().output(sb); + assertTrue("a".equals(sb.toString())); + assertTrue(((PGSelectStatement)statemen).getWith().getWithQuery().get(0).getColumns().size()==2); + } }