@@ -6,7 +6,8 @@ use futures_intrusive::sync::Mutex;
66
77use  crate :: error:: Error ; 
88use  crate :: odbc:: { 
9-     OdbcArgumentValue ,  OdbcColumn ,  OdbcConnectOptions ,  OdbcQueryResult ,  OdbcRow ,  OdbcTypeInfo , 
9+     OdbcArgumentValue ,  OdbcArguments ,  OdbcColumn ,  OdbcConnectOptions ,  OdbcQueryResult ,  OdbcRow , 
10+     OdbcTypeInfo , 
1011} ; 
1112#[ allow( unused_imports) ]  
1213use  crate :: row:: Row  as  SqlxRow ; 
@@ -42,11 +43,7 @@ enum Command {
4243    } , 
4344    Execute  { 
4445        sql :  Box < str > , 
45-         tx :  flume:: Sender < Result < Either < OdbcQueryResult ,  OdbcRow > ,  Error > > , 
46-     } , 
47-     ExecuteWithArgs  { 
48-         sql :  Box < str > , 
49-         args :  Vec < OdbcArgumentValue > , 
46+         args :  Option < OdbcArguments > , 
5047        tx :  flume:: Sender < Result < Either < OdbcQueryResult ,  OdbcRow > ,  Error > > , 
5148    } , 
5249} 
@@ -112,13 +109,8 @@ impl ConnectionWorker {
112109                            let  _ = tx. send ( ( ) ) ; 
113110                            return ; 
114111                        } 
115-                         Command :: Execute  {  sql,  tx }  => { 
116-                             with_conn ( & shared,  |conn| execute_sql ( conn,  & sql,  & tx) ) ; 
117-                         } 
118-                         Command :: ExecuteWithArgs  {  sql,  args,  tx }  => { 
119-                             with_conn ( & shared,  |conn| { 
120-                                 execute_sql_with_params ( conn,  & sql,  args,  & tx) 
121-                             } ) ; 
112+                         Command :: Execute  {  sql,  args,  tx }  => { 
113+                             with_conn ( & shared,  |conn| execute_sql ( conn,  & sql,  args,  & tx) ) ; 
122114                        } 
123115                    } 
124116                } 
@@ -178,26 +170,11 @@ impl ConnectionWorker {
178170    pub ( crate )  async  fn  execute_stream ( 
179171        & mut  self , 
180172        sql :  & str , 
173+         args :  Option < OdbcArguments > , 
181174    )  -> Result < flume:: Receiver < Result < Either < OdbcQueryResult ,  OdbcRow > ,  Error > > ,  Error >  { 
182175        let  ( tx,  rx)  = flume:: bounded ( 64 ) ; 
183176        self . command_tx 
184177            . send_async ( Command :: Execute  { 
185-                 sql :  sql. into ( ) , 
186-                 tx, 
187-             } ) 
188-             . await 
189-             . map_err ( |_| Error :: WorkerCrashed ) ?; 
190-         Ok ( rx) 
191-     } 
192- 
193-     pub ( crate )  async  fn  execute_stream_with_args ( 
194-         & mut  self , 
195-         sql :  & str , 
196-         args :  Vec < OdbcArgumentValue > , 
197-     )  -> Result < flume:: Receiver < Result < Either < OdbcQueryResult ,  OdbcRow > ,  Error > > ,  Error >  { 
198-         let  ( tx,  rx)  = flume:: bounded ( 64 ) ; 
199-         self . command_tx 
200-             . send_async ( Command :: ExecuteWithArgs  { 
201178                sql :  sql. into ( ) , 
202179                args, 
203180                tx, 
@@ -232,40 +209,18 @@ fn exec_simple(shared: &Shared, sql: &str) -> Result<(), Error> {
232209fn  execute_sql ( 
233210    conn :  & odbc_api:: Connection < ' static > , 
234211    sql :  & str , 
212+     args :  Option < OdbcArguments > , 
235213    tx :  & flume:: Sender < Result < Either < OdbcQueryResult ,  OdbcRow > ,  Error > > , 
236214)  { 
237-     match  conn. execute ( sql,  ( ) ,  None )  { 
238-         Ok ( Some ( mut  cursor) )  => { 
239-             let  columns = collect_columns ( & mut  cursor) ; 
240-             if  let  Err ( e)  = stream_rows ( & mut  cursor,  & columns,  tx)  { 
241-                 let  _ = tx. send ( Err ( e) ) ; 
242-                 return ; 
243-             } 
244-             let  _ = tx. send ( Ok ( Either :: Left ( OdbcQueryResult  {  rows_affected :  0  } ) ) ) ; 
245-         } 
246-         Ok ( None )  => { 
247-             let  _ = tx. send ( Ok ( Either :: Left ( OdbcQueryResult  {  rows_affected :  0  } ) ) ) ; 
248-         } 
249-         Err ( e)  => { 
250-             let  _ = tx. send ( Err ( Error :: from ( e) ) ) ; 
251-         } 
252-     } 
253- } 
254- 
255- fn  execute_sql_with_params ( 
256-     conn :  & odbc_api:: Connection < ' static > , 
257-     sql :  & str , 
258-     args :  Vec < OdbcArgumentValue > , 
259-     tx :  & flume:: Sender < Result < Either < OdbcQueryResult ,  OdbcRow > ,  Error > > , 
260- )  { 
215+     let  args = args. map ( |a| a. values ) . unwrap_or_default ( ) ; 
261216    if  args. is_empty ( )  { 
262217        dispatch_execute ( conn,  sql,  ( ) ,  tx) ; 
263218        return ; 
264219    } 
265220
266221    let  mut  params:  Vec < Box < dyn  odbc_api:: parameter:: InputParameter > >  =
267222        Vec :: with_capacity ( args. len ( ) ) ; 
268-     for  a in  dbg ! ( args)  { 
223+     for  a in  args { 
269224        params. push ( to_param ( a) ) ; 
270225    } 
271226    dispatch_execute ( conn,  sql,  & params[ ..] ,  tx) ; 
0 commit comments