@@ -3,7 +3,7 @@ mod conversion;
3
3
mod error;
4
4
5
5
use crate :: {
6
- ast:: { Query , Value } ,
6
+ ast:: { Insert , Query , Value } ,
7
7
connector:: { bind:: Bind , metrics, queryable:: * , timeout:: timeout, ResultSet } ,
8
8
error:: Error ,
9
9
visitor:: { self , Visitor } ,
@@ -13,7 +13,7 @@ pub use config::*;
13
13
use futures:: { lock:: Mutex , TryStreamExt } ;
14
14
use sqlx:: {
15
15
sqlite:: { SqliteConnectOptions , SqliteRow } ,
16
- Column as _, Connect , Row as _, SqliteConnection ,
16
+ Column as _, Connection , Done , Row as _, SqliteConnection ,
17
17
} ;
18
18
use std:: { collections:: HashSet , convert:: TryFrom , time:: Duration } ;
19
19
@@ -84,6 +84,27 @@ impl Queryable for Sqlite {
84
84
self . execute_raw ( & sql, params) . await
85
85
}
86
86
87
+ async fn insert ( & self , q : Insert < ' _ > ) -> crate :: Result < ResultSet > {
88
+ let ( sql, params) = visitor:: Mysql :: build ( q) ?;
89
+
90
+ metrics:: query_new ( "sqlite.execute_raw" , & sql, params, |params| async {
91
+ let mut query = sqlx:: query ( & sql) ;
92
+
93
+ for param in params. into_iter ( ) {
94
+ query = query. bind_value ( param, None ) ?;
95
+ }
96
+
97
+ let mut conn = self . connection . lock ( ) . await ;
98
+ let done = timeout ( self . socket_timeout , query. execute ( & mut * conn) ) . await ?;
99
+
100
+ let mut result_set = ResultSet :: default ( ) ;
101
+ result_set. set_last_insert_id ( done. last_insert_rowid ( ) as u64 ) ;
102
+
103
+ Ok ( result_set)
104
+ } )
105
+ . await
106
+ }
107
+
87
108
async fn query_raw ( & self , sql : & str , params : Vec < Value < ' _ > > ) -> crate :: Result < ResultSet > {
88
109
metrics:: query_new ( "sqlite.query_raw" , sql, params, move |params| async move {
89
110
let mut query = sqlx:: query ( sql) ;
@@ -125,9 +146,9 @@ impl Queryable for Sqlite {
125
146
}
126
147
127
148
let mut conn = self . connection . lock ( ) . await ;
128
- let changes = timeout ( self . socket_timeout , query. execute ( & mut * conn) ) . await ?;
149
+ let done = timeout ( self . socket_timeout , query. execute ( & mut * conn) ) . await ?;
129
150
130
- Ok ( changes )
151
+ Ok ( done . rows_affected ( ) )
131
152
} )
132
153
. await
133
154
}
@@ -473,9 +494,9 @@ mod tests {
473
494
}
474
495
}
475
496
476
- #[ tokio:: test]
497
+ #[ tokio:: test( threaded_scheduler ) ]
477
498
async fn upper_fun ( ) {
478
- let conn = Sqlite :: try_from ( "file:db/test.db" ) . unwrap ( ) ;
499
+ let conn = Sqlite :: new ( "file:db/test.db" ) . await . unwrap ( ) ;
479
500
let select = Select :: default ( ) . value ( upper ( "foo" ) . alias ( "val" ) ) ;
480
501
481
502
let res = conn. query ( select. into ( ) ) . await . unwrap ( ) ;
@@ -485,9 +506,9 @@ mod tests {
485
506
assert_eq ! ( Some ( "FOO" ) , val) ;
486
507
}
487
508
488
- #[ tokio:: test]
509
+ #[ tokio:: test( threaded_scheduler ) ]
489
510
async fn lower_fun ( ) {
490
- let conn = Sqlite :: try_from ( "file:db/test.db" ) . unwrap ( ) ;
511
+ let conn = Sqlite :: new ( "file:db/test.db" ) . await . unwrap ( ) ;
491
512
let select = Select :: default ( ) . value ( lower ( "BAR" ) . alias ( "val" ) ) ;
492
513
493
514
let res = conn. query ( select. into ( ) ) . await . unwrap ( ) ;
0 commit comments