Skip to content

Commit 234848b

Browse files
committed
WIP - compatibility with GAT branch of SDK
1 parent 6704c72 commit 234848b

File tree

1 file changed

+25
-24
lines changed

1 file changed

+25
-24
lines changed

backend/src/data.rs

+25-24
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
use std::{collections::HashMap, sync::Arc};
22

3-
use futures_util::{
4-
stream::{FuturesOrdered, FuturesUnordered},
5-
StreamExt,
6-
};
3+
use futures_util::stream::FuturesOrdered;
74

85
use grafana_plugin_sdk::backend;
96
use 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.
3734
async 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(
6663
impl 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

Comments
 (0)