@@ -2066,120 +2066,6 @@ impl<'trans, 'stmt> Iterator for LazyRows<'trans, 'stmt> {
20662066 }
20672067}
20682068
2069- /*
2070- pub fn execute<I, J>(&self, rows: I) -> Result<u64>
2071- where I: Iterator<Item=J>, J: StreamIterator {
2072- let mut conn = self.conn.conn.borrow_mut();
2073-
2074- debug!("executing COPY IN statement {}", self.name);
2075- try!(conn.write_messages(&[
2076- Bind {
2077- portal: "",
2078- statement: &self.name,
2079- formats: &[],
2080- values: &[],
2081- result_formats: &[]
2082- },
2083- Execute {
2084- portal: "",
2085- max_rows: 0,
2086- },
2087- Sync]));
2088-
2089- match try!(conn.read_message()) {
2090- BindComplete => {},
2091- ErrorResponse { fields } => {
2092- try!(conn.wait_for_ready());
2093- return DbError::new(fields);
2094- }
2095- _ => {
2096- conn.desynchronized = true;
2097- return Err(Error::IoError(bad_response()));
2098- }
2099- }
2100-
2101- match try!(conn.read_message()) {
2102- CopyInResponse { .. } => {}
2103- _ => {
2104- conn.desynchronized = true;
2105- return Err(Error::IoError(bad_response()));
2106- }
2107- }
2108-
2109- let mut buf = vec![];
2110- let _ = buf.write_all(b"PGCOPY\n\xff\r\n\x00");
2111- let _ = buf.write_i32::<BigEndian>(0);
2112- let _ = buf.write_i32::<BigEndian>(0);
2113-
2114- 'l: for mut row in rows {
2115- let _ = buf.write_i16::<BigEndian>(self.column_types.len() as i16);
2116-
2117- let mut types = self.column_types.iter();
2118- loop {
2119- match (row.next(), types.next()) {
2120- (Some(val), Some(ty)) => {
2121- let mut inner_buf = vec![];
2122- match val.to_sql_checked(ty, &mut inner_buf, &SessionInfo::new(&*conn)) {
2123- Ok(IsNull::Yes) => {
2124- let _ = buf.write_i32::<BigEndian>(-1);
2125- }
2126- Ok(IsNull::No) => {
2127- let _ = buf.write_i32::<BigEndian>(inner_buf.len() as i32);
2128- let _ = buf.write_all(&inner_buf);
2129- }
2130- Err(err) => {
2131- // FIXME this is not the right way to handle this
2132- try_desync!(conn, conn.stream.write_message(
2133- &CopyFail {
2134- message: &err.to_string(),
2135- }));
2136- break 'l;
2137- }
2138- }
2139- }
2140- (Some(_), None) | (None, Some(_)) => {
2141- try_desync!(conn, conn.stream.write_message(
2142- &CopyFail {
2143- message: "Invalid column count",
2144- }));
2145- break 'l;
2146- }
2147- (None, None) => break
2148- }
2149- }
2150-
2151- try_desync!(conn, conn.stream.write_message(
2152- &CopyData {
2153- data: &buf
2154- }));
2155- buf.clear();
2156- }
2157-
2158- let _ = buf.write_i16::<BigEndian>(-1);
2159- try!(conn.write_messages(&[
2160- CopyData {
2161- data: &buf,
2162- },
2163- CopyDone,
2164- Sync]));
2165-
2166- let num = match try!(conn.read_message()) {
2167- CommandComplete { tag } => util::parse_update_count(tag),
2168- ErrorResponse { fields } => {
2169- try!(conn.wait_for_ready());
2170- return DbError::new(fields);
2171- }
2172- _ => {
2173- conn.desynchronized = true;
2174- return Err(Error::IoError(bad_response()));
2175- }
2176- };
2177-
2178- try!(conn.wait_for_ready());
2179- Ok(num)
2180- }
2181- */
2182-
21832069/// A trait allowing abstraction over connections and transactions
21842070pub trait GenericConnection {
21852071 /// Like `Connection::prepare`.
0 commit comments