use crate::{Result, Row, from_row, query, sqlite::Arguments};
mod compound;
mod handle;
pub(super) mod unlock_notify;
pub use compound::CompoundStatement;
pub use handle::StatementHandle;
#[derive(Debug, Clone)]
#[allow(clippy::rc_buffer)]
pub struct Statement {
pub(crate) sql: String,
}
impl Statement {
pub fn sql(&self) -> &str {
&self.sql
}
}
#[derive(Debug, Clone)]
pub struct Prepared {
pub(crate) statement: Statement,
}
impl Prepared {
pub fn sql(&self) -> &str {
self.statement.sql()
}
pub fn query(&self) -> query::Query {
query::query_statement(&self.statement)
}
pub fn query_with(&self, arguments: Arguments) -> query::Query {
query::query_statement_with(&self.statement, arguments)
}
pub fn query_as<O>(&self) -> query::Map<impl FnMut(Row) -> Result<O> + Send>
where
O: for<'r> from_row::FromRow<'r> + Send + Unpin,
{
query::query_statement_as(&self.statement)
}
pub fn query_as_with<'s, O>(
&'s self,
arguments: Arguments,
) -> query::Map<impl FnMut(Row) -> Result<O> + Send>
where
O: for<'r> from_row::FromRow<'r> + Send + Unpin,
{
query::query_statement_as_with(&self.statement, arguments)
}
pub fn query_scalar<O>(&self) -> query::Map<impl FnMut(Row) -> Result<O> + Send>
where
(O,): for<'r> from_row::FromRow<'r>,
O: Send + Unpin,
{
query::query_statement_scalar(&self.statement)
}
pub fn query_scalar_with<'s, O>(
&'s self,
arguments: Arguments,
) -> query::Map<impl FnMut(Row) -> Result<O> + Send>
where
(O,): for<'r> from_row::FromRow<'r>,
O: Send + Unpin,
{
query::query_statement_scalar_with(&self.statement, arguments)
}
}