Expand description
Traits dealing with SQLite data types.
SQLite uses a dynamic type system. Implementations of
the ToSql
and FromSql
traits are provided for the basic types that
SQLite provides methods for:
- Strings (
String
and&str
) - Blobs (
Vec<u8>
and&[u8]
) - Numbers
The number situation is a little complicated due to the fact that all
numbers in SQLite are stored as INTEGER
(i64
) or REAL
(f64
).
ToSql
and FromSql
are implemented for all primitive number types.
FromSql
has different behaviour depending on the SQL and Rust types, and
the value.
INTEGER
to integer: returns anError::IntegralValueOutOfRange
error if the value does not fit in the Rust type.REAL
to integer: always returns anError::InvalidColumnType
error.INTEGER
to float: casts usingas
operator. Never fails.REAL
to float: casts usingas
operator. Never fails.
ToSql
always succeeds except when storing a u64
or usize
value that
cannot fit in an INTEGER
(i64
). Also note that SQLite ignores column
types, so if you store an i64
in a column with type REAL
it will be
stored as an INTEGER
, not a REAL
.
If the time
feature is enabled, implementations are
provided for time::OffsetDateTime
that use the RFC 3339 date/time format,
"%Y-%m-%dT%H:%M:%S.%fZ"
, to store time values as strings. These values
can be parsed by SQLite’s builtin
datetime functions. If you
want different storage for datetimes, you can use a newtype.
For example, to store datetimes as i64
s counting the number of seconds since
the Unix epoch:
use rusqlite::types::{FromSql, FromSqlError, FromSqlResult, ToSql, ToSqlOutput, ValueRef};
use rusqlite::Result;
pub struct DateTimeSql(pub time::OffsetDateTime);
impl FromSql for DateTimeSql {
fn column_result(value: ValueRef) -> FromSqlResult<Self> {
i64::column_result(value).and_then(|as_i64| {
time::OffsetDateTime::from_unix_timestamp(as_i64)
.map(|odt| DateTimeSql(odt))
.map_err(|err| FromSqlError::Other(Box::new(err)))
})
}
}
impl ToSql for DateTimeSql {
fn to_sql(&self) -> Result<ToSqlOutput> {
Ok(self.0.unix_timestamp().into())
}
}
ToSql
and FromSql
are also implemented for Option<T>
where T
implements ToSql
or FromSql
for the cases where you want to know if
a value was NULL (which gets translated to None
).
Structs
Empty struct that can be used to fill in a query parameter as NULL
.
Enums
Enum listing possible errors from FromSql
trait.
ToSqlOutput
represents the possible output types for implementers of the
ToSql
trait.
SQLite data types. See Fundamental Datatypes.
Owning dynamic type value. Value’s type is typically dictated by SQLite (not by the caller).
A non-owning dynamic type value. Typically the memory backing this value is owned by SQLite.
Traits
A trait for types that can be created from a SQLite value.
A trait for types that can be converted into SQLite values. Returns
Error::ToSqlConversionFailure
if the conversion fails.
Type Definitions
Result type for implementors of the FromSql
trait.