Search in sources :

Example 16 with PreparedStatementExecutorWrapper

use of com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper in project sharding-jdbc by dangdangdotcom.

the class PreparedStatementExecutorTest method assertExecuteUpdateForMultiplePreparedStatementsSuccess.

@Test
public void assertExecuteUpdateForMultiplePreparedStatementsSuccess() throws SQLException {
    PreparedStatement preparedStatement1 = mock(PreparedStatement.class);
    PreparedStatementExecutorWrapper wrapper1 = createPreparedStatementExecutorWrapperForDML(preparedStatement1, "ds_0");
    PreparedStatement preparedStatement2 = mock(PreparedStatement.class);
    PreparedStatementExecutorWrapper wrapper2 = createPreparedStatementExecutorWrapperForDML(preparedStatement2, "ds_1");
    when(preparedStatement1.executeUpdate()).thenReturn(10);
    when(preparedStatement2.executeUpdate()).thenReturn(20);
    when(preparedStatement1.getConnection()).thenReturn(mock(Connection.class));
    when(preparedStatement2.getConnection()).thenReturn(mock(Connection.class));
    PreparedStatementExecutor actual = new PreparedStatementExecutor(executorEngine, Arrays.asList(wrapper1, wrapper2));
    assertThat(actual.executeUpdate(), is(30));
    verify(preparedStatement1).executeUpdate();
    verify(preparedStatement2).executeUpdate();
    verify(preparedStatement1).getConnection();
    verify(preparedStatement2).getConnection();
    verify(eventCaller, times(2)).verifyDataSource("ds_0");
    verify(eventCaller, times(2)).verifyDataSource("ds_1");
    verify(eventCaller, times(4)).verifySQL("DELETE FROM dual");
    verify(eventCaller, times(4)).verifyParameters(Collections.emptyList());
    verify(eventCaller, times(2)).verifyEventExecutionType(EventExecutionType.BEFORE_EXECUTE);
    verify(eventCaller, times(2)).verifyEventExecutionType(EventExecutionType.EXECUTE_SUCCESS);
    verify(eventCaller, times(0)).verifyException(null);
}
Also used : PreparedStatementExecutorWrapper(com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) Test(org.junit.Test)

Example 17 with PreparedStatementExecutorWrapper

use of com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper in project sharding-jdbc by dangdangdotcom.

the class PreparedStatementExecutorTest method assertExecuteForSinglePreparedStatementWithDQL.

@Test
public void assertExecuteForSinglePreparedStatementWithDQL() throws SQLException {
    PreparedStatement preparedStatement = mock(PreparedStatement.class);
    PreparedStatementExecutorWrapper wrapper = createPreparedStatementExecutorWrapperForDQL(preparedStatement, "ds_0");
    when(preparedStatement.execute()).thenReturn(true);
    PreparedStatementExecutor actual = new PreparedStatementExecutor(executorEngine, Collections.singleton(wrapper));
    assertTrue(actual.execute());
    verify(preparedStatement).execute();
    verify(eventCaller, times(2)).verifyDataSource("ds_0");
    verify(eventCaller, times(2)).verifySQL("SELECT * FROM dual");
    verify(eventCaller, times(2)).verifyParameters(Collections.emptyList());
    verify(eventCaller).verifyEventExecutionType(EventExecutionType.BEFORE_EXECUTE);
    verify(eventCaller).verifyEventExecutionType(EventExecutionType.EXECUTE_SUCCESS);
    verify(eventCaller, times(0)).verifyException(null);
}
Also used : PreparedStatementExecutorWrapper(com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper) PreparedStatement(java.sql.PreparedStatement) Test(org.junit.Test)

Example 18 with PreparedStatementExecutorWrapper

use of com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper in project sharding-jdbc by dangdangdotcom.

the class PreparedStatementExecutorTest method assertExecuteUpdateForMultiplePreparedStatementsFailure.

@Test
public void assertExecuteUpdateForMultiplePreparedStatementsFailure() throws SQLException {
    PreparedStatement preparedStatement1 = mock(PreparedStatement.class);
    PreparedStatementExecutorWrapper wrapper1 = createPreparedStatementExecutorWrapperForDML(preparedStatement1, "ds_0");
    PreparedStatement preparedStatement2 = mock(PreparedStatement.class);
    PreparedStatementExecutorWrapper wrapper2 = createPreparedStatementExecutorWrapperForDML(preparedStatement2, "ds_1");
    SQLException exp = new SQLException();
    when(preparedStatement1.executeUpdate()).thenThrow(exp);
    when(preparedStatement2.executeUpdate()).thenThrow(exp);
    when(preparedStatement1.getConnection()).thenReturn(mock(Connection.class));
    when(preparedStatement2.getConnection()).thenReturn(mock(Connection.class));
    PreparedStatementExecutor actual = new PreparedStatementExecutor(executorEngine, Arrays.asList(wrapper1, wrapper2));
    assertThat(actual.executeUpdate(), is(0));
    verify(preparedStatement1).executeUpdate();
    verify(preparedStatement2).executeUpdate();
    verify(preparedStatement1).getConnection();
    verify(preparedStatement2).getConnection();
    verify(eventCaller, times(2)).verifyDataSource("ds_0");
    verify(eventCaller, times(2)).verifyDataSource("ds_1");
    verify(eventCaller, times(4)).verifySQL("DELETE FROM dual");
    verify(eventCaller, times(4)).verifyParameters(Collections.emptyList());
    verify(eventCaller, times(2)).verifyEventExecutionType(EventExecutionType.BEFORE_EXECUTE);
    verify(eventCaller, times(2)).verifyEventExecutionType(EventExecutionType.EXECUTE_FAILURE);
    verify(eventCaller, times(2)).verifyException(exp);
}
Also used : SQLException(java.sql.SQLException) PreparedStatementExecutorWrapper(com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) Test(org.junit.Test)

Example 19 with PreparedStatementExecutorWrapper

use of com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper in project sharding-jdbc by dangdangdotcom.

the class PreparedStatementExecutorTest method assertExecuteForSinglePreparedStatementFailureWithDML.

@Test
public void assertExecuteForSinglePreparedStatementFailureWithDML() throws SQLException {
    PreparedStatement preparedStatement = mock(PreparedStatement.class);
    PreparedStatementExecutorWrapper wrapper = createPreparedStatementExecutorWrapperForDML(preparedStatement, "ds_0");
    SQLException exp = new SQLException();
    when(preparedStatement.execute()).thenThrow(exp);
    PreparedStatementExecutor actual = new PreparedStatementExecutor(executorEngine, Collections.singleton(wrapper));
    assertFalse(actual.execute());
    verify(preparedStatement).execute();
    verify(eventCaller, times(2)).verifyDataSource("ds_0");
    verify(eventCaller, times(2)).verifySQL("DELETE FROM dual");
    verify(eventCaller, times(2)).verifyParameters(Collections.emptyList());
    verify(eventCaller).verifyEventExecutionType(EventExecutionType.BEFORE_EXECUTE);
    verify(eventCaller).verifyEventExecutionType(EventExecutionType.EXECUTE_FAILURE);
    verify(eventCaller).verifyException(exp);
}
Also used : SQLException(java.sql.SQLException) PreparedStatementExecutorWrapper(com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper) PreparedStatement(java.sql.PreparedStatement) Test(org.junit.Test)

Example 20 with PreparedStatementExecutorWrapper

use of com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper in project sharding-jdbc by dangdangdotcom.

the class PreparedStatementExecutorTest method assertExecuteForMultiplePreparedStatementsFailureWithDML.

@Test
public void assertExecuteForMultiplePreparedStatementsFailureWithDML() throws SQLException {
    PreparedStatement preparedStatement1 = mock(PreparedStatement.class);
    PreparedStatementExecutorWrapper wrapper1 = createPreparedStatementExecutorWrapperForDML(preparedStatement1, "ds_0");
    PreparedStatement preparedStatement2 = mock(PreparedStatement.class);
    PreparedStatementExecutorWrapper wrapper2 = createPreparedStatementExecutorWrapperForDML(preparedStatement2, "ds_1");
    SQLException exp = new SQLException();
    when(preparedStatement1.execute()).thenThrow(exp);
    when(preparedStatement2.execute()).thenThrow(exp);
    when(preparedStatement1.getConnection()).thenReturn(mock(Connection.class));
    when(preparedStatement2.getConnection()).thenReturn(mock(Connection.class));
    PreparedStatementExecutor actual = new PreparedStatementExecutor(executorEngine, Arrays.asList(wrapper1, wrapper2));
    assertFalse(actual.execute());
    verify(preparedStatement1).execute();
    verify(preparedStatement2).execute();
    verify(preparedStatement1).getConnection();
    verify(preparedStatement2).getConnection();
    verify(eventCaller, times(2)).verifyDataSource("ds_0");
    verify(eventCaller, times(2)).verifyDataSource("ds_1");
    verify(eventCaller, times(4)).verifySQL("DELETE FROM dual");
    verify(eventCaller, times(4)).verifyParameters(Collections.emptyList());
    verify(eventCaller, times(2)).verifyEventExecutionType(EventExecutionType.BEFORE_EXECUTE);
    verify(eventCaller, times(2)).verifyEventExecutionType(EventExecutionType.EXECUTE_FAILURE);
    verify(eventCaller, times(2)).verifyException(exp);
}
Also used : SQLException(java.sql.SQLException) PreparedStatementExecutorWrapper(com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) Test(org.junit.Test)

Aggregations

PreparedStatementExecutorWrapper (com.dangdang.ddframe.rdb.sharding.executor.wrapper.PreparedStatementExecutorWrapper)21 PreparedStatement (java.sql.PreparedStatement)15 Test (org.junit.Test)14 SQLException (java.sql.SQLException)9 Connection (java.sql.Connection)7 Context (com.codahale.metrics.Timer.Context)4 MetricsContext (com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext)4 ResultSet (java.sql.ResultSet)4 MergeContext (com.dangdang.ddframe.rdb.sharding.parser.result.merger.MergeContext)1 SQLExecutionUnit (com.dangdang.ddframe.rdb.sharding.router.SQLExecutionUnit)1 SQLRouteResult (com.dangdang.ddframe.rdb.sharding.router.SQLRouteResult)1 ArrayList (java.util.ArrayList)1