bug fixed for visitor

This commit is contained in:
温少
2012-02-23 07:09:40 +08:00
parent eff085fe9b
commit 3c587b5a8e
11 changed files with 132 additions and 4 deletions
@@ -30,7 +30,7 @@ public class PGDeleteTest2 extends PGTest {
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("tasks")));
//Assert.assertTrue(visitor.getFields().size() == 0);
Assert.assertTrue(visitor.getFields().size() == 0);
}
@@ -0,0 +1,37 @@
package com.alibaba.druid.bvt.sql.postgresql;
import java.util.List;
import junit.framework.Assert;
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;
public class PGDeleteTest3 extends PGTest {
public void test_0() throws Exception {
String sql = "DELETE FROM tasks WHERE status = 'DONE' RETURNING *;";
PGSQLStatementParser parser = new PGSQLStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement statemen = statementList.get(0);
System.out.println(output(statementList));
Assert.assertEquals(1, statementList.size());
PGSchemaStatVisitor visitor = new PGSchemaStatVisitor();
statemen.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getFields());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("tasks")));
Assert.assertTrue(visitor.getFields().size() == 1);
}
}
@@ -0,0 +1,42 @@
package com.alibaba.druid.bvt.sql.postgresql;
import java.util.List;
import junit.framework.Assert;
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;
public class PGDeleteTest4 extends PGTest {
public void test_0() throws Exception {
String sql = "DELETE FROM films WHERE producer_id IN (SELECT id FROM producers WHERE name = 'foo');";
PGSQLStatementParser parser = new PGSQLStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement statemen = statementList.get(0);
System.out.println(output(statementList));
Assert.assertEquals(1, statementList.size());
PGSchemaStatVisitor visitor = new PGSchemaStatVisitor();
statemen.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getFields());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("films")));
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("producers")));
Assert.assertTrue(visitor.getFields().size() == 3);
Assert.assertTrue(visitor.getFields().contains(new TableStat.Column("films", "producer_id")));
Assert.assertTrue(visitor.getFields().contains(new TableStat.Column("producers", "id")));
Assert.assertTrue(visitor.getFields().contains(new TableStat.Column("producers", "name")));
}
}