@@ -6,7 +6,7 @@ use std::iter::IntoIterator;
66use std:: os:: raw:: c_char;
77
88use crate :: error:: result_from_duckdb_appender;
9- use crate :: types:: { ToSql , ToSqlOutput } ;
9+ use crate :: types:: { TimeUnit , ToSql , ToSqlOutput } ;
1010use crate :: Error ;
1111
1212/// Appender for fast import data
@@ -108,6 +108,15 @@ impl Appender<'_> {
108108 ValueRef :: Text ( s) => unsafe {
109109 ffi:: duckdb_append_varchar_length ( ptr, s. as_ptr ( ) as * const c_char , s. len ( ) as u64 )
110110 } ,
111+ ValueRef :: Timestamp ( u, i) => unsafe {
112+ let micros = match u {
113+ TimeUnit :: Second => i * 1_000_000 ,
114+ TimeUnit :: Millisecond => i * 1_000 ,
115+ TimeUnit :: Microsecond => i,
116+ TimeUnit :: Nanosecond => i / 1_000 ,
117+ } ;
118+ ffi:: duckdb_append_timestamp ( ptr, ffi:: duckdb_timestamp { micros } )
119+ } ,
111120 ValueRef :: Blob ( b) => unsafe { ffi:: duckdb_append_blob ( ptr, b. as_ptr ( ) as * const c_void , b. len ( ) as u64 ) } ,
112121 _ => unreachable ! ( "not supported" ) ,
113122 } ;
@@ -215,8 +224,25 @@ mod test {
215224 app. append_row ( [ "2022-04-09 15:56:37.544" ] ) ?;
216225 }
217226
218- let val = db. query_row ( "SELECT x FROM foo" , [ ] , |row| <( String , ) >:: try_from ( row) ) ?;
219- assert_eq ! ( val, ( "2022-04-09 15:56:37.544" . to_string( ) , ) ) ;
227+ let val = db. query_row ( "SELECT x FROM foo" , [ ] , |row| <( i64 , ) >:: try_from ( row) ) ?;
228+ assert_eq ! ( val, ( 1649519797544000 , ) ) ;
229+ Ok ( ( ) )
230+ }
231+
232+ #[ test]
233+ fn test_append_timestamp ( ) -> Result < ( ) > {
234+ use std:: time:: Duration ;
235+ let db = Connection :: open_in_memory ( ) ?;
236+ db. execute_batch ( "CREATE TABLE foo(x TIMESTAMP)" ) ?;
237+
238+ let d = Duration :: from_secs ( 1 ) ;
239+ {
240+ let mut app = db. appender ( "foo" ) ?;
241+ app. append_row ( [ d] ) ?;
242+ }
243+
244+ let val = db. query_row ( "SELECT x FROM foo where x=?" , [ d] , |row| <( i32 , ) >:: try_from ( row) ) ?;
245+ assert_eq ! ( val, ( d. as_micros( ) as i32 , ) ) ;
220246 Ok ( ( ) )
221247 }
222248}
0 commit comments