--- /dev/null
+.. change::
+ :tags: bug, orm
+ :tickets: 12905
+
+ Fixed a caching issue where :func:`_orm.with_loader_criteria` would
+ incorrectly reuse cached bound parameter values when used with
+ :class:`_sql.CompoundSelect` constructs such as :func:`_sql.union`. The
+ issue was caused by the cache key for compound selects not including the
+ execution options that are part of the :class:`_sql.Executable` base class,
+ which :func:`_orm.with_loader_criteria` uses to apply its criteria
+ dynamically. The fix ensures that compound selects and other executable
+ constructs properly include execution options in their cache key traversal.
_traverse_internals: _TraverseInternalsType = [
("_bindparams", InternalTraversal.dp_string_clauseelement_dict),
("text", InternalTraversal.dp_string),
- ]
+ ] + Executable._executable_traverse_internals
_is_text_clause = True
("clause_expr", InternalTraversal.dp_clauseelement),
("_with_ordinality", InternalTraversal.dp_boolean),
("_table_value_type", InternalTraversal.dp_has_cache_key),
- ]
+ ] + Executable._executable_traverse_internals
packagenames: Tuple[str, ...] = ()
+ SupportsCloneAnnotations._clone_annotations_traverse_internals
+ HasCTE._has_ctes_traverse_internals
+ DialectKWArgs._dialect_kwargs_traverse_internals
+ + Executable._executable_traverse_internals
)
selects: List[SelectBase]
]
+ SupportsCloneAnnotations._clone_annotations_traverse_internals
+ HasCTE._has_ctes_traverse_internals
+ + Executable._executable_traverse_internals
)
_is_textual = True
from sqlalchemy.sql import bindparam
from sqlalchemy.sql import ColumnElement
from sqlalchemy.sql import dml
+from sqlalchemy.sql import Executable
from sqlalchemy.sql import False_
from sqlalchemy.sql import func
from sqlalchemy.sql import operators
super_traverse = {}
# ignore_super = self.ignore_super.get(cls.__name__, set())
for s in cls.mro()[1:]:
- # if s.__name__ in ignore_super:
- # continue
- if s.__name__ == "Executable":
- continue
for attr in s.__dict__:
if not attr.endswith("_traverse_internals"):
continue
SingletonConstant,
SyntaxExtension,
DialectKWArgs,
+ Executable,
]
)
)