11use std:: { collections:: HashMap , sync:: Arc } ;
22
3- use futures_util:: {
4- stream:: { FuturesOrdered , FuturesUnordered } ,
5- StreamExt ,
6- } ;
3+ use futures_util:: stream:: FuturesOrdered ;
74
85use grafana_plugin_sdk:: backend;
96use tokio:: sync:: RwLock ;
@@ -35,14 +32,14 @@ impl backend::DataQueryError for QueryError {
3532// GATs, since the `DataService::Stream` associated type can't contain references.
3633// Ideally we'd just borrow the query/uid etc but it's really not a big deal.
3734async fn query_data_single (
38- client : Client ,
39- uid : String ,
35+ client : & Client ,
36+ uid : & str ,
4037 query : backend:: DataQuery < Query > ,
4138 queries : Arc < RwLock < HashMap < path:: QueryId , SelectStatement > > > ,
4239) -> Result < backend:: DataResponse , Error > {
4340 let q = query. query ;
4441 let target = q. as_tail ( ) ?;
45- let rows = target. select_all ( & client) . await ?;
42+ let rows = target. select_all ( client) . await ?;
4643 let mut frame = rows_to_frame ( & rows) ;
4744
4845 if let TailTarget :: Select { statement } = target {
@@ -66,38 +63,42 @@ async fn query_data_single(
6663impl backend:: DataService for MaterializePlugin {
6764 type Query = Query ;
6865 type QueryError = QueryError ;
69- type Stream = backend:: BoxDataResponseStream < Self :: QueryError > ;
66+ type Stream < ' a > = backend:: BoxDataResponseStream < ' a , Self :: QueryError > ;
7067
71- async fn query_data ( & self , request : backend:: QueryDataRequest < Self :: Query > ) -> Self :: Stream {
68+ async fn query_data (
69+ & self ,
70+ request : backend:: QueryDataRequest < Self :: Query > ,
71+ ) -> Self :: Stream < ' _ > {
7272 let datasource_settings = request
7373 . plugin_context
7474 . datasource_instance_settings
7575 . clone ( )
7676 . ok_or ( Error :: MissingDatasource )
7777 . unwrap ( ) ;
78- let clients: Vec < _ > = request
79- . queries
80- . iter ( )
81- . map ( |_| self . get_client ( & datasource_settings) )
82- . collect :: < FuturesUnordered < _ > > ( )
83- . collect ( )
84- . await ;
78+ // let clients: Vec<_> = request
79+ // .queries
80+ // .iter()
81+ // .map(|_| self.get_client(&datasource_settings))
82+ // .collect::<FuturesUnordered<_>>()
83+ // .collect()
84+ // .await;
85+ let client = Arc :: new ( self . get_client ( & datasource_settings) . await . unwrap ( ) ) ;
8586 let queries = self . sql_queries . clone ( ) ;
8687 Box :: pin (
8788 request
8889 . queries
8990 . into_iter ( )
90- . zip ( clients )
91- . map ( move | ( x , client) | {
91+ . map ( |x| {
92+ let client = client . clone ( ) ;
9293 let queries = queries. clone ( ) ;
9394 let ref_id = x. ref_id . clone ( ) ;
9495 let uid = datasource_settings. uid . clone ( ) ;
95- async {
96- let client = client. map_err ( |source| QueryError {
97- ref_id : ref_id. clone ( ) ,
98- source,
99- } ) ?;
100- query_data_single ( client, uid, x, queries)
96+ async move {
97+ // let client = client.map_err(|source| QueryError {
98+ // ref_id: ref_id.clone(),
99+ // source,
100+ // })?;
101+ query_data_single ( & client, & uid, x, queries)
101102 . await
102103 . map_err ( |source| QueryError { ref_id, source } )
103104 }
0 commit comments