Class UDFunction

    • Field Detail

      • logger

        protected static final org.slf4j.Logger logger
      • language

        protected final java.lang.String language
      • body

        protected final java.lang.String body
      • argCodecs

        protected final TypeCodec<java.lang.Object>[] argCodecs
      • returnCodec

        protected final TypeCodec<java.lang.Object> returnCodec
      • calledOnNullInput

        protected final boolean calledOnNullInput
      • udfContext

        protected final UDFContext udfContext
    • Method Detail

      • 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)
      • toCqlString

        public java.lang.String toCqlString​(boolean withInternals,
                                            boolean ifNotExists)
        Description copied from interface: SchemaElement
        Returns a CQL representation of this element
        Specified by:
        toCqlString in interface SchemaElement
        Parameters:
        withInternals - if the internals part of the CQL should be exposed.
        ifNotExists - if "IF NOT EXISTS" should be included.
        Returns:
        a CQL representation of this element
      • 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.
      • 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​(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​(TypeCodec<java.lang.Object> codec,
                                                       ProtocolVersion protocolVersion,
                                                       java.lang.Object value)