From 0b9b02cd9995b38fbf1e13fc68a9851fc80b2bc7 Mon Sep 17 00:00:00 2001 From: huangtiande Date: Fri, 6 Feb 2015 10:17:53 +0800 Subject: [PATCH] =?UTF-8?q?insert=E8=AF=AD=E5=8F=A5=E5=A2=9E=E5=8A=A0defau?= =?UTF-8?q?lt=20values=E6=94=AF=E6=8C=81=20example:=20insert=20into=20test?= =?UTF-8?q?01=20DEFAULT=20VALUES?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../postgresql/ast/stmt/PGInsertStatement.java | 11 ++++++++++- .../postgresql/parser/PGSQLStatementParser.java | 6 ++++++ .../druid/bvt/sql/postgresql/PGInsertTest0.java | 13 ++++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGInsertStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGInsertStatement.java index 1659ac9185..0e40cad3fe 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGInsertStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGInsertStatement.java @@ -29,6 +29,7 @@ public class PGInsertStatement extends SQLInsertStatement implements PGSQLStatem private PGWithClause with; private List valuesList = new ArrayList(); private SQLExpr returning; + private boolean defaultValues = false; public SQLExpr getReturning() { return returning; @@ -70,7 +71,15 @@ public class PGInsertStatement extends SQLInsertStatement implements PGSQLStatem valuesList.add(valueClause); } - protected void accept0(SQLASTVisitor visitor) { + public boolean isDefaultValues() { + return defaultValues; + } + + public void setDefaultValues(boolean defaultValues) { + this.defaultValues = defaultValues; + } + + protected void accept0(SQLASTVisitor visitor) { accept0((PGASTVisitor) visitor); } 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 584bf910a1..30558e5269 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 @@ -100,6 +100,12 @@ public class PGSQLStatementParser extends SQLStatementParser { } } + + if (lexer.token() == Token.DEFAULT) { + lexer.nextToken(); + accept(Token.VALUES); + stmt.setDefaultValues(true); + } if (lexer.token() == (Token.LPAREN)) { lexer.nextToken(); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGInsertTest0.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGInsertTest0.java index b01fd61117..09fb3dc72b 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGInsertTest0.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGInsertTest0.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.PGInsertStatement; import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor; import com.alibaba.druid.stat.TableStat; @@ -51,5 +52,15 @@ public class PGInsertTest0 extends PGTest { // Assert.assertTrue(visitor.getFields().contains(new TableStat.Column("films", "producer_id"))); } - + public void test_1() { + String sql = "insert into test01 DEFAULT VALUES"; + PGSQLStatementParser parser = new PGSQLStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + assertTrue(statemen instanceof PGInsertStatement); + PGInsertStatement insert = (PGInsertStatement) statemen; + assertTrue(insert.getTableName().getSimpleName() + .equalsIgnoreCase("test01")); + } }