You have misread the CQL doc given in the link. According to CQL update
grammar it's not possible to use UDF. I see UDF only allowed in select
clause...
Le 10 mars 2016 22:07, "Kim Liu" <k...@edgewaternetworks.com> a écrit :

> Hello -
> I am experimenting with User Defined Functions in Cassandra (3.3) and I am
> a bit puzzled by a problem I am having when testing them with cqlsh.  I
> have tried to find the answers online, but have not had any luck so far.
>
> According to http://cassandra.apache.org/doc/cql3/CQL.html it looks like
> a UDF (User Defined Function) should be useable in an update:
>   UPDATE atable SET col = some_function(?) ...;
>
> Current test environment:
>   cassandra@cqlsh:test_space> show version;
>   [cqlsh 5.0.1 | Cassandra 3.3 | CQL spec 3.4.0 | Native protocol v4]
>
>
> However, using a value from the row in question as an argument to the UDF
> does not seem to work.  Here is how I am testing:
>   CREATE KEYSPACE test_space WITH replication = {'class':
> 'SimpleStrategy', 'replication_factor': '1'};
>   USE test_space;
>   CREATE TABLE test_table (idx text, data int, PRIMARY KEY( idx ));
>   INSERT INTO test_table(idx,data) VALUES( 'abc', 1 );
>   CREATE FUNCTION max_int( a int, b int ) CALLED ON NULL INPUT RETURNS int
> LANGUAGE java AS 'return (a == null || b == null) ? 0 : ( a > b ? a : b);';
>   SELECT * FROM test_table;
>   UPDATE test_table SET data=max_int(3,4) WHERE idx='abc’;  ---- This works
>   SELECT * FROM test_table;
>   UPDATE test_table SET data=max_int(data,5) WHERE idx='abc’; ---- This
> does not work
>
> Results:
>   SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query]
> message="line 1:39 no viable alternative at input ',' (UPDATE test_table
> SET data=max_int([data],...)">
>
>
>
> So I am wondering if I am missing something here - or if this is just a
> problem with testing with cqlsh.  If a UDF is not allowed to be passed a
> value from the row that is being updated, then what exactly is the use case
> for having a UDF in an UPDATE?  If all arguments to the UDF have to be
> supplied by the client, then the client might as well perform the
> function.  Using a UDF in an UPDATE would seem to make the most sense only
> if the row data could be accessed, since it could be used to bypass the
> need for a SELECT by a client to read the values and perform the operation
> on them before doing the UPDATE.
>
>
> Thank you,
> Kim Liu
>
> --------
> Kim Liu
> Sr. Software Engineer
> k...@edgewaternetworks.com
> _______
> “Nothing in the world is more dangerous than sincere ignorance and
> conscientious stupidity.” -- Martin Luther King Jr.
>
>
>
>
>

Reply via email to