I'm assuming that Statement has its own lifetime parameter? And that's the 'a 
you're using here?

Try using a new lifetime.

pub fn execute_query<'b>(&'b mut self) -> ResultSelf<'b>;

-Kevin

On May 30, 2014, at 1:54 AM, Christophe Pedretti 
<christophe.pedre...@gmail.com> wrote:

> Hi All,
> 
> sorry for my late replay, i am UTC+2
> 
> > Won't wrapping the first `for` loop into curly braces help?
> no
> 
> > is this a database library you're writing yourself?
> yes
> 
> > My best guess here is that you've accidentally used the wrong lifetime on
> > your `execute_query()` method, tying the lifetime of the `self` reference to
> > a lifetime on the value itself
> 
> yes, but removing the lifetime reference on the self, compiling my library 
> gives
> 
> sql\connection.rs:57:2: 64:3 note: consider using an explicit lifetime 
> parameter as shown: fn execute_query(&'a mut self) -> ResultSet<'a>
> sql\connection.rs:57    pub fn execute_query(&mut self) -> ResultSet<'a> {
> sql\connection.rs:58            match self.pCon.dbType {
> sql\connection.rs:59            SQLITE3 => {
> sql\connection.rs:60            if self.exec { unsafe { 
> sqlite3_reset(self.pStmt) }; } else {self.exec=true; }
> sql\connection.rs:61            ResultSet { pStmt : self, error : false }
> sql\connection.rs:62            }
>                      ...
> sql\connection.rs:61:23: 61:27 error: cannot infer an appropriate lifetime 
> for automatic coercion due to conflicting requirements
> sql\connection.rs:61            ResultSet { pStmt : self, error : false }
>                                                     ^~~~
> 
> execute_query can be used only for the loop body, and if there is no variable 
> referencing it there is no reason for the execute-query to live outside the 
> loop (as is my example)
> 
> or, with code like this :
> 
> let query_result = st.execute_query()
> for i in query_result {
> ...
> 
> and in this case, the query_result lives outside the loop
> 
> the compiler can not distinguish these two usages ?
> 
> Thanks
> 
> 2014-05-30 9:17 GMT+02:00 Kevin Ballard <ke...@sb.org>:
> On May 30, 2014, at 12:12 AM, Vladimir Matveev <dpx.infin...@gmail.com> wrote:
> 
> > 2014-05-30 5:37 GMT+04:00 Kevin Ballard <ke...@sb.org>:
> >>
> >> It shouldn't.
> >>
> >> The for-loop desugaring looks like
> >>
> >> match &mut st.execute_query() {
> >>    __i => loop {
> >>        match __i.next() {
> >>            None => break,
> >>            Some(mut __value) => {
> >>                let i = __value;
> >>                {
> >>                    // for loop body goes here
> >>                }
> >>            }
> >>        }
> >>    }
> >> }
> >>
> >> It's done with a match statement like this specifically to make the &mut 
> >> binding of the iterator end after the for loop.
> >
> > Great, didn't know it. Last time I asked (on StackOverflow, I think;
> > that was some time ago though) there were no `match`. Then from that
> > code alone it does look like a bug to me. Note that it refers to
> > `st.set_string("%e%")` and `for` loop ten lines above, that is, the
> > first one. If mutable borrow of the iterator aren't escaping the loop,
> > then this error should not appear, right?
> 
> The errors you printed are slightly malformed, and you only listed some of 
> your code. Is this a database library you're writing yourself? My best guess 
> here is that you've accidentally used the wrong lifetime on your 
> `execute_query()` method, tying the lifetime of the `self` reference to a 
> lifetime on the value itself. Something like this:
> 
> impl<'a> Statement<'a> {
>     pub fn execute_query(&'a mut self) { ... }
> }
> 
> By using 'a on &'a mut self here, you've explicitly tied the reference to the 
> lifetime of the value. This causes the mutable reference to live much longer 
> than you expected it to, which means it's still alive when you try to 
> subsequently borrow it on your call to .set_string().
> 
> -Kevin
> 
> _______________________________________________
> Rust-dev mailing list
> Rust-dev@mozilla.org
> https://mail.mozilla.org/listinfo/rust-dev

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to