From 5ddff762bd54da646baea9ab25f45f970d386b08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Thu, 15 Mar 2012 21:36:22 +0800 Subject: [PATCH] add sql wall support --- .../wall/IllegalConditionViolation.java | 27 ------- .../filter/wall/spi/OracleWallProvider.java | 21 ++++++ .../filter/wall/spi/WallVisitorUtils.java | 4 +- .../alibaba/druid/sql/OnlineOracleTest3.java | 72 +++++++++++++++++++ 4 files changed, 95 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/com/alibaba/druid/filter/wall/IllegalConditionViolation.java create mode 100644 src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallProvider.java create mode 100644 src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java diff --git a/src/main/java/com/alibaba/druid/filter/wall/IllegalConditionViolation.java b/src/main/java/com/alibaba/druid/filter/wall/IllegalConditionViolation.java deleted file mode 100644 index e35e686fed..0000000000 --- a/src/main/java/com/alibaba/druid/filter/wall/IllegalConditionViolation.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.alibaba.druid.filter.wall; - -public class IllegalConditionViolation implements Violation { - - private String condition; - - public IllegalConditionViolation(){ - - } - - public IllegalConditionViolation(String condition){ - this.condition = condition; - } - - public String getCondition() { - return condition; - } - - public void setCondition(String condition) { - this.condition = condition; - } - - public String toString() { - return this.condition; - } - -} diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallProvider.java b/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallProvider.java new file mode 100644 index 0000000000..87c6630282 --- /dev/null +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallProvider.java @@ -0,0 +1,21 @@ +package com.alibaba.druid.filter.wall.spi; + +import com.alibaba.druid.filter.wall.WallProvider; +import com.alibaba.druid.filter.wall.WallVisitor; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.parser.SQLStatementParser; + + +public class OracleWallProvider extends WallProvider { + + @Override + public SQLStatementParser createParser(String sql) { + return new OracleStatementParser(sql); + } + + @Override + public WallVisitor createWallVisitor() { + return new OracleWallVisitor(); + } + +} diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java index 50702ad849..b9405a603f 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java @@ -1,6 +1,6 @@ package com.alibaba.druid.filter.wall.spi; -import com.alibaba.druid.filter.wall.IllegalConditionViolation; +import com.alibaba.druid.filter.wall.IllegalSQLObjectViolation; import com.alibaba.druid.filter.wall.WallVisitor; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLExpr; @@ -25,7 +25,7 @@ public class WallVisitorUtils { public static void check(WallVisitor visitor, SQLBinaryOpExpr x) { if (Boolean.TRUE == getValue(x)) { - visitor.getViolations().add(new IllegalConditionViolation(SQLUtils.toSQLString(x))); + visitor.getViolations().add(new IllegalSQLObjectViolation(SQLUtils.toSQLString(x))); } } diff --git a/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java b/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java new file mode 100644 index 0000000000..cc6f845a88 --- /dev/null +++ b/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java @@ -0,0 +1,72 @@ +package com.alibaba.druid.sql; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.util.JdbcUtils; + +public class OnlineOracleTest3 extends TestCase { + + private String jdbcUrl; + private String user; + private String password; + private DruidDataSource dataSource; + + public void setUp() throws Exception { + jdbcUrl = "jdbc:oracle:thin:@10.20.149.18:1521:emdb"; + user = "wardon"; + password = "wardon"; + + dataSource = new DruidDataSource(); + dataSource.setInitialSize(1); + dataSource.setUrl(jdbcUrl); + dataSource.setUsername(user); + dataSource.setPassword(password); + dataSource.setMaxActive(50); + dataSource.setPoolPreparedStatements(true); + dataSource.setMaxOpenPreparedStatements(100); + } + + public void test_connect() throws Exception { + execute("select * from session_roles"); + } + + public void executeQuery(String sql) throws SQLException { + Connection conn = null; + Statement stmt = null; + ResultSet rs = null; + try { + conn = dataSource.getConnection(); + + stmt = conn.createStatement(); + rs = stmt.executeQuery(sql); + + JdbcUtils.printResultSet(rs); + + } finally { + JdbcUtils.close(rs); + JdbcUtils.close(stmt); + JdbcUtils.close(conn); + } + } + + public void execute(String sql) throws SQLException { + Connection conn = null; + Statement stmt = null; + try { + conn = dataSource.getConnection(); + + stmt = conn.createStatement(); + stmt.execute(sql); + + } finally { + JdbcUtils.close(stmt); + JdbcUtils.close(conn); + } + } +}