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 }