From 50bf093e41dae391ee2db51523689f5b1005134a Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 19 May 2011 12:42:17 +0000 Subject: [PATCH] git-svn-id: http://code.alibabatech.com/svn/druid/trunk@139 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../bvt/OracleSQLParserResourceTest.java | 76 ------------------- .../bvt/OracleSQLParserResourceTest2.java | 62 +++++++++++++++ .../sql/oracle/bvt/OracleSQLParserTest.java | 52 ++++++++----- src/test/resources/bvt/parser/oracle-2.txt | 2 + 4 files changed, 97 insertions(+), 95 deletions(-) delete mode 100644 src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest.java create mode 100644 src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest2.java create mode 100644 src/test/resources/bvt/parser/oracle-2.txt diff --git a/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest.java b/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest.java deleted file mode 100644 index 449243dd61..0000000000 --- a/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.alibaba.druid.sql.oracle.bvt; - -import java.util.List; - -import junit.framework.Assert; -import junit.framework.TestCase; - -import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; -import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; -import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateSetListClause; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateSetListSingleColumnItem; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.visitor.OracleOutputVisitor; -import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; - -public class OracleSQLParserResourceTest extends TestCase { - - public void test_0() throws Exception { - String sql = "UPDATE employees SET salary = salary * 1.1 WHERE employee_id IN (SELECT employee_id FROM job_history);"; - OracleStatementParser parser = new OracleStatementParser(sql); - List statementList = parser.parseStatementList(); - - Assert.assertEquals(1, statementList.size()); - - OracleUpdateStatement statement = (OracleUpdateStatement) statementList.get(0); - Assert.assertEquals(0, statement.getHints().size()); - OracleUpdateSetListClause setList = (OracleUpdateSetListClause) statement.getSetClause(); - Assert.assertEquals(1, setList.getItems().size()); - OracleUpdateSetListSingleColumnItem item = (OracleUpdateSetListSingleColumnItem) setList.getItems().get(0); - SQLIdentifierExpr column = (SQLIdentifierExpr) item.getColumn(); - Assert.assertEquals("salary", column.getName()); - - SQLBinaryOpExpr value = (SQLBinaryOpExpr) item.getValue(); - Assert.assertEquals(SQLBinaryOperator.Multiply, value.getOperator()); - - String text = output(statementList); - System.out.println(text); - } - - public void test_1() throws Exception { - String sql = "SELECT employees_seq.nextval FROM DUAL;"; - - OracleStatementParser parser = new OracleStatementParser(sql); - List statementList = parser.parseStatementList(); - - Assert.assertEquals(1, statementList.size()); - - String text = output(statementList); - System.out.println(text); - } - - public void test_2() throws Exception { - String sql = "SELECT LPAD(' ',2*(LEVEL-1)) || last_name org_chart, employee_id, manager_id, job_id FROM employees WHERE job_id != 'FI_MGR' START WITH job_id = 'AD_VP' CONNECT BY PRIOR employee_id = manager_id; "; - - OracleStatementParser parser = new OracleStatementParser(sql); - List statementList = parser.parseStatementList(); - - Assert.assertEquals(1, statementList.size()); - - String text = output(statementList); - System.out.println(text); - } - - private String output(List stmtList) { - StringBuilder out = new StringBuilder(); - OracleOutputVisitor visitor = new OracleOutputVisitor(out); - - for (SQLStatement stmt : stmtList) { - stmt.accept(visitor); - } - - return out.toString(); - } -} diff --git a/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest2.java b/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest2.java new file mode 100644 index 0000000000..8a77f2bf45 --- /dev/null +++ b/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest2.java @@ -0,0 +1,62 @@ +package com.alibaba.druid.sql.oracle.bvt; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.List; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.visitor.OracleOutputVisitor; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.util.JdbcUtils; + +public class OracleSQLParserResourceTest2 extends TestCase { + + public void f_test_1() throws Exception { + InputStream is = null; + + is = Thread.currentThread().getContextClassLoader().getResourceAsStream("bvt/parser/oracle-0.txt"); + Reader reader = new InputStreamReader(is); + String sql = JdbcUtils.read(reader); + JdbcUtils.close(reader); + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + + Assert.assertEquals(1, statementList.size()); + + String text = output(statementList); + System.out.println(text); + } + + public void test_2() throws Exception { + InputStream is = null; + + is = Thread.currentThread().getContextClassLoader().getResourceAsStream("bvt/parser/oracle-1.txt"); + Reader reader = new InputStreamReader(is); + String sql = JdbcUtils.read(reader); + JdbcUtils.close(reader); + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + + Assert.assertEquals(1, statementList.size()); + + String text = output(statementList); + System.out.println(text); + } + + private String output(List stmtList) { + StringBuilder out = new StringBuilder(); + OracleOutputVisitor visitor = new OracleOutputVisitor(out); + + for (SQLStatement stmt : stmtList) { + stmt.accept(visitor); + } + + return out.toString(); + } +} diff --git a/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserTest.java b/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserTest.java index 7a3bd62eeb..8126eae319 100644 --- a/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserTest.java +++ b/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserTest.java @@ -1,28 +1,47 @@ package com.alibaba.druid.sql.oracle.bvt; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; import java.util.List; import junit.framework.Assert; import junit.framework.TestCase; import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; +import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; +import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateSetListClause; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateSetListSingleColumnItem; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.visitor.OracleOutputVisitor; import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; -import com.alibaba.druid.util.JdbcUtils; public class OracleSQLParserTest extends TestCase { - public void f_test_1() throws Exception { - InputStream is = null; + public void test_0() throws Exception { + String sql = "UPDATE employees SET salary = salary * 1.1 WHERE employee_id IN (SELECT employee_id FROM job_history);"; + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + + Assert.assertEquals(1, statementList.size()); + + OracleUpdateStatement statement = (OracleUpdateStatement) statementList.get(0); + Assert.assertEquals(0, statement.getHints().size()); + OracleUpdateSetListClause setList = (OracleUpdateSetListClause) statement.getSetClause(); + Assert.assertEquals(1, setList.getItems().size()); + OracleUpdateSetListSingleColumnItem item = (OracleUpdateSetListSingleColumnItem) setList.getItems().get(0); + SQLIdentifierExpr column = (SQLIdentifierExpr) item.getColumn(); + Assert.assertEquals("salary", column.getName()); + + SQLBinaryOpExpr value = (SQLBinaryOpExpr) item.getValue(); + Assert.assertEquals(SQLBinaryOperator.Multiply, value.getOperator()); + + String text = output(statementList); + System.out.println(text); + } + + public void test_1() throws Exception { + String sql = "SELECT employees_seq.nextval FROM DUAL;"; - is = Thread.currentThread().getContextClassLoader().getResourceAsStream("bvt/parser/oracle-0.txt"); - Reader reader = new InputStreamReader(is); - String sql = JdbcUtils.read(reader); - JdbcUtils.close(reader); - OracleStatementParser parser = new OracleStatementParser(sql); List statementList = parser.parseStatementList(); @@ -31,15 +50,10 @@ public class OracleSQLParserTest extends TestCase { String text = output(statementList); System.out.println(text); } - - public void test_2() throws Exception { - InputStream is = null; - is = Thread.currentThread().getContextClassLoader().getResourceAsStream("bvt/parser/oracle-1.txt"); - Reader reader = new InputStreamReader(is); - String sql = JdbcUtils.read(reader); - JdbcUtils.close(reader); - + public void test_2() throws Exception { + String sql = "SELECT LPAD(' ',2*(LEVEL-1)) || last_name org_chart, employee_id, manager_id, job_id FROM employees WHERE job_id != 'FI_MGR' START WITH job_id = 'AD_VP' CONNECT BY PRIOR employee_id = manager_id; "; + OracleStatementParser parser = new OracleStatementParser(sql); List statementList = parser.parseStatementList(); diff --git a/src/test/resources/bvt/parser/oracle-2.txt b/src/test/resources/bvt/parser/oracle-2.txt new file mode 100644 index 0000000000..8dcfa9e33c --- /dev/null +++ b/src/test/resources/bvt/parser/oracle-2.txt @@ -0,0 +1,2 @@ +SELECT employee_id FROM (SELECT * FROM employees) + FOR UPDATE OF employee_id; \ No newline at end of file