Op donderdag 19 oktober 2017 03:10:21 UTC+2 schreef Mike Bayer:
>
> On Wed, Oct 18, 2017 at 7:38 AM, Gijs Molenaar <gijsmo...@gmail.com 
> <javascript:>> wrote: 
> > hi! 
> > 
> > 
> > Not sure if this a bug or something I should in my SQLAlchemy dialect, 
> but 
> > currently 
> > 
> > 
> > expr = (table.c.x + table.c.y).label('lx') 
> > select([func.count(table.c.id), expr]).group_by(expr).order_by(expr) 
> > 
> > compiles to: 
> > 
> > SELECT count(some_table.id) AS count_1, some_table.x + some_table.y AS 
> lx 
> > \nFROM some_table GROUP BY some_table.x + some_table.y ORDER BY lx; 
> > 
> > 
> > which works fine for for example sqlite, but MonetDB requires the use of 
> the 
> > lx label in the GROUP BY, which I think makes sense? Should this be 
> > addressed on the SQLalchemy side or on the MonetDB dialect side? 
>
> so this was overhauled in 
>
> http://docs.sqlalchemy.org/en/latest/changelog/migration_09.html#label-constructs-can-now-render-as-their-name-alone-in-an-order-by
>  
> where we changed ORDER BY to use the label name when the expression is 
> passed. 
>
> so the immediate answer would be to not actually order by the label(). 
>

I think i didn't formulate my e-mail correctly. The ORDER BY is not the 
problem, it is the GROUP BY that requires a label. If the GROUP BY doesn't 
use a label (just like ORDER BY), MonetDB doesn't want to eat the query. 


> At the compiler level, this behavior can be disabled across the board like 
> this: 
>
> diff --git a/lib/sqlalchemy/dialects/sqlite/base.py 
> b/lib/sqlalchemy/dialects/sqlite/base.py 
> index d8ce7f394..389d9bb02 100644 
> --- a/lib/sqlalchemy/dialects/sqlite/base.py 
> +++ b/lib/sqlalchemy/dialects/sqlite/base.py 
> @@ -800,6 +800,10 @@ class SQLiteCompiler(compiler.SQLCompiler): 
>              'week': '%W', 
>          }) 
>
> +    def visit_label(self, elem, **kw): 
> +        kw.pop('render_label_as_label', None) 
> +        return super(SQLiteCompiler, self).visit_label(elem, **kw) 
> + 
>      def visit_now_func(self, fn, **kw): 
>          return "CURRENT_TIMESTAMP" 
>
>
>
> however no dialect does that right now, you'd need to watch this 
> behavior closely across SQLAlchemy releases to make sure it doesn't 
> break, unless we make this behavior official. 
>
>
>
>
> > 
> > 
> > related issue: 
> > 
> > 
> > https://github.com/gijzelaerr/sqlalchemy-monetdb/issues/21 
> > 
> > greetings, 
> > 
> >  - Gijs 
> > 
> > -- 
> > SQLAlchemy - 
> > The Python SQL Toolkit and Object Relational Mapper 
> > 
> > http://www.sqlalchemy.org/ 
> > 
> > To post example code, please provide an MCVE: Minimal, Complete, and 
> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
> > description. 
> > --- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "sqlalchemy" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to sqlalchemy+...@googlegroups.com <javascript:>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:>. 
> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to