@@ -7,7 +7,7 @@ use std::io::{self, Read, Write};
7
7
use std:: sync:: Arc ;
8
8
9
9
use error:: { Error , DbError } ;
10
- use types:: { SessionInfo , Type , ToSql , IsNull } ;
10
+ use types:: { SessionInfo , Type , ToSql } ;
11
11
use message:: FrontendMessage :: * ;
12
12
use message:: BackendMessage :: * ;
13
13
use message:: WriteMessage ;
@@ -77,59 +77,17 @@ impl<'conn> Statement<'conn> {
77
77
}
78
78
}
79
79
80
- fn inner_execute ( & self , portal_name : & str , row_limit : i32 , params : & [ & ToSql ] ) -> Result < ( ) > {
81
- let mut conn = self . conn . conn . borrow_mut ( ) ;
82
- assert ! ( self . param_types( ) . len( ) == params. len( ) ,
83
- "expected {} parameters but got {}" ,
84
- self . param_types( ) . len( ) ,
85
- params. len( ) ) ;
86
- debug ! ( "executing statement {} with parameters: {:?}" ,
87
- self . info. name,
88
- params) ;
89
- let mut values = vec ! [ ] ;
90
- for ( param, ty) in params. iter ( ) . zip ( self . param_types ( ) ) {
91
- let mut buf = vec ! [ ] ;
92
- match try!( param. to_sql_checked ( ty, & mut buf, & SessionInfo :: new ( & * conn) ) ) {
93
- IsNull :: Yes => values. push ( None ) ,
94
- IsNull :: No => values. push ( Some ( buf) ) ,
95
- }
96
- }
97
-
98
- try!( conn. write_messages ( & [ Bind {
99
- portal : portal_name,
100
- statement : & self . info . name ,
101
- formats : & [ 1 ] ,
102
- values : & values,
103
- result_formats : & [ 1 ] ,
104
- } ,
105
- Execute {
106
- portal : portal_name,
107
- max_rows : row_limit,
108
- } ,
109
- Sync ] ) ) ;
110
-
111
- match try!( conn. read_message ( ) ) {
112
- BindComplete => Ok ( ( ) ) ,
113
- ErrorResponse { fields } => {
114
- try!( conn. wait_for_ready ( ) ) ;
115
- DbError :: new ( fields)
116
- }
117
- _ => {
118
- conn. desynchronized = true ;
119
- Err ( Error :: Io ( bad_response ( ) ) )
120
- }
121
- }
122
- }
123
-
124
80
fn inner_query < ' a > ( & ' a self ,
125
81
portal_name : & str ,
126
82
row_limit : i32 ,
127
83
params : & [ & ToSql ] )
128
84
-> Result < ( VecDeque < Vec < Option < Vec < u8 > > > > , bool ) > {
129
- try!( self . inner_execute ( portal_name, row_limit, params) ) ;
85
+ let mut conn = self . conn . conn . borrow_mut ( ) ;
86
+
87
+ try!( conn. raw_execute ( & self . info . name , portal_name, row_limit, self . param_types ( ) , params) ) ;
130
88
131
89
let mut buf = VecDeque :: new ( ) ;
132
- let more_rows = try!( self . conn . conn . borrow_mut ( ) . read_rows ( & mut buf) ) ;
90
+ let more_rows = try!( conn. read_rows ( & mut buf) ) ;
133
91
Ok ( ( buf, more_rows) )
134
92
}
135
93
@@ -164,10 +122,10 @@ impl<'conn> Statement<'conn> {
164
122
/// println!("{} rows updated", rows_updated);
165
123
/// ```
166
124
pub fn execute ( & self , params : & [ & ToSql ] ) -> Result < u64 > {
167
- check_desync ! ( self . conn) ;
168
- try!( self . inner_execute ( "" , 0 , params) ) ;
169
-
170
125
let mut conn = self . conn . conn . borrow_mut ( ) ;
126
+ check_desync ! ( conn) ;
127
+ try!( conn. raw_execute ( & self . info . name , "" , 0 , self . param_types ( ) , params) ) ;
128
+
171
129
let num;
172
130
loop {
173
131
match try!( conn. read_message ( ) ) {
@@ -303,8 +261,8 @@ impl<'conn> Statement<'conn> {
303
261
/// stmt.copy_in(&[], &mut "1\tjohn\n2\tjane\n".as_bytes()).unwrap();
304
262
/// ```
305
263
pub fn copy_in < R : ReadWithInfo > ( & self , params : & [ & ToSql ] , r : & mut R ) -> Result < u64 > {
306
- try!( self . inner_execute ( "" , 0 , params) ) ;
307
264
let mut conn = self . conn . conn . borrow_mut ( ) ;
265
+ try!( conn. raw_execute ( & self . info . name , "" , 0 , self . param_types ( ) , params) ) ;
308
266
309
267
let ( format, column_formats) = match try!( conn. read_message ( ) ) {
310
268
CopyInResponse { format, column_formats } => ( format, column_formats) ,
@@ -399,8 +357,8 @@ impl<'conn> Statement<'conn> {
399
357
/// assert_eq!(buf, b"1\tjohn\n2\tjane\n");
400
358
/// ```
401
359
pub fn copy_out < ' a , W : WriteWithInfo > ( & ' a self , params : & [ & ToSql ] , w : & mut W ) -> Result < u64 > {
402
- try!( self . inner_execute ( "" , 0 , params) ) ;
403
360
let mut conn = self . conn . conn . borrow_mut ( ) ;
361
+ try!( conn. raw_execute ( & self . info . name , "" , 0 , self . param_types ( ) , params) ) ;
404
362
405
363
let ( format, column_formats) = match try!( conn. read_message ( ) ) {
406
364
CopyOutResponse { format, column_formats } => ( format, column_formats) ,
0 commit comments