org.apache.cassandra.cql3.functions

## Class UDFunction

- java.lang.Object
- - org.apache.cassandra.cql3.functions.AbstractFunction
  - - org.apache.cassandra.cql3.functions.UDFunction

All Implemented Interfaces:
  AssignmentTestable, Function, ScalarFunction

Direct Known Subclasses:
  JavaBasedUDFunction

    public abstract class UDFunction
    extends AbstractFunction
    implements ScalarFunction

Base class for User Defined Functions.

### Nested Class Summary

### Nested classes/interfaces inherited from interface org.apache.cassandra.cql3.AssignmentTestable

`AssignmentTestable.TestResult`

### Field Summary

Fields
`protected com.datastax.driver.core.TypeCodec<java.lang.Object>[]` `argCodecs`
`protected java.util.List<ColumnIdentifier>` `argNames`
`protected java.lang.String` `body`
`protected boolean` `calledOnNullInput`
`protected java.lang.String` `language`
`protected static org.slf4j.Logger` `logger`
`protected com.datastax.driver.core.TypeCodec<java.lang.Object>` `returnCodec`
`protected UDFContext` `udfContext`

### Fields inherited from class org.apache.cassandra.cql3.functions.AbstractFunction

`argTypes, name, returnType`

### Constructor Summary

Constructors
`protected` `UDFunction(FunctionName name, java.util.List<ColumnIdentifier> argNames, java.util.List<AbstractType<?>> argTypes, AbstractType<?> returnType, boolean calledOnNullInput, java.lang.String language, java.lang.String body)`
`protected` `UDFunction(FunctionName name, java.util.List<ColumnIdentifier> argNames, java.util.List<AbstractType<?>> argTypes, com.datastax.driver.core.DataType[] argDataTypes, AbstractType<?> returnType, com.datastax.driver.core.DataType returnDataType, boolean calledOnNullInput, java.lang.String language, java.lang.String body)`

### Method Summary

All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
`java.util.List<ColumnIdentifier>` `argNames()`
`static void` `assertUdfsEnabled(java.lang.String language)`
`java.lang.String` `body()`
`protected java.lang.Object` `compose(ProtocolVersion protocolVersion, int argIndex, java.nio.ByteBuffer value)` Used by UDF implementations (both Java code generated by `JavaBasedUDFunction` and script executor `ScriptBasedUDFunction`) to convert the C* serialized representation to the Java object representation.
`protected static java.lang.Object` `compose(com.datastax.driver.core.TypeCodec<java.lang.Object>[] codecs, ProtocolVersion protocolVersion, int argIndex, java.nio.ByteBuffer value)`
`static UDFunction` `create(FunctionName name, java.util.List<ColumnIdentifier> argNames, java.util.List<AbstractType<?>> argTypes, AbstractType<?> returnType, boolean calledOnNullInput, java.lang.String language, java.lang.String body)`

`static UDFunction`

`createBrokenFunction(FunctionName name, java.util.List<ColumnIdentifier> argNames, java.util.List<AbstractType<?>> argTypes, AbstractType<?> returnType, boolean calledOnNullInput, java.lang.String language, java.lang.String body, InvalidRequestException reason)`
It can happen that a function has been declared (is listed in the scheam) but cannot be loaded (maybe only on some nodes).

`protected java.nio.ByteBuffer` `decompose(ProtocolVersion protocolVersion, java.lang.Object value)` Used by UDF implementations (both Java code generated by `JavaBasedUDFunction` and script executor `ScriptBasedUDFunction`) to convert the Java object representation for the return value to the C* serialized representation.
`protected static java.nio.ByteBuffer` `decompose(com.datastax.driver.core.TypeCodec<java.lang.Object> codec, ProtocolVersion protocolVersion, java.lang.Object value)`
`boolean` `equals(java.lang.Object o)`
`java.nio.ByteBuffer` `execute(ProtocolVersion protocolVersion, java.util.List<java.nio.ByteBuffer> parameters)` Applies this function to the specified parameter.
`protected abstract java.lang.Object` `executeAggregateUserDefined(ProtocolVersion protocolVersion, java.lang.Object firstParam, java.util.List<java.nio.ByteBuffer> parameters)`
`java.lang.Object` `executeForAggregate(ProtocolVersion protocolVersion, java.lang.Object firstParam, java.util.List<java.nio.ByteBuffer> parameters)` Like `ScalarFunction.execute(ProtocolVersion, List)` but the first parameter is already in non-serialized form.
`protected abstract java.nio.ByteBuffer` `executeUserDefined(ProtocolVersion protocolVersion, java.util.List<java.nio.ByteBuffer> parameters)`
`protected abstract java.util.concurrent.ExecutorService` `executor()`
`int` `hashCode()`
`boolean` `isAggregate()` Checks whether the function is an aggregate function or not.
`boolean` `isCallableWrtNullable(java.util.List<java.nio.ByteBuffer> parameters)`
`boolean` `isCalledOnNullInput()`
`boolean` `isNative()` Checks whether the function is a native/hard coded one or not.
`java.lang.String` `language()`
`void` `userTypeUpdated(java.lang.String ksName, java.lang.String typeName)`

### Methods inherited from class org.apache.cassandra.cql3.functions.AbstractFunction

`addFunctionsTo, argTypes, columnName, hasReferenceTo, name, returnType, testAssignment, toString`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface org.apache.cassandra.cql3.functions.Function

`addFunctionsTo, argTypes, columnName, hasReferenceTo, name, returnType`

### Methods inherited from interface org.apache.cassandra.cql3.AssignmentTestable

`testAssignment`

### Field Detail

#### logger

    protected static final org.slf4j.Logger logger

#### argNames

    protected final java.util.List<ColumnIdentifier> argNames

#### language

    protected final java.lang.String language

#### body

    protected final java.lang.String body

#### argCodecs

    protected final com.datastax.driver.core.TypeCodec<java.lang.Object>[] argCodecs

#### returnCodec

    protected final com.datastax.driver.core.TypeCodec<java.lang.Object> returnCodec

#### calledOnNullInput

    protected final boolean calledOnNullInput

#### udfContext

    protected final UDFContext udfContext

### Constructor Detail

#### UDFunction

    protected UDFunction(FunctionName name,
                         java.util.List<ColumnIdentifier> argNames,
                         java.util.List<AbstractType<?>> argTypes,
                         AbstractType<?> returnType,
                         boolean calledOnNullInput,
                         java.lang.String language,
                         java.lang.String body)

#### UDFunction

    protected UDFunction(FunctionName name,
                         java.util.List<ColumnIdentifier> argNames,
                         java.util.List<AbstractType<?>> argTypes,
                         com.datastax.driver.core.DataType[] argDataTypes,
                         AbstractType<?> returnType,
                         com.datastax.driver.core.DataType returnDataType,
                         boolean calledOnNullInput,
                         java.lang.String language,
                         java.lang.String body)

### Method Detail

#### create

    public static UDFunction create(FunctionName name,
                                    java.util.List<ColumnIdentifier> argNames,
                                    java.util.List<AbstractType<?>> argTypes,
                                    AbstractType<?> returnType,
                                    boolean calledOnNullInput,
                                    java.lang.String language,
                                    java.lang.String body)

#### createBrokenFunction

    public static UDFunction createBrokenFunction(FunctionName name,
                                                  java.util.List<ColumnIdentifier> argNames,
                                                  java.util.List<AbstractType<?>> argTypes,
                                                  AbstractType<?> returnType,
                                                  boolean calledOnNullInput,
                                                  java.lang.String language,
                                                  java.lang.String body,
                                                  InvalidRequestException reason)

It can happen that a function has been declared (is listed in the scheam) but cannot be loaded (maybe only on some nodes). This is the case for instance if the class defining the class is not on the classpath for some of the node, or after a restart. In that case, we create a "fake" function so that: 1) the broken function can be dropped easily if that is what people want to do. 2) we return a meaningful error message if the function is executed (something more precise than saying that the function doesn't exist)

#### execute

    public final java.nio.ByteBuffer execute(ProtocolVersion protocolVersion,
                                             java.util.List<java.nio.ByteBuffer> parameters)

Description copied from interface: `ScalarFunction`
Applies this function to the specified parameter.

Specified by:
  `execute` in interface `ScalarFunction`
Parameters:
  `protocolVersion` - protocol version used for parameters and return value
  `parameters` - the input parameters
Returns:
  the result of applying this function to the parameter

#### executeForAggregate

    public final java.lang.Object executeForAggregate(ProtocolVersion protocolVersion,
                                                      java.lang.Object firstParam,
                                                      java.util.List<java.nio.ByteBuffer> parameters)

Like `ScalarFunction.execute(ProtocolVersion, List)` but the first parameter is already in non-serialized form. Remaining parameters (2nd paramters and all others) are in `parameters`. This is used to prevent superfluous (de)serialization of the state of aggregates. Means: scalar functions of aggregates are called using this variant.

#### assertUdfsEnabled

    public static void assertUdfsEnabled(java.lang.String language)

#### executor

    protected abstract java.util.concurrent.ExecutorService executor()

#### isCallableWrtNullable

    public boolean isCallableWrtNullable(java.util.List<java.nio.ByteBuffer> parameters)

#### executeUserDefined

    protected abstract java.nio.ByteBuffer executeUserDefined(ProtocolVersion protocolVersion,
                                                              java.util.List<java.nio.ByteBuffer> parameters)

#### executeAggregateUserDefined

    protected abstract java.lang.Object executeAggregateUserDefined(ProtocolVersion protocolVersion,
                                                                    java.lang.Object firstParam,
                                                                    java.util.List<java.nio.ByteBuffer> parameters)

#### isAggregate

    public boolean isAggregate()

Description copied from interface: `Function`
Checks whether the function is an aggregate function or not.

Specified by:
  `isAggregate` in interface `Function`
Returns:
  `true` if the function is an aggregate function, `false` otherwise.

#### isNative

    public boolean isNative()

Description copied from interface: `Function`
Checks whether the function is a native/hard coded one or not.

Specified by:
  `isNative` in interface `Function`
Returns:
  `true` if the function is a native/hard coded one, `false` otherwise.

#### isCalledOnNullInput

    public boolean isCalledOnNullInput()

Specified by:
  `isCalledOnNullInput` in interface `ScalarFunction`

#### argNames

    public java.util.List<ColumnIdentifier> argNames()

#### body

    public java.lang.String body()

#### language

    public java.lang.String language()

#### compose

    protected java.lang.Object compose(ProtocolVersion protocolVersion,
                                       int argIndex,
                                       java.nio.ByteBuffer value)

Used by UDF implementations (both Java code generated by `JavaBasedUDFunction` and script executor `ScriptBasedUDFunction`) to convert the C* serialized representation to the Java object representation.

Parameters:
  `protocolVersion` - the native protocol version used for serialization
  `argIndex` - index of the UDF input argument

#### compose

    protected static java.lang.Object compose(com.datastax.driver.core.TypeCodec<java.lang.Object>[] codecs,
                                              ProtocolVersion protocolVersion,
                                              int argIndex,
                                              java.nio.ByteBuffer value)

#### decompose

    protected java.nio.ByteBuffer decompose(ProtocolVersion protocolVersion,
                                            java.lang.Object value)

Used by UDF implementations (both Java code generated by `JavaBasedUDFunction` and script executor `ScriptBasedUDFunction`) to convert the Java object representation for the return value to the C* serialized representation.

Parameters:
  `protocolVersion` - the native protocol version used for serialization

#### decompose

    protected static java.nio.ByteBuffer decompose(com.datastax.driver.core.TypeCodec<java.lang.Object> codec,
                                                   ProtocolVersion protocolVersion,
                                                   java.lang.Object value)

#### equals

    public boolean equals(java.lang.Object o)

Overrides:
  `equals` in class `AbstractFunction`

#### hashCode

    public int hashCode()

Overrides:
  `hashCode` in class `AbstractFunction`

#### userTypeUpdated

    public void userTypeUpdated(java.lang.String ksName,
                                java.lang.String typeName)