[
https://issues.apache.org/jira/browse/CASSANDRA-3783?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
MichaĆ Michalski updated CASSANDRA-3783:
----------------------------------------
Attachment: 3783-wip-v1.patch
I started to investigate this problem a bit and I easily came to the point
where I can pass null in cql3sh - see attached work-in-progress patch. It even
ends up with proper INSERT ("proper" means that it shows up as "red colored"
null in cqlsh when performing SELECT ;-) ) for all fields of Type that returns
EMPTY_BYTE_BUFFER in fromString method, as I pass "" to Literal constructor.
However, this simply cannot work with strings, as "" will be saved as "".
Anyway, before I try to push this problem further, I have some questions:
1. Is this (see attachment), in general, a good way to go with this task? Or
maybe I'm completely wrong with this approach?
2. How about "string-based" Types? We obviously can't return EMPTY_BYTE_BUFFER
for "" because it's a valid string, so I was thinking about a solution that
will handle literal 'null' value as a second param for Literal class
constructor, which could be then handled (by simple 'if') in all db.marshall
types to return EMPTY_BYTE_BUFFER. It doesn't look like a "perfect" solution to
me, but it looks _quite_ clean and... well... it's the best idea I had so far
;-)
Any other thoughts on this?
> Add 'null' support to CQL 3.0
> -----------------------------
>
> Key: CASSANDRA-3783
> URL: https://issues.apache.org/jira/browse/CASSANDRA-3783
> Project: Cassandra
> Issue Type: Sub-task
> Components: API
> Reporter: Sylvain Lebresne
> Priority: Minor
> Labels: cql3
> Fix For: 1.2.2
>
> Attachments: 3783-wip-v1.patch
>
>
> Dense composite supports adding records where only a prefix of all the
> component specifying the key is defined. In other words, with:
> {noformat}
> CREATE TABLE connections (
> userid int,
> ip text,
> port int,
> protocol text,
> time timestamp,
> PRIMARY KEY (userid, ip, port, protocol)
> ) WITH COMPACT STORAGE
> {noformat}
> you can insert
> {noformat}
> INSERT INTO connections (userid, ip, port, time) VALUES (2, '192.168.0.1',
> 80, 123456789);
> {noformat}
> You cannot however select that column specifically (i.e, without selecting
> column (2, '192.168.0.1', 80, 'http') for instance).
> This ticket proposes to allow that though 'null', i.e. to allow
> {noformat}
> SELECT * FROM connections WHERE userid = 2 AND ip = '192.168.0.1' AND port =
> 80 AND protocol = null;
> {noformat}
> It would then also make sense to support:
> {noformat}
> INSERT INTO connections (userid, ip, port, protocol, time) VALUES (2,
> '192.168.0.1', 80, null, 123456789);
> {noformat}
> as an equivalent to the insert query above.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira