Skip to main content

sentinel_driver/connection/
pipeline_impl.rs

1use super::{pipeline, Connection, PipelineBatch, Result};
2
3impl Connection {
4    /// Create a pipeline batch for executing multiple queries in a single round-trip.
5    ///
6    /// Use `execute_pipeline()` to send the batch.
7    pub fn pipeline(&self) -> PipelineBatch {
8        PipelineBatch::new()
9    }
10
11    /// Execute a pipeline batch, returning results for each query.
12    pub async fn execute_pipeline(
13        &mut self,
14        batch: PipelineBatch,
15    ) -> Result<Vec<pipeline::QueryResult>> {
16        let batch_len = batch.len();
17        self.instr()
18            .on_event(&crate::Event::PipelineStart { batch_len });
19        let started = std::time::Instant::now();
20        let res = batch.execute(&mut self.conn).await;
21        let total_duration = started.elapsed();
22        self.instr().on_event(&crate::Event::PipelineFlush {
23            batch_len,
24            total_duration,
25        });
26        res
27    }
28}