use super::Runtime; use crate::Database; pub trait Executor: crate::Executor where Self::Database: Database, { /// Execute the SQL query and return information about the result, including /// the number of rows affected, if any. fn execute<'x, 'e, 'q, 'a, E>( &'e mut self, query: E, ) -> crate::Result<::QueryResult> where E: 'x + crate::Execute<'q, 'a, Self::Database>, 'e: 'x, 'q: 'x, 'a: 'x; fn fetch_all<'x, 'e, 'q, 'a, E>( &'e mut self, query: E, ) -> crate::Result::Row>> where E: 'x + crate::Execute<'q, 'a, Self::Database>, 'e: 'x, 'q: 'x, 'a: 'x; fn fetch_optional<'x, 'e, 'q, 'a, E>( &'e mut self, query: E, ) -> crate::Result::Row>> where E: 'x + crate::Execute<'q, 'a, Self::Database>, 'e: 'x, 'q: 'x, 'a: 'x; fn fetch_one<'x, 'e, 'q, 'a, E>( &'e mut self, query: E, ) -> crate::Result<::Row> where E: 'x + crate::Execute<'q, 'a, Self::Database>, 'e: 'x, 'q: 'x, 'a: 'x, { Executor::fetch_optional(self, query)?.ok_or(crate::Error::RowNotFound) } } impl> Executor for &'_ mut X { fn execute<'x, 'e, 'q, 'a, E>( &'e mut self, query: E, ) -> crate::Result<::QueryResult> where E: 'x + crate::Execute<'q, 'a, Self::Database>, 'e: 'x, 'q: 'x, 'a: 'x, { Executor::execute(&mut **self, query) } fn fetch_all<'x, 'e, 'q, 'a, E>( &'e mut self, query: E, ) -> crate::Result::Row>> where E: 'x + crate::Execute<'q, 'a, Self::Database>, 'e: 'x, 'q: 'x, 'a: 'x, { Executor::fetch_all(&mut **self, query) } fn fetch_optional<'x, 'e, 'q, 'a, E>( &'e mut self, query: E, ) -> crate::Result::Row>> where E: 'x + crate::Execute<'q, 'a, Self::Database>, 'e: 'x, 'q: 'x, 'a: 'x, { Executor::fetch_optional(&mut **self, query) } }