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
    Modifier and Type | Field and Description
    --- | ---
    `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
    Modifier | Constructor and Description
    --- | ---
    `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
    Modifier and Type | Method and Description
    --- | ---
    `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)

Copyright © 2018 The Apache Software Foundation