On Aug 22, 2012, at 4:37 PM, ThiefMaster wrote: > I think this is a bug; it should either result in an error or work as > expected - in python this **is** valid after all: > > >>> str(X.query.filter(2 < X.id < 5)) > 'SELECT x.id AS x_id \nFROM x \nWHERE x.id > :id_1' > > This shouldn't generate the following SQL > > >>> str(X.query.filter(2 < X.id)) > 'SELECT x.id AS x_id \nFROM x \nWHERE x.id > :id_1' > > but rather this SQL: > > >>> str(X.query.filter(2 < X.id, X.id < 5)) > 'SELECT x.id AS x_id \nFROM x \nWHERE x.id > :id_1 AND x.id < :id_2'
Here, I will illustrate the "bug" here is a fact of Python itself. If I'm missing how to make this work, apply it to the following script and I'll gladly commit : class MyComparator(object): def __lt__(self, other): return Binary(self, other, "<") class Column(MyComparator): def __init__(self, name): self.name = name def __str__(self): return self.name class Binary(MyComparator): def __init__(self, left, right, operator): self.left = left self.right = right self.operator = operator def __str__(self): return "%s %s %s" % (self.left, self.operator, self.right) c1, c2, c3 = Column('c1'), Column('c2'), Column('c3') # prints "c1 < c2" print c1 < c2 # prints "c1 < c2 < c3" print (c1 < c2) < c3 # prints "c2 < c3". the "c1 < c2" and "c2 < c3" are # evaluated by __lt__() separately; # the result of "c1 < c2" is lost and the expression # only returns "c2 < c3" individually. print c1 < c2 < c3 -- 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.