@@ -107,15 +107,18 @@ impl From<Bytes> for Request {
107
107
}
108
108
109
109
#[ derive( Debug ) ]
110
- pub enum QueryType {
111
- Sql ,
112
- Influxql ,
110
+ pub enum QueryRequest {
111
+ Sql ( Request ) ,
112
+ // TODO: influxql include more parameters, we should add it in later.
113
+ Influxql ( Request ) ,
113
114
}
114
-
115
- #[ derive( Debug ) ]
116
- pub struct QueryRequest {
117
- pub query_type : QueryType ,
118
- pub request : Request ,
115
+ impl QueryRequest {
116
+ fn query ( & self ) -> & str {
117
+ match self {
118
+ QueryRequest :: Sql ( request) => request. query . as_str ( ) ,
119
+ QueryRequest :: Influxql ( request) => request. query . as_str ( ) ,
120
+ }
121
+ }
119
122
}
120
123
121
124
pub async fn handle_query < Q : QueryExecutor + ' static > (
@@ -143,12 +146,8 @@ pub async fn handle_query<Q: QueryExecutor + 'static>(
143
146
let frontend = Frontend :: new ( provider) ;
144
147
let mut sql_ctx = SqlContext :: new ( request_id, deadline) ;
145
148
146
- let QueryRequest {
147
- request,
148
- query_type,
149
- } = query_request;
150
- let plan = match query_type {
151
- QueryType :: Sql => {
149
+ let plan = match & query_request {
150
+ QueryRequest :: Sql ( request) => {
152
151
// Parse sql, frontend error of invalid sql already contains sql
153
152
// TODO(yingwen): Maybe move sql from frontend error to outer error
154
153
let mut stmts = frontend
@@ -165,7 +164,7 @@ pub async fn handle_query<Q: QueryExecutor + 'static>(
165
164
stmts. len( ) == 1 ,
166
165
TooMuchStmt {
167
166
len: stmts. len( ) ,
168
- query: request. query,
167
+ query: & request. query,
169
168
}
170
169
) ;
171
170
@@ -178,7 +177,7 @@ pub async fn handle_query<Q: QueryExecutor + 'static>(
178
177
} ) ?
179
178
}
180
179
181
- QueryType :: Influxql => {
180
+ QueryRequest :: Influxql ( request ) => {
182
181
let mut stmts = frontend
183
182
. parse_influxql ( & mut sql_ctx, & request. query )
184
183
. context ( ParseInfluxql ) ?;
@@ -191,7 +190,7 @@ pub async fn handle_query<Q: QueryExecutor + 'static>(
191
190
stmts. len( ) == 1 ,
192
191
TooMuchStmt {
193
192
len: stmts. len( ) ,
194
- query: request. query,
193
+ query: & request. query,
195
194
}
196
195
) ;
197
196
@@ -204,7 +203,7 @@ pub async fn handle_query<Q: QueryExecutor + 'static>(
204
203
} ;
205
204
206
205
instance. limiter . try_limit ( & plan) . context ( QueryBlock {
207
- query : & request . query ,
206
+ query : query_request . query ( ) ,
208
207
} ) ?;
209
208
210
209
// Execute in interpreter
@@ -223,7 +222,7 @@ pub async fn handle_query<Q: QueryExecutor + 'static>(
223
222
interpreter_factory
224
223
. create ( interpreter_ctx, plan)
225
224
. context ( InterpreterExec {
226
- query : & request . query ,
225
+ query : query_request . query ( ) ,
227
226
} ) ?;
228
227
229
228
let output = if let Some ( deadline) = deadline {
@@ -233,24 +232,24 @@ pub async fn handle_query<Q: QueryExecutor + 'static>(
233
232
)
234
233
. await
235
234
. context ( QueryTimeout {
236
- query : & request . query ,
235
+ query : query_request . query ( ) ,
237
236
} )
238
237
. and_then ( |v| {
239
238
v. context ( InterpreterExec {
240
- query : & request . query ,
239
+ query : query_request . query ( ) ,
241
240
} )
242
241
} ) ?
243
242
} else {
244
243
interpreter. execute ( ) . await . context ( InterpreterExec {
245
- query : & request . query ,
244
+ query : query_request . query ( ) ,
246
245
} ) ?
247
246
} ;
248
247
249
248
info ! (
250
249
"Query handler finished, request_id:{}, cost:{}ms, request:{:?}" ,
251
250
request_id,
252
251
begin_instant. saturating_elapsed( ) . as_millis( ) ,
253
- request
252
+ query_request
254
253
) ;
255
254
256
255
Ok ( output)
0 commit comments