[
https://issues.apache.org/jira/browse/CASSANDRA-7304?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14156282#comment-14156282
]
Sylvain Lebresne commented on CASSANDRA-7304:
---------------------------------------------
The general principle of using -1 for 'nulls' and -2 for 'unset' in the
protocol is fine but:
* We need to document the changes. I've pushed a v4 spec doc on trunk which
should be modified to document those change (and list them in the changelog at
the end of the document).
* We should take the protocol version into account. Pre-v4 protocol assume that
if the size of a value is < 0, it represents null and we need to preserve that
(one could hope that divers always use -1 for null in practice, but that wasn't
specified that way so...). Which will probably mean pushing the protocol
version to {{CBUtil.readValue}}.
* Once we have unset values in the protocol, {{Constants.Setter}} is far from
being the only place were we could get them. In pretty much every place where
we do a {{bind()}} (or {{bindAndGet()}}) we need to be warry of
{{UNSET_BYTE_BUFFER}} (even if it's just to reject it as a non-sensical value).
* It's a nit, but for the v4 protocol, instead of saying "-2 is unset and any
other negative value is null", I'd just say "-1 is null, -2 is unset and any
other negative value is invalid".
* Not convinced of the {{CQLTester}} modification. Instead of modifying
{{CQLTester}}, I'd just use plain old {{execute}} but pass
{{CBUtil.UNSET_BYTE_BUFFER}} in the concrete tests. We should also extend tests
to cover unset for collections, UDT, counter updates, etc... (which as said
above are not handled properly by the current patch).
> Ability to distinguish between NULL and UNSET values in Prepared Statements
> ---------------------------------------------------------------------------
>
> Key: CASSANDRA-7304
> URL: https://issues.apache.org/jira/browse/CASSANDRA-7304
> Project: Cassandra
> Issue Type: Sub-task
> Reporter: Drew Kutcharian
> Labels: cql, protocolv4
> Fix For: 3.0
>
> Attachments: 7304-2.patch, 7304.patch
>
>
> Currently Cassandra inserts tombstones when a value of a column is bound to
> NULL in a prepared statement. At higher insert rates managing all these
> tombstones becomes an unnecessary overhead. This limits the usefulness of the
> prepared statements since developers have to either create multiple prepared
> statements (each with a different combination of column names, which at times
> is just unfeasible because of the sheer number of possible combinations) or
> fall back to using regular (non-prepared) statements.
> This JIRA is here to explore the possibility of either:
> A. Have a flag on prepared statements that once set, tells Cassandra to
> ignore null columns
> or
> B. Have an "UNSET" value which makes Cassandra skip the null columns and not
> tombstone them
> Basically, in the context of a prepared statement, a null value means delete,
> but we don’t have anything that means "ignore" (besides creating a new
> prepared statement without the ignored column).
> Please refer to the original conversation on DataStax Java Driver mailing
> list for more background:
> https://groups.google.com/a/lists.datastax.com/d/topic/java-driver-user/cHE3OOSIXBU/discussion
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)