summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine/cursor.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/engine/cursor.py')
-rw-r--r--lib/sqlalchemy/engine/cursor.py24
1 files changed, 18 insertions, 6 deletions
diff --git a/lib/sqlalchemy/engine/cursor.py b/lib/sqlalchemy/engine/cursor.py
index ccf573675..ff69666b7 100644
--- a/lib/sqlalchemy/engine/cursor.py
+++ b/lib/sqlalchemy/engine/cursor.py
@@ -24,6 +24,7 @@ from typing import Optional
from typing import Sequence
from typing import Tuple
from typing import TYPE_CHECKING
+from typing import TypeVar
from typing import Union
from .result import MergedResult
@@ -55,11 +56,12 @@ if typing.TYPE_CHECKING:
from .interfaces import ExecutionContext
from .result import _KeyIndexType
from .result import _KeyMapRecType
- from .result import _KeyMapType
from .result import _KeyType
from .result import _ProcessorsType
from ..sql.type_api import _ResultProcessorType
+_T = TypeVar("_T", bound=Any)
+
# metadata entry tuple indexes.
# using raw tuple is faster than namedtuple.
MD_INDEX: Literal[0] = 0 # integer index in cursor.description
@@ -214,7 +216,9 @@ class CursorResultMetaData(ResultMetaData):
return md
def __init__(
- self, parent: CursorResult, cursor_description: _DBAPICursorDescription
+ self,
+ parent: CursorResult[Any],
+ cursor_description: _DBAPICursorDescription,
):
context = parent.context
self._tuplefilter = None
@@ -1158,7 +1162,7 @@ class _NoResultMetaData(ResultMetaData):
_NO_RESULT_METADATA = _NoResultMetaData()
-class CursorResult(Result):
+class CursorResult(Result[_T]):
"""A Result that is representing state from a DBAPI cursor.
.. versionchanged:: 1.4 The :class:`.CursorResult``
@@ -1179,6 +1183,15 @@ class CursorResult(Result):
"""
+ __slots__ = (
+ "context",
+ "dialect",
+ "cursor",
+ "cursor_strategy",
+ "_echo",
+ "connection",
+ )
+
_metadata: Union[CursorResultMetaData, _NoResultMetaData]
_no_result_metadata = _NO_RESULT_METADATA
_soft_closed: bool = False
@@ -1231,7 +1244,6 @@ class CursorResult(Result):
make_row = _make_row_2
else:
make_row = _make_row
-
self._set_memoized_attribute("_row_getter", make_row)
else:
@@ -1726,12 +1738,12 @@ class CursorResult(Result):
def _raw_row_iterator(self):
return self._fetchiter_impl()
- def merge(self, *others: Result) -> MergedResult:
+ def merge(self, *others: Result[Any]) -> MergedResult[Any]:
merged_result = super().merge(*others)
setup_rowcounts = not self._metadata.returns_rows
if setup_rowcounts:
merged_result.rowcount = sum(
- cast(CursorResult, result).rowcount
+ cast("CursorResult[Any]", result).rowcount
for result in (self,) + others
)
return merged_result