--- /dev/null
+from typing import Any, Iterable, Iterator, Text, Tuple, TypeVar
+
+from .connections import Connection
+
+_SelfT = TypeVar("_SelfT")
+
+class Cursor:
+ connection: Connection[Any]
+ description: Tuple[Text, ...]
+ rownumber: int
+ rowcount: int
+ arraysize: int
+ messages: Any
+ errorhandler: Any
+ lastrowid: int
+ def __init__(self, connection: Connection[Any]) -> None: ...
+ def __del__(self) -> None: ...
+ def close(self) -> None: ...
+ def setinputsizes(self, *args) -> None: ...
+ def setoutputsizes(self, *args) -> None: ...
+ def nextset(self) -> bool | None: ...
+ def mogrify(self, query: Text, args: object = ...) -> str: ...
+ def execute(self, query: Text, args: object = ...) -> int: ...
+ def executemany(self, query: Text, args: Iterable[object]) -> int | None: ...
+ def callproc(self, procname: Text, args: Iterable[Any] = ...) -> Any: ...
+ def scroll(self, value: int, mode: Text = ...) -> None: ...
+ def __enter__(self: _SelfT) -> _SelfT: ...
+ def __exit__(self, *exc_info: Any) -> None: ...
+ # Methods returning result tuples are below.
+ def fetchone(self) -> Tuple[Any, ...] | None: ...
+ def fetchmany(self, size: int | None = ...) -> Tuple[Tuple[Any, ...], ...]: ...
+ def fetchall(self) -> Tuple[Tuple[Any, ...], ...]: ...
+ def __iter__(self) -> Iterator[Tuple[Any, ...]]: ...
+
+class DictCursorMixin:
+ dict_type: Any # TODO: add support if someone needs this
+ def fetchone(self) -> dict[Text, Any] | None: ...
+ def fetchmany(self, size: int | None = ...) -> Tuple[dict[Text, Any], ...]: ...
+ def fetchall(self) -> Tuple[dict[Text, Any], ...]: ...
+ def __iter__(self) -> Iterator[dict[Text, Any]]: ...
+
+class SSCursor(Cursor):
+ def fetchall(self) -> list[Tuple[Any, ...]]: ... # type: ignore
+ def fetchall_unbuffered(self) -> Iterator[Tuple[Any, ...]]: ...
+ def scroll(self, value: int, mode: Text = ...) -> None: ...
+
+class DictCursor(DictCursorMixin, Cursor): ... # type: ignore
+
+class SSDictCursor(DictCursorMixin, SSCursor): # type: ignore
+ def fetchall_unbuffered(self) -> Iterator[dict[Text, Any]]: ... # type: ignore