summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/databases/postgres.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-09-27 00:17:07 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-09-27 00:17:07 +0000
commit9f7526df52a2420586eb051c46402b67b3f065c2 (patch)
tree4b5645fa71c8f96ed39ebb67ed60eb18220e3ad4 /lib/sqlalchemy/databases/postgres.py
parent5d93c8256b62a9bfb889cf3738a097d0344943db (diff)
downloadsqlalchemy-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.py14
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)