[Mulgara-dev] Requesting feedback regarding transaction semantics.
Life is hard, and then you die
ronald at innovation.ch
Sat Oct 7 00:53:14 UTC 2006
On Fri, Oct 06, 2006 at 11:52:27AM -0500, Paul Gearon wrote:
> Option 2 for sure. It is more efficient, and more intuitive.
> Besides, asking programmers to remember to close EVERY Answer when
> they're done with it is just asking for something to be forgotten.
>
> As for the "con" of failing on reading a sub Answer after the outer
> Answer is closed: that is completely intuitive to me. Besides, it
> immediately tells the programmer that they got something wrong.
> Sounds like a pro to me.
I concur. Option 2 sounds safer and less tedious, and I don't think
the idea of having children outliving the parent is useful.
Cheers,
Ronald
> On Oct 6, 2006, at 8:44 AM, Andrae Muys wrote:
>
> >I just finished putting a whole lot more semantics and design
> >discussion on http://mulgara.org/confluence/display/dev/Transaction
> >+Architecture. In the course of which it occurred to me that I had
> >an unanswered question regarding transaction semantics.
> >
> >The issue is to do with the extent of Answer validity in the
> >presence of subqueries.
> >
> >In the case where you have a query containing a subquery you
> >receive a single answer
> >
> >OuterAnswer
> >
> >at least one column of which contains a subquery. Therefore a call
> >to getObject on that column will return another Answer object
> >
> >InnerAnswer1
> >
> >A subsequent call to next() followed by a call to getObject will
> >return a third Answer object
> >
> >InnerAnswer2
> >
> >And so on.
> >
> >These Answer's *will* share the same transaction, and will remain
> >valid *precisely* as long as the transaction remains open.
> >
> >The question is when to close the transaction.
> >
> >Option 1.
> > - When the last Answer is closed.
> >Pros: Simple semantics, easy to understand, easy to document. A
> >call to an Answer can only fail if it has been explicitly closed.
> >Cons: *All* answer objects must be explicitly closed before any
> >resources attached to the OuterAnswer are released. This could be
> >as high as N*M (where N is the nesting level of subqueries in the
> >query, and M is the number of calls to next())
> >
> >Option 2.
> > - When the outer Answer is closed.
> >Pros: Only *one* call to definitively release all resources
> >attached to the query.
> >Cons: Any subsequent calls to InnerAnswer's will fail with an
> >exception.
> >
> >Option 3.
> > - Close all InnerAnswer's upon a call to next by an enclosing Answer.
> >Pros: At most N calls required to release resources (where N is the
> >number of levels of subquery in the query).
> >Cons: Awkward to implement. Not that much better than Option 1.
> >
> >Personally I don't like Option 3. However I'm undecided about 1
> >vs. 2. At this stage I'm leaning towards option 2 - it's more
> >resilient in the face of client bugs. Still it's a pure API design
> >decision and option 1 is strictly more flexible.
> >
> >I therefore would like people to consider their applications and
> >comment.
> >
> >Andrae
> >
> >--
> >Andrae Muys
> >andrae at netymon.com
> >Principal Mulgara Consultant
> >Netymon Pty Ltd
> >
> >
> >_______________________________________________
> >Mulgara-dev mailing list
> >Mulgara-dev at mulgara.org
> >http://mulgara.org/mailman/listinfo/mulgara-dev
> _______________________________________________
> Mulgara-dev mailing list
> Mulgara-dev at mulgara.org
> http://mulgara.org/mailman/listinfo/mulgara-dev
More information about the Mulgara-dev
mailing list