From: Mike Bayer Date: Thu, 3 May 2007 22:31:52 +0000 (+0000) Subject: - _Label class overrides compare_self to return its ultimate object. X-Git-Tag: rel_0_3_8~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=752ef2802c57d32fe832b76b9503f42f0300da05;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - _Label class overrides compare_self to return its ultimate object. meaning, if you say someexpr.label('foo') == 5, it produces the correct "someexpr == 5". --- diff --git a/CHANGES b/CHANGES index c507c202ec..d1c0df4542 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +- sql + - _Label class overrides compare_self to return its ultimate object. + meaning, if you say someexpr.label('foo') == 5, it produces + the correct "someexpr == 5". - mysql - support for column-level CHARACTER SET and COLLATE declarations, as well as ASCII, UNICODE, NATIONAL and BINARY shorthand. diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index fe987cc11e..0dcba3698d 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -2380,6 +2380,9 @@ class _Label(ColumnElement): key = property(lambda s: s.name) _label = property(lambda s: s.name) orig_set = property(lambda s:s.obj.orig_set) + + def _compare_self(self): + return self.obj def get_children(self, **kwargs): return self.obj, diff --git a/test/sql/select.py b/test/sql/select.py index c10f12c2c6..ccd5c33a8a 100644 --- a/test/sql/select.py +++ b/test/sql/select.py @@ -218,7 +218,11 @@ sq.myothertable_othername AS sq_myothertable_othername FROM (" + sqstring + ") A order_by = ['dist', places.c.nm] ) self.runtest(q, "SELECT places.id, places.nm, main_zip.zipcode, latlondist((SELECT zips.latitude FROM zips WHERE zips.zipcode = main_zip.zipcode), (SELECT zips.longitude FROM zips WHERE zips.zipcode = main_zip.zipcode)) AS dist FROM places, zips AS main_zip ORDER BY dist, places.nm") - + + def testlabelcomparison(self): + x = func.lala(table1.c.myid).label('foo') + self.runtest(select([x], x==5), "SELECT lala(mytable.myid) AS foo FROM mytable WHERE lala(mytable.myid) = :literal") + def testand(self): self.runtest( select(['*'], and_(table1.c.myid == 12, table1.c.name=='asdf', table2.c.othername == 'foo', "sysdate() = today()")),