1
1
use crate :: ffi:: { duckdb_destroy_value, duckdb_get_int64, duckdb_get_varchar, duckdb_value} ;
2
2
use libduckdb_sys:: {
3
- duckdb_create_bool, duckdb_create_int32, duckdb_create_int64, duckdb_create_null_value, duckdb_create_uint64,
3
+ duckdb_create_bool, duckdb_create_double, duckdb_create_float, duckdb_create_int16, duckdb_create_int32,
4
+ duckdb_create_int64, duckdb_create_int8, duckdb_create_null_value, duckdb_create_uint16, duckdb_create_uint32,
5
+ duckdb_create_uint64, duckdb_create_uint8,
4
6
} ;
5
7
use std:: { ffi:: CString , fmt} ;
6
8
23
25
}
24
26
}
25
27
26
- impl From < bool > for Value {
27
- fn from ( value : bool ) -> Self {
28
- Value {
29
- ptr : unsafe { duckdb_create_bool ( value) } ,
30
- }
31
- }
32
- }
33
-
34
28
impl Value {
35
29
pub fn null ( ) -> Value {
36
30
Value {
@@ -45,30 +39,6 @@ impl From<duckdb_value> for Value {
45
39
}
46
40
}
47
41
48
- impl From < i32 > for Value {
49
- fn from ( t : i32 ) -> Self {
50
- Self {
51
- ptr : unsafe { duckdb_create_int32 ( t) } ,
52
- }
53
- }
54
- }
55
-
56
- impl From < i64 > for Value {
57
- fn from ( t : i64 ) -> Self {
58
- Self {
59
- ptr : unsafe { duckdb_create_int64 ( t) } ,
60
- }
61
- }
62
- }
63
-
64
- impl From < u64 > for Value {
65
- fn from ( t : u64 ) -> Self {
66
- Self {
67
- ptr : unsafe { duckdb_create_uint64 ( t) } ,
68
- }
69
- }
70
- }
71
-
72
42
impl Drop for Value {
73
43
fn drop ( & mut self ) {
74
44
if !self . ptr . is_null ( ) {
@@ -93,3 +63,27 @@ impl fmt::Display for Value {
93
63
write ! ( f, "{}" , c_string. to_str( ) . unwrap( ) )
94
64
}
95
65
}
66
+
67
+ macro_rules! impl_duckdb_create_value {
68
+ ( $ty: ty, $ddb_fn: ident) => {
69
+ impl From <$ty> for Value {
70
+ fn from( value: $ty) -> Self {
71
+ Value {
72
+ ptr: unsafe { $ddb_fn( value) } ,
73
+ }
74
+ }
75
+ }
76
+ } ;
77
+ }
78
+
79
+ impl_duckdb_create_value ! ( bool , duckdb_create_bool) ;
80
+ impl_duckdb_create_value ! ( i8 , duckdb_create_int8) ;
81
+ impl_duckdb_create_value ! ( i16 , duckdb_create_int16) ;
82
+ impl_duckdb_create_value ! ( i32 , duckdb_create_int32) ;
83
+ impl_duckdb_create_value ! ( i64 , duckdb_create_int64) ;
84
+ impl_duckdb_create_value ! ( u8 , duckdb_create_uint8) ;
85
+ impl_duckdb_create_value ! ( u16 , duckdb_create_uint16) ;
86
+ impl_duckdb_create_value ! ( u32 , duckdb_create_uint32) ;
87
+ impl_duckdb_create_value ! ( u64 , duckdb_create_uint64) ;
88
+ impl_duckdb_create_value ! ( f32 , duckdb_create_float) ;
89
+ impl_duckdb_create_value ! ( f64 , duckdb_create_double) ;
0 commit comments