@@ -15,7 +15,7 @@ pub struct QueryExecutor<T: DeserializeOwned> {
15
15
items_link : ResourceLink ,
16
16
context : Context < ' static > ,
17
17
query_engine : QueryEngineRef ,
18
- base_request : Request ,
18
+ base_request : Option < Request > ,
19
19
query : Query ,
20
20
pipeline : Option < OwnedQueryPipeline > ,
21
21
@@ -45,7 +45,7 @@ impl<T: DeserializeOwned + 'static> QueryExecutor<T> {
45
45
items_link,
46
46
context,
47
47
query_engine,
48
- base_request,
48
+ base_request : None ,
49
49
query,
50
50
pipeline : None ,
51
51
phantom : std:: marker:: PhantomData ,
@@ -69,8 +69,13 @@ impl<T: DeserializeOwned + 'static> QueryExecutor<T> {
69
69
/// An item to yield, or None if execution is complete.
70
70
#[ tracing:: instrument( skip_all) ]
71
71
async fn step ( & mut self ) -> azure_core:: Result < Option < FeedPage < T > > > {
72
- let pipeline = match self . pipeline . as_mut ( ) {
73
- Some ( pipeline) => pipeline,
72
+ let ( pipeline, base_request) = match self . pipeline . as_mut ( ) {
73
+ Some ( pipeline) => (
74
+ pipeline,
75
+ self . base_request
76
+ . as_ref ( )
77
+ . expect ( "base_request should be set when pipeline is set" ) ,
78
+ ) ,
74
79
None => {
75
80
// Initialize the pipeline.
76
81
let query_plan = get_query_plan (
@@ -97,8 +102,16 @@ impl<T: DeserializeOwned + 'static> QueryExecutor<T> {
97
102
let pipeline =
98
103
self . query_engine
99
104
. create_pipeline ( & self . query . text , & query_plan, & pkranges) ?;
105
+ self . query . text = pipeline. query ( ) . into ( ) ;
106
+ self . base_request = Some ( crate :: pipeline:: create_base_query_request (
107
+ self . http_pipeline . url ( & self . items_link ) ,
108
+ & self . query ,
109
+ ) ?) ;
100
110
self . pipeline = Some ( pipeline) ;
101
- self . pipeline . as_mut ( ) . expect ( "we just set it" )
111
+ (
112
+ self . pipeline . as_mut ( ) . expect ( "we just set it" ) ,
113
+ self . base_request . as_ref ( ) . expect ( "we just set it" ) ,
114
+ )
102
115
}
103
116
} ;
104
117
@@ -113,7 +126,7 @@ impl<T: DeserializeOwned + 'static> QueryExecutor<T> {
113
126
let items = results
114
127
. items
115
128
. into_iter ( )
116
- . map ( |item| serde_json:: from_slice :: < T > ( & item) )
129
+ . map ( |item| serde_json:: from_str :: < T > ( item. get ( ) ) )
117
130
. collect :: < Result < Vec < _ > , _ > > ( ) ?;
118
131
119
132
// TODO: Provide a continuation token.
@@ -122,7 +135,7 @@ impl<T: DeserializeOwned + 'static> QueryExecutor<T> {
122
135
123
136
// No items, so make any requests we need to make and provide them to the pipeline.
124
137
for request in results. requests {
125
- let mut query_request = self . base_request . clone ( ) ;
138
+ let mut query_request = base_request. clone ( ) ;
126
139
query_request. insert_header (
127
140
constants:: PARTITION_KEY_RANGE_ID ,
128
141
request. partition_key_range_id . clone ( ) ,
0 commit comments