aboutsummaryrefslogtreecommitdiff
path: root/src/types/time.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/types/time.rs')
-rw-r--r--src/types/time.rs44
1 files changed, 26 insertions, 18 deletions
diff --git a/src/types/time.rs b/src/types/time.rs
index 8589167..ac182a9 100644
--- a/src/types/time.rs
+++ b/src/types/time.rs
@@ -1,13 +1,14 @@
-//! `ToSql` and `FromSql` implementation for [`time::OffsetDateTime`].
+//! [`ToSql`] and [`FromSql`] implementation for [`time::OffsetDateTime`].
use crate::types::{FromSql, FromSqlError, FromSqlResult, ToSql, ToSqlOutput, ValueRef};
use crate::Result;
use time::{OffsetDateTime, PrimitiveDateTime, UtcOffset};
const CURRENT_TIMESTAMP_FMT: &str = "%Y-%m-%d %H:%M:%S";
-const SQLITE_DATETIME_FMT: &str = "%Y-%m-%dT%H:%M:%S.%NZ";
+const SQLITE_DATETIME_FMT: &str = "%Y-%m-%d %H:%M:%S.%NZ";
const SQLITE_DATETIME_FMT_LEGACY: &str = "%Y-%m-%d %H:%M:%S:%N %z";
impl ToSql for OffsetDateTime {
+ #[inline]
fn to_sql(&self) -> Result<ToSqlOutput<'_>> {
let time_string = self.to_offset(UtcOffset::UTC).format(SQLITE_DATETIME_FMT);
Ok(ToSqlOutput::from(time_string))
@@ -32,20 +33,19 @@ impl FromSql for OffsetDateTime {
#[cfg(test)]
mod test {
- use crate::{Connection, Result, NO_PARAMS};
+ use crate::{Connection, Result};
use std::time::Duration;
use time::OffsetDateTime;
- fn checked_memory_handle() -> Connection {
- let db = Connection::open_in_memory().unwrap();
- db.execute_batch("CREATE TABLE foo (t TEXT, i INTEGER, f FLOAT)")
- .unwrap();
- db
+ fn checked_memory_handle() -> Result<Connection> {
+ let db = Connection::open_in_memory()?;
+ db.execute_batch("CREATE TABLE foo (t TEXT, i INTEGER, f FLOAT)")?;
+ Ok(db)
}
#[test]
- fn test_offset_date_time() {
- let db = checked_memory_handle();
+ fn test_offset_date_time() -> Result<()> {
+ let db = checked_memory_handle()?;
let mut ts_vec = vec![];
@@ -60,23 +60,31 @@ mod test {
ts_vec.push(make_datetime(10_000_000_000, 0)); //November 20, 2286
for ts in ts_vec {
- db.execute("INSERT INTO foo(t) VALUES (?)", &[&ts]).unwrap();
+ db.execute("INSERT INTO foo(t) VALUES (?)", [ts])?;
- let from: OffsetDateTime = db
- .query_row("SELECT t FROM foo", NO_PARAMS, |r| r.get(0))
- .unwrap();
+ let from: OffsetDateTime = db.query_row("SELECT t FROM foo", [], |r| r.get(0))?;
- db.execute("DELETE FROM foo", NO_PARAMS).unwrap();
+ db.execute("DELETE FROM foo", [])?;
assert_eq!(from, ts);
}
+ Ok(())
}
#[test]
- fn test_sqlite_functions() {
- let db = checked_memory_handle();
+ fn test_sqlite_functions() -> Result<()> {
+ let db = checked_memory_handle()?;
let result: Result<OffsetDateTime> =
- db.query_row("SELECT CURRENT_TIMESTAMP", NO_PARAMS, |r| r.get(0));
+ db.query_row("SELECT CURRENT_TIMESTAMP", [], |r| r.get(0));
assert!(result.is_ok());
+ Ok(())
+ }
+
+ #[test]
+ fn test_param() -> Result<()> {
+ let db = checked_memory_handle()?;
+ let result: Result<bool> = db.query_row("SELECT 1 WHERE ? BETWEEN datetime('now', '-1 minute') AND datetime('now', '+1 minute')", [OffsetDateTime::now_utc()], |r| r.get(0));
+ assert!(result.is_ok());
+ Ok(())
}
}