1 package org.springframework.jdbc.core; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.DatabaseMetaData; 6 import java.sql.SQLException; 7 import java.util.List; 8 import java.util.Map; 9 import javax.sql.DataSource; 10 11 import org.easymock.MockControl; 12 import org.apache.commons.logging.LogFactory; 13 14 import org.springframework.jdbc.core.namedparam.SqlParameterSource; 15 16 /** 17 * @author Thomas Risberg 18 */ 19 public abstract class BatchUpdateTestHelper { 20 prepareBatchUpdateMocks(String sqlToUse, Object ids, int[] sqlTypes, int[] rowsAffected, MockControl ctrlDataSource, DataSource mockDataSource, MockControl ctrlConnection, Connection mockConnection, MockControl ctrlPreparedStatement, PreparedStatement mockPreparedStatement, MockControl ctrlDatabaseMetaData, DatabaseMetaData mockDatabaseMetaData)21 public static void prepareBatchUpdateMocks(String sqlToUse, Object ids, int[] sqlTypes, 22 int[] rowsAffected, 23 MockControl ctrlDataSource, DataSource mockDataSource, MockControl ctrlConnection, Connection mockConnection, 24 MockControl ctrlPreparedStatement, 25 PreparedStatement mockPreparedStatement, MockControl ctrlDatabaseMetaData, DatabaseMetaData mockDatabaseMetaData) 26 throws SQLException { 27 mockConnection.getMetaData(); 28 ctrlConnection.setDefaultReturnValue(null); 29 mockConnection.close(); 30 ctrlConnection.setDefaultVoidCallable(); 31 32 mockDataSource.getConnection(); 33 ctrlDataSource.setDefaultReturnValue(mockConnection); 34 35 mockPreparedStatement.getConnection(); 36 ctrlPreparedStatement.setReturnValue(mockConnection); 37 int idLength = 0; 38 if (ids instanceof SqlParameterSource[]) { 39 idLength = ((SqlParameterSource[])ids).length; 40 } 41 else if (ids instanceof Map[]) { 42 idLength = ((Map[])ids).length; 43 } 44 else { 45 idLength = ((List)ids).size(); 46 } 47 48 for (int i = 0; i < idLength; i++) { 49 if (ids instanceof SqlParameterSource[]) { 50 if (sqlTypes != null) { 51 mockPreparedStatement.setObject(1, ((SqlParameterSource[])ids)[i].getValue("id"), sqlTypes[0]); 52 } 53 else { 54 mockPreparedStatement.setObject(1, ((SqlParameterSource[])ids)[i].getValue("id")); 55 } 56 } 57 else if (ids instanceof Map[]) { 58 if (sqlTypes != null) { 59 mockPreparedStatement.setObject(1, ((Map[])ids)[i].get("id"), sqlTypes[0]); 60 } 61 else { 62 mockPreparedStatement.setObject(1, ((Map[])ids)[i].get("id")); 63 } 64 } 65 else { 66 if (sqlTypes != null) { 67 mockPreparedStatement.setObject(1, ((Object[])((List)ids).get(i))[0], sqlTypes[0]); 68 } 69 else { 70 mockPreparedStatement.setObject(1, ((Object[])((List)ids).get(i))[0]); 71 } 72 } 73 ctrlPreparedStatement.setVoidCallable(); 74 mockPreparedStatement.addBatch(); 75 ctrlPreparedStatement.setVoidCallable(); 76 } 77 mockPreparedStatement.executeBatch(); 78 ctrlPreparedStatement.setReturnValue(rowsAffected); 79 if (LogFactory.getLog(JdbcTemplate.class).isDebugEnabled()) { 80 mockPreparedStatement.getWarnings(); 81 ctrlPreparedStatement.setReturnValue(null); 82 } 83 mockPreparedStatement.close(); 84 ctrlPreparedStatement.setVoidCallable(); 85 86 mockDatabaseMetaData.getDatabaseProductName(); 87 ctrlDatabaseMetaData.setReturnValue("MySQL"); 88 mockDatabaseMetaData.supportsBatchUpdates(); 89 ctrlDatabaseMetaData.setReturnValue(true); 90 91 mockConnection.prepareStatement(sqlToUse); 92 ctrlConnection.setReturnValue(mockPreparedStatement); 93 mockConnection.getMetaData(); 94 ctrlConnection.setReturnValue(mockDatabaseMetaData, 2); 95 } 96 replayBatchUpdateMocks(MockControl ctrlDataSource, MockControl ctrlConnection, MockControl ctrlPreparedStatement, MockControl ctrlDatabaseMetaData)97 public static void replayBatchUpdateMocks(MockControl ctrlDataSource, 98 MockControl ctrlConnection, 99 MockControl ctrlPreparedStatement, 100 MockControl ctrlDatabaseMetaData) { 101 ctrlPreparedStatement.replay(); 102 ctrlDatabaseMetaData.replay(); 103 ctrlDataSource.replay(); 104 ctrlConnection.replay(); 105 } 106 verifyBatchUpdateMocks(MockControl ctrlPreparedStatement, MockControl ctrlDatabaseMetaData)107 public static void verifyBatchUpdateMocks(MockControl ctrlPreparedStatement, MockControl ctrlDatabaseMetaData) { 108 ctrlPreparedStatement.verify(); 109 ctrlDatabaseMetaData.verify(); 110 } 111 112 } 113