TechnologyAugust 12, 2014

User Defined Functions in Cassandra 3.0

Gehrig Kunz
Gehrig Kunz
User Defined Functions in Cassandra 3.0
CREATE FUNCTION my_sin ( input double )
    RETURNS double LANGUAGE java
    BODY
        return input == null
            ? null
            : Double.valueOf( Math.sin( input.doubleValue() ) );
    END BODY;
SELECT key, my_sin(value) FROM my_table WHERE key IN (1, 2, 3);
CREATE FUNCTION my_adder ( val1 double, val2 double )
    RETURNS double LANGUAGE java
    BODY
        return (val1 == null || val2 == null)
            ? null
            : Double.valueOf( val1.doubleValue() + val2.doubleValue() );
    END BODY;
SELECT key, my_adder(net_price, taxes) AS price FROM my_table WHERE key = 42;
    RETURNS double LANGUAGE ...; -- continue with your implementation
SELECT key, super_math::sin(value) FROM my_table WHERE key IN (1, 2, 3);
    RETURNS double LANGUAGE ...; -- continue with your implementation
SELECT key, super_math::adder(net_price, taxes) AS price FROM my_table WHERE key = 42;
    LANGUAGE ...    -- continue with your implementation
    LANGUAGE ...    -- continue with your implementation
CREATE FUNCTION super_math::adder ( val1 double, val2 double, val3 double, val4 double  )
    LANGUAGE ...    -- continue with your implementation
SELECT key, super_math::adder(net_price, taxes) AS fullprice FROM my_table WHERE key = 42;
SELECT key, super_math::adder(net_price, taxes, postage) AS fullprice FROM my_table WHERE key = 42;
SELECT key, super_math::adder(net_price, taxes, postage, extras) AS fullprice FROM my_table WHERE key = 42;
CQL              Java
===              ====
boolean          java.lang.Boolean
int              java.lang.Integer
bigint           java.lang.Long
float            java.lang.Float
double           java.lang.Double
inet             java.net.InetAddress
text             java.lang.String
ascii            java.lang.String
timestamp        java.util.Date
uuid             java.util.UUID
timeuuid         java.util.UUID
varint           java.math.BigInteger
decimal          java.math.BigDecimal
blob             java.nio.ByteBuffer
list<E>          java.util.List<E>      where E is also a type from this list
set<E>           java.util.Set<E>       where E is also a type from this list
map<K,V>         java.util.Map<K,V>     where K and V is also a types from this list
(user type)      com.datastax.driver.core.UDTValue
(tuple type)     com.datastax.driver.core.TupleValue
CREATE OR REPLACE FUNCTION math::sin ( input double ) RETURNS double LANGUAGE java
BODY
 if (input == null) {
    return null;
  }
  double v = Math.sin( input.doubleValue() );
  return Double.valueOf(v);
END BODY;
    BODY
CREATE FUNCTION super_math::adder ( val1 double, val2 double )
CREATE [OR REPLACE]
    [[NON] DETERMINISTIC]
    [IF NOT EXISTS]
    "("
        ( <argumentName> <argumentType> [, <argumentName> <argumentType>]* )?
    ")" RETURNS <returnType>
    (
       ‘<javaClassAndMethod>‘ |
    )
Share

One-stop Data API for Production GenAI

Astra DB gives JavaScript developers a complete data API and out-of-the-box integrations that make it easier to build production RAG apps with high relevancy and low latency.