Skip to content

Commit 1b5c79e

Browse files
committed
Move inner_execute to InnerConnection
1 parent 259fe11 commit 1b5c79e

File tree

2 files changed

+57
-52
lines changed

2 files changed

+57
-52
lines changed

src/lib.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,53 @@ impl InnerConnection {
709709
Ok(more_rows)
710710
}
711711

712+
fn raw_execute(&mut self,
713+
stmt_name: &str,
714+
portal_name: &str,
715+
row_limit: i32,
716+
param_types: &[Type],
717+
params: &[&ToSql])
718+
-> Result<()> {
719+
assert!(param_types.len() == params.len(),
720+
"expected {} parameters but got {}",
721+
param_types.len(),
722+
params.len());
723+
debug!("executing statement {} with parameters: {:?}", stmt_name, params);
724+
let mut values = vec![];
725+
for (param, ty) in params.iter().zip(param_types) {
726+
let mut buf = vec![];
727+
match try!(param.to_sql_checked(ty, &mut buf, &SessionInfo::new(self))) {
728+
IsNull::Yes => values.push(None),
729+
IsNull::No => values.push(Some(buf)),
730+
}
731+
}
732+
733+
try!(self.write_messages(&[Bind {
734+
portal: portal_name,
735+
statement: &stmt_name,
736+
formats: &[1],
737+
values: &values,
738+
result_formats: &[1],
739+
},
740+
Execute {
741+
portal: portal_name,
742+
max_rows: row_limit,
743+
},
744+
Sync]));
745+
746+
match try!(self.read_message()) {
747+
BindComplete => Ok(()),
748+
ErrorResponse { fields } => {
749+
try!(self.wait_for_ready());
750+
DbError::new(fields)
751+
}
752+
_ => {
753+
self.desynchronized = true;
754+
Err(Error::Io(bad_response()))
755+
}
756+
}
757+
}
758+
712759
fn make_stmt_name(&mut self) -> String {
713760
let stmt_name = format!("s{}", self.next_stmt_id);
714761
self.next_stmt_id += 1;

src/stmt.rs

Lines changed: 10 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use std::io::{self, Read, Write};
77
use std::sync::Arc;
88

99
use error::{Error, DbError};
10-
use types::{SessionInfo, Type, ToSql, IsNull};
10+
use types::{SessionInfo, Type, ToSql};
1111
use message::FrontendMessage::*;
1212
use message::BackendMessage::*;
1313
use message::WriteMessage;
@@ -77,59 +77,17 @@ impl<'conn> Statement<'conn> {
7777
}
7878
}
7979

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-
12480
fn inner_query<'a>(&'a self,
12581
portal_name: &str,
12682
row_limit: i32,
12783
params: &[&ToSql])
12884
-> 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));
13088

13189
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));
13391
Ok((buf, more_rows))
13492
}
13593

@@ -164,10 +122,10 @@ impl<'conn> Statement<'conn> {
164122
/// println!("{} rows updated", rows_updated);
165123
/// ```
166124
pub fn execute(&self, params: &[&ToSql]) -> Result<u64> {
167-
check_desync!(self.conn);
168-
try!(self.inner_execute("", 0, params));
169-
170125
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+
171129
let num;
172130
loop {
173131
match try!(conn.read_message()) {
@@ -303,8 +261,8 @@ impl<'conn> Statement<'conn> {
303261
/// stmt.copy_in(&[], &mut "1\tjohn\n2\tjane\n".as_bytes()).unwrap();
304262
/// ```
305263
pub fn copy_in<R: ReadWithInfo>(&self, params: &[&ToSql], r: &mut R) -> Result<u64> {
306-
try!(self.inner_execute("", 0, params));
307264
let mut conn = self.conn.conn.borrow_mut();
265+
try!(conn.raw_execute(&self.info.name, "", 0, self.param_types(), params));
308266

309267
let (format, column_formats) = match try!(conn.read_message()) {
310268
CopyInResponse { format, column_formats } => (format, column_formats),
@@ -399,8 +357,8 @@ impl<'conn> Statement<'conn> {
399357
/// assert_eq!(buf, b"1\tjohn\n2\tjane\n");
400358
/// ```
401359
pub fn copy_out<'a, W: WriteWithInfo>(&'a self, params: &[&ToSql], w: &mut W) -> Result<u64> {
402-
try!(self.inner_execute("", 0, params));
403360
let mut conn = self.conn.conn.borrow_mut();
361+
try!(conn.raw_execute(&self.info.name, "", 0, self.param_types(), params));
404362

405363
let (format, column_formats) = match try!(conn.read_message()) {
406364
CopyOutResponse { format, column_formats } => (format, column_formats),

0 commit comments

Comments
 (0)