diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2023-03-05 20:33:46 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2023-03-05 20:33:46 +0000 |
| commit | a7d403166c745c353c5e0f0e4460a532ae92a793 (patch) | |
| tree | 77c582263c891bae2010bf051c106b78ce21c482 /lib/sqlalchemy/engine | |
| parent | e3e99f7fe3339b26487a7e03c0d1acd9a83e2d70 (diff) | |
| parent | 4dc2ce0fb15d72e508c72b0cb0e7fd622e6cc34f (diff) | |
| download | sqlalchemy-a7d403166c745c353c5e0f0e4460a532ae92a793.tar.gz | |
Merge "Fixed bug where :meth:`_engine.Row`s could not be unpickled by other processes." into main
Diffstat (limited to 'lib/sqlalchemy/engine')
| -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): |
