diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-09-27 00:17:07 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-09-27 00:17:07 +0000 |
commit | 9f7526df52a2420586eb051c46402b67b3f065c2 (patch) | |
tree | 4b5645fa71c8f96ed39ebb67ed60eb18220e3ad4 /lib/sqlalchemy/databases/postgres.py | |
parent | 5d93c8256b62a9bfb889cf3738a097d0344943db (diff) | |
download | sqlalchemy-9f7526df52a2420586eb051c46402b67b3f065c2.tar.gz |
- adjust server side logic to work with standalone default execution
- a little bit of inlining of same
Diffstat (limited to 'lib/sqlalchemy/databases/postgres.py')
-rw-r--r-- | lib/sqlalchemy/databases/postgres.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index 78f05954b..7518a016e 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -195,14 +195,18 @@ SELECT_RE = re.compile( class PGExecutionContext(default.DefaultExecutionContext): - def _is_server_side(self): - return self.dialect.server_side_cursors and self.is_select() and not re.search(r'FOR UPDATE(?: NOWAIT)?\s*$', self.statement, re.I) - def is_select(self): return SELECT_RE.match(self.statement) def create_cursor(self): - if self._is_server_side(): + # executing a default or Sequence standalone creates an execution context without a statement. + # so slightly hacky "if no statement assume we're server side" logic + self.__is_server_side = \ + self.dialect.server_side_cursors and (self.statement is None or \ + (SELECT_RE.match(self.statement) and not re.search(r'FOR UPDATE(?: NOWAIT)?\s*$', self.statement, re.I)) + ) + + if self.__is_server_side: # use server-side cursors: # http://lists.initd.org/pipermail/psycopg/2007-January/005251.html ident = "c" + hex(random.randint(0, 65535))[2:] @@ -211,7 +215,7 @@ class PGExecutionContext(default.DefaultExecutionContext): return self._connection.connection.cursor() def get_result_proxy(self): - if self._is_server_side(): + if self.__is_server_side: return base.BufferedRowResultProxy(self) else: return base.ResultProxy(self) |