Yeah, I wanted to apologize because my heart wants to contribute to
the project (really), but I'm working overtime like mad swamped
because our product is live in use now and I've got a backload of
tickets to solve!  I also feel my level of understanding currently is
more hacking than contributing.  I hope to be of more help to the
project in the future.


Is "simpler than you had in mind" a good thing or am I over
simplifying and it won't work for bunch of cases?

I note that the simple case is working, but something like this fails:

DBSession.query(Order).for_update_of(Order).limit(10).all()

since I really need to have the for update inside in this case... any
advise or is this what you meant by "There's not a great way to
intercept the middle of the SELECT compilation with a new kind of
clause in this case."?


On Feb 3, 9:07 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
> oh OK this is a little simpler than what I had in mind, you just have to add 
> the mixin expression.Executable to your ForUpdateOf class.
>
> On Feb 3, 2011, at 9:05 PM, Kent wrote:
>
> > Here is a crude outline (need to properly escape table name, etc.), of
> > what I think might work, and it seems to render properly, but crashes
> > with:
>
> >  File "/home/rarch/tg2env/lib/python2.6/site-packages/
> > SQLAlchemy-0.6.4.2kbdev-py2.6-linux-x86_64.egg/sqlalchemy/engine/
> > default.py", line 353, in __init__
> >    raise exc.ArgumentError("Not an executable clause: %s" % compiled)
> > ArgumentError: Not an executable clause:
> > ...
>
> > class MyQuery(Query):
> >    _for_update_of = None
>
> >    @_generative()
> >    def for_update_of(self, arg):
> >        """Keep track that we want to for update of this"""
> >        self._for_update_of = class_mapper(arg).mapped_table.name
>
> >    def _compile_context(self, labels=True):
> >        context = super(MyQuery, self)._compile_context(labels)
> >        if self._for_update_of:
> >            context.statement = ForUpdateOf(context.statement,
> > self._for_update_of)
> >        return context
>
> > class ForUpdateOf(ClauseElement):
> >    def __init__(self, statement, for_update_of):
> >        self.statement = statement
> >        self.for_update_of = for_update_of
>
> > @compiles(ForUpdateOf)
> > def compile_forupdateof(element, compiler, **kw):
> >    return "%s FOR UPDATE OF %s" %
> > (compiler.process(element.statement), element.for_update_of)
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "sqlalchemy" group.
> > To post to this group, send email to sqlalchemy@googlegroups.com.
> > To unsubscribe from this group, send email to 
> > sqlalchemy+unsubscr...@googlegroups.com.
> > For more options, visit this group 
> > athttp://groups.google.com/group/sqlalchemy?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to