timsaucer commented on code in PR #1113:
URL: 
https://github.com/apache/datafusion-python/pull/1113#discussion_r2093421692


##########
python/datafusion/udf.py:
##########
@@ -760,8 +760,74 @@ def wrapper(*args: Any, **kwargs: Any) -> Expr:
         return decorator
 
 
+class TableFunction:
+    """Class for performing user-defined table functions (UDTF).
+
+    Table functions generate new table providers based on the
+    input expressions.
+    """
+
+    def __init__(
+        self,
+        name: str,
+        func: Callable[[], any],
+    ) -> None:
+        """Instantiate a user-defined table function (UDTF).
+
+        See :py:func:`udtf` for a convenience function and argument
+        descriptions.
+        """
+        self._udtf = df_internal.TableFunction(name, func)
+
+    def __call__(self, *args: Expr) -> Any:
+        """Execute the UDTF and return a table provider."""
+        args_raw = [arg.expr for arg in args]
+        return self._udtf.__call__(*args_raw)
+
+    @overload
+    @staticmethod
+    def udtf(
+        name: str,
+    ) -> Callable[..., Any]: ...
+
+    @overload
+    @staticmethod
+    def udtf(
+        func: Callable[[], Any],
+        name: str,
+    ) -> TableFunction: ...
+
+    @staticmethod
+    def udtf(*args: Any, **kwargs: Any):
+        """Create a new User-Defined Table Function (UDTF)."""
+        if args and callable(args[0]):
+            # Case 1: Used as a function, require the first parameter to be 
callable
+            return TableFunction._create_table_udf(*args, **kwargs)
+        if args and hasattr(args[0], "__datafusion_table_function__"):
+            return TableFunction(args[1], args[0])
+        # Case 2: Used as a decorator with parameters
+        return TableFunction._create_table_udf_decorator(*args, **kwargs)

Review Comment:
   @kosiew Thank you! Added!



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org
For additional commands, e-mail: github-h...@datafusion.apache.org

Reply via email to