restored comparison of 1-element clause list -> ClauseElement, which was broken in [changeset:2620]

This commit is contained in:
Mike Bayer
2007-05-20 18:16:10 +00:00
parent 555ab611f1
commit 8405d1267c
2 changed files with 19 additions and 1 deletions
+3 -1
View File
@@ -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
+16
View File
@@ -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. """