Does this mean that the desugaring of the for loop is incorrect ? Or at least, could be improved.
On Thu, May 29, 2014 at 8:22 PM, Vladimir Matveev <[email protected]> wrote: > Hi, Christophe, > > Won't wrapping the first `for` loop into curly braces help? I suspect > this happens because of `for` loop desugaring, which kind of "leaves" > the iterator created by `execute_query()` "in scope" (not really, but > only for borrow checker). > > 2014-05-29 19:38 GMT+04:00 Christophe Pedretti < > [email protected]>: > > Hello all, > > > > i know that this issue is already covered by issues #9113 #6393 and #9113 > > but actually i have no solution. My code is a library for accessing > > databases. In my example, the database represented by db containes a > table t > > with columns i:integer, f:float, t:text, b:blob. > > > > Everything works fine except the following code used to test my library > > > > match db.prepare_statement("SELECT i,f,t,b FROM t where t like ?;") { > > > > Ok(mut st) => { > > > > st.set_string(1, "%o%"); > > > > for i in st.execute_query() { > > > > match i { > > > > Ok(s) => println!("{}:{}:{}:{}", s.get_long(0), s.get_double(1), > > s.get_string(2), s.get_blob(3) ), > > > > Err(e) => match e.detail { > > > > Some(s) => println!("{}", s), > > > > None => () > > > > } > > > > } > > > > } > > > > st.set_string(1, "%e%"); <- PROBLEM HERE > > for i in st.execute_query() { <- PROBLEM HERE > > > > ... > > } > > > > }, > > Err(e) => match e.detail { > > > > None => (), > > > > Some(s) => println!("{}", s) > > > > } > > > > } > > > > The compilation error says > > > > test-db.rs:71:8: 71:10 error: cannot borrow `st` as mutable more than > once > > at a time > > test-db.rs:71 > > st.set_string(1, "%e%"); > > ^~ > > test-db.rs:61:17: 61:19 note: previous borrow of `st` occurs here; the > > mutable borrow prevents subse > > quent moves, borrows, or modification of `st` until the borrow ends > > test-db.rs:61 for i in > > st.execute_query() { > > > ^~ > > test-db.rs:88:7: 88:7 note: previous borrow ends here > > test-db.rs:58 match > > db.prepare_statement("SELECT i,f,t,b FROM t wh > > ere t like ?;") { > > ... > > test-db.rs:88 } > > ^ > > error: aborting due to previous error > > > > do we have a solution for #6393 ? > > > > Thanks > > > > -- > > Christophe > > http://chris-pe.github.io/Rustic/ > > > > > > _______________________________________________ > > Rust-dev mailing list > > [email protected] > > https://mail.mozilla.org/listinfo/rust-dev > > > _______________________________________________ > Rust-dev mailing list > [email protected] > https://mail.mozilla.org/listinfo/rust-dev >
_______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
