diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-05-18 15:49:14 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-05-18 15:49:14 +0000 |
| commit | fa56f0acb412c89a02df198a75502f59915a08bb (patch) | |
| tree | afb9d9f0889c83ab04e8e465087499cc41be599f | |
| parent | 664687adb952c19d5bff731617e216f011e8e450 (diff) | |
| download | sqlalchemy-fa56f0acb412c89a02df198a75502f59915a08bb.tar.gz | |
- added test for threadlocal not supporting begin_nested()
- removed query.compile(); use explicit query.with_labels().statement instead
- moved statement annotation step upwards from query._compile_context() to outliers from_self()/statement. speeds zoomark.step_6_editing by 16%
| -rw-r--r-- | lib/sqlalchemy/orm/query.py | 15 | ||||
| -rw-r--r-- | test/engine/transaction.py | 4 | ||||
| -rw-r--r-- | test/orm/manytomany.py | 5 | ||||
| -rw-r--r-- | test/orm/query.py | 2 |
4 files changed, 14 insertions, 12 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 5df13d8d9..084f9b81d 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -304,7 +304,7 @@ class Query(object): def statement(self): """return the full SELECT statement represented by this Query.""" - return self._compile_context(labels=self._with_labels).statement + return self._compile_context(labels=self._with_labels).statement._annotate({'_halt_adapt': True}) statement = property(statement) def subquery(self): @@ -537,7 +537,7 @@ class Query(object): those being selected. """ - fromclause = self.compile().correlate(None) + fromclause = self.with_labels().statement.correlate(None) self._statement = self._criterion = None self._order_by = self._group_by = self._distinct = False self._limit = self._offset = None @@ -1240,11 +1240,6 @@ class Query(object): self.session._autoflush() return self.session.scalar(s, params=self._params, mapper=self._mapper_zero()) - def compile(self): - """compiles and returns a SQL statement based on the criterion and conditions within this Query.""" - - return self._compile_context().statement - def _compile_context(self, labels=True): context = QueryContext(self) @@ -1324,9 +1319,9 @@ class Query(object): if context.eager_order_by: statement.append_order_by(*context.eager_order_by) - - context.statement = statement._annotate({'_halt_adapt': True}) - + + context.statement = statement + return context def __log_debug(self, msg): diff --git a/test/engine/transaction.py b/test/engine/transaction.py index 69d35748b..7d8d6bd61 100644 --- a/test/engine/transaction.py +++ b/test/engine/transaction.py @@ -453,6 +453,10 @@ class TLTransactionTest(TestBase): users.drop(tlengine) tlengine.dispose() + def test_nested_unsupported(self): + self.assertRaises(NotImplementedError, tlengine.contextual_connect().begin_nested) + self.assertRaises(NotImplementedError, tlengine.begin_nested) + def test_connection_close(self): """test that when connections are closed for real, transactions are rolled back and disposed.""" diff --git a/test/orm/manytomany.py b/test/orm/manytomany.py index 3fc62cd76..7a60f01c6 100644 --- a/test/orm/manytomany.py +++ b/test/orm/manytomany.py @@ -302,7 +302,10 @@ class M2MTest3(_base.MappedTest): 'a1s': relation(A, secondary=c2a1, lazy=False), 'a2s': relation(A, secondary=c2a2, lazy=False)}) - assert create_session().query(C).compile() + assert create_session().query(C).with_labels().statement + + # TODO: seems like just a test for an ancient exception throw. + # how about some data/inserts/queries/assertions for this one if __name__ == "__main__": diff --git a/test/orm/query.py b/test/orm/query.py index af165e47d..490f4ede3 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -326,7 +326,7 @@ class CompileTest(QueryTest): def test_deferred(self): session = create_session() - s = session.query(User).filter(and_(addresses.c.email_address == bindparam('emailad'), Address.user_id==User.id)).compile() + s = session.query(User).filter(and_(addresses.c.email_address == bindparam('emailad'), Address.user_id==User.id)).statement l = session.query(User).instances(s.execute(emailad = 'jack@bean.com')) assert [User(id=7)] == l |
