]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Add coercion 13012/head
authorYossi <54272821+Apakottur@users.noreply.github.com>
Mon, 1 Dec 2025 16:38:56 +0000 (16:38 +0000)
committerYossi <54272821+Apakottur@users.noreply.github.com>
Mon, 1 Dec 2025 16:45:11 +0000 (16:45 +0000)
lib/sqlalchemy/sql/_selectable_constructors.py
lib/sqlalchemy/sql/selectable.py

index 06f0423b8dcd61ae51141b22f5638623d0342978..540f74979873bb456dfdf4b0e5fa5c259bef1212 100644 (file)
@@ -34,7 +34,7 @@ from ..util.typing import TupleAny
 from ..util.typing import Unpack
 
 if TYPE_CHECKING:
-    from ._typing import _DMLColumnArgument
+    from ._typing import _DMLOnlyColumnArgument
     from ._typing import _FromClauseArgument
     from ._typing import _OnClauseArgument
     from ._typing import _SelectStatementForCompoundArgument
@@ -685,7 +685,7 @@ def union_all(
 
 
 def values(
-    *columns: _DMLColumnArgument[Any],
+    *columns: _DMLOnlyColumnArgument[Any],
     name: Optional[str] = None,
     literal_binds: bool = False,
 ) -> Values:
index da5752692a4b3589b7c718cc710a3d784b3353c1..e81ed2b66eed2b7ea76860cae9b95f6fac5aa5f1 100644 (file)
@@ -117,7 +117,7 @@ and_ = BooleanClauseList.and_
 if TYPE_CHECKING:
     from ._typing import _ColumnExpressionArgument
     from ._typing import _ColumnExpressionOrStrLabelArgument
-    from ._typing import _DMLColumnArgument
+    from ._typing import _DMLOnlyColumnArgument
     from ._typing import _FromClauseArgument
     from ._typing import _JoinTargetArgument
     from ._typing import _LimitOffsetType
@@ -3356,6 +3356,7 @@ class Values(roles.InElementRole, HasCTE, Generative, LateralFromClause):
     __visit_name__ = "values"
 
     _data: Tuple[Sequence[Tuple[Any, ...]], ...] = ()
+    _column_args: Tuple[ColumnClause[Any], ...]
 
     _unnamed: bool
     _traverse_internals: _TraverseInternalsType = [
@@ -3369,12 +3370,15 @@ class Values(roles.InElementRole, HasCTE, Generative, LateralFromClause):
 
     def __init__(
         self,
-        *columns: _DMLColumnArgument[Any],
+        *columns: _DMLOnlyColumnArgument[Any],
         name: Optional[str] = None,
         literal_binds: bool = False,
     ):
         super().__init__()
-        self._column_args = columns
+        self._column_args = tuple(
+            coercions.expect(roles.DMLColumnRole, col)  # type: ignore[misc]
+            for col in columns
+        )
 
         if name is None:
             self._unnamed = True
@@ -7119,6 +7123,7 @@ class Exists(UnaryExpression[bool]):
         self,
         fn: Callable[[Select[Unpack[TupleAny]]], Select[Unpack[TupleAny]]],
     ) -> ScalarSelect[Any]:
+
         assert isinstance(self.element, ScalarSelect)
         element = self.element.element
         if not isinstance(element, Select):