]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fix generate_sql_functions 12963/head
authorYannick PÉROUX <yannick.peroux@getalma.eu>
Tue, 4 Nov 2025 15:15:57 +0000 (16:15 +0100)
committerYannick PÉROUX <yannick.peroux@getalma.eu>
Tue, 4 Nov 2025 16:30:51 +0000 (17:30 +0100)
tools/generate_sql_functions.py

index a78e2492a54aaf1cc08ce46437ca5adaee56c906..769922dd6ca58966407b0e210b7d6d14fc04945e 100644 (file)
@@ -61,6 +61,7 @@ def process_functions(filename: str, cmd: code_writer_cmd) -> str:
                 builtins = set(dir(__builtins__))
                 for key, fn_class in _fns_in_deterministic_order():
                     is_reserved_word = key in builtins
+                    is_first_arg_optional = fn_class.__name__ == "coalesce"
 
                     if issubclass(fn_class, ReturnTypeFromArgs):
                         buf.write(
@@ -84,7 +85,7 @@ def {key}( {'  # noqa: A001' if is_reserved_word else ''}
 @overload
 def {key}( {'  # noqa: A001' if is_reserved_word else ''}
     self,
-    col: _ColumnExpressionArgument[_T],
+    col: _ColumnExpressionArgument[{'Optional[_T]' if is_first_arg_optional else '_T'}],
     *args: _ColumnExpressionOrLiteralArgument[Any],
     **kwargs: Any,
 ) -> {fn_class.__name__}[_T]:
@@ -93,7 +94,7 @@ def {key}( {'  # noqa: A001' if is_reserved_word else ''}
 @overload
 def {key}( {'  # noqa: A001' if is_reserved_word else ''}
     self,
-    col: _T,
+    col: {'Optional[_T]' if is_first_arg_optional else '_T'},
     *args: _ColumnExpressionOrLiteralArgument[Any],
     **kwargs: Any,
 ) -> {fn_class.__name__}[_T]:
@@ -101,7 +102,7 @@ def {key}( {'  # noqa: A001' if is_reserved_word else ''}
 
 def {key}( {'  # noqa: A001' if is_reserved_word else ''}
     self,
-    col: _ColumnExpressionOrLiteralArgument[_T],
+    col: _ColumnExpressionOrLiteralArgument[{'Optional[_T]' if is_first_arg_optional else '_T'}],
     *args: _ColumnExpressionOrLiteralArgument[Any],
     **kwargs: Any,
 ) -> {fn_class.__name__}[_T]: