mirror of
				https://github.com/isar/rusqlite.git
				synced 2025-10-31 13:58:55 +08:00 
			
		
		
		
	Merge remote-tracking branch 'jgallagher/master' into 2018
This commit is contained in:
		| @@ -23,7 +23,7 @@ min_sqlite_version_3_7_7 = ["pkg-config", "vcpkg"] | |||||||
| unlock_notify = [] | unlock_notify = [] | ||||||
|  |  | ||||||
| [build-dependencies] | [build-dependencies] | ||||||
| bindgen = { version = "0.43", optional = true } | bindgen = { version = "0.44", optional = true } | ||||||
| pkg-config = { version = "0.3", optional = true } | pkg-config = { version = "0.3", optional = true } | ||||||
| cc = { version = "1.0", optional = true } | cc = { version = "1.0", optional = true } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -132,7 +132,7 @@ mod test { | |||||||
|     use super::chrono::{ |     use super::chrono::{ | ||||||
|         DateTime, Duration, Local, NaiveDate, NaiveDateTime, NaiveTime, TimeZone, Utc, |         DateTime, Duration, Local, NaiveDate, NaiveDateTime, NaiveTime, TimeZone, Utc, | ||||||
|     }; |     }; | ||||||
|     use crate::{Connection, NO_PARAMS}; |     use crate::{Connection, Result, NO_PARAMS}; | ||||||
|  |  | ||||||
|     fn checked_memory_handle() -> Connection { |     fn checked_memory_handle() -> Connection { | ||||||
|         let db = Connection::open_in_memory().unwrap(); |         let db = Connection::open_in_memory().unwrap(); | ||||||
| @@ -263,4 +263,21 @@ mod test { | |||||||
|             .unwrap(); |             .unwrap(); | ||||||
|         assert_eq!(local, v); |         assert_eq!(local, v); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_sqlite_functions() { | ||||||
|  |         let db = checked_memory_handle(); | ||||||
|  |         let result: Result<NaiveTime> = | ||||||
|  |             db.query_row("SELECT CURRENT_TIME", NO_PARAMS, |r| r.get(0)); | ||||||
|  |         assert!(result.is_ok()); | ||||||
|  |         let result: Result<NaiveDate> = | ||||||
|  |             db.query_row("SELECT CURRENT_DATE", NO_PARAMS, |r| r.get(0)); | ||||||
|  |         assert!(result.is_ok()); | ||||||
|  |         let result: Result<NaiveDateTime> = | ||||||
|  |             db.query_row("SELECT CURRENT_TIMESTAMP", NO_PARAMS, |r| r.get(0)); | ||||||
|  |         assert!(result.is_ok()); | ||||||
|  |         let result: Result<DateTime<Utc>> = | ||||||
|  |             db.query_row("SELECT CURRENT_TIMESTAMP", NO_PARAMS, |r| r.get(0)); | ||||||
|  |         assert!(result.is_ok()); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ extern crate time; | |||||||
| use crate::types::{FromSql, FromSqlError, FromSqlResult, ToSql, ToSqlOutput, ValueRef}; | use crate::types::{FromSql, FromSqlError, FromSqlResult, ToSql, ToSqlOutput, ValueRef}; | ||||||
| use crate::Result; | use crate::Result; | ||||||
|  |  | ||||||
|  | const CURRENT_TIMESTAMP_FMT: &str = "%Y-%m-%d %H:%M:%S"; | ||||||
| const SQLITE_DATETIME_FMT: &str = "%Y-%m-%dT%H:%M:%S.%fZ"; | const SQLITE_DATETIME_FMT: &str = "%Y-%m-%dT%H:%M:%S.%fZ"; | ||||||
| const SQLITE_DATETIME_FMT_LEGACY: &str = "%Y-%m-%d %H:%M:%S:%f %Z"; | const SQLITE_DATETIME_FMT_LEGACY: &str = "%Y-%m-%d %H:%M:%S:%f %Z"; | ||||||
|  |  | ||||||
| @@ -21,10 +22,13 @@ impl FromSql for time::Timespec { | |||||||
|         value |         value | ||||||
|             .as_str() |             .as_str() | ||||||
|             .and_then(|s| { |             .and_then(|s| { | ||||||
|                 time::strptime(s, SQLITE_DATETIME_FMT).or_else(|err| { |                 match s.len() { | ||||||
|                     time::strptime(s, SQLITE_DATETIME_FMT_LEGACY) |                     19 => time::strptime(s, CURRENT_TIMESTAMP_FMT), | ||||||
|                         .or_else(|_| Err(FromSqlError::Other(Box::new(err)))) |                     _ => time::strptime(s, SQLITE_DATETIME_FMT).or_else(|err| { | ||||||
|                 }) |                         time::strptime(s, SQLITE_DATETIME_FMT_LEGACY).or_else(|_| Err(err)) | ||||||
|  |                     }), | ||||||
|  |                 } | ||||||
|  |                 .or_else(|err| Err(FromSqlError::Other(Box::new(err)))) | ||||||
|             }) |             }) | ||||||
|             .map(|tm| tm.to_timespec()) |             .map(|tm| tm.to_timespec()) | ||||||
|     } |     } | ||||||
| @@ -33,7 +37,7 @@ impl FromSql for time::Timespec { | |||||||
| #[cfg(test)] | #[cfg(test)] | ||||||
| mod test { | mod test { | ||||||
|     use super::time; |     use super::time; | ||||||
|     use crate::{Connection, NO_PARAMS}; |     use crate::{Connection, Result, NO_PARAMS}; | ||||||
|  |  | ||||||
|     fn checked_memory_handle() -> Connection { |     fn checked_memory_handle() -> Connection { | ||||||
|         let db = Connection::open_in_memory().unwrap(); |         let db = Connection::open_in_memory().unwrap(); | ||||||
| @@ -67,4 +71,12 @@ mod test { | |||||||
|             assert_eq!(from, ts); |             assert_eq!(from, ts); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_sqlite_functions() { | ||||||
|  |         let db = checked_memory_handle(); | ||||||
|  |         let result: Result<time::Timespec> = | ||||||
|  |             db.query_row("SELECT CURRENT_TIMESTAMP", NO_PARAMS, |r| r.get(0)); | ||||||
|  |         assert!(result.is_ok()); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user