`func.count(t.c.col.distinct())`
- Fixed detection of internal '$' characters in :bind$params [ticket:719]
- [ticket:768] dont assume join criterion consists only of column objects
-
+ - adjusted operator precedence of NOT to match '==' and others, so that
+ ~(x==y) produces NOT (x=y), which is compatible with MySQL (doesn't like
+ "NOT x=y") [ticket:764]
+
- orm
- added a check for joining from A->B using join(), along two
different m2m tables. this raises an error in 0.3 but is
def testoperators(self):
self.runtest(
table1.select((table1.c.myid != 12) & ~(table1.c.name=='john')),
- "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid != :mytable_myid AND NOT mytable.name = :mytable_name"
+ "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid != :mytable_myid AND NOT (mytable.name = :mytable_name)"
)
self.runtest(
self.runtest(select([table1], table1.c.myid.in_('a')),
"SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid = :mytable_myid")
+ self.runtest(select([table1], ~table1.c.myid.in_('a')),
+ "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE NOT (mytable.myid = :mytable_myid)")
+
self.runtest(select([table1], table1.c.myid.in_('a', 'b')),
"SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid, :mytable_myid_1)")
self.runtest(table.select((5 + table.c.field).in_(5,6)),
"SELECT op.field FROM op WHERE :op_field + op.field IN (:literal, :literal_1)")
self.runtest(table.select(not_(table.c.field == 5)),
- "SELECT op.field FROM op WHERE NOT op.field = :op_field")
+ "SELECT op.field FROM op WHERE NOT (op.field = :op_field)")
self.runtest(table.select(not_(table.c.field) == 5),
"SELECT op.field FROM op WHERE (NOT op.field) = :literal")
self.runtest(table.select((table.c.field == table.c.field).between(False, True)),