git-svn-id: http://code.alibabatech.com/svn/druid/trunk@73 b9813039-fb51-4c41-a8b9-e21c2acb5095

This commit is contained in:
wenshao
2011-05-14 08:10:24 +00:00
parent 84d743206c
commit c96818767d
4 changed files with 59 additions and 6 deletions
@@ -27,12 +27,17 @@ import java.sql.SQLException;
import java.sql.SQLXML;
import java.util.Properties;
import com.alibaba.druid.mock.handler.MockExecuteHandler;
import com.alibaba.druid.mock.handler.MySqlMockExecuteHandlerImpl;
public class MockDriver implements Driver {
private String prefix = "jdbc:fake:";
private String mockPrefix = "jdbc:mock:";
private String prefix = "jdbc:fake:";
private String mockPrefix = "jdbc:mock:";
private final static MockDriver instance = new MockDriver();
private MockExecuteHandler executeHandler = new MySqlMockExecuteHandlerImpl();
private final static MockDriver instance = new MockDriver();
static {
registerDriver(instance);
@@ -50,6 +55,14 @@ public class MockDriver implements Driver {
return false;
}
public MockExecuteHandler getExecuteHandler() {
return executeHandler;
}
public void setExecuteHandler(MockExecuteHandler executeHandler) {
this.executeHandler = executeHandler;
}
@Override
public Connection connect(String url, Properties info) throws SQLException {
MockConnection conn = new MockConnection(this);
@@ -100,13 +113,17 @@ public class MockDriver implements Driver {
return true;
}
protected ResultSet createResultSet(MockStatement stmt, String sql) {
protected ResultSet executeQuery(MockStatement stmt, String sql) throws SQLException {
if (this.executeHandler != null) {
return this.executeHandler.executeQuery(stmt, sql);
}
MockResultSet rs = new MockResultSet(stmt);
if ("SELECT 1".equalsIgnoreCase(sql)) {
rs.getRows().add(new Object[] { 1 });
} else if ("SELECT NULL".equalsIgnoreCase(sql)) {
rs.getRows().add(new Object[] { null });
rs.getRows().add(new Object[] { null });
} else if ("SELECT NOW()".equalsIgnoreCase(sql)) {
rs.getRows().add(new Object[] { new java.sql.Timestamp(System.currentTimeMillis()) });
} else if ("SELECT value FROM _int_1000_".equalsIgnoreCase(sql)) {
@@ -59,7 +59,7 @@ public class MockStatement implements Statement {
@Override
public ResultSet executeQuery(String sql) throws SQLException {
if (fakeConnection != null && fakeConnection.getDriver() != null) {
return fakeConnection.getDriver().createResultSet(this, sql);
return fakeConnection.getDriver().executeQuery(this, sql);
}
return new MockResultSet(this);
@@ -0,0 +1,10 @@
package com.alibaba.druid.mock.handler;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.alibaba.druid.mock.MockStatement;
public interface MockExecuteHandler {
ResultSet executeQuery(MockStatement statement, String sql) throws SQLException;
}
@@ -0,0 +1,26 @@
package com.alibaba.druid.mock.handler;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import com.alibaba.druid.mock.MockStatement;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.parser.SQLStatementParser;
public class MySqlMockExecuteHandlerImpl implements MockExecuteHandler {
@Override
public ResultSet executeQuery(MockStatement statement, String sql) throws SQLException {
SQLStatementParser parser = new MySqlStatementParser(sql);
List<SQLStatement> stmtList = parser.parseStatementList(); //
if (stmtList.size() > 1) {
throw new SQLException("not support multi-statment. " + sql);
}
// TODO Auto-generated method stub
return null;
}
}