def call(f: Union[str, UserDefinedFunctionWrapper], *args) -> Expression: """ The first parameter `f` could be a str or a Python user-defined function. When it is str, this is a call to a function that will be looked up in a catalog. There are two kinds of functions: - System functions - which are identified with one part names - Catalog functions - which are identified always with three parts names (catalog, database, function) Moreover each function can either be a temporary function or permanent one (which is stored in an external catalog). Based on that two properties the resolution order for looking up a function based on the provided `function_name` is following: - Temporary system function - System function - Temporary catalog function - Catalog function :param f: the path of the function or the Python user-defined function. :param args: parameters of the user-defined function. """ gateway = get_gateway() if isinstance(f, str): return Expression(gateway.jvm.Expressions.call( f, to_jarray(gateway.jvm.Object, [_get_java_expression(arg) for arg in args]))) def get_function_definition(f): if isinstance(f, UserDefinedTableFunctionWrapper): """ TypeInference was not supported for TableFunction in the old planner. Use TableFunctionDefinition to work around this issue. """ j_result_types = to_jarray(gateway.jvm.TypeInformation, [_to_java_type(i) for i in f._result_types]) j_result_type = gateway.jvm.org.apache.flink.api.java.typeutils.RowTypeInfo( j_result_types) return gateway.jvm.org.apache.flink.table.functions.TableFunctionDefinition( 'f', f._java_user_defined_function(), j_result_type) else: return f._java_user_defined_function() expressions_clz = load_java_class("org.apache.flink.table.api.Expressions") function_definition_clz = load_java_class('org.apache.flink.table.functions.FunctionDefinition') j_object_array_type = to_jarray(gateway.jvm.Object, []).getClass() api_call_method = expressions_clz.getDeclaredMethod( "apiCall", to_jarray(gateway.jvm.Class, [function_definition_clz, j_object_array_type])) api_call_method.setAccessible(True) return Expression(api_call_method.invoke( None, to_jarray(gateway.jvm.Object, [get_function_definition(f), to_jarray(gateway.jvm.Object, [_get_java_expression(arg) for arg in args])])))
def _quaternion_op(op_name: str, first, second, third, forth) -> Expression: gateway = get_gateway() return Expression(getattr(gateway.jvm.Expressions, op_name)( _get_java_expression(first), _get_java_expression(second), _get_java_expression(third), _get_java_expression(forth)))
def call(f: Union[str, UserDefinedFunctionWrapper], *args) -> Expression: """ The first parameter `f` could be a str or a Python user-defined function. When it is str, this is a call to a function that will be looked up in a catalog. There are two kinds of functions: - System functions - which are identified with one part names - Catalog functions - which are identified always with three parts names (catalog, database, function) Moreover each function can either be a temporary function or permanent one (which is stored in an external catalog). Based on that two properties the resolution order for looking up a function based on the provided `function_name` is following: - Temporary system function - System function - Temporary catalog function - Catalog function :param f: the path of the function or the Python user-defined function. :param args: parameters of the user-defined function. """ gateway = get_gateway() return Expression(gateway.jvm.Expressions.call( f if isinstance(f, str) else f.java_user_defined_function(), to_jarray(gateway.jvm.Object, [_get_java_expression(arg) for arg in args])))
def _binary_op(op_name: str, first, second) -> Expression: gateway = get_gateway() return Expression(getattr(gateway.jvm.Expressions, op_name)( _get_java_expression(first), _get_java_expression(second)))
def _unary_op(op_name: str, arg) -> Expression: gateway = get_gateway() return Expression(getattr(gateway.jvm.Expressions, op_name)(_get_java_expression(arg)))
def _leaf_op(op_name: str) -> Expression: gateway = get_gateway() return Expression(getattr(gateway.jvm.Expressions, op_name)())
""" Boolean OR in three-valued logic. """ gateway = get_gateway() predicates = to_jarray(gateway.jvm.Object, [_get_java_expression(p) for p in predicates]) return _ternary_op("or", predicate0, predicate1, predicates) """ Offset constant to be used in the `preceding` clause of unbounded :class:`~pyflink.table.window.Over`. Use this constant for a time interval. Unbounded over windows start with the first row of a partition. .. versionadded:: 1.12.0 """ UNBOUNDED_ROW = Expression("UNBOUNDED_ROW") # type: Expression """ Offset constant to be used in the `preceding` clause of unbounded :class:`~pyflink.table.window.Over` windows. Use this constant for a row-count interval. Unbounded over windows start with the first row of a partition. .. versionadded:: 1.12.0 """ UNBOUNDED_RANGE = Expression("UNBOUNDED_RANGE") # type: Expression """ Offset constant to be used in the `following` clause of :class:`~pyflink.table.window.Over` windows. Use this for setting the upper bound of the window to the current row.
def _varargs_op(op_name: str, *args): gateway = get_gateway() return Expression( getattr(gateway.jvm.Expressions, op_name)(*[_get_java_expression(arg) for arg in args]))
Boolean OR in three-valued logic. """ gateway = get_gateway() predicates = to_jarray(gateway.jvm.Object, [_get_java_expression(p) for p in predicates]) return _ternary_op("or", predicate0, predicate1, predicates) """ Offset constant to be used in the `preceding` clause of unbounded :class:`~pyflink.table.window.Over`. Use this constant for a time interval. Unbounded over windows start with the first row of a partition. .. versionadded:: 1.12.0 """ UNBOUNDED_ROW = Expression("UNBOUNDED_ROW") """ Offset constant to be used in the `preceding` clause of unbounded :class:`~pyflink.table.window.Over` windows. Use this constant for a row-count interval. Unbounded over windows start with the first row of a partition. .. versionadded:: 1.12.0 """ UNBOUNDED_RANGE = Expression("UNBOUNDED_RANGE") """ Offset constant to be used in the `following` clause of :class:`~pyflink.table.window.Over` windows. Use this for setting the upper bound of the window to the current row. .. versionadded:: 1.12.0 """ CURRENT_ROW = Expression("CURRENT_ROW")