From: Mike Bayer Date: Mon, 8 Jan 2007 19:09:02 +0000 (+0000) Subject: - the "op()" function is now treated as an "operation", rather than a "comparison". X-Git-Tag: rel_0_3_4~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a4c73cc8ae154c3a54678fec7f2e11798ee25b7f;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - the "op()" function is now treated as an "operation", rather than a "comparison". the difference is, an operation produces a BinaryExpression from which further operations can occur whereas comparison produces the more restrictive BooleanExpression --- diff --git a/CHANGES b/CHANGES index 81e5742080..a7f3d2e047 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,9 @@ - default "timezone" setting is now False. this corresponds to Python's datetime behavior as well as Postgres' timestamp/time types (which is the only timezone-sensitive dialect at the moment) [ticket:414] + - the "op()" function is now treated as an "operation", rather than a "comparison". + the difference is, an operation produces a BinaryExpression from which further operations + can occur whereas comparison produces the more restrictive BooleanExpression - firebird: - order of constraint creation puts primary key first before all other constraints; required for firebird, not a bad idea for others [ticket:408] diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 98191552ba..f6e23d583a 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -562,7 +562,7 @@ class _CompareMixin(object): def between(self, cleft, cright): return _BooleanExpression(self, and_(self._check_literal(cleft), self._check_literal(cright)), 'BETWEEN') def op(self, operator): - return lambda other: self._compare(operator, other) + return lambda other: self._operate(operator, other) # and here come the math operators: def __add__(self, other): return self._operate('+', other) diff --git a/test/sql/select.py b/test/sql/select.py index 5d91276e23..f117366529 100644 --- a/test/sql/select.py +++ b/test/sql/select.py @@ -220,6 +220,12 @@ sq.myothertable_othername AS sq_myothertable_othername FROM (" + sqstring + ") A literal("a") + literal("b") * literal("c"), ":literal + (:liter_1 * :liter_2)" ) + # test the op() function, also that its results are further usable in expressions + self.runtest( + table1.select(table1.c.myid.op('hoho')(12)==14), + "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE (mytable.myid hoho :mytable_myid) = :literal" + ) + def testunicodestartswith(self): string = u"hi \xf6 \xf5" self.runtest(