3

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?

Thank you!

  • Can you try to use `.Scan` instead of `.Exec` & then look for `applied` column of the result - there should be only one row of data... – Alex Ott Jan 09 '19 at 16:10
  • 2
    @Alex, thank you for the tip. I managed to solve this issue with `.ScanCAS()`. – Sergey Lega Jan 09 '19 at 16:32

0 Answers0