- Query.add_column() can accept FromClause objects
in the same manner as session.query() can.
+ - Comparison of many-to-one relation to NULL is
+ properly converted to IS NOT NULL based on not_().
+
- sql
- Added NotImplementedError for params() method
on Insert/Update/Delete constructs. These items
binary.left = binary.right
binary.right = expression.null()
binary.operator = operators.is_
+ binary.negate = operators.isnot
elif isinstance(binary.right, expression._BindParamClause) and binary.right.key in bind_to_col:
binary.right = expression.null()
binary.operator = operators.is_
-
+ binary.negate = operators.isnot
+
criterion = visitors.cloned_traverse(criterion, {}, {'binary':visit_binary})
if adapt_source:
criterion = adapt_source(criterion)
self.assert_(compiled == fwd_sql or compiled == rev_sql,
"\n'" + compiled + "'\n does not match\n'" +
fwd_sql + "'\n or\n'" + rev_sql + "'")
-
+
+ def test_negated_null(self):
+ self._test(User.id == None, "users.id IS NULL")
+ self._test(~(User.id==None), "users.id IS NOT NULL")
+ self._test(None == User.id, "users.id IS NULL")
+ self._test(~(None == User.id), "users.id IS NOT NULL")
+ self._test(Address.user == None, "addresses.user_id IS NULL")
+ self._test(~(Address.user==None), "addresses.user_id IS NOT NULL")
+ self._test(None == Address.user, "addresses.user_id IS NULL")
+ self._test(~(None == Address.user), "addresses.user_id IS NOT NULL")
+
def test_relation(self):
self._test(User.addresses.any(Address.id==17),
"EXISTS (SELECT 1 "