diff --git a/src/main/java/com/alibaba/druid/mock/MockResultSet.java b/src/main/java/com/alibaba/druid/mock/MockResultSet.java index c06e3077bb..ce307a4f4d 100644 --- a/src/main/java/com/alibaba/druid/mock/MockResultSet.java +++ b/src/main/java/com/alibaba/druid/mock/MockResultSet.java @@ -327,6 +327,10 @@ public class MockResultSet implements ResultSet { public ResultSetMetaData getMetaData() throws SQLException { return metaData; } + + public MockResultSetMetaData getMockMetaData() throws SQLException { + return metaData; + } @Override public Object getObject(int columnIndex) throws SQLException { diff --git a/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java b/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java index 6206bbea6a..147daf3459 100644 --- a/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java +++ b/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java @@ -3,14 +3,19 @@ package com.alibaba.druid.mock.handler; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; +import java.sql.Types; import java.util.List; import com.alibaba.druid.mock.MockResultSet; +import com.alibaba.druid.mock.MockResultSetMetaData; +import com.alibaba.druid.mock.MockResultSetMetaData.ColumnMetaData; import com.alibaba.druid.mock.MockStatement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; +import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelect; @@ -68,28 +73,37 @@ public class MySqlMockExecuteHandlerImpl implements MockExecuteHandler { public ResultSet executeQueryFromDual(MockStatement statement, SQLSelectQueryBlock query) throws SQLException { MockResultSet rs = new MockResultSet(statement); + MockResultSetMetaData metaData = rs.getMockMetaData(); + Object[] row = new Object[query.getSelectList().size()]; for (int i = 0, size = query.getSelectList().size(); i < size; ++i) { + ColumnMetaData column = new ColumnMetaData(); SQLSelectItem item = query.getSelectList().get(i); SQLExpr expr = item.getExpr(); - if (expr instanceof SQLNumericLiteralExpr) { + if (expr instanceof SQLIntegerExpr) { row[i] = ((SQLNumericLiteralExpr) expr).getNumber(); + column.setColumnType(Types.INTEGER); + } else if (expr instanceof SQLNumberExpr) { + row[i] = ((SQLNumericLiteralExpr) expr).getNumber(); + column.setColumnType(Types.DECIMAL); } else if (expr instanceof SQLNullExpr) { row[i] = null; } else if (expr instanceof SQLMethodInvokeExpr) { SQLMethodInvokeExpr methodInvokeExpr = (SQLMethodInvokeExpr) expr; - + if ("NOW".equalsIgnoreCase(methodInvokeExpr.getMethodName())) { row[i] = new Timestamp(System.currentTimeMillis()); } else { throw new SQLException("TODO"); } - + } else { throw new SQLException("TODO"); } + + metaData.getColumns().add(column); } rs.getRows().add(row); diff --git a/src/test/java/com/alibaba/druid/bvt/proxy/CounterFilterTest.java b/src/test/java/com/alibaba/druid/bvt/proxy/CounterFilterTest.java index a8874e279b..2ef5b100b4 100644 --- a/src/test/java/com/alibaba/druid/bvt/proxy/CounterFilterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/proxy/CounterFilterTest.java @@ -36,7 +36,7 @@ import com.alibaba.druid.stat.JdbcResultSetStat; public class CounterFilterTest extends TestCase { - String sql = "SELECT * FROM PATROL"; + String sql = "SELECT 1"; public void test_countFilter() throws Exception { DataSourceProxyConfig config = new DataSourceProxyConfig(); @@ -72,6 +72,7 @@ public class CounterFilterTest extends TestCase { public void test_count_filter() throws Exception { DataSourceProxyConfig config = new DataSourceProxyConfig(); config.setUrl(""); + config.setRawUrl("jdbc:mock:"); StatFilter filter = new StatFilter(); diff --git a/src/test/java/com/alibaba/druid/bvt/proxy/JdbcUtilsTest.java b/src/test/java/com/alibaba/druid/bvt/proxy/JdbcUtilsTest.java index 3945d55b71..ce3122ecea 100644 --- a/src/test/java/com/alibaba/druid/bvt/proxy/JdbcUtilsTest.java +++ b/src/test/java/com/alibaba/druid/bvt/proxy/JdbcUtilsTest.java @@ -60,6 +60,10 @@ public class JdbcUtilsTest extends TestCase { return types[column - 1]; } + @Override + public String getColumnName(int column) throws SQLException { + return "C" + column; + } }; MockResultSet rs = new MockResultSet(null) { diff --git a/src/test/java/com/alibaba/druid/bvt/proxy/LogFilterTest.java b/src/test/java/com/alibaba/druid/bvt/proxy/LogFilterTest.java index b0437d0eed..11ae245952 100644 --- a/src/test/java/com/alibaba/druid/bvt/proxy/LogFilterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/proxy/LogFilterTest.java @@ -48,6 +48,7 @@ public class LogFilterTest extends TestCase { public void test_logFilter_0() throws Exception { DataSourceProxyConfig config = new DataSourceProxyConfig(); + config.setRawUrl("jdbc:mock:"); DataSourceProxyImpl dataSource = new DataSourceProxyImpl(new MockDriver(), config); Log4jFilter log4jFilter = new Log4jFilter(); @@ -96,6 +97,7 @@ public class LogFilterTest extends TestCase { public void test_logFilter_1() throws Exception { DataSourceProxyConfig config = new DataSourceProxyConfig(); + config.setRawUrl("jdbc:mock:"); DataSourceProxyImpl dataSource = new DataSourceProxyImpl(new MockDriver(), config); Log4jFilter log4jFilter = new Log4jFilter(); @@ -144,6 +146,7 @@ public class LogFilterTest extends TestCase { public void test_logFilter_2() throws Exception { DataSourceProxyConfig config = new DataSourceProxyConfig(); + config.setRawUrl("jdbc:mock:"); DataSourceProxyImpl dataSource = new DataSourceProxyImpl(new MockDriver(), config); Log4jFilter log4jFilter = new Log4jFilter(); @@ -261,7 +264,7 @@ public class LogFilterTest extends TestCase { @SuppressWarnings("deprecation") private void executeSQL(DataSourceProxyImpl dataSource) throws SQLException { - String sql = "SELECT * FROM PATROL"; + String sql = "SELECT 1"; Connection conn = dataSource.connect(new Properties()); conn.commit(); diff --git a/src/test/java/com/alibaba/druid/bvt/proxy/ResultSetProxyImplTest.java b/src/test/java/com/alibaba/druid/bvt/proxy/ResultSetProxyImplTest.java index a9e7036dfc..8d1355c0d3 100644 --- a/src/test/java/com/alibaba/druid/bvt/proxy/ResultSetProxyImplTest.java +++ b/src/test/java/com/alibaba/druid/bvt/proxy/ResultSetProxyImplTest.java @@ -31,13 +31,14 @@ import com.alibaba.druid.proxy.jdbc.ResultSetProxy; public class ResultSetProxyImplTest extends TestCase { - String sql = "SELECT * FROM PATROL"; + String sql = "SELECT 1"; public void test_resultset() throws Exception { MockDriver driver = new MockDriver(); DataSourceProxyConfig config = new DataSourceProxyConfig(); config.setUrl(""); + config.setRawUrl("jdbc:mock:"); DataSourceProxyImpl dataSource = new DataSourceProxyImpl(driver, config); {