11use super :: ffi;
22use super :: { AppenderParams , Connection , Result , ValueRef } ;
3- use std:: ffi:: { c_void, CString } ;
3+ use std:: ffi:: c_void;
44use std:: fmt;
55use std:: iter:: IntoIterator ;
6+ use std:: os:: raw:: c_char;
67
78use crate :: error:: result_from_duckdb_code;
89use crate :: types:: { ToSql , ToSqlOutput } ;
@@ -60,9 +61,9 @@ impl Appender<'_> {
6061 /// Will return `Err` if append column count not the same with the table schema
6162 #[ inline]
6263 pub fn append_row < P : AppenderParams > ( & mut self , params : P ) -> Result < ( ) > {
63- let rc = unsafe { ffi:: duckdb_appender_begin_row ( self . app ) } ;
64- result_from_duckdb_code ( rc, None ) ?;
64+ let _ = unsafe { ffi:: duckdb_appender_begin_row ( self . app ) } ;
6565 params. __bind_in ( self ) ?;
66+ // NOTE: we only check end_row return value
6667 let rc = unsafe { ffi:: duckdb_appender_end_row ( self . app ) } ;
6768 result_from_duckdb_code ( rc, None )
6869 }
@@ -87,8 +88,10 @@ impl Appender<'_> {
8788 ToSqlOutput :: Borrowed ( v) => v,
8889 ToSqlOutput :: Owned ( ref v) => ValueRef :: from ( v) ,
8990 } ;
91+ // NOTE: we ignore the return value here
92+ // because if anything failed, end_row will fail
9093 // TODO: append more
91- let rc = match value {
94+ let _ = match value {
9295 ValueRef :: Null => unsafe { ffi:: duckdb_append_null ( ptr) } ,
9396 ValueRef :: Boolean ( i) => unsafe { ffi:: duckdb_append_bool ( ptr, i) } ,
9497 ValueRef :: TinyInt ( i) => unsafe { ffi:: duckdb_append_int8 ( ptr, i) } ,
@@ -102,13 +105,11 @@ impl Appender<'_> {
102105 ValueRef :: Float ( r) => unsafe { ffi:: duckdb_append_float ( ptr, r) } ,
103106 ValueRef :: Double ( r) => unsafe { ffi:: duckdb_append_double ( ptr, r) } ,
104107 ValueRef :: Text ( s) => unsafe {
105- let c_str = CString :: new ( s) . expect ( "can't convert into c_str" ) ;
106- ffi:: duckdb_append_varchar ( ptr, c_str. as_ptr ( ) )
108+ ffi:: duckdb_append_varchar_length ( ptr, s. as_ptr ( ) as * const c_char , s. len ( ) as u64 )
107109 } ,
108110 ValueRef :: Blob ( b) => unsafe { ffi:: duckdb_append_blob ( ptr, b. as_ptr ( ) as * const c_void , b. len ( ) as u64 ) } ,
109111 _ => unreachable ! ( "not supported" ) ,
110112 } ;
111- result_from_duckdb_code ( rc, Some ( "append error" . to_owned ( ) ) ) ?;
112113 Ok ( ( ) )
113114 }
114115
0 commit comments