@@ -5,7 +5,7 @@ pub enum Value {
55 Int64 ( i64 ) ,
66 Float ( f32 ) ,
77 Double ( f64 ) ,
8- String ( String ) ,
8+ String ( CString ) ,
99}
1010
1111trait IntoValue {
@@ -31,11 +31,22 @@ impl_value!(u64, Int64);
3131impl_value ! ( i64 , Int64 ) ;
3232impl_value ! ( f32 , Float ) ;
3333impl_value ! ( f64 , Double ) ;
34- impl_value ! ( String , String ) ;
34+
35+ impl IntoValue for String {
36+ fn into_value ( self ) -> Result < Value > {
37+ Ok ( Value :: String ( CString :: new ( self ) ?) )
38+ }
39+ }
3540
3641impl IntoValue for & str {
3742 fn into_value ( self ) -> Result < Value > {
38- Ok ( Value :: String ( self . into ( ) ) )
43+ Ok ( Value :: String ( CString :: new ( self ) ?) )
44+ }
45+ }
46+
47+ impl IntoValue for CString {
48+ fn into_value ( self ) -> Result < Value > {
49+ Ok ( Value :: String ( self ) )
3950 }
4051}
4152
@@ -50,25 +61,6 @@ pub enum Params {
5061 Positional ( Vec < Value > ) ,
5162}
5263
53- impl Params {
54- pub ( crate ) unsafe fn bind ( ptr : * mut xdb_stmt_t , params : Vec < Value > ) -> Result < ( ) > {
55- for ( i, p) in params. into_iter ( ) . enumerate ( ) {
56- let i = i as u16 + 1 ;
57- let ret = match p {
58- ParamValue :: Int ( v) => xdb_bind_int ( ptr, i, v) ,
59- ParamValue :: Int64 ( v) => xdb_bind_int64 ( ptr, i, v) ,
60- ParamValue :: Float ( v) => xdb_bind_float ( ptr, i, v) ,
61- ParamValue :: Double ( v) => xdb_bind_double ( ptr, i, v) ,
62- ParamValue :: String ( v) => xdb_bind_str ( ptr, i, CString :: new ( v) ?. as_ptr ( ) ) ,
63- } ;
64- if ret != 0 {
65- return Err ( Error :: BindParams ) ;
66- }
67- }
68- Ok ( ( ) )
69- }
70- }
71-
7264pub trait IntoParams {
7365 fn into_params ( self ) -> Result < Params > ;
7466}
0 commit comments