postgresql allows for comparing result columns via `LEAST`
sqlite allows for comparing result columns via `min`
so the correct query is...
postgresql - ... order by least(col_a, col_b)
sqlite - ... order by min(col_a, col_b)
I tossed together a custom compiler that works for my use-case (hardcoded
to 2 columns and a date field), but it's pretty simple/bad
does anyone have a better idea how to approach this?
====
class min_date(expression.FunctionElement):
type = sqlalchemy.types.DateTime()
name = 'min_date'
@compiles(min_date)
def min_date__default(element, compiler, **kw):
# return compiler.visit_function(element)
"""
# just return the first date
"""
args = list(element.clauses)
return compiler.process(args[0])
@compiles(min_date, 'postgresql')
def min_date__postgresql(element, compiler, **kw):
"""
# select least(col_a, col_b);
"""
args = list(element.clauses)
return "LEAST(%s, %s)" % (
compiler.process(args[0]),
compiler.process(args[1]),
)
@compiles(min_date, 'sqlite')
def min_date__sqlite(element, compiler, **kw):
"""
# select min(col_a, col_b);
"""
args = list(element.clauses)
return "min(%s, %s)" % (
compiler.process(args[0]),
compiler.process(args[1]),
)
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.