=======
CHANGES
=======
+0.6beta2
+- sql
+ - Added math negation operator support, -x.
+
0.6beta1
========
- Major Release
# end Py2K
operators.mod : ' % ',
operators.truediv : ' / ',
+ operators.neg : '-',
operators.lt : ' < ',
operators.le : ' <= ',
operators.ne : ' != ',
def __ge__(self, other):
return self.operate(operators.ge, other)
+ def __neg__(self):
+ return self.operate(operators.neg)
+
def concat(self, other):
return self.operate(operators.concat_op, other)
return self.__compare(op, ClauseList(*args).self_group(against=op), negate=negate_op)
+ def __neg__(self):
+ return _UnaryExpression(self, operator=operators.neg)
+
def startswith(self, other, escape=None):
"""Produce the clause ``LIKE '<other>%'``"""
"""Defines operators used in SQL expressions."""
from operator import (
- and_, or_, inv, add, mul, sub, mod, truediv, lt, le, ne, gt, ge, eq
+ and_, or_, inv, add, mul, sub, mod, truediv, lt, le, ne, gt, ge, eq, neg
)
# Py2K
div: 7,
# end Py2K
mod: 7,
+ neg: 7,
add: 6,
sub: 6,
concat_op: 6,
def test_in_on_relation_not_supported(self):
assert_raises(NotImplementedError, Address.user.in_, [User(id=5)])
+
+ def test_neg(self):
+ self._test(-User.id, "-users.id")
+ self._test(User.id + -User.id, "users.id + -users.id")
def test_between(self):
self._test(User.id.between('a', 'b'),
self.assert_(compiled == fwd_sql or compiled == rev_sql,
"\n'" + compiled + "'\n does not match\n'" +
fwd_sql + "'\n or\n'" + rev_sql + "'")
-
+
+ for (py_op, op) in (
+ (operator.neg, '-'),
+ (operator.inv, 'NOT '),
+ ):
+ for expr, sql in (
+ (table1.c.myid, "mytable.myid"),
+ (literal("foo"), ":param_1"),
+ ):
+
+ compiled = str(py_op(expr))
+ sql = "%s%s" % (op, sql)
+ eq_(compiled, sql)
+
self.assert_compile(
table1.select((table1.c.myid != 12) & ~(table1.c.name=='john')),
"SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid != :myid_1 AND mytable.name != :name_1"