@@ -2,10 +2,10 @@ use super::{ffi, Result};
2
2
use crate :: error:: Error ;
3
3
use std:: { default:: Default , ffi:: CString , os:: raw:: c_char, ptr} ;
4
4
5
- use strum:: { Display , EnumString } ;
5
+ use strum:: { AsRefStr , Display , EnumString } ;
6
6
7
7
/// duckdb access mode, default is Automatic
8
- #[ derive( Debug , Eq , PartialEq , EnumString , Display ) ]
8
+ #[ derive( Debug , Eq , PartialEq , Clone , EnumString , Display , AsRefStr ) ]
9
9
pub enum AccessMode {
10
10
/// Access mode of the database AUTOMATIC
11
11
#[ strum( to_string = "AUTOMATIC" ) ]
@@ -19,7 +19,7 @@ pub enum AccessMode {
19
19
}
20
20
21
21
/// duckdb default order, default is Asc
22
- #[ derive( Debug , Eq , PartialEq , EnumString , Display ) ]
22
+ #[ derive( Debug , Eq , PartialEq , Clone , EnumString , Display , AsRefStr ) ]
23
23
pub enum DefaultOrder {
24
24
/// The order type, ASC
25
25
#[ strum( to_string = "ASC" ) ]
@@ -30,7 +30,7 @@ pub enum DefaultOrder {
30
30
}
31
31
32
32
/// duckdb default null order, default is nulls first
33
- #[ derive( Debug , Eq , PartialEq , EnumString , Display ) ]
33
+ #[ derive( Debug , Eq , PartialEq , Clone , EnumString , Display , AsRefStr ) ]
34
34
pub enum DefaultNullOrder {
35
35
/// Null ordering, NullsFirst
36
36
#[ strum( to_string = "NULLS_FIRST" ) ]
@@ -54,14 +54,15 @@ impl Config {
54
54
55
55
/// enable autoload extensions
56
56
pub fn enable_autoload_extension ( mut self , enabled : bool ) -> Result < Self > {
57
- self . set ( "autoinstall_known_extensions" , & ( enabled as i32 ) . to_string ( ) ) ?;
58
- self . set ( "autoload_known_extensions" , & ( enabled as i32 ) . to_string ( ) ) ?;
57
+ let value = ( enabled as u8 ) . to_string ( ) ;
58
+ self . set ( "autoinstall_known_extensions" , & value) ?;
59
+ self . set ( "autoload_known_extensions" , & value) ?;
59
60
Ok ( self )
60
61
}
61
62
62
63
/// Access mode of the database ([AUTOMATIC], READ_ONLY or READ_WRITE)
63
64
pub fn access_mode ( mut self , mode : AccessMode ) -> Result < Self > {
64
- self . set ( "access_mode" , & mode. to_string ( ) ) ?;
65
+ self . set ( "access_mode" , mode) ?;
65
66
Ok ( self )
66
67
}
67
68
@@ -73,25 +74,25 @@ impl Config {
73
74
74
75
/// The order type used when none is specified ([ASC] or DESC)
75
76
pub fn default_order ( mut self , order : DefaultOrder ) -> Result < Self > {
76
- self . set ( "default_order" , & order. to_string ( ) ) ?;
77
+ self . set ( "default_order" , order) ?;
77
78
Ok ( self )
78
79
}
79
80
80
81
/// Null ordering used when none is specified ([NULLS_FIRST] or NULLS_LAST)
81
82
pub fn default_null_order ( mut self , null_order : DefaultNullOrder ) -> Result < Self > {
82
- self . set ( "default_null_order" , & null_order. to_string ( ) ) ?;
83
+ self . set ( "default_null_order" , null_order) ?;
83
84
Ok ( self )
84
85
}
85
86
86
87
/// Allow the database to access external state (through e.g. COPY TO/FROM, CSV readers, pandas replacement scans, etc)
87
88
pub fn enable_external_access ( mut self , enabled : bool ) -> Result < Self > {
88
- self . set ( "enable_external_access" , & enabled. to_string ( ) ) ?;
89
+ self . set ( "enable_external_access" , enabled. to_string ( ) ) ?;
89
90
Ok ( self )
90
91
}
91
92
92
93
/// Whether or not object cache is used to cache e.g. Parquet metadata
93
94
pub fn enable_object_cache ( mut self , enabled : bool ) -> Result < Self > {
94
- self . set ( "enable_object_cache" , & enabled. to_string ( ) ) ?;
95
+ self . set ( "enable_object_cache" , enabled. to_string ( ) ) ?;
95
96
Ok ( self )
96
97
}
97
98
@@ -109,18 +110,19 @@ impl Config {
109
110
110
111
/// The number of total threads used by the system
111
112
pub fn threads ( mut self , thread_num : i64 ) -> Result < Self > {
112
- self . set ( "threads" , & thread_num. to_string ( ) ) ?;
113
+ self . set ( "threads" , thread_num. to_string ( ) ) ?;
113
114
Ok ( self )
114
115
}
115
116
116
- /// Add any setting to the config. DuckDB will return an error if the setting is unknown or
117
- /// otherwise invalid.
117
+ /// Add any setting to the config. DuckDB will return an error if the setting is unknown or otherwise invalid.
118
118
pub fn with ( mut self , key : impl AsRef < str > , value : impl AsRef < str > ) -> Result < Self > {
119
- self . set ( key. as_ref ( ) , value. as_ref ( ) ) ?;
119
+ self . set ( key, value) ?;
120
120
Ok ( self )
121
121
}
122
122
123
- fn set ( & mut self , key : & str , value : & str ) -> Result < ( ) > {
123
+ fn set ( & mut self , key : impl AsRef < str > , value : impl AsRef < str > ) -> Result < ( ) > {
124
+ let key = key. as_ref ( ) ;
125
+ let value = value. as_ref ( ) ;
124
126
if self . config . is_none ( ) {
125
127
let mut config: ffi:: duckdb_config = ptr:: null_mut ( ) ;
126
128
let state = unsafe { ffi:: duckdb_create_config ( & mut config) } ;
0 commit comments