pub trait SqlConn {
// Required methods
fn dialect(&self) -> Dialect;
fn execute_batch(&self, sql: &str) -> Result<(), SqlError>;
fn execute(&self, sql: &str, params: &[SqlValue]) -> Result<usize, SqlError>;
fn query(
&self,
sql: &str,
params: &[SqlValue],
f: &mut dyn FnMut(&dyn SqlRow) -> Result<(), SqlError>,
) -> Result<(), SqlError>;
fn query_named(
&self,
sql: &str,
params: &[(&str, SqlValue)],
f: &mut dyn FnMut(&dyn SqlRow) -> Result<(), SqlError>,
) -> Result<(), SqlError>;
fn max_variables(&self) -> usize;
fn column_count(&self, sql: &str) -> Result<usize, SqlError>;
// Provided methods
fn use_schema(&self, schema: &str) -> Result<(), SqlError> { ... }
fn query_cached(
&self,
sql: &str,
params: &[SqlValue],
f: &mut dyn FnMut(&dyn SqlRow) -> Result<(), SqlError>,
) -> Result<(), SqlError> { ... }
fn execute_cached(
&self,
sql: &str,
params: &[SqlValue],
) -> Result<usize, SqlError> { ... }
}Expand description
The SQL operations the engine needs. Positional parameters are ?; named
parameters ($name, used by the query builder) go through
SqlConn::query_named.
Required Methods§
fn dialect(&self) -> Dialect
Sourcefn execute_batch(&self, sql: &str) -> Result<(), SqlError>
fn execute_batch(&self, sql: &str) -> Result<(), SqlError>
Run statements with no parameters and no results.
Sourcefn execute(&self, sql: &str, params: &[SqlValue]) -> Result<usize, SqlError>
fn execute(&self, sql: &str, params: &[SqlValue]) -> Result<usize, SqlError>
Run one statement; returns the number of rows changed.
Sourcefn query(
&self,
sql: &str,
params: &[SqlValue],
f: &mut dyn FnMut(&dyn SqlRow) -> Result<(), SqlError>,
) -> Result<(), SqlError>
fn query( &self, sql: &str, params: &[SqlValue], f: &mut dyn FnMut(&dyn SqlRow) -> Result<(), SqlError>, ) -> Result<(), SqlError>
Run a query, calling f for every row in order. f returning an error
stops the scan and propagates it.
Sourcefn query_named(
&self,
sql: &str,
params: &[(&str, SqlValue)],
f: &mut dyn FnMut(&dyn SqlRow) -> Result<(), SqlError>,
) -> Result<(), SqlError>
fn query_named( &self, sql: &str, params: &[(&str, SqlValue)], f: &mut dyn FnMut(&dyn SqlRow) -> Result<(), SqlError>, ) -> Result<(), SqlError>
As SqlConn::query, with named parameters ($name -> value).
Sourcefn max_variables(&self) -> usize
fn max_variables(&self) -> usize
The most bound parameters one statement may take.
Provided Methods§
Sourcefn use_schema(&self, schema: &str) -> Result<(), SqlError>
fn use_schema(&self, schema: &str) -> Result<(), SqlError>
Resolve unqualified table names in schema (DuckDB’s search path;
SQLite has no schemas and never calls this).
Sourcefn query_cached(
&self,
sql: &str,
params: &[SqlValue],
f: &mut dyn FnMut(&dyn SqlRow) -> Result<(), SqlError>,
) -> Result<(), SqlError>
fn query_cached( &self, sql: &str, params: &[SqlValue], f: &mut dyn FnMut(&dyn SqlRow) -> Result<(), SqlError>, ) -> Result<(), SqlError>
As SqlConn::query, but the connection may keep the statement
prepared for reuse. Only for a single-table statement on the store’s
own bookkeeping tables in which every value that varies is a bound
parameter: on DuckDB 1.5.x a reused plan keeps the statistics it was
planned with (duckdb/duckdb#24696; joins: #24182), so a literal, or a
join, can keep matching nothing after rows arrive.
Sourcefn execute_cached(
&self,
sql: &str,
params: &[SqlValue],
) -> Result<usize, SqlError>
fn execute_cached( &self, sql: &str, params: &[SqlValue], ) -> Result<usize, SqlError>
As SqlConn::execute, cached under the rules of
SqlConn::query_cached.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".