diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java index 235f994a7b..72eb3084bc 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java @@ -3007,4 +3007,12 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor return false; } + + @Override + public boolean visit(SQLAlterTableAddColumn x) { + boolean odps = isOdps(); + print0(ucase ? "ADD COLUMN " : "add column "); + printAndAccept(x.getColumns(), ", "); + return false; + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest0.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest0.java index ef76e645e1..856d6d0e82 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest0.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest0.java @@ -17,13 +17,14 @@ public class PGAlterTableAddColumnTest0 extends PGTest { PGSQLStatementParser parser = new PGSQLStatementParser(sql); List statementList = parser.parseStatementList(); - SQLStatement statemen = statementList.get(0); - print(statementList); + SQLStatement stmt = statementList.get(0); + assertEquals("ALTER TABLE products\n" + + "\tADD COLUMN description text;", stmt.toString()); Assert.assertEquals(1, statementList.size()); PGSchemaStatVisitor visitor = new PGSchemaStatVisitor(); - statemen.accept(visitor); + stmt.accept(visitor); System.out.println("Tables : " + visitor.getTables()); System.out.println("fields : " + visitor.getColumns()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest1.java index 951e22a964..8014d2ba3a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest1.java @@ -17,13 +17,15 @@ public class PGAlterTableAddColumnTest1 extends PGTest { PGSQLStatementParser parser = new PGSQLStatementParser(sql); List statementList = parser.parseStatementList(); - SQLStatement statemen = statementList.get(0); - print(statementList); + SQLStatement stmt = statementList.get(0); + assertEquals("ALTER TABLE products\n" + + "\tADD COLUMN description text\n" + + "\t\tCHECK (description <> '');", stmt.toString()); Assert.assertEquals(1, statementList.size()); PGSchemaStatVisitor visitor = new PGSchemaStatVisitor(); - statemen.accept(visitor); + stmt.accept(visitor); System.out.println("Tables : " + visitor.getTables()); System.out.println("fields : " + visitor.getColumns()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest2.java new file mode 100644 index 0000000000..2277b468ce --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/ddl/PGAlterTableAddColumnTest2.java @@ -0,0 +1,37 @@ +package com.alibaba.druid.bvt.sql.postgresql.ddl; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import org.junit.Assert; + +import java.util.List; + + +public class PGAlterTableAddColumnTest2 extends PGTest { + public void test_0 () throws Exception { + String sql = "ALTER TABLE t_user ADD column aaa VARCHAR(10)"; + + PGSQLStatementParser parser = new PGSQLStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + assertEquals("ALTER TABLE t_user\n" + + "\tADD COLUMN aaa VARCHAR(10)", stmt.toString()); + + Assert.assertEquals(1, statementList.size()); + + PGSchemaStatVisitor visitor = new PGSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t_user"))); + + Assert.assertTrue(visitor.getTables().get(new TableStat.Name("t_user")).getAlterCount() == 1); + + Assert.assertTrue(visitor.getColumns().size() == 1); + } +}