From: Mike Bayer Date: Sun, 20 May 2007 18:16:10 +0000 (+0000) Subject: restored comparison of 1-element clause list -> ClauseElement, which was broken in... X-Git-Tag: rel_0_3_8~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8405d1267c1e271df20d960367db4683ec02decf;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git restored comparison of 1-element clause list -> ClauseElement, which was broken in [changeset:2620] --- diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 35cd30b304..9a93474dc7 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -1964,7 +1964,9 @@ class ClauseList(ClauseElement): including a comparison of all the clause items. """ - if isinstance(other, ClauseList) and len(self.clauses) == len(other.clauses): + if not isinstance(other, ClauseList) and len(self.clauses) == 1: + return self.clauses[0].compare(other) + elif isinstance(other, ClauseList) and len(self.clauses) == len(other.clauses): for i in range(0, len(self.clauses)): if not self.clauses[i].compare(other.clauses[i]): return False diff --git a/test/orm/mapper.py b/test/orm/mapper.py index 5c4efb6a9c..889a7c9259 100644 --- a/test/orm/mapper.py +++ b/test/orm/mapper.py @@ -1087,6 +1087,22 @@ class LazyTest(MapperSuperTest): self.echo(repr(l[0].user)) self.assert_(l[0].user is not None) + def testuseget(self): + """test that a simple many-to-one lazyload optimizes to use query.get(). + + this is done currently by comparing the 'get' SQL clause of the query + to the 'lazy' SQL clause of the lazy loader, so it relies heavily on + ClauseElement.compare()""" + + m = mapper(Address, addresses, properties = dict( + user = relation(mapper(User, users), lazy = True) + )) + sess = create_session() + a1 = sess.query(Address).get_by(email_address = "ed@wood.com") + u1 = sess.query(User).get(8) + def go(): + assert a1.user is u1 + self.assert_sql_count(db, go, 0) def testdouble(self): """tests lazy loading with two relations simulatneously, from the same table, using aliases. """