1 package com.diasparsoftware.jdbc.test; 2 3 import java.sql.*; 4 import java.util.*; 5 6 import junit.framework.TestCase; 7 8 import com.diasparsoftware.java.sql.PreparedStatementData; 9 import com.diasparsoftware.jdbc.*; 10 import com.mockobjects.sql.*; 11 12 public class ExecuteSelectStatementTest extends TestCase { 13 public void testReturnNoRows() throws Exception { 14 PreparedStatementData preparedStatementData = new PreparedStatementData( 15 "select * from A where 1=2", Collections.EMPTY_LIST); 16 17 MockPreparedStatement preparedStatement = new MockPreparedStatement(); 18 preparedStatement.addResultSet(new MockMultiRowResultSet()); 19 20 MockConnection2 connection = new MockConnection2(); 21 connection.setupAddPreparedStatement(preparedStatementData.sqlString, 22 preparedStatement); 23 24 PreparedStatementExecuter executer = new JdbcQueryExecuter(connection); 25 List rows = executer.executeSelectStatement(preparedStatementData, 26 new JdbcRowMapper() { 27 public Object makeDomainObject(ResultSet row) 28 throws SQLException { 29 30 return null; 31 } 32 }); 33 34 assertTrue(rows.isEmpty()); 35 } 36 37 public void testReturnStringAsRow() throws Exception { 38 PreparedStatementData selectStatementData = new PreparedStatementData( 39 "select * from B", Collections.EMPTY_LIST); 40 41 MockMultiRowResultSet expectedResultSet = new MockMultiRowResultSet(); 42 expectedResultSet.setupColumnNames(new String[]{"a"}); 43 expectedResultSet.setupRows(new Object[][]{{"hello"}, {"goodbye"}}); 44 45 MockPreparedStatement preparedStatement = new MockPreparedStatement(); 46 preparedStatement.addResultSet(expectedResultSet); 47 preparedStatement.setExpectedClearParametersCalls(1); 48 preparedStatement.setExpectedCloseCalls(1); 49 50 MockConnection2 connection = new MockConnection2(); 51 connection.setupAddPreparedStatement(selectStatementData.sqlString, 52 preparedStatement); 53 54 List expectedObjects = new ArrayList() { 55 { 56 add("hello"); 57 add("goodbye"); 58 } 59 }; 60 61 PreparedStatementExecuter executer = new JdbcQueryExecuter(connection); 62 JdbcRowMapper simpleMapper = new JdbcRowMapper() { 63 public Object makeDomainObject(ResultSet row) throws SQLException { 64 return row.getObject("a"); 65 } 66 }; 67 68 List actualObjects = executer.executeSelectStatement( 69 selectStatementData, simpleMapper); 70 71 assertEquals(expectedObjects, actualObjects); 72 73 preparedStatement.verify(); 74 connection.verify(); 75 } 76 77 public void testReturnFirstRow() throws Exception { 78 PreparedStatementData selectStatementData = new PreparedStatementData( 79 "select * from B where a='hello'", Collections.EMPTY_LIST); 80 81 MockMultiRowResultSet expectedResultSet = new MockMultiRowResultSet(); 82 expectedResultSet.setupColumnNames(new String[]{"a"}); 83 expectedResultSet.setupRows(new Object[][]{{"hello"}, {"goodbye"}}); 84 85 MockPreparedStatement preparedStatement = new MockPreparedStatement(); 86 preparedStatement.addResultSet(expectedResultSet); 87 preparedStatement.setExpectedClearParametersCalls(1); 88 preparedStatement.setExpectedCloseCalls(1); 89 90 MockConnection2 connection = new MockConnection2(); 91 connection.setupAddPreparedStatement(selectStatementData.sqlString, 92 preparedStatement); 93 94 String expectedObject = "hello"; 95 96 PreparedStatementExecuter executer = new JdbcQueryExecuter(connection); 97 JdbcRowMapper simpleMapper = new JdbcRowMapper() { 98 public Object makeDomainObject(ResultSet row) throws SQLException { 99 return row.getObject("a"); 100 } 101 }; 102 103 Object actualObject = executer.executeSingleRowSelectStatement( 104 selectStatementData, simpleMapper); 105 106 assertEquals(expectedObject, actualObject); 107 108 preparedStatement.verify(); 109 connection.verify(); 110 } 111 }