@@ -46,10 +46,9 @@ use crate::query::error::ExecuteError;
4646use crate :: query:: { execute_stream, CountsRequest , CountsResponse , Query as LogicalQuery } ;
4747use crate :: query:: { TableScanVisitor , QUERY_SESSION } ;
4848use crate :: rbac:: Users ;
49- use crate :: response:: TIME_ELAPSED_HEADER ;
49+ use crate :: response:: { QueryResponse , TIME_ELAPSED_HEADER } ;
5050use crate :: storage:: ObjectStorageError ;
5151use crate :: utils:: actix:: extract_session_key_from_req;
52- use crate :: utils:: arrow:: record_batches_to_json;
5352use crate :: utils:: time:: { TimeParseError , TimeRange } ;
5453use crate :: utils:: user_auth_for_datasets;
5554use futures_core:: Stream as CoreStream ;
@@ -141,14 +140,16 @@ pub async fn query(req: HttpRequest, query_request: Query) -> Result<HttpRespons
141140 match batch_result {
142141 Ok ( batch) => {
143142 // convert record batch to JSON
144- let json = record_batches_to_json ( & [ batch] )
145- . map_err ( actix_web:: error:: ErrorInternalServerError ) ?;
146- // // Serialize to JSON string
147- // let json = serde_json::to_value(&json)
148- // .map_err(actix_web::error::ErrorInternalServerError)?;
149- let response = json ! ( {
150- "fields" : fields,
151- "records" : json,
143+ let response = QueryResponse {
144+ records : vec ! [ batch] ,
145+ fields : fields. clone ( ) ,
146+ fill_null : query_request. send_null ,
147+ with_fields : query_request. fields ,
148+ }
149+ . to_http ( )
150+ . unwrap_or_else ( |e| {
151+ error ! ( "Failed to parse record batch into JSON: {}" , e) ;
152+ json ! ( { } )
152153 } ) ;
153154 Ok ( Bytes :: from ( response. to_string ( ) ) )
154155 }
0 commit comments