@@ -22,23 +22,22 @@ impl SqliteClient {
22
22
Self :: new ( None , None ) . await
23
23
}
24
24
25
- pub async fn new ( db_name : Option < & str > , migrations : Option < & str > ) -> Self {
25
+ pub async fn new ( db_url : Option < & str > , migrations : Option < & str > ) -> Self {
26
26
// let mut _root_dir = tauri::api::path::document_dir();
27
27
28
28
// sqlite:tmp/app.db
29
- // let url = env::var("").unwrap_or(util::app_cfg::get_local_sqlite_url(Some(db_name)));
30
- let db_url = util:: fmt_local_sqlite_url ( db_name) ;
29
+ let url = db_url. unwrap_or ( util:: local_sqlite_url ( None ) ) ;
31
30
32
31
// todo x: 仅用于创建 db 文件
33
- let _ = SqliteConnectOptions :: from_str ( & db_url )
32
+ let _ = SqliteConnectOptions :: from_str ( & url )
34
33
. unwrap ( )
35
34
. create_if_missing ( true )
36
35
. connect ( )
37
36
. await
38
37
. expect ( "connect to sqlite failed" ) ;
39
38
40
39
// connect pool
41
- let cli = SqlitePoolOptions :: new ( ) . min_connections ( 2 ) . connect ( & db_url ) . await ;
40
+ let cli = SqlitePoolOptions :: new ( ) . min_connections ( 2 ) . connect ( & url ) . await ;
42
41
43
42
match cli {
44
43
Ok ( c) => {
@@ -78,21 +77,26 @@ impl SqliteClient {
78
77
pub mod util {
79
78
use std:: { env, path:: PathBuf } ;
80
79
81
- pub fn local_tmp_dir ( ) -> PathBuf {
82
- let tmp_local = "tmp" ;
83
-
80
+ pub fn local_dir ( folder : Option < & str > ) -> PathBuf {
84
81
let mut current_dir = env:: current_dir ( ) . expect ( "get current directory failed" ) ;
85
- let tmp_dir = current_dir. join ( tmp_local) ;
86
- if !tmp_dir. exists ( ) {
87
- std:: fs:: create_dir ( & tmp_dir) . expect ( "create tmp dir failed" ) ;
82
+
83
+ let dest_dir = current_dir. join ( folder. unwrap_or ( "tmp" ) ) ;
84
+ if !dest_dir. exists ( ) {
85
+ std:: fs:: create_dir ( & dest_dir) . expect ( "create tmp dir failed" ) ;
88
86
}
89
- tmp_dir
87
+ dest_dir
90
88
}
91
89
92
- pub fn fmt_local_sqlite_url ( db_name : Option < & str > ) -> String {
90
+ pub fn local_sqlite_url ( db_name : Option < & str > ) -> & str {
93
91
let fp = db_name. unwrap_or ( "app.db" ) ;
94
- let prefix = "sqlite:" ;
95
- format ! ( "{}{}" , prefix, local_tmp_dir( ) . join( fp) . to_str( ) . unwrap( ) )
92
+ let mut prefix = "sqlite:" ;
93
+
94
+ // get or create:
95
+ let d = local_dir ( None ) ;
96
+
97
+ // return db url
98
+ let db_url = format ! ( "{}{}" , prefix, d. join( fp) . to_str( ) . unwrap( ) ) ;
99
+ Box :: leak ( db_url. into_boxed_str ( ) )
96
100
}
97
101
98
102
#[ cfg( test) ]
@@ -105,7 +109,7 @@ pub mod util {
105
109
106
110
// iter
107
111
for case in cases. iter ( ) {
108
- let url = fmt_local_sqlite_url ( * case) ;
112
+ let url = local_sqlite_url ( * case) ;
109
113
println ! ( "url: {}" , url) ;
110
114
}
111
115
}
@@ -121,5 +125,11 @@ mod test {
121
125
#[ tokio:: test]
122
126
async fn test_new_sqlite_client ( ) {
123
127
let db = SqliteClient :: default ( ) . await ;
128
+
129
+ let cases = [ "tmp/test1.db" , "tmp/test2.db" ] ;
130
+
131
+ for item in cases. iter ( ) {
132
+ let _ = SqliteClient :: new ( Some ( item) , None ) . await ;
133
+ }
124
134
}
125
135
}
0 commit comments