I like this approach.  However, in light of some of the discussions on view and the like perhaps the function is  (column value as returned by select ) + 42

So a null counter column becomes 0 before the update calculation is applied.

Then any null can be considered null unless addressed by IfNull(), or zeroIfNull()

Any operation on null returns null.

I think this follows what would be expected by most users in most cases.


On 31/08/2022 11:55, Andrés de la Peña wrote:
I think I'd prefer 2), the SQL behaviour. We could also get the convenience of 3) by adding CQL functions such as "ifNull(column, default)" or "zeroIfNull(column)", as it's done by other dbs. So we could do things like "UPDATE ... SET name = zeroIfNull(name) + 42".

On Wed, 31 Aug 2022 at 04:54, Caleb Rackliffe <calebrackli...@gmail.com> wrote:

    Also +1 on the SQL behavior here. I was uneasy w/ coercing to "" /
    0 / 1 (depending on the type) in our previous discussion, but for
    some reason didn't bring up the SQL analog :-|

    On Tue, Aug 30, 2022 at 5:38 PM Benedict <bened...@apache.org> wrote:

        I’m a bit torn here, as consistency with counters is
        important. But they are a unique eventually consistent data
        type, and I am inclined to default standard numeric types to
        behave as SQL does, since they write a new value rather than a
        “delta”

        It is far from optimal to have divergent behaviours, but also
        suboptimal to diverge from relational algebra, and probably
        special casing counters is the least bad outcome IMO.


        On 30 Aug 2022, at 22:52, David Capwell <dcapw...@gmail.com>
        wrote:

        
        4.1 added the ability for LWT to support "UPDATE ... SET name
        = name + 42", but we never really fleshed out with the larger
        community what the semantics should be in the case where the
        column or row are NULL; I opened up
        https://issues.apache.org/jira/browse/CASSANDRA-17857 for
        this issue.

        As I see it there are 3 possible outcomes:
        1) fail the query
        2) null + 42 = null (matches SQL)
        3) null + 42 == 0 + 42 = 42 (matches counters)

        In SQL you get NULL (option 2), but CQL counters treat NULL
        as 0 (option 3) meaning we already do not match SQL (though
        counters are not a standard SQL type so might not be
        applicable).  Personally I lean towards option 3 as the
        "zero" for addition and subtraction is 0 (1 for
        multiplication and division).

        So looking for feedback so we can update in CASSANDRA-17857
        before 4.1 release.

Reply via email to