@@ -30,13 +30,17 @@ public class StatementWrapperTest extends CCMTestsSupport {
3030 private static final String INSERT_QUERY = "insert into test (k, v) values (?, ?)" ;
3131 private static final String SELECT_QUERY = "select * from test where k = ?" ;
3232
33+ private static final String INSERT_MULTIPAGE_QUERY = "insert into test_multipage (k, v) values (?, ?)" ;
34+ private static final String SELECT_MULTIPAGE_QUERY = "select * from test_multipage where k = ?" ;
35+
3336 CustomLoadBalancingPolicy loadBalancingPolicy = new CustomLoadBalancingPolicy ();
3437 CustomSpeculativeExecutionPolicy speculativeExecutionPolicy = new CustomSpeculativeExecutionPolicy ();
3538 CustomRetryPolicy retryPolicy = new CustomRetryPolicy ();
3639
3740 @ Override
3841 public void onTestContextInitialized () {
3942 execute ("create table test (k text primary key, v int)" );
43+ execute ("create table test_multipage (k text, v int, primary key (k, v))" );
4044 }
4145
4246 @ Override
@@ -59,6 +63,65 @@ public void should_pass_wrapped_statement_to_load_balancing_policy() {
5963 assertThat (loadBalancingPolicy .customStatementsHandled .get ()).isEqualTo (1 );
6064 }
6165
66+ @ Test (groups = "short" )
67+ public void should_reuse_wrapped_simple_statement_for_multipage_query () {
68+ loadBalancingPolicy .customStatementsHandled .set (0 );
69+
70+ for (int v = 1 ; v <= 100 ; v ++)
71+ session ().execute (new SimpleStatement (INSERT_MULTIPAGE_QUERY , "key_simple_multipage" , v ));
72+
73+ SimpleStatement s = new SimpleStatement (SELECT_MULTIPAGE_QUERY , "key_simple_multipage" );
74+ s .setFetchSize (1 );
75+
76+ CustomStatement customStatement = new CustomStatement (s );
77+
78+ ResultSet rs = session ().execute (customStatement );
79+ assertThat (loadBalancingPolicy .customStatementsHandled .get ()).isEqualTo (1 );
80+
81+ Iterator <Row > it = rs .iterator ();
82+
83+ assertThat (it .hasNext ()).isTrue ();
84+ it .next ();
85+ assertThat (rs .getExecutionInfo ().getStatement ()).isEqualTo (customStatement );
86+ assertThat (loadBalancingPolicy .customStatementsHandled .get ()).isEqualTo (1 );
87+
88+ assertThat (it .hasNext ()).isTrue ();
89+ it .next ();
90+ assertThat (rs .getExecutionInfo ().getStatement ()).isEqualTo (customStatement );
91+
92+ assertThat (loadBalancingPolicy .customStatementsHandled .get ()).isEqualTo (2 );
93+ }
94+
95+ @ Test (groups = "short" )
96+ public void should_reuse_wrapped_bound_statement_for_multipage_query () {
97+ loadBalancingPolicy .customStatementsHandled .set (0 );
98+
99+ for (int v = 1 ; v <= 100 ; v ++)
100+ session ().execute (new SimpleStatement (INSERT_MULTIPAGE_QUERY , "key_prepared_multipage" , v ));
101+
102+ PreparedStatement ps = session ().prepare (SELECT_MULTIPAGE_QUERY );
103+ BoundStatement bs = ps .bind ("key_prepared_multipage" );
104+ bs .setFetchSize (1 );
105+
106+ CustomStatement customStatement = new CustomStatement (bs );
107+
108+ ResultSet rs = session ().execute (customStatement );
109+ assertThat (loadBalancingPolicy .customStatementsHandled .get ()).isEqualTo (1 );
110+
111+ Iterator <Row > it = rs .iterator ();
112+
113+ assertThat (it .hasNext ()).isTrue ();
114+ it .next ();
115+ assertThat (rs .getExecutionInfo ().getStatement ()).isEqualTo (customStatement );
116+ assertThat (loadBalancingPolicy .customStatementsHandled .get ()).isEqualTo (1 );
117+
118+ assertThat (it .hasNext ()).isTrue ();
119+ it .next ();
120+ assertThat (rs .getExecutionInfo ().getStatement ()).isEqualTo (customStatement );
121+
122+ assertThat (loadBalancingPolicy .customStatementsHandled .get ()).isEqualTo (2 );
123+ }
124+
62125 @ Test (groups = "short" )
63126 public void should_pass_wrapped_statement_to_speculative_execution_policy () {
64127 speculativeExecutionPolicy .customStatementsHandled .set (0 );
0 commit comments