@@ -5,15 +5,15 @@ use std::sync::Arc;
5
5
use async_trait:: async_trait;
6
6
use color_eyre:: eyre:: Result ;
7
7
use connect_options:: OracleConnectOptions ;
8
- use oracle:: { pool:: Pool , Connection } ;
8
+ use oracle:: { Connection , pool:: Pool } ;
9
9
use sqlparser:: ast:: Statement ;
10
10
use tokio:: task:: JoinHandle ;
11
11
12
12
use crate :: cli:: Driver ;
13
13
14
14
use super :: { Database , DbTaskResult , Header , QueryResultsWithMetadata , QueryTask , Rows } ;
15
15
16
- type TransactionTask = JoinHandle < ( QueryResultsWithMetadata , Connection ) > ;
16
+ type TransactionTask = JoinHandle < Result < ( QueryResultsWithMetadata , Connection ) > > ;
17
17
enum OracleTask {
18
18
Query ( QueryTask ) ,
19
19
TxStart ( TransactionTask ) ,
@@ -45,14 +45,14 @@ impl Database for OracleDriver {
45
45
Ok ( ( ) )
46
46
}
47
47
48
- fn start_query ( & mut self , query : String ) -> Result < ( ) > {
48
+ async fn start_query ( & mut self , query : String , bypass_parser : bool ) -> Result < ( ) > {
49
49
let ( first_query, statement_type) = super :: get_first_query ( query, Driver :: Oracle ) ?;
50
50
let pool = self . pool . clone ( ) . unwrap ( ) ;
51
51
52
52
let task = match statement_type {
53
53
Statement :: Query ( _) => OracleTask :: Query ( tokio:: spawn ( async move {
54
54
let results = query_with_pool ( & pool, & first_query) ;
55
- QueryResultsWithMetadata { results, statement_type }
55
+ QueryResultsWithMetadata { results, statement_type : Some ( statement_type ) }
56
56
} ) ) ,
57
57
_ => OracleTask :: TxStart ( tokio:: spawn ( async move {
58
58
let conn = pool. get ( ) ?;
@@ -65,7 +65,7 @@ impl Database for OracleDriver {
65
65
log:: error!( "{e:?}" ) ;
66
66
} ,
67
67
} ;
68
- ( QueryResultsWithMetadata { results, statement_type } , conn)
68
+ Ok ( ( QueryResultsWithMetadata { results, statement_type : Some ( statement_type ) } , conn) )
69
69
} ) ) ,
70
70
} ;
71
71
@@ -74,7 +74,7 @@ impl Database for OracleDriver {
74
74
Ok ( ( ) )
75
75
}
76
76
77
- fn abort_query ( & mut self ) -> Result < bool > {
77
+ async fn abort_query ( & mut self ) -> Result < bool > {
78
78
if let Some ( task) = self . task . take ( ) {
79
79
match task {
80
80
OracleTask :: Query ( handle) => handle. abort ( ) ,
@@ -101,7 +101,7 @@ impl Database for OracleDriver {
101
101
if !handle. is_finished ( ) {
102
102
( DbTaskResult :: Pending , Some ( OracleTask :: TxStart ( handle) ) )
103
103
} else {
104
- let ( result, tx) = handle. await ?;
104
+ let ( result, tx) = handle. await ?? ;
105
105
let rows_affected = match & result. results {
106
106
Ok ( rows) => rows. rows_affected ,
107
107
_ => None ,
@@ -119,12 +119,13 @@ impl Database for OracleDriver {
119
119
}
120
120
121
121
async fn start_tx ( & mut self , query : String ) -> Result < ( ) > {
122
- Self :: start_query ( self , query)
122
+ Self :: start_query ( self , query, false ) . await
123
123
}
124
124
125
125
async fn commit_tx ( & mut self ) -> Result < Option < QueryResultsWithMetadata > > {
126
126
if let Some ( OracleTask :: TxPending ( b) ) = self . task . take ( ) {
127
- tokio:: task:: spawn_blocking ( || b. 0 . commit ( ) ) . await ??;
127
+ let conn = b. 0 ;
128
+ tokio:: task:: spawn_blocking ( move || conn. commit ( ) ) . await ??;
128
129
Ok ( Some ( b. 1 ) )
129
130
} else {
130
131
Ok ( None )
@@ -172,7 +173,7 @@ fn query_with_pool(pool: &Pool, query: &str) -> Result<Rows> {
172
173
let mut headers = Vec :: new ( ) ;
173
174
let rows = pool
174
175
. get ( ) ?
175
- . query ( & query, & [ ] )
176
+ . query ( query, & [ ] )
176
177
. map_err ( |e| color_eyre:: eyre:: eyre!( "Error executing query: {}" , e) ) ?
177
178
. filter_map ( |row| row. ok ( ) )
178
179
. map ( |row| {
@@ -209,7 +210,7 @@ mod tests {
209
210
use sqlparser:: { ast:: Statement , parser:: ParserError } ;
210
211
211
212
use super :: * ;
212
- use crate :: database:: { get_execution_type , get_first_query , ExecutionType , ParseError } ;
213
+ use crate :: database:: { ExecutionType , ParseError , get_execution_type , get_first_query } ;
213
214
214
215
#[ test]
215
216
fn test_get_first_query ( ) {
0 commit comments