diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-05-24 09:41:51 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-05-24 11:06:21 -0400 |
commit | b46978dc63788152b170c64ae6ddd876a024c5df (patch) | |
tree | ae1219d81fbb106be94d2a108308f84a54aabbb4 /lib/sqlalchemy/engine/cursor.py | |
parent | f79953a874c201a31a8972b999d18547bf227f25 (diff) | |
download | sqlalchemy-b46978dc63788152b170c64ae6ddd876a024c5df.tar.gz |
inline one_or_none
Remove a bunch of unnecessary functions for this case.
add test coverage to ensure uniqueness logic works.
Change-Id: I2e6232c5667a3277b0ec8d7e47085a267f23d75f
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) |