bug fixed for sql parser

This commit is contained in:
温少
2012-03-08 23:52:22 +08:00
parent 19d1eccb91
commit 96e8a83a37
43 changed files with 1674 additions and 317 deletions
@@ -0,0 +1,54 @@
package com.alibaba.druid.bvt.sql.oracle;
import java.util.List;
import junit.framework.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleBlockTest10 extends OracleTest {
public void test_0() throws Exception {
String sql = "DECLARE" + //
" CURSOR c1 IS" + //
" SELECT last_name, department_name" + //
" FROM employees, departments" + //
" WHERE employees.department_id = departments.department_id " + //
" AND job_id = 'SA_MAN'" + //
" FOR UPDATE OF salary;" + //
"BEGIN" + //
" NULL;" + //
"END;"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
print(statementList);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
for (SQLStatement statement : statementList) {
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(2, visitor.getTables().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments")));
Assert.assertEquals(5, visitor.getColumns().size());
Assert.assertEquals(3, visitor.getConditions().size());
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
}
}
@@ -0,0 +1,70 @@
package com.alibaba.druid.bvt.sql.oracle;
import java.util.List;
import junit.framework.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleBlockTest11 extends OracleTest {
public void test_0() throws Exception {
String sql = "DROP TABLE emp;" +
"CREATE TABLE emp AS SELECT * FROM employees;" +
" " +
"DECLARE" +
" CURSOR c1 IS" +
" SELECT * FROM emp" +
" FOR UPDATE OF salary" +
" ORDER BY employee_id;" +
" emp_rec emp%ROWTYPE;" +
"BEGIN" +
" OPEN c1;" +
" LOOP" +
" FETCH c1 INTO emp_rec; -- fails on second iteration\n" +
" EXIT WHEN c1%NOTFOUND;" +
" DBMS_OUTPUT.PUT_LINE (" +
" 'emp_rec.employee_id = ' ||" +
" TO_CHAR(emp_rec.employee_id)" +
" );" +
" " +
" UPDATE emp" +
" SET salary = salary * 1.05" +
" WHERE employee_id = 105;" +
" " +
" COMMIT; -- releases locks\n" +
" END LOOP;" +
"END;"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
print(statementList);
Assert.assertEquals(3, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
for (SQLStatement statement : statementList) {
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(2, visitor.getTables().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("emp")));
Assert.assertEquals(4, visitor.getColumns().size());
Assert.assertEquals(1, visitor.getConditions().size());
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
}
}
@@ -0,0 +1,70 @@
package com.alibaba.druid.bvt.sql.oracle;
import java.util.List;
import junit.framework.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleBlockTest12 extends OracleTest {
public void test_0() throws Exception {
String sql = "DECLARE" +
" emp_id NUMBER(6);" +
" emp_lastname VARCHAR2(25);" +
" emp_salary NUMBER(8,2);" +
" emp_jobid VARCHAR2(10);" +
"BEGIN" +
" SELECT employee_id, last_name, salary, job_id" +
" INTO emp_id, emp_lastname, emp_salary, emp_jobid" +
" FROM employees" +
" WHERE employee_id = 120;" +
"" +
" INSERT INTO emp_name (employee_id, last_name)" +
" VALUES (emp_id, emp_lastname); " +
" INSERT INTO emp_sal (employee_id, salary) " +
" VALUES (emp_id, emp_salary);" +
"" +
" INSERT INTO emp_job (employee_id, job_id)" +
" VALUES (emp_id, emp_jobid);" +
" " +
"EXCEPTION" +
" WHEN DUP_VAL_ON_INDEX THEN" +
" ROLLBACK;" +
" DBMS_OUTPUT.PUT_LINE('Inserts were rolled back');" +
"END;"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
print(statementList);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
for (SQLStatement statement : statementList) {
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(4, visitor.getTables().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("emp_name")));
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("emp_sal")));
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("emp_job")));
Assert.assertEquals(11, visitor.getColumns().size());
Assert.assertEquals(1, visitor.getConditions().size());
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
}
}
@@ -0,0 +1,73 @@
package com.alibaba.druid.bvt.sql.oracle;
import java.util.List;
import junit.framework.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleBlockTest13 extends OracleTest {
public void test_0() throws Exception {
String sql = "DECLARE" + //
" emp_id employees.employee_id%TYPE;" + //
" emp_lastname employees.last_name%TYPE;" + //
" emp_salary employees.salary%TYPE;" + //
"" + //
"BEGIN" + //
" SELECT employee_id, last_name, salary" + //
" INTO emp_id, emp_lastname, emp_salary " + //
" FROM employees" + //
" WHERE employee_id = 120;" + //
" " + //
" UPDATE emp_name" + //
" SET salary = salary * 1.1" + //
" WHERE employee_id = emp_id;" + //
"" + //
" DELETE FROM emp_name" + //
" WHERE employee_id = 130;" + //
"" + //
" SAVEPOINT do_insert;" + //
" " + //
" INSERT INTO emp_name (employee_id, last_name, salary)" + //
" VALUES (emp_id, emp_lastname, emp_salary);" + //
" " + //
"EXCEPTION" + //
" WHEN DUP_VAL_ON_INDEX THEN" + //
" ROLLBACK TO do_insert;" + //
" DBMS_OUTPUT.PUT_LINE('Insert was rolled back');" + //
"END;"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
print(statementList);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
for (SQLStatement statement : statementList) {
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(2, visitor.getTables().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("emp_name")));
Assert.assertEquals(7, visitor.getColumns().size());
Assert.assertEquals(3, visitor.getConditions().size());
Assert.assertEquals(1, visitor.getRelationships().size());
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
}
}
@@ -0,0 +1,74 @@
package com.alibaba.druid.bvt.sql.oracle;
import java.util.List;
import junit.framework.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleBlockTest14 extends OracleTest {
public void test_0() throws Exception {
String sql = "DECLARE" + //
" emp_id employees.employee_id%TYPE;" + //
" emp_lastname employees.last_name%TYPE;" + //
" emp_salary employees.salary%TYPE;" + //
"" + //
"BEGIN" + //
" SELECT employee_id, last_name, salary" + //
" INTO emp_id, emp_lastname, emp_salary" + //
" FROM employees" + //
" WHERE employee_id = 120;" + //
" SAVEPOINT my_savepoint;" + //
" " + //
" UPDATE emp_name" + //
" SET salary = salary * 1.1" + //
" WHERE employee_id = emp_id;" + //
" " + //
" DELETE FROM emp_name" + //
" WHERE employee_id = 130;" + //
" " + //
" SAVEPOINT my_savepoint;" + //
" " + //
" INSERT INTO emp_name (employee_id, last_name, salary)" + //
" VALUES (emp_id, emp_lastname, emp_salary);" + //
"" + //
"EXCEPTION" + //
" WHEN DUP_VAL_ON_INDEX THEN" + //
" ROLLBACK TO my_savepoint;" + //
" DBMS_OUTPUT.PUT_LINE('Transaction rolled back.');" + //
"END;"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
print(statementList);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
for (SQLStatement statement : statementList) {
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(2, visitor.getTables().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("emp_name")));
Assert.assertEquals(7, visitor.getColumns().size());
Assert.assertEquals(3, visitor.getConditions().size());
Assert.assertEquals(1, visitor.getRelationships().size());
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
}
}
@@ -0,0 +1,69 @@
package com.alibaba.druid.bvt.sql.oracle;
import java.util.List;
import junit.framework.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleBlockTest7 extends OracleTest {
public void test_0() throws Exception {
String sql = "DROP TABLE employees_temp; " + //
"CREATE TABLE employees_temp AS " + //
" SELECT employee_id, first_name, last_name " + //
" FROM employees;" + //
" " + //
"DECLARE" + //
" emp_id employees_temp.employee_id%TYPE := 299;" + //
" emp_first_name employees_temp.first_name%TYPE := 'Bob';" + //
" emp_last_name employees_temp.last_name%TYPE := 'Henry';" + //
"BEGIN" + //
" INSERT INTO employees_temp (employee_id, first_name, last_name) " + //
" VALUES (emp_id, emp_first_name, emp_last_name);" + //
" " + //
" UPDATE employees_temp" + //
" SET first_name = 'Robert'" + //
" WHERE employee_id = emp_id;" + //
" " + //
" DELETE FROM employees_temp" + //
" WHERE employee_id = emp_id" + //
" RETURNING first_name, last_name" + //
" INTO emp_first_name, emp_last_name;" + //
"" + //
" COMMIT;" + //
" DBMS_OUTPUT.PUT_LINE (emp_first_name || ' ' || emp_last_name);" + //
"END;"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
print(statementList);
Assert.assertEquals(3, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
for (SQLStatement statement : statementList) {
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(2, visitor.getTables().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees_temp")));
Assert.assertEquals(6, visitor.getColumns().size());
Assert.assertEquals(2, visitor.getConditions().size());
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id")));
}
}
@@ -0,0 +1,69 @@
package com.alibaba.druid.bvt.sql.oracle;
import java.util.List;
import junit.framework.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleBlockTest8 extends OracleTest {
public void test_0() throws Exception {
String sql = "DECLARE" + //
" daily_order_total NUMBER(12,2);" + //
" weekly_order_total NUMBER(12,2); " + //
" monthly_order_total NUMBER(12,2);" + //
"BEGIN" + //
" COMMIT; -- end previous transaction\n" + //
" SET TRANSACTION READ ONLY NAME 'Calculate Order Totals';" + //
"" + //
" SELECT SUM (order_total)" + //
" INTO daily_order_total" + //
" FROM orders" + //
" WHERE order_date = SYSDATE;" + //
"" + //
" SELECT SUM (order_total)" + //
" INTO weekly_order_total" + //
" FROM orders" + //
" WHERE order_date = SYSDATE - 7;" + //
"" + //
" SELECT SUM (order_total)" + //
" INTO monthly_order_total" + //
" FROM orders" + //
" WHERE order_date = SYSDATE - 30;" + //
"" + //
" COMMIT; -- ends read-only transaction\n" + //
"END;"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
print(statementList);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
for (SQLStatement statement : statementList) {
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("orders")));
Assert.assertEquals(2, visitor.getColumns().size());
Assert.assertEquals(1, visitor.getConditions().size());
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("orders", "order_total")));
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("orders", "order_date")));
}
}
@@ -0,0 +1,64 @@
package com.alibaba.druid.bvt.sql.oracle;
import java.util.List;
import junit.framework.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleBlockTest9 extends OracleTest {
public void test_0() throws Exception {
String sql = "DECLARE" + //
" my_emp_id NUMBER(6);" + //
" my_job_id VARCHAR2(10);" + //
" my_sal NUMBER(8,2);" + //
" CURSOR c1 IS" + //
" SELECT employee_id, job_id, salary" + //
" FROM employees FOR UPDATE;" + //
"BEGIN" + //
" OPEN c1;" + //
" LOOP" + //
" FETCH c1 INTO my_emp_id, my_job_id, my_sal;" + //
" IF my_job_id = 'SA_REP' THEN" + //
" UPDATE employees" + //
" SET salary = salary * 1.02" + //
" WHERE CURRENT OF c1;" + //
" END IF;" + //
" EXIT WHEN c1%NOTFOUND;" + //
" END LOOP;" + //
"END;"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
print(statementList);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
for (SQLStatement statement : statementList) {
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
Assert.assertEquals(3, visitor.getColumns().size());
Assert.assertEquals(0, visitor.getConditions().size());
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id")));
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "job_id")));
}
}
@@ -0,0 +1,64 @@
package com.alibaba.druid.bvt.sql.oracle;
import java.util.List;
import junit.framework.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleCreateProcedureTest1 extends OracleTest {
public void test_0() throws Exception {
String sql = "CREATE OR REPLACE PROCEDURE p (" +
" dept_no NUMBER" +
") AS " +
"BEGIN" +
" DELETE FROM dept_temp" +
" WHERE department_id = dept_no;" +
" " +
" IF SQL%FOUND THEN" +
" DBMS_OUTPUT.PUT_LINE (" +
" 'Delete succeeded for department number ' || dept_no" +
" );" +
" ELSE" +
" DBMS_OUTPUT.PUT_LINE ('No department number ' || dept_no);" +
" END IF;" +
"END;" +
"/" +
"BEGIN" +
" p(270);" +
" p(400);" +
"END;"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
print(statementList);
Assert.assertEquals(3, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
for (SQLStatement statement : statementList) {
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("dept_temp")));
// Assert.assertEquals(7, visitor.getColumns().size());
Assert.assertEquals(2, visitor.getConditions().size());
Assert.assertEquals(1, visitor.getRelationships().size());
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
}
}
@@ -0,0 +1,60 @@
package com.alibaba.druid.bvt.sql.oracle;
import java.util.List;
import junit.framework.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleCreateProcedureTest2 extends OracleTest {
public void test_0() throws Exception {
String sql = "CREATE OR REPLACE PROCEDURE transfer (" + //
" from_acct NUMBER," + //
" to_acct NUMBER," + //
" amount NUMBER" + //
") AS " + //
"BEGIN" + //
" UPDATE accounts" + //
" SET balance = balance - amount" + //
" WHERE account_id = from_acct;" + //
" " + //
" UPDATE accounts" + //
" SET balance = balance + amount" + //
" WHERE account_id = to_acct;" + //
" " + //
" COMMIT WRITE IMMEDIATE NOWAIT;" + //
"END;"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
print(statementList);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
for (SQLStatement statement : statementList) {
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("accounts")));
Assert.assertEquals(5, visitor.getColumns().size());
Assert.assertEquals(3, visitor.getConditions().size());
Assert.assertEquals(2, visitor.getRelationships().size());
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
}
}
@@ -19,9 +19,9 @@ public class OracleResourceTest extends OracleTest {
public void test_0() throws Exception {
// 13
// exec_test("bvt/parser/oracle-17.txt");
for (int i = 0; i <= 53; ++i) {
exec_test("bvt/parser/oracle-" + i + ".txt");
// exec_test("bvt/parser/oracle-56.txt");
for (int i = 0; i <= 56; ++i) {
exec_test("bvt/parser/oracle-" + i + ".txt");
}
}
@@ -39,16 +39,19 @@ public class OracleResourceTest extends OracleTest {
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement statemen = statementList.get(0);
Assert.assertEquals(1, statementList.size());
// Assert.assertEquals(1, statementList.size());
System.out.println(sql);
print(statementList);
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
statemen.accept(visitor);
for (int i = 0, size = statementList.size(); i < size; ++i) {
SQLStatement statement = statementList.get(i);
statement.accept(visitor);
}
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());