summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine/default.py
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2020-05-01 23:19:32 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2020-05-01 23:19:32 +0000
commitea87d39d7a9926dc1c6bf3d70e8faf8575769cb0 (patch)
treeee11512a1dd3bcb48aa2f1234881bd3e04f51ed1 /lib/sqlalchemy/engine/default.py
parent31898e90618e946aca3eef2914b03e8534c464aa (diff)
parentaded39f68c29e44a50c85be1ddb370d3d1affe9d (diff)
downloadsqlalchemy-ea87d39d7a9926dc1c6bf3d70e8faf8575769cb0.tar.gz
Merge "Propose Result as immediate replacement for ResultProxy"
Diffstat (limited to 'lib/sqlalchemy/engine/default.py')
-rw-r--r--lib/sqlalchemy/engine/default.py36
1 files changed, 25 insertions, 11 deletions
diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py
index 865a1160b..20f731116 100644
--- a/lib/sqlalchemy/engine/default.py
+++ b/lib/sqlalchemy/engine/default.py
@@ -18,8 +18,8 @@ import random
import re
import weakref
+from . import cursor as _cursor
from . import interfaces
-from . import result as _result
from .. import event
from .. import exc
from .. import pool
@@ -1217,9 +1217,9 @@ class DefaultExecutionContext(interfaces.ExecutionContext):
def get_result_cursor_strategy(self, result):
if self._is_server_side:
- strat_cls = _result.BufferedRowCursorFetchStrategy
+ strat_cls = _cursor.BufferedRowCursorFetchStrategy
else:
- strat_cls = _result.DefaultCursorFetchStrategy
+ strat_cls = _cursor.CursorFetchStrategy
return strat_cls.create(result)
@@ -1237,7 +1237,7 @@ class DefaultExecutionContext(interfaces.ExecutionContext):
if self.is_crud or self.is_text:
result = self._setup_crud_result_proxy()
else:
- result = _result.ResultProxy._create_for_context(self)
+ result = _cursor.CursorResult._create_for_context(self)
if (
self.compiled
@@ -1289,25 +1289,39 @@ class DefaultExecutionContext(interfaces.ExecutionContext):
elif not self._is_implicit_returning:
self._setup_ins_pk_from_empty()
- result = _result.ResultProxy._create_for_context(self)
+ result = _cursor.CursorResult._create_for_context(self)
if self.isinsert:
if self._is_implicit_returning:
- row = result._onerow()
+ row = result.fetchone()
self.returned_defaults = row
self._setup_ins_pk_from_implicit_returning(row)
+
+ # test that it has a cursor metadata that is accurate.
+ # the first row will have been fetched and current assumptions
+ # are that the result has only one row, until executemany()
+ # support is added here.
+ assert result.returns_rows
result._soft_close()
- result._metadata = None
elif not self._is_explicit_returning:
result._soft_close()
- result._metadata = None
+
+ # we assume here the result does not return any rows.
+ # *usually*, this will be true. However, some dialects
+ # such as that of MSSQL/pyodbc need to SELECT a post fetch
+ # function so this is not necessarily true.
+ # assert not result.returns_rows
+
elif self.isupdate and self._is_implicit_returning:
- row = result._onerow()
+ row = result.fetchone()
self.returned_defaults = row
result._soft_close()
- result._metadata = None
- elif result._metadata is None:
+ # test that it has a cursor metadata that is accurate.
+ # the rows have all been fetched however.
+ assert result.returns_rows
+
+ elif not result.returns_rows:
# no results, get rowcount
# (which requires open cursor on some drivers
# such as kintersbasdb, mxodbc)