I have an API Server written on golang in a front of Cassandra, so I use gocql as driver. What I want is to return an error if someone tries to create duplicated entries in Cassandra, so I need not only idempotent operation (which could be achieved via if not exists clause), but also somehow to know if query was applied or not. Preliminary request like SELECT primary_keys FROM TABLE WHERE primary_keys = blah LIMIT 1 is not an option as INSERT operation should be atomic.
When I run an example below in cqlsh Cassandra tells if query is applied:
cqlsh> create table tests.demo ( ... uuid text PRIMARY KEY, ... data text ... ); cqlsh> insert into tests.demo (uuid, data) values ('test', 'data') if not exists; applied ----------- True cqlsh> insert into tests.demo (uuid, data) values ('test', 'data') if not exists; applied | uuid | data -----------+------+------ False | test | data
Is there any option to achieve the same with gocql since query.Exec() returns only error?