[
https://issues.apache.org/jira/browse/CASSANDRA-4361?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sylvain Lebresne updated CASSANDRA-4361:
----------------------------------------
Attachment: 4361.txt
Attaching a patch for this that does 2 things:
* It changes the definition of having a row existing for CQL3 from 'the CQL row
exists if it has at least one column set (non null) outside of the PK' to 'the
CQL row exists if it has a column set'. Concretely, since by definition a PK
cannot contain null values, it means a row exists as long as the PK is set. In
practice it means that the following is now fine:
{noformat}
CREATE TABLE foo (k int PRIMARY KEY, c int);
INSERT INTO foo (k) VALUES (1);
{noformat}
and that
{noformat}
INSERT INTO foo (k, c) VALUES (2, 2);
DELETE c FROM foo WHERE k = 2;
SELECT * FROM foo WHERE k = 2;
{noformat}
will return a result (with k == 2 and c == null) rather than no result.
* It allows defining a table with only a PK (i.e. 'CREATE TABLE (k in PRIMARY
KEY)'). Note that this make sense only thanks to the previous point.
Note that COMPACT STORAGE definitions are slightly more limited in that they
must have a multi-component PK to allow this. I.e. the following is still
invalid:
{noformat}
CREATE TABLE foo (
k int PRIMARY KEY
) WITH COMPACT STORAGE;
{noformat}
but the following is ok:
{noformat}
CREATE TABLE foo (
k int,
c int,
PRIMARY KEY (k, c)
) WITH COMPACT STORAGE;
{noformat}
> CQL3: allow definition with only a PK
> -------------------------------------
>
> Key: CASSANDRA-4361
> URL: https://issues.apache.org/jira/browse/CASSANDRA-4361
> Project: Cassandra
> Issue Type: Improvement
> Components: API
> Reporter: Sylvain Lebresne
> Assignee: Sylvain Lebresne
> Labels: cql3
> Fix For: 1.2
>
> Attachments: 4361.txt
>
>
> Currently, in CQL3 and contrarily to SQL, one cannot define a table having
> only a PK but no other columns. Related to that, a CQL always needs at least
> one column outside of the PK to be inserted to exist. All that may force
> people to add 'fake' value that they don't really need.
> The goal of this ticket is to lift that limitation and allow table definition
> to have only a PK, and to have CQL rows exist even if only the PK has been
> inserted (in other words, to have CQL rows behave like SQL rows).
> Following CASSANDRA-4329, one way to do that with the sparse-composite
> encoding CQL3 uses would be to insert as marker of the CQL row presence a CQL
> column with an empty name (the underlying column name won't be empty though
> since it's a composite). The drawback though is that we will need to insert
> that marker with every insert to the CQL row (in other word, we'll add a
> slight overhead to the size of each write). The pros is that if we have such
> marker for the CQL row presence, we will be able to reoptimize back queries
> that select only a few columns (since following CASSANDRA-3982 we query all
> columns of a CQL row every time).
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira