Skip to content

Commit 80b7fa8

Browse files
committed
Clean up copy preparation a bit
1 parent 1908821 commit 80b7fa8

1 file changed

Lines changed: 18 additions & 21 deletions

File tree

src/lib.rs

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -336,12 +336,7 @@ impl InnerConnection {
336336
let params = try!(params.into_connect_params());
337337
let stream = try!(io::initialize_stream(&params, ssl));
338338

339-
let ConnectParams {
340-
user,
341-
database,
342-
mut options,
343-
..
344-
} = params;
339+
let ConnectParams { user, database, mut options, .. } = params;
345340

346341
let user = try!(user.ok_or(ConnectError::MissingUser));
347342

@@ -364,9 +359,8 @@ impl InnerConnection {
364359
options.push(("TimeZone".into_string(), "GMT".into_string()));
365360
// We have to clone here since we need the user again for auth
366361
options.push(("user".into_string(), user.user.clone()));
367-
match database {
368-
Some(database) => options.push(("database".into_string(), database)),
369-
None => {}
362+
if let Some(database) = database {
363+
options.push(("database".into_string(), database));
370364
}
371365

372366
try!(conn.write_messages(&[StartupMessage {
@@ -473,11 +467,8 @@ impl InnerConnection {
473467
mem::replace(&mut self.notice_handler, handler)
474468
}
475469

476-
fn raw_prepare(&mut self, query: &str)
477-
-> Result<(String, Vec<Type>, Vec<ResultDescription>)> {
478-
let stmt_name = format!("s{}", self.next_stmt_id);
479-
self.next_stmt_id += 1;
480-
470+
fn raw_prepare(&mut self, stmt_name: &str, query: &str)
471+
-> Result<(Vec<Type>, Vec<ResultDescription>)> {
481472
try!(self.write_messages(&[
482473
Parse {
483474
name: stmt_name[],
@@ -525,11 +516,18 @@ impl InnerConnection {
525516
try!(self.set_type_names(param_types.iter_mut()));
526517
try!(self.set_type_names(result_desc.iter_mut().map(|d| &mut d.ty)));
527518

528-
Ok((stmt_name, param_types, result_desc))
519+
Ok((param_types, result_desc))
520+
}
521+
522+
fn make_stmt_name(&mut self) -> String {
523+
let stmt_name = format!("s{}", self.next_stmt_id);
524+
self.next_stmt_id += 1;
525+
stmt_name
529526
}
530527

531528
fn prepare<'a>(&mut self, query: &str, conn: &'a Connection) -> Result<Statement<'a>> {
532-
let (stmt_name, param_types, result_desc) = try!(self.raw_prepare(query));
529+
let stmt_name = self.make_stmt_name();
530+
let (param_types, result_desc) = try!(self.raw_prepare(&*stmt_name, query));
533531
Ok(Statement {
534532
conn: conn,
535533
name: stmt_name,
@@ -547,17 +545,16 @@ impl InnerConnection {
547545
let _ = util::comma_join(&mut query, rows.iter().map(|&e| e));
548546
let _ = write!(&mut query, " FROM {}", table);
549547
let query = String::from_utf8(query).unwrap();
550-
let (stmt_name, _, result_desc) = try!(self.raw_prepare(query[]));
551-
552-
let column_types = result_desc.iter().map(|desc| desc.ty.clone()).collect();
553-
try!(self.close_statement(stmt_name[], b'S'));
548+
let (_, result_desc) = try!(self.raw_prepare("", query[]));
549+
let column_types = result_desc.into_iter().map(|desc| desc.ty).collect();
554550

555551
let mut query = vec![];
556552
let _ = write!(&mut query, "COPY {} (", table);
557553
let _ = util::comma_join(&mut query, rows.iter().map(|&e| e));
558554
let _ = write!(&mut query, ") FROM STDIN WITH (FORMAT binary)");
559555
let query = String::from_utf8(query).unwrap();
560-
let (stmt_name, _, _) = try!(self.raw_prepare(query[]));
556+
let stmt_name = self.make_stmt_name();
557+
try!(self.raw_prepare(&*stmt_name, query[]));
561558

562559
Ok(CopyInStatement {
563560
conn: conn,

0 commit comments

Comments
 (0)