use std::ops::DerefMut; use futures_core::{future::BoxFuture, stream::BoxStream}; use futures_util::StreamExt; use crate::{ connection::{Connect, Connection}, describe::Describe, executor::Executor, pool::Pool, Cursor, Database, }; use super::PoolConnection; use crate::database::HasCursor; use crate::executor::Execute; impl<'p, C, DB> Executor<'p> for &'p Pool where C: Connect, DB: Database, DB: for<'c, 'q> HasCursor<'c, 'q, Database = DB>, for<'con> &'con mut C: Executor<'con>, { type Database = DB; fn execute<'q, E>(self, query: E) -> >::Cursor where E: Execute<'q, DB>, { DB::Cursor::from_pool(self, query) } #[doc(hidden)] #[inline] fn execute_by_ref<'q, 'e, E>( &'e mut self, query: E, ) -> >::Cursor where E: Execute<'q, DB>, { self.execute(query) } } impl<'c, C, DB> Executor<'c> for &'c mut PoolConnection where C: Connect, DB: Database, DB: for<'c2, 'q> HasCursor<'c2, 'q, Database = DB>, for<'con> &'con mut C: Executor<'con>, { type Database = C::Database; fn execute<'q, E>(self, query: E) -> >::Cursor where E: Execute<'q, Self::Database>, { DB::Cursor::from_connection(&mut **self, query) } #[doc(hidden)] #[inline] fn execute_by_ref<'q, 'e, E>( &'e mut self, query: E, ) -> >::Cursor where E: Execute<'q, Self::Database>, { self.execute(query) } } impl Executor<'static> for PoolConnection where C: Connect, DB: Database, DB: for<'c, 'q> HasCursor<'c, 'q, Database = DB>, { type Database = DB; fn execute<'q, E>(self, query: E) -> >::Cursor where E: Execute<'q, Self::Database>, { DB::Cursor::from_connection(self, query) } #[doc(hidden)] #[inline] fn execute_by_ref<'q, 'e, E>(&'e mut self, query: E) -> >::Cursor where E: Execute<'q, Self::Database>, { DB::Cursor::from_connection(&mut **self, query) } }