@@ -21,12 +21,8 @@ use actix_web::web::{self, Json};
2121use actix_web:: { FromRequest , HttpRequest , HttpResponse , Responder } ;
2222use chrono:: { DateTime , Utc } ;
2323use datafusion:: common:: tree_node:: TreeNode ;
24- use datafusion:: common:: Column ;
2524use datafusion:: error:: DataFusionError ;
2625use datafusion:: execution:: context:: SessionState ;
27- use datafusion:: logical_expr:: expr:: Alias ;
28- use datafusion:: logical_expr:: { Aggregate , LogicalPlan , Projection } ;
29- use datafusion:: prelude:: Expr ;
3026use futures_util:: Future ;
3127use http:: StatusCode ;
3228use serde:: { Deserialize , Serialize } ;
@@ -112,7 +108,7 @@ pub async fn query(req: HttpRequest, query_request: Query) -> Result<HttpRespons
112108 . ok_or_else ( || QueryError :: MalformedQuery ( "No table name found in query" ) ) ?;
113109 let time = Instant :: now ( ) ;
114110
115- if let ( true , column_name) = is_logical_plan_aggregate_without_filters ( & raw_logical_plan ) {
111+ if let Some ( column_name) = query . is_logical_plan_count_without_filters ( ) {
116112 let date_bin_request = DateBinRequest {
117113 stream : table_name. clone ( ) ,
118114 start_time : query_request. start_time . clone ( ) ,
@@ -123,10 +119,10 @@ pub async fn query(req: HttpRequest, query_request: Query) -> Result<HttpRespons
123119 let response = if query_request. fields {
124120 json ! ( {
125121 "fields" : vec![ & column_name] ,
126- "records" : vec![ json!( { & column_name: date_bin_records[ 0 ] . log_count} ) ]
122+ "records" : vec![ json!( { column_name: date_bin_records[ 0 ] . log_count} ) ]
127123 } )
128124 } else {
129- Value :: Array ( vec ! [ json!( { & column_name: date_bin_records[ 0 ] . log_count} ) ] )
125+ Value :: Array ( vec ! [ json!( { column_name: date_bin_records[ 0 ] . log_count} ) ] )
130126 } ;
131127
132128 let time = time. elapsed ( ) . as_secs_f64 ( ) ;
@@ -208,35 +204,6 @@ pub async fn create_streams_for_querier() {
208204 }
209205}
210206
211- fn is_logical_plan_aggregate_without_filters ( plan : & LogicalPlan ) -> ( bool , String ) {
212- match plan {
213- LogicalPlan :: Projection ( Projection { input, expr, .. } ) => {
214- if let LogicalPlan :: Aggregate ( Aggregate { input, .. } ) = & * * input {
215- if matches ! ( & * * input, LogicalPlan :: TableScan { .. } ) && expr. len ( ) == 1 {
216- return match & expr[ 0 ] {
217- Expr :: Column ( Column { name, .. } ) => ( name == "count(*)" , name. clone ( ) ) ,
218- Expr :: Alias ( Alias {
219- expr : inner_expr,
220- name,
221- ..
222- } ) => {
223- let alias_name = name;
224- if let Expr :: Column ( Column { name, .. } ) = & * * inner_expr {
225- ( name == "count(*)" , alias_name. to_string ( ) )
226- } else {
227- ( false , "" . to_string ( ) )
228- }
229- }
230- _ => ( false , "" . to_string ( ) ) ,
231- } ;
232- }
233- }
234- }
235- _ => return ( false , "" . to_string ( ) ) ,
236- }
237- ( false , "" . to_string ( ) )
238- }
239-
240207impl FromRequest for Query {
241208 type Error = actix_web:: Error ;
242209 type Future = Pin < Box < dyn Future < Output = Result < Self , Self :: Error > > > > ;
0 commit comments