diff options
author | mike bayer <mike_mp@zzzcomputing.com> | 2020-05-24 15:51:24 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2020-05-24 15:51:24 +0000 |
commit | 1502b5b3e4e4b93021eb927a6623f288ef006ba6 (patch) | |
tree | 48980e3f698b8113474b9da2f1c831b60e6d89cd /lib/sqlalchemy/engine/cursor.py | |
parent | 1d12bc1381c7ff6748eb63754405019f0ded29e4 (diff) | |
parent | b46978dc63788152b170c64ae6ddd876a024c5df (diff) | |
download | sqlalchemy-1502b5b3e4e4b93021eb927a6623f288ef006ba6.tar.gz |
Merge "inline one_or_none"
Diffstat (limited to 'lib/sqlalchemy/engine/cursor.py')
-rw-r--r-- | lib/sqlalchemy/engine/cursor.py | 45 |
1 files changed, 20 insertions, 25 deletions
diff --git a/lib/sqlalchemy/engine/cursor.py b/lib/sqlalchemy/engine/cursor.py index a393f8da7..8d1a1bb57 100644 --- a/lib/sqlalchemy/engine/cursor.py +++ b/lib/sqlalchemy/engine/cursor.py @@ -23,7 +23,6 @@ from ..sql import expression from ..sql import sqltypes from ..sql import util as sql_util from ..sql.base import _generative -from ..sql.base import HasMemoized from ..sql.compiler import RM_NAME from ..sql.compiler import RM_OBJECTS from ..sql.compiler import RM_RENDERED_NAME @@ -793,7 +792,7 @@ class ResultFetchStrategy(object): def yield_per(self, result, num): return - def fetchone(self, result): + def fetchone(self, result, hard_close=False): raise NotImplementedError() def fetchmany(self, result, size=None): @@ -825,7 +824,7 @@ class NoCursorFetchStrategy(ResultFetchStrategy): def hard_close(self, result): pass - def fetchone(self, result): + def fetchone(self, result, hard_close=False): return self._non_result(result, None) def fetchmany(self, result, size=None): @@ -927,11 +926,11 @@ class CursorFetchStrategy(ResultFetchStrategy): growth_factor=0, ) - def fetchone(self, result): + def fetchone(self, result, hard_close=False): try: row = self.dbapi_cursor.fetchone() if row is None: - result._soft_close() + result._soft_close(hard=hard_close) return row except BaseException as e: self.handle_exception(result, e) @@ -1065,12 +1064,12 @@ class BufferedRowCursorFetchStrategy(CursorFetchStrategy): self._rowbuffer.clear() super(BufferedRowCursorFetchStrategy, self).hard_close(result) - def fetchone(self, result): + def fetchone(self, result, hard_close=False): if not self._rowbuffer: self._buffer_rows(result) if not self._rowbuffer: try: - result._soft_close() + result._soft_close(hard=hard_close) except BaseException as e: self.handle_exception(result, e) return None @@ -1137,11 +1136,11 @@ class FullyBufferedCursorFetchStrategy(CursorFetchStrategy): self._rowbuffer.clear() super(FullyBufferedCursorFetchStrategy, self).hard_close(result) - def fetchone(self, result): + def fetchone(self, result, hard_close=False): if self._rowbuffer: return self._rowbuffer.popleft() else: - result._soft_close() + result._soft_close(hard=hard_close) return None def fetchmany(self, result, size=None): @@ -1222,10 +1221,19 @@ class BaseCursorResult(object): self.dialect = context.dialect self.cursor = context.cursor self.connection = context.root_connection - self._echo = ( + self._echo = echo = ( self.connection._echo and context.engine._should_log_debug() ) + if echo: + log = self.context.engine.logger.debug + + def log_row(row): + log("Row %r", sql_util._repr_row(row)) + return row + + self._row_logging_fn = log_row + # this is a hook used by dialects to change the strategy, # so for the moment we have to keep calling this every time # :( @@ -1616,19 +1624,6 @@ class CursorResult(BaseCursorResult, Result): _cursor_metadata = CursorResultMetaData _cursor_strategy_cls = CursorFetchStrategy - @HasMemoized.memoized_attribute - def _row_logging_fn(self): - if self._echo: - log = self.context.engine.logger.debug - - def log_row(row): - log("Row %r", sql_util._repr_row(row)) - return row - - return log_row - else: - return None - def _fetchiter_impl(self): fetchone = self.cursor_strategy.fetchone @@ -1638,8 +1633,8 @@ class CursorResult(BaseCursorResult, Result): break yield row - def _fetchone_impl(self): - return self.cursor_strategy.fetchone(self) + def _fetchone_impl(self, hard_close=False): + return self.cursor_strategy.fetchone(self, hard_close) def _fetchall_impl(self): return self.cursor_strategy.fetchall(self) |