summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine/cursor.py
diff options
context:
space:
mode:
authorFederico Caselli <cfederico87@gmail.com>2023-03-04 23:33:02 +0100
committerFederico Caselli <cfederico87@gmail.com>2023-03-04 23:33:02 +0100
commit4dc2ce0fb15d72e508c72b0cb0e7fd622e6cc34f (patch)
tree3a6ab92c27cce72d1a7b3928a87df8a6491bf154 /lib/sqlalchemy/engine/cursor.py
parent0465ea082c17b95fea2b6c6c9c1bcc7a34ea8f45 (diff)
downloadsqlalchemy-4dc2ce0fb15d72e508c72b0cb0e7fd622e6cc34f.tar.gz
Fixed bug where :meth:`_engine.Row`s could not be
unpickled by other processes. Fixes: #9423 Change-Id: Ie496e31158caff5f72e0a9069dddd55f3116e0b8
Diffstat (limited to 'lib/sqlalchemy/engine/cursor.py')
-rw-r--r--lib/sqlalchemy/engine/cursor.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/lib/sqlalchemy/engine/cursor.py b/lib/sqlalchemy/engine/cursor.py
index c65c4a058..0eea3398d 100644
--- a/lib/sqlalchemy/engine/cursor.py
+++ b/lib/sqlalchemy/engine/cursor.py
@@ -53,8 +53,6 @@ from ..util import compat
from ..util.typing import Literal
from ..util.typing import Self
-_UNPICKLED = util.symbol("unpickled")
-
if typing.TYPE_CHECKING:
from .base import Connection
@@ -445,7 +443,12 @@ class CursorResultMetaData(ResultMetaData):
# then for the dupe keys, put the "ambiguous column"
# record into by_key.
- by_key.update({key: (None, None, (), key) for key in dupes})
+ by_key.update(
+ {
+ key: (None, None, [], key, key, None, None)
+ for key in dupes
+ }
+ )
else:
@@ -886,7 +889,7 @@ class CursorResultMetaData(ResultMetaData):
# ensure it raises
CursorResultMetaData._key_fallback(self, ke.args[0], ke)
- index = rec[0]
+ index = rec[MD_INDEX]
if index is None:
self._raise_for_ambiguous_column_name(rec)
@@ -894,15 +897,23 @@ class CursorResultMetaData(ResultMetaData):
yield cast(_NonAmbigCursorKeyMapRecType, rec)
def __getstate__(self):
+ # TODO: consider serializing this as SimpleResultMetaData
return {
"_keymap": {
- key: (rec[MD_INDEX], rec[MD_RESULT_MAP_INDEX], _UNPICKLED, key)
+ key: (
+ rec[MD_INDEX],
+ rec[MD_RESULT_MAP_INDEX],
+ [],
+ key,
+ rec[MD_RENDERED_NAME],
+ None,
+ None,
+ )
for key, rec in self._keymap.items()
if isinstance(key, (str, int))
},
"_keys": self._keys,
"_translated_indexes": self._translated_indexes,
- "_tuplefilter": self._tuplefilter,
}
def __setstate__(self, state):