@@ -36,6 +36,7 @@ use crate::routing::{Shard, ShardAwarePortRange};
36
36
use crate :: statement:: batch:: BoundBatch ;
37
37
use crate :: statement:: batch:: { Batch , BatchStatement } ;
38
38
use crate :: statement:: bound:: BoundStatement ;
39
+ use crate :: statement:: execute:: { Execute , ExecutePageable } ;
39
40
use crate :: statement:: prepared:: { PartitionKeyError , PreparedStatement } ;
40
41
use crate :: statement:: unprepared:: Statement ;
41
42
use crate :: statement:: { Consistency , PageSize , StatementConfig } ;
@@ -56,7 +57,7 @@ use std::time::Duration;
56
57
use tokio:: time:: timeout;
57
58
#[ cfg( feature = "unstable-cloud" ) ]
58
59
use tracing:: warn;
59
- use tracing:: { debug, error , trace, trace_span, Instrument } ;
60
+ use tracing:: { debug, trace, trace_span, Instrument } ;
60
61
use uuid:: Uuid ;
61
62
62
63
pub ( crate ) const TABLET_CHANNEL_SIZE : usize = 8192 ;
@@ -481,7 +482,8 @@ impl Session {
481
482
statement : impl Into < Statement > ,
482
483
values : impl SerializeRow ,
483
484
) -> Result < QueryResult , ExecutionError > {
484
- self . do_query_unpaged ( & statement. into ( ) , values) . await
485
+ let statement = statement. into ( ) ;
486
+ ( & statement, values) . execute ( self ) . await
485
487
}
486
488
487
489
/// Queries a single page from the database, optionally continuing from a saved point.
@@ -541,7 +543,9 @@ impl Session {
541
543
values : impl SerializeRow ,
542
544
paging_state : PagingState ,
543
545
) -> Result < ( QueryResult , PagingStateResponse ) , ExecutionError > {
544
- self . do_query_single_page ( & statement. into ( ) , values, paging_state)
546
+ let statement = statement. into ( ) ;
547
+ ( & statement, values)
548
+ . execute_pageable :: < true > ( self , paging_state)
545
549
. await
546
550
}
547
551
@@ -806,9 +810,9 @@ impl Session {
806
810
values : impl BatchValues ,
807
811
) -> Result < QueryResult , ExecutionError > {
808
812
let batch = self . last_minute_prepare_batch ( batch, & values) . await ?;
809
- let batch = BoundBatch :: from_batch ( batch. as_ref ( ) , values) ?;
810
-
811
- self . do_batch ( & batch ) . await
813
+ BoundBatch :: from_batch ( batch. as_ref ( ) , values) ?
814
+ . execute ( self )
815
+ . await
812
816
}
813
817
}
814
818
@@ -989,38 +993,6 @@ impl Session {
989
993
Ok ( session)
990
994
}
991
995
992
- async fn do_query_unpaged (
993
- & self ,
994
- statement : & Statement ,
995
- values : impl SerializeRow ,
996
- ) -> Result < QueryResult , ExecutionError > {
997
- let ( result, paging_state_response) = self
998
- . query ( statement, values, None , PagingState :: start ( ) )
999
- . await ?;
1000
- if !paging_state_response. finished ( ) {
1001
- error ! ( "Unpaged unprepared query returned a non-empty paging state! This is a driver-side or server-side bug." ) ;
1002
- return Err ( ExecutionError :: LastAttemptError (
1003
- RequestAttemptError :: NonfinishedPagingState ,
1004
- ) ) ;
1005
- }
1006
- Ok ( result)
1007
- }
1008
-
1009
- async fn do_query_single_page (
1010
- & self ,
1011
- statement : & Statement ,
1012
- values : impl SerializeRow ,
1013
- paging_state : PagingState ,
1014
- ) -> Result < ( QueryResult , PagingStateResponse ) , ExecutionError > {
1015
- self . query (
1016
- statement,
1017
- values,
1018
- Some ( statement. get_validated_page_size ( ) ) ,
1019
- paging_state,
1020
- )
1021
- . await
1022
- }
1023
-
1024
996
/// Sends a request to the database.
1025
997
/// Optionally continues fetching results from a saved point.
1026
998
///
@@ -1032,7 +1004,7 @@ impl Session {
1032
1004
/// that we need to require users to make a conscious decision to use paging or not. For that, we expose
1033
1005
/// the aforementioned 3 methods clearly differing in naming and API, so that no unconscious choices about paging
1034
1006
/// should be made.
1035
- async fn query (
1007
+ pub ( crate ) async fn query (
1036
1008
& self ,
1037
1009
statement : & Statement ,
1038
1010
values : impl SerializeRow ,
@@ -1299,23 +1271,15 @@ impl Session {
1299
1271
& self ,
1300
1272
statement : & BoundStatement ,
1301
1273
) -> Result < QueryResult , ExecutionError > {
1302
- let ( result, paging_state) = self . execute ( statement, None , PagingState :: start ( ) ) . await ?;
1303
- if !paging_state. finished ( ) {
1304
- error ! ( "Unpaged prepared query returned a non-empty paging state! This is a driver-side or server-side bug." ) ;
1305
- return Err ( ExecutionError :: LastAttemptError (
1306
- RequestAttemptError :: NonfinishedPagingState ,
1307
- ) ) ;
1308
- }
1309
- Ok ( result)
1274
+ statement. execute ( self ) . await
1310
1275
}
1311
1276
1312
1277
async fn do_execute_single_page (
1313
1278
& self ,
1314
1279
statement : & BoundStatement ,
1315
1280
paging_state : PagingState ,
1316
1281
) -> Result < ( QueryResult , PagingStateResponse ) , ExecutionError > {
1317
- let page_size = statement. prepared . get_validated_page_size ( ) ;
1318
- self . execute ( statement, Some ( page_size) , paging_state) . await
1282
+ statement. execute_pageable :: < true > ( self , paging_state) . await
1319
1283
}
1320
1284
1321
1285
/// Sends a prepared request to the database, optionally continuing from a saved point.
@@ -1328,7 +1292,7 @@ impl Session {
1328
1292
/// that we need to require users to make a conscious decision to use paging or not. For that, we expose
1329
1293
/// the aforementioned 3 methods clearly differing in naming and API, so that no unconscious choices about paging
1330
1294
/// should be made.
1331
- async fn execute (
1295
+ pub ( crate ) async fn execute_bound_statement (
1332
1296
& self ,
1333
1297
statement : & BoundStatement ,
1334
1298
page_size : Option < PageSize > ,
@@ -1449,7 +1413,7 @@ impl Session {
1449
1413
. map_err ( PagerExecutionError :: NextPageError )
1450
1414
}
1451
1415
1452
- async fn do_batch ( & self , batch : & BoundBatch ) -> Result < QueryResult , ExecutionError > {
1416
+ pub ( crate ) async fn do_batch ( & self , batch : & BoundBatch ) -> Result < QueryResult , ExecutionError > {
1453
1417
// Shard-awareness behavior for batch will be to pick shard based on first batch statement's shard
1454
1418
// If users batch statements by shard, they will be rewarded with full shard awareness
1455
1419
let execution_profile = batch
@@ -1750,10 +1714,10 @@ impl Session {
1750
1714
traces_events_query. config . consistency = consistency;
1751
1715
traces_events_query. set_page_size ( TRACING_QUERY_PAGE_SIZE ) ;
1752
1716
1753
- let ( traces_session_res , traces_events_res ) = tokio :: try_join! (
1754
- self . do_query_unpaged ( & traces_session_query , ( tracing_id, ) ) ,
1755
- self . do_query_unpaged ( & traces_events_query , ( tracing_id , ) )
1756
- ) ?;
1717
+ let session_query = ( & traces_session_query , ( tracing_id , ) ) ;
1718
+ let events_query = ( & traces_events_query , ( tracing_id, ) ) ;
1719
+ let ( traces_session_res , traces_events_res ) =
1720
+ tokio :: try_join! ( session_query . execute ( self ) , events_query . execute ( self ) ) ?;
1757
1721
1758
1722
// Get tracing info
1759
1723
let maybe_tracing_info: Option < TracingInfo > = traces_session_res
0 commit comments