diff options
author | Federico Caselli <cfederico87@gmail.com> | 2023-03-04 23:33:02 +0100 |
---|---|---|
committer | Federico Caselli <cfederico87@gmail.com> | 2023-03-04 23:33:02 +0100 |
commit | 4dc2ce0fb15d72e508c72b0cb0e7fd622e6cc34f (patch) | |
tree | 3a6ab92c27cce72d1a7b3928a87df8a6491bf154 /lib/sqlalchemy/engine/cursor.py | |
parent | 0465ea082c17b95fea2b6c6c9c1bcc7a34ea8f45 (diff) | |
download | sqlalchemy-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.py | 23 |
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): |