Technology•August 12, 2014
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>‘ |
)