我写了一个UDF如下:
CREATE FUNCTION myspace.getValue(lng bigint, dbl double, etc double) RETURNS NULL ON NULL INPUT RETURNS double LANGUAGE java AS 'if (lng != null) {return (double)lng;} else if (dbl != null) { return dbl;} else return etc;';
我得到这个错误:
InvalidRequest: Error from server: code=2200 [Invalid query] message="Java源代码编译失败:
第1行:操作符!=对于参数类型(s) long, null未定义
第1行:操作符!=对于参数类型(s) double, null未定义
而在手册中,这些比较似乎是可以的(例如这里)。我正在使用Cassandra 4.0.3(通过它的docker镜像)。
我找到问题了。我将RETURNS NULL ON NULL INPUT
更改为CALLED ON NULL INPUT
,现在可以了,并按我的期望工作:)
这是一个Java问题,而不是Cassandra问题。
double
和long
都是基本的Java数据类型,如果没有初始化,它们被分配一个默认值(分别是0L
或0.0d
),所以它们不能是null
。
有关更多信息,请参见Java基本数据类型。干杯!