mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
git-svn-id: http://code.alibabatech.com/svn/druid/trunk@73 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user