diff --git a/sqlx-core/src/blocking.rs b/sqlx-core/src/blocking.rs index 4ba30c63..20d8e509 100644 --- a/sqlx-core/src/blocking.rs +++ b/sqlx-core/src/blocking.rs @@ -7,8 +7,10 @@ mod close; mod connect; mod connection; mod options; +mod executor; pub(crate) mod runtime; +pub use executor::Executor; pub use acquire::Acquire; pub use close::Close; pub use connect::Connect; diff --git a/sqlx-core/src/blocking/executor.rs b/sqlx-core/src/blocking/executor.rs new file mode 100644 index 00000000..a95d140e --- /dev/null +++ b/sqlx-core/src/blocking/executor.rs @@ -0,0 +1,13 @@ +use crate::Database; + +use super::Runtime; + +pub trait Executor: crate::Executor +where + Self::Database: Database, +{ + fn execute<'x, 'e, 'q>(&'e mut self, sql: &'q str) -> crate::Result<()> + where + 'e: 'x, + 'q: 'x; +} diff --git a/sqlx-core/src/executor.rs b/sqlx-core/src/executor.rs new file mode 100644 index 00000000..1c3c0b0f --- /dev/null +++ b/sqlx-core/src/executor.rs @@ -0,0 +1,25 @@ +#[cfg(feature = "async")] +use futures_core::future::BoxFuture; + +use crate::{Database, Result, Runtime}; + +/// Describes a type that can execute SQL queries on a self-provided database connection. +/// +/// No guarantees are provided that successive queries run on the same physical +/// database connection. +/// +/// A [`Connection`] is an `Executor` that guarantees that successive queries are ran on the +/// same physical database connection. +/// +pub trait Executor { + type Database: Database; + + /// Execute the SQL query and return information about the result, including + /// the number of rows affected, if any. + #[cfg(feature = "async")] + fn execute<'x, 'e, 'q>(&'e mut self, sql: &'q str) -> BoxFuture<'x, Result<()>> + where + Rt: crate::Async, + 'e: 'x, + 'q: 'x; +} diff --git a/sqlx-core/src/lib.rs b/sqlx-core/src/lib.rs index 0921b71e..fec6168f 100644 --- a/sqlx-core/src/lib.rs +++ b/sqlx-core/src/lib.rs @@ -24,6 +24,7 @@ mod connect; mod connection; mod database; mod error; +mod executor; mod options; mod pool; mod runtime; @@ -49,6 +50,7 @@ pub use connect::Connect; pub use connection::Connection; pub use database::{Database, HasOutput}; pub use error::{DatabaseError, Error, Result}; +pub use executor::Executor; pub use options::ConnectOptions; pub use pool::Pool; #[cfg(feature = "actix")]