[ 
https://issues.apache.org/jira/browse/CASSANDRA-2474?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13186380#comment-13186380
 ] 

Eric Evans commented on CASSANDRA-2474:
---------------------------------------

bq. First, let's be clear about our priorities here. While backwards 
compatibility is an important consideration, it is not a guarantee we have made 
for CQL, nor should we at this stage in its development.

It's not about guarantees, it's about _expectations_.

Interface stability was _the_ motiviating factor behind CQL.  Other arguments 
became obvious later, yes, but that was what set the whole thing in motion.  It 
was born out of requirements that my employer at the time had, and it was the 
reason they paid me to do the initial work.

Since then I've been very vocal about interface stability in every forum.  It's 
a message that has resonated extremely well, and something that seemed to have 
consensus within the project; If I was speaking out of turn, no one stepped in 
to tell me.

TL;DR The absence of an iron-clad guarantee doesn't mean that breakage isn't 
unwanted, or won't come as a surprise. Breaking the language now (with plans 
already laid to break it again in 1.2) exceeds my expectations, and I know it 
exceeds others.

{quote}
As Eric points out, we have made breaking changes deliberately before, because 
updating the language to add missing functionality made clear where we'd gotten 
something wrong. Expecting anything else from a partially finished language is 
totally unrealistic.

Keep in mind as well that maintaining deprecated features indefinitely is a 
resource sink that we can ill afford. We have a relatively small set of active 
developers, and time spent working around code supporting obsolete features, 
perhaps fixing regressions caused by keeping it alive, is time we can ill 
afford. Unlike Thrift, where methods live in relative isolation in 
CassandraServer, everything in the CQL parser and QueryProcessor is 
intertwined. So there is a higher price to pay than you may realize.
{quote}

Of course there is a balance to strike, and a cost to pay for maintaining 
backward compatibility.  But, we've used this argument for years and IMO people 
are starting to expecting more from us now.

{quote}
But the longer we go before making necessary changes and finishing things, the 
more painful that will get. So, to Eric's point, better to make these changes 
now -- which I've been promising in public since at *least* Cassandra SF, so I 
don't think it's valid to cry end-of-release foul -- than to make them for the 
1.2 transition, when presumably more people will have deployed on CQL.
{quote}

I'm crying foul because we're proposing to break the language very late in the 
game.  How often people are expecting CQL to break notwithstanding, anyone who 
has been trying to plan their projects around what they expect to land in 1.1 
are in for a surprise.  If no one is making such plans, then perhaps it's 
because they've given up trying.  Either way it's not good.

Doing this so late in the game, also increases the likelihood that something 
will be missed and that things will need to change again later.

And I'm crying foul because this ticket was contentious and required a lot of 
discussion to reach consensus (which I am _very_ thankful of when looking back 
at what might have been implemented otherwise), and yet it seems we're all too 
ready to pull the trigger on this potentially controversial "errata" without 
taking it to the wider community.

I know this is publicly available, but you'd be hard pressed to do a better job 
of obfuscating a discussion than having it in the comments of this issue.

{quote}
Let me elaborate. We're not actually removing functionality here. The new-style 
definition of

{code}
CREATE TABLE foo (
   key <type1> PRIMARY KEY,
   column <type2>,
   value <type3>
) WITH COMPACT STORAGE
{code}

gives you the same freedom of using arbitrary column names as an old-style 
declaration with a comparator of type2. The difference is, this definition 
allows CQL queries to know how to turn the column name into a resultset value, 
allowing it to be used in more flexible {{WHERE}} clauses than {{..}}, as well 
as allowing use in paging across multiple rows (necessary for wide-row 
map/reduce support).

So, we're not taking away the flexibility to use column names at run time for 
non-composite columns; just requiring that if you want to use a CF in a 
dynamic, wide-row way, you tell us about it so we can support you 
appropriately.  (Knowing when a CF is "wide row oriented" also opens up new 
optimization possibilities, from simple ones like skipping the row-level bloom 
filter to fancier ones like CASSANDRA-3581.)
{quote}

What is the effect on users with an existing schema?

{quote}
Hmm. I'm not sure if you misread what he said and thought he's changing it to 
case-sensitive, or if you think case-sensitive is how it behaves now. Or maybe 
something else entirely. :)

Currently, column names are case *insensitive*, (see 
QueryProcessor.getColumnNames), and so are row keys 
(WhereClause.extractKeysFromColumns). But, right now you're allowed to define a 
CF with columns "a" and "A" but no way to disambiguate at SELECT time which one 
you actually want. So, the important part of what Sylvain is talking about here 
is "... unless they are enclosed in single or double quotes," i.e., to allow 
you to write {{SELECT "A"}} to be explicit about which one you want.  I don't 
see this breaking anything.
{quote}

I don't understand this, they look to be case-sensitive to me.  Are we talking 
about the same thing?

                
> CQL support for compound columns and wide rows
> ----------------------------------------------
>
>                 Key: CASSANDRA-2474
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-2474
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: API, Core
>            Reporter: Eric Evans
>            Assignee: Sylvain Lebresne
>            Priority: Critical
>              Labels: cql
>             Fix For: 1.1
>
>         Attachments: 0001-Add-support-for-wide-and-composite-CFs.patch, 
> 0002-thrift-generated-code.patch, 2474-transposed-1.PNG, 
> 2474-transposed-raw.PNG, 2474-transposed-select-no-sparse.PNG, 
> 2474-transposed-select.PNG, cql_tests.py, raw_composite.txt, 
> screenshot-1.jpg, screenshot-2.jpg
>
>
> For the most part, this boils down to supporting the specification of 
> compound column names (the CQL syntax is colon-delimted terms), and then 
> teaching the decoders (drivers) to create structures from the results.

--
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

        

Reply via email to