summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/sql.py4
-rw-r--r--test/orm/mapper.py16
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py
index 35cd30b30..9a93474dc 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 5c4efb6a9..889a7c925 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. """