Author: slebresne
Date: Mon Sep 23 13:52:02 2013
New Revision: 1525592
URL: http://svn.apache.org/r1525592
Log:
Update website for 2.0.1 release
Modified:
cassandra/site/publish/doc/cql3/CQL-2.0.html
cassandra/site/publish/download/index.html
cassandra/site/publish/index.html
cassandra/site/src/settings.py
Modified: cassandra/site/publish/doc/cql3/CQL-2.0.html
URL:
http://svn.apache.org/viewvc/cassandra/site/publish/doc/cql3/CQL-2.0.html?rev=1525592&r1=1525591&r2=1525592&view=diff
==============================================================================
--- cassandra/site/publish/doc/cql3/CQL-2.0.html (original)
+++ cassandra/site/publish/doc/cql3/CQL-2.0.html Mon Sep 23 13:52:02 2013
@@ -21,6 +21,7 @@
| <boolean>
| <hex>
<variable> ::= '?'
+ | ':' <identifier>
<term> ::= <constant>
| <collection-literal>
| <variable>
@@ -37,7 +38,7 @@
<properties> ::= <property> (AND <property>)*
<property> ::= <identifier> '=' ( <identifier> | <constant> |
<map-literal> )
-</pre></pre><p><br/>Please note that not every possible productions of the
grammar above will be valid in practice. Most notably,
<code><variable></code> and nested <code><collection-literal></code> are
currently not allowed inside <code><collection-literal></code>.</p><p>The
question mark (<code>?</code>) of <code><variable></code> is a bind
variables for <a href="#preparedStatement">prepared statements</a>.</p><p>The
<code><properties></code> production is use by statement that create and
alter keyspaces and tables. Each <code><property></code> is either a
<em>simple</em> one, in which case it just has a value, or a <em>map</em> one,
in which case it’s value is a map grouping sub-options. The following
will refer to one or the other as the <em>kind</em> (<em>simple</em> or
<em>map</em>) of the property.</p><p>A <code><tablename></code> will be used
to identify a table. This is an identifier representing the table name that can
be preceded by a keyspace n
ame. The keyspace name, if provided, allow to identify a table in another
keyspace than the currently active one (the currently active keyspace is set
through the <a href="#useStmt"><tt>USE</tt></a> statement).</p><p>For supported
<code><function></code>, see the section on <a
href="#functions">functions</a>.</p><h3 id="preparedStatement">Prepared
Statement</h3><p>CQL supports <em>prepared statements</em>. Prepared statement
is an optimization that allows to parse a query only once but execute it
multiple times with different concrete values.</p><p>In a statement, each time
a column value is expected (in the data manipulation and query statements), a
bind variable marker (denoted by a <code>?</code> symbol) can be used instead.
A statement with bind variables must then be <em>prepared</em>. Once it has
been prepared, it can executed by providing concrete values for the bind
variables (values for bind variables must be provided in the order the bind
variables are defined in the qu
ery string). The exact procedure to prepare a statement and execute a prepared
statement depends on the CQL driver used and is beyond the scope of this
document.</p><h2 id="dataDefinition">Data Definition</h2><h3
id="createKeyspaceStmt">CREATE KEYSPACE</h3><p><i>Syntax:</i></p><pre
class="syntax"><pre><create-keyspace-stmt> ::= CREATE KEYSPACE (IF NOT
EXISTS)? <identifier> WITH <properties>
+</pre></pre><p><br/>Please note that not every possible productions of the
grammar above will be valid in practice. Most notably,
<code><variable></code> and nested <code><collection-literal></code> are
currently not allowed inside <code><collection-literal></code>.</p><p>A
<code><variable></code> can be either anonymous (a question mark
(<code>?</code>)) or named (an identifier preceded by <code>:</code>). Both
declare a bind variables for <a href="#preparedStatement">prepared
statements</a>. The only difference between an anymous and a named variable is
that a named one will be easier to refer to (how exactly depends on the client
driver used).</p><p>The <code><properties></code> production is use by
statement that create and alter keyspaces and tables. Each
<code><property></code> is either a <em>simple</em> one, in which case it
just has a value, or a <em>map</em> one, in which case it’s value is a
map grouping sub-options. The following will refer to one
or the other as the <em>kind</em> (<em>simple</em> or <em>map</em>) of the
property.</p><p>A <code><tablename></code> will be used to identify a table.
This is an identifier representing the table name that can be preceded by a
keyspace name. The keyspace name, if provided, allow to identify a table in
another keyspace than the currently active one (the currently active keyspace
is set through the <a href="#useStmt"><tt>USE</tt></a> statement).</p><p>For
supported <code><function></code>, see the section on <a
href="#functions">functions</a>.</p><h3 id="preparedStatement">Prepared
Statement</h3><p>CQL supports <em>prepared statements</em>. Prepared statement
is an optimization that allows to parse a query only once but execute it
multiple times with different concrete values.</p><p>In a statement, each time
a column value is expected (in the data manipulation and query statements), a
<code><variable></code> (see above) can be used instead. A statement with
bind variables m
ust then be <em>prepared</em>. Once it has been prepared, it can executed by
providing concrete values for the bind variables. The exact procedure to
prepare a statement and execute a prepared statement depends on the CQL driver
used and is beyond the scope of this document.</p><h2 id="dataDefinition">Data
Definition</h2><h3 id="createKeyspaceStmt">CREATE
KEYSPACE</h3><p><i>Syntax:</i></p><pre
class="syntax"><pre><create-keyspace-stmt> ::= CREATE KEYSPACE (IF NOT
EXISTS)? <identifier> WITH <properties>
</pre></pre><p><br/><i>Sample:</i></p><pre class="sample"><pre>CREATE KEYSPACE
Excelsior
WITH replication = {'class': 'SimpleStrategy', 'replication_factor'
: 3};
@@ -148,6 +149,7 @@ USING TTL 86400;
<relation> ::= <identifier> '=' <term>
| <identifier> IN '(' ( <term> ( ',' <term> )* )? ')'
+ | <identifier> IN '?'
<option> ::= TIMESTAMP <integer>
| TTL <integer>
@@ -169,6 +171,7 @@ UPDATE UserActions SET total = total + 2
<relation> ::= <identifier> '=' <term>
| <identifier> IN '(' ( <term> ( ',' <term> )* )? ')'
+ | <identifier> IN '?'
</pre></pre><p><br/><i>Sample:</i></p><pre class="sample"><pre>DELETE FROM
NerdMovies USING TIMESTAMP 1240003134 WHERE movie = 'Serenity';
DELETE phone FROM Users WHERE userid IN (C73DE1D3-AF08-40F3-B124-3FF3E5109F22,
B70DE1D0-9908-4AE3-BE34-5573E5B09F14);
@@ -210,7 +213,7 @@ APPLY BATCH;
<relation> ::= <identifier> ('=' | '<' | '>' | '<=' | '>=')
<term>
| <identifier> IN '(' ( <term> ( ',' <term>)* )? ')'
- | TOKEN '(' <identifier> ')' ('=' | '<' | '>' | '<=' |
'>=') (<term> | TOKEN '(' <term> ')' )
+ | TOKEN '(' <identifier> ( ',' <identifer>)* ')' ('=' |
'<' | '>' | '<=' | '>=') <term>
<order-by> ::= <ordering> ( ',' <odering> )*
<ordering> ::= <identifer> ( ASC | DESC )?
@@ -323,4 +326,4 @@ UPDATE plays SET scores = scores - [ 12,
)
</pre></pre><p>then the <code>token</code> function will take a single
argument of type <code>text</code> (in that case, the partition key is
<code>userid</code> (there is no clustering key so the partition key is the
same than the primary key)), and the return type will be
<code>bigint</code>.</p><h3 id="timeuuidFun">Timeuuid functions</h3><h4
id="now"><code>now</code></h4><p>The <code>now</code> function takes no
arguments and generates a new unique timeuuid (at the time where the statement
using it is executed). Note that this method is useful for insertion but is
largely non-sensical in <code>WHERE</code> clauses. For instance, a query of
the form</p><pre class="sample"><pre>SELECT * FROM myTable WHERE t = now()
</pre></pre><p>will never return any result by design, since the value
returned by <code>now()</code> is guaranteed to be unique.</p><h4
id="minTimeuuidandmaxTimeuuid"><code>minTimeuuid</code> and
<code>maxTimeuuid</code></h4><p>The <code>minTimeuuid</code> (resp.
<code>maxTimeuuid</code>) function takes a <code>timestamp</code> value
<code>t</code> (which can be <a href="#usingdates">either a timestamp or a date
string</a>) and return a <em>fake</em> <code>timeuuid</code> corresponding to
the <em>smallest</em> (resp. <em>biggest</em>) possible <code>timeuuid</code>
having for timestamp <code>t</code>. So for instance:</p> <pre
class="sample"><pre>SELECT * FROM myTable WHERE t > maxTimeuuid('2013-01-01
00:05+0000') AND t < minTimeuuid('2013-02-02 10:00+0000')
-</pre></pre> <p>will select all rows where the <code>timeuuid</code> column
<code>t</code> is strictly older than ‘2013-01-01 00:05+0000’ but
stricly younger than ‘2013-02-02 10:00+0000’. Please note that
<code>t >= maxTimeuuid('2013-01-01 00:05+0000')</code> would still <em>not</em>
select a <code>timeuuid</code> generated exactly at ‘2013-01-01
00:05+0000’ and is essentially equivalent to <code>t >
maxTimeuuid('2013-01-01 00:05+0000')</code>.</p><p><em>Warning</em>: We called
the values generated by <code>minTimeuuid</code> and <code>maxTimeuuid</code>
<em>fake</em> UUID because they do no respect the Time-Based UUID generation
process specified by the <a href="http://www.ietf.org/rfc/rfc4122.txt">RFC
4122</a>. In particular, the value returned by these 2 methods will not be
unique. This means you should only use those methods for querying (as in the
example above). Inserting the result of those methods is almost certainly <em>a
bad idea</em>.<
/p><h4 id="dateOfandunixTimestampOf"><code>dateOf</code> and
<code>unixTimestampOf</code></h4><p>The <code>dateOf</code> and
<code>unixTimestampOf</code> functions take a <code>timeuuid</code> argument
and extract the embeded timestamp. However, while the <code>dateof</code>
function return it with the <code>timestamp</code> type (that most client,
including cqlsh, interpret as a date), the <code>unixTimestampOf</code>
function returns it as a <code>bigint</code> raw value.</p><h3
id="blobFun">Blob conversion functions</h3><p>A number of functions are
provided to “convert” the native types into binary data
(<code>blob</code>). For every <code><native-type></code> <code>type</code>
supported by CQL3 (a notable exceptions is <code>blob</code>, for obvious
reasons), the function <code>typeAsBlob</code> takes a argument of type
<code>type</code> and return it as a <code>blob</code>. Conversely, the
function <code>blobAsType</code> takes a 64-bit <code>blob</code> argumen
t and convert it to a <code>bigint</code> value. And so for instance,
<code>bigintAsBlob(3)</code> is <code>0x0000000000000003</code> and
<code>blobAsBigint(0x0000000000000003)</code> is <code>3</code>.</p><h2
id="appendixA">Appendix A: CQL Keywords</h2><p>CQL distinguishes between
<em>reserved</em> and <em>non-reserved</em> keywords. Reserved keywords cannot
be used as identifier, they are truly reserved for the language (but one can
enclose a reserved keyword by double-quotes to use it as an identifier).
Non-reserved keywords however only have a specific meaning in certain context
but can used as identifer otherwise. The only <em>raison d'être</em> of these
non-reserved keywords is convenience: some keyword are non-reserved when it was
always easy for the parser to decide whether they were used as keywords or
not.</p><table><tr><th>Keyword </th><th>Reserved?
</th></tr><tr><td><code>ADD</code> </td><td>yes
</td></tr><tr><td><code>ALL</code> </td><td>no <
/td></tr><tr><td><code>ALTER</code> </td><td>yes
</td></tr><tr><td><code>AND</code> </td><td>yes
</td></tr><tr><td><code>ANY</code> </td><td>yes
</td></tr><tr><td><code>APPLY</code> </td><td>yes
</td></tr><tr><td><code>AS</code> </td><td>no
</td></tr><tr><td><code>ASC</code> </td><td>yes
</td></tr><tr><td><code>ASCII</code> </td><td>no
</td></tr><tr><td><code>AUTHORIZE</code> </td><td>yes
</td></tr><tr><td><code>BATCH</code> </td><td>yes
</td></tr><tr><td><code>BEGIN</code> </td><td>yes
</td></tr><tr><td><code>BIGINT</code> </td><td>no
</td></tr><tr><td><code>BLOB</code> </td><td>no
</td></tr><tr><td><code>BOOLEAN</code> </td><td>no
</td></tr><tr><td><code>BY</code> </td><td>yes
</td></tr><tr><td><code>CLUSTERING</code> </td><td>no
</td></tr><tr><td><code>COLUMNFAMILY</code> </td><td>yes
</td></tr><tr><td><code>COMPACT</code> </td><td>no
</td></tr><tr><td><code>CONSI
STENCY</code> </td><td>no </td></tr><tr><td><code>COUNT</code>
</td><td>no </td></tr><tr><td><code>COUNTER</code> </td><td>no
</td></tr><tr><td><code>CREATE</code> </td><td>yes
</td></tr><tr><td><code>DECIMAL</code> </td><td>no
</td></tr><tr><td><code>DELETE</code> </td><td>yes
</td></tr><tr><td><code>DESC</code> </td><td>yes
</td></tr><tr><td><code>DOUBLE</code> </td><td>no
</td></tr><tr><td><code>DROP</code> </td><td>yes
</td></tr><tr><td><code>EACH_QUORUM</code> </td><td>yes
</td></tr><tr><td><code>FLOAT</code> </td><td>no
</td></tr><tr><td><code>FROM</code> </td><td>yes
</td></tr><tr><td><code>GRANT</code> </td><td>yes
</td></tr><tr><td><code>IN</code> </td><td>yes
</td></tr><tr><td><code>INDEX</code> </td><td>yes
</td></tr><tr><td><code>CUSTOM</code> </td><td>no
</td></tr><tr><td><code>INSERT</code> </td><td>yes
</td></tr><tr><td><code>INT</code> </td><td>no
</td></tr><tr><td><code>INTO</code> </td><td>yes
</td></tr><tr><td><code>KEY</code> </td><td>no
</td></tr><tr><td><code>KEYSPACE</code> </td><td>yes
</td></tr><tr><td><code>LEVEL</code> </td><td>no
</td></tr><tr><td><code>LIMIT</code> </td><td>yes
</td></tr><tr><td><code>LOCAL_QUORUM</code> </td><td>yes
</td></tr><tr><td><code>MODIFY</code> </td><td>yes
</td></tr><tr><td><code>NORECURSIVE</code> </td><td>yes
</td></tr><tr><td><code>NOSUPERUSER</code> </td><td>no
</td></tr><tr><td><code>OF</code> </td><td>yes
</td></tr><tr><td><code>ON</code> </td><td>yes
</td></tr><tr><td><code>ONE</code> </td><td>yes
</td></tr><tr><td><code>ORDER</code> </td><td>yes
</td></tr><tr><td><code>PASSWORD</code> </td><td>no
</td></tr><tr><td><code>PERMISSION</code> </td><td>no
</td></tr><tr><td><code>PERMISSIONS</code> </td><td>no
</td></tr><tr><td><code>PRIMARY</code> </td><td>yes
</td></tr><tr><td><code>QUOR
UM</code> </td><td>yes </td></tr><tr><td><code>REVOKE</code>
</td><td>yes </td></tr><tr><td><code>SCHEMA</code> </td><td>yes
</td></tr><tr><td><code>SELECT</code> </td><td>yes
</td></tr><tr><td><code>SET</code> </td><td>yes
</td></tr><tr><td><code>STORAGE</code> </td><td>no
</td></tr><tr><td><code>SUPERUSER</code> </td><td>no
</td></tr><tr><td><code>TABLE</code> </td><td>yes
</td></tr><tr><td><code>TEXT</code> </td><td>no
</td></tr><tr><td><code>TIMESTAMP</code> </td><td>no
</td></tr><tr><td><code>TIMEUUID</code> </td><td>no
</td></tr><tr><td><code>THREE</code> </td><td>yes
</td></tr><tr><td><code>TOKEN</code> </td><td>yes
</td></tr><tr><td><code>TRUNCATE</code> </td><td>yes
</td></tr><tr><td><code>TTL</code> </td><td>no
</td></tr><tr><td><code>TWO</code> </td><td>yes
</td></tr><tr><td><code>TYPE</code> </td><td>no
</td></tr><tr><td><code>UPDATE</code> </td><td>yes
</td></tr><tr><td><code>USE</code> </td><td>yes
</td></tr><tr><td><code>USER</code> </td><td>no
</td></tr><tr><td><code>USERS</code> </td><td>no
</td></tr><tr><td><code>USING</code> </td><td>yes
</td></tr><tr><td><code>UUID</code> </td><td>no
</td></tr><tr><td><code>VALUES</code> </td><td>no
</td></tr><tr><td><code>VARCHAR</code> </td><td>no
</td></tr><tr><td><code>VARINT</code> </td><td>no
</td></tr><tr><td><code>WHERE</code> </td><td>yes
</td></tr><tr><td><code>WITH</code> </td><td>yes
</td></tr><tr><td><code>WRITETIME</code> </td><td>no
</td></tr><tr><td><code>DISTINCT</code> </td><td>no </td></tr></table><h2
id="changes">Changes</h2><p>The following describes the addition/changes
brought for each version of CQL.</p><h3
id="a3.1.1">3.1.1</h3><ul><li><code>SELECT</code> statement now allows listing
the partition keys (using the <code>DISTINCT</code> modifier). See <a
href="https://issues.apache.
org/jira/browse/CASSANDRA-4536">CASSANDRA-4536</a>.</li></ul><h3
id="a3.1.0">3.1.0</h3><ul><li><a href="#alterTableStmt">ALTER TABLE</a>
<code>DROP</code> option has been reenabled for CQL3 tables and has new
semantics now: the space formerly used by dropped columns will now be
eventually reclaimed (post-compaction). You should not readd previously dropped
columns unless you use timestamps with microsecond precision (see <a
href="https://issues.apache.org/jira/browse/CASSANDRA-3919">CASSANDRA-3919</a>
for more details).</li><li><code>SELECT</code> statement now supports aliases
in select clause. Aliases in WHERE and ORDER BY clauses are not supported. See
the “section on select”#selectStmt for
details.</li><li><code>CREATE</code> statements for <code>KEYSPACE</code>,
<code>TABLE</code> and <code>INDEX</code> now supports an <code>IF NOT
EXISTS</code> condition. Similarly, <code>DROP</code> statements support a
<code>IF EXISTS</code> condition.</li><li><code>INSERT</code>
statements optionally supports a <code>IF NOT EXISTS</code> condition and
<code>UDPATE</code> supports <code>IF</code> conditions.</li></ul><h3
id="a3.0.5">3.0.5</h3><ul><li><code>SELECT</code>, <code>UPDATE</code>, and
<code>DELETE</code> statements now allow empty <code>IN</code> relations (see
<a
href="https://issues.apache.org/jira/browse/CASSANDRA-5626">CASSANDRA-5626</a>).</li></ul><h3
id="a3.0.4">3.0.4</h3><ul><li>Updated the syntax for custom <a
href="#createIndexStmt">secondary indexes</a>.</li><li>Non-equal condition on
the partition key are now never supported, even for ordering partitioner as
this was not correct (the order was <strong>not</strong> the one of the type of
the partition key). Instead, the <code>token</code> method should always be
used for range queries on the partition key (see <a href="#selectWhere">WHERE
clauses</a>).</li></ul><h3 id="a3.0.3">3.0.3</h3><ul><li>Support for custom <a
href="#createIndexStmt">secondary indexes</a> has been added.</li></ul>
<h3 id="a3.0.2">3.0.2</h3><ul><li>Type validation for the <a
href="#constants">constants</a> has been fixed. For instance, the
implementation used to allow <code>'2'</code> as a valid value for an
<code>int</code> column (interpreting it has the equivalent of <code>2</code>),
or <code>42</code> as a valid <code>blob</code> value (in which case
<code>42</code> was interpreted as an hexadecimal representation of the blob).
This is no longer the case, type validation of constants is now more strict.
See the <a href="#types">data types</a> section for details on which constant
is allowed for which type.</li><li>The type validation fixed of the previous
point has lead to the introduction of <a href="#constants">blobs constants</a>
to allow inputing blobs. Do note that while inputing blobs as strings constant
is still supported by this version (to allow smoother transition to blob
constant), it is now deprecated (in particular the <a href="#types">data
types</a> section does not list stri
ngs constants as valid blobs) and will be removed by a future version. If you
were using strings as blobs, you should thus update your client code asap to
switch blob constants.</li><li>A number of functions to convert native types to
blobs have also been introduced. Furthermore the token function is now also
allowed in select clauses. See the <a href="#functions">section on
functions</a> for details.</li></ul><h3 id="a3.0.1">3.0.1</h3><ul><li><a
href="#usingdates">Date strings</a> (and timestamps) are no longer accepted as
valid <code>timeuuid</code> values. Doing so was a bug in the sense that date
string are not valid <code>timeuuid</code>, and it was thus resulting in <a
href="https://issues.apache.org/jira/browse/CASSANDRA-4936">confusing
behaviors</a>. However, the following new methods have been added to help
working with <code>timeuuid</code>: <code>now</code>, <code>minTimeuuid</code>,
<code>maxTimeuuid</code> , <code>dateOf</code> and
<code>unixTimestampOf</code>. See the
<a href="#usingtimeuuid">section dedicated to these methods</a> for more
detail.</li><li>“Float constants”#constants now support the
exponent notation. In other words, <code>4.2E10</code> is now a valid floating
point value.</li></ul><h2 id="Versioning">Versioning</h2><p>Versioning of the
CQL language adheres to the <a href="http://semver.org">Semantic Versioning</a>
guidelines. Versions take the form X.Y.Z where X, Y, and Z are integer values
representing major, minor, and patch level respectively. There is no
correlation between Cassandra release versions and the CQL language
version.</p><table><tr><th>version</th><th>description</th></tr><tr><td>Major
</td><td>The major version <em>must</em> be bumped when backward incompatible
changes are introduced. This should rarely occur.</td></tr><tr><td>Minor
</td><td>Minor version increments occur when new, but backward compatible,
functionality is introduced.</td></tr><tr><td>Patch </td><td>The patch
version is i
ncremented when bugs are fixed.</td></tr></table></body></html>
\ No newline at end of file
+</pre></pre> <p>will select all rows where the <code>timeuuid</code> column
<code>t</code> is strictly older than ‘2013-01-01 00:05+0000’ but
stricly younger than ‘2013-02-02 10:00+0000’. Please note that
<code>t >= maxTimeuuid('2013-01-01 00:05+0000')</code> would still <em>not</em>
select a <code>timeuuid</code> generated exactly at ‘2013-01-01
00:05+0000’ and is essentially equivalent to <code>t >
maxTimeuuid('2013-01-01 00:05+0000')</code>.</p><p><em>Warning</em>: We called
the values generated by <code>minTimeuuid</code> and <code>maxTimeuuid</code>
<em>fake</em> UUID because they do no respect the Time-Based UUID generation
process specified by the <a href="http://www.ietf.org/rfc/rfc4122.txt">RFC
4122</a>. In particular, the value returned by these 2 methods will not be
unique. This means you should only use those methods for querying (as in the
example above). Inserting the result of those methods is almost certainly <em>a
bad idea</em>.<
/p><h4 id="dateOfandunixTimestampOf"><code>dateOf</code> and
<code>unixTimestampOf</code></h4><p>The <code>dateOf</code> and
<code>unixTimestampOf</code> functions take a <code>timeuuid</code> argument
and extract the embeded timestamp. However, while the <code>dateof</code>
function return it with the <code>timestamp</code> type (that most client,
including cqlsh, interpret as a date), the <code>unixTimestampOf</code>
function returns it as a <code>bigint</code> raw value.</p><h3
id="blobFun">Blob conversion functions</h3><p>A number of functions are
provided to “convert” the native types into binary data
(<code>blob</code>). For every <code><native-type></code> <code>type</code>
supported by CQL3 (a notable exceptions is <code>blob</code>, for obvious
reasons), the function <code>typeAsBlob</code> takes a argument of type
<code>type</code> and return it as a <code>blob</code>. Conversely, the
function <code>blobAsType</code> takes a 64-bit <code>blob</code> argumen
t and convert it to a <code>bigint</code> value. And so for instance,
<code>bigintAsBlob(3)</code> is <code>0x0000000000000003</code> and
<code>blobAsBigint(0x0000000000000003)</code> is <code>3</code>.</p><h2
id="appendixA">Appendix A: CQL Keywords</h2><p>CQL distinguishes between
<em>reserved</em> and <em>non-reserved</em> keywords. Reserved keywords cannot
be used as identifier, they are truly reserved for the language (but one can
enclose a reserved keyword by double-quotes to use it as an identifier).
Non-reserved keywords however only have a specific meaning in certain context
but can used as identifer otherwise. The only <em>raison d'être</em> of these
non-reserved keywords is convenience: some keyword are non-reserved when it was
always easy for the parser to decide whether they were used as keywords or
not.</p><table><tr><th>Keyword </th><th>Reserved?
</th></tr><tr><td><code>ADD</code> </td><td>yes
</td></tr><tr><td><code>ALL</code> </td><td>no <
/td></tr><tr><td><code>ALTER</code> </td><td>yes
</td></tr><tr><td><code>AND</code> </td><td>yes
</td></tr><tr><td><code>ANY</code> </td><td>yes
</td></tr><tr><td><code>APPLY</code> </td><td>yes
</td></tr><tr><td><code>AS</code> </td><td>no
</td></tr><tr><td><code>ASC</code> </td><td>yes
</td></tr><tr><td><code>ASCII</code> </td><td>no
</td></tr><tr><td><code>AUTHORIZE</code> </td><td>yes
</td></tr><tr><td><code>BATCH</code> </td><td>yes
</td></tr><tr><td><code>BEGIN</code> </td><td>yes
</td></tr><tr><td><code>BIGINT</code> </td><td>no
</td></tr><tr><td><code>BLOB</code> </td><td>no
</td></tr><tr><td><code>BOOLEAN</code> </td><td>no
</td></tr><tr><td><code>BY</code> </td><td>yes
</td></tr><tr><td><code>CLUSTERING</code> </td><td>no
</td></tr><tr><td><code>COLUMNFAMILY</code> </td><td>yes
</td></tr><tr><td><code>COMPACT</code> </td><td>no
</td></tr><tr><td><code>CONSI
STENCY</code> </td><td>no </td></tr><tr><td><code>COUNT</code>
</td><td>no </td></tr><tr><td><code>COUNTER</code> </td><td>no
</td></tr><tr><td><code>CREATE</code> </td><td>yes
</td></tr><tr><td><code>DECIMAL</code> </td><td>no
</td></tr><tr><td><code>DELETE</code> </td><td>yes
</td></tr><tr><td><code>DESC</code> </td><td>yes
</td></tr><tr><td><code>DOUBLE</code> </td><td>no
</td></tr><tr><td><code>DROP</code> </td><td>yes
</td></tr><tr><td><code>EACH_QUORUM</code> </td><td>yes
</td></tr><tr><td><code>FLOAT</code> </td><td>no
</td></tr><tr><td><code>FROM</code> </td><td>yes
</td></tr><tr><td><code>GRANT</code> </td><td>yes
</td></tr><tr><td><code>IN</code> </td><td>yes
</td></tr><tr><td><code>INDEX</code> </td><td>yes
</td></tr><tr><td><code>CUSTOM</code> </td><td>no
</td></tr><tr><td><code>INSERT</code> </td><td>yes
</td></tr><tr><td><code>INT</code> </td><td>no
</td></tr><tr><td><code>INTO</code> </td><td>yes
</td></tr><tr><td><code>KEY</code> </td><td>no
</td></tr><tr><td><code>KEYSPACE</code> </td><td>yes
</td></tr><tr><td><code>LEVEL</code> </td><td>no
</td></tr><tr><td><code>LIMIT</code> </td><td>yes
</td></tr><tr><td><code>LOCAL_QUORUM</code> </td><td>yes
</td></tr><tr><td><code>MODIFY</code> </td><td>yes
</td></tr><tr><td><code>NORECURSIVE</code> </td><td>yes
</td></tr><tr><td><code>NOSUPERUSER</code> </td><td>no
</td></tr><tr><td><code>OF</code> </td><td>yes
</td></tr><tr><td><code>ON</code> </td><td>yes
</td></tr><tr><td><code>ONE</code> </td><td>yes
</td></tr><tr><td><code>ORDER</code> </td><td>yes
</td></tr><tr><td><code>PASSWORD</code> </td><td>no
</td></tr><tr><td><code>PERMISSION</code> </td><td>no
</td></tr><tr><td><code>PERMISSIONS</code> </td><td>no
</td></tr><tr><td><code>PRIMARY</code> </td><td>yes
</td></tr><tr><td><code>QUOR
UM</code> </td><td>yes </td></tr><tr><td><code>REVOKE</code>
</td><td>yes </td></tr><tr><td><code>SCHEMA</code> </td><td>yes
</td></tr><tr><td><code>SELECT</code> </td><td>yes
</td></tr><tr><td><code>SET</code> </td><td>yes
</td></tr><tr><td><code>STORAGE</code> </td><td>no
</td></tr><tr><td><code>SUPERUSER</code> </td><td>no
</td></tr><tr><td><code>TABLE</code> </td><td>yes
</td></tr><tr><td><code>TEXT</code> </td><td>no
</td></tr><tr><td><code>TIMESTAMP</code> </td><td>no
</td></tr><tr><td><code>TIMEUUID</code> </td><td>no
</td></tr><tr><td><code>THREE</code> </td><td>yes
</td></tr><tr><td><code>TOKEN</code> </td><td>yes
</td></tr><tr><td><code>TRUNCATE</code> </td><td>yes
</td></tr><tr><td><code>TTL</code> </td><td>no
</td></tr><tr><td><code>TWO</code> </td><td>yes
</td></tr><tr><td><code>TYPE</code> </td><td>no
</td></tr><tr><td><code>UPDATE</code> </td><td>yes
</td></tr><tr><td><code>USE</code> </td><td>yes
</td></tr><tr><td><code>USER</code> </td><td>no
</td></tr><tr><td><code>USERS</code> </td><td>no
</td></tr><tr><td><code>USING</code> </td><td>yes
</td></tr><tr><td><code>UUID</code> </td><td>no
</td></tr><tr><td><code>VALUES</code> </td><td>no
</td></tr><tr><td><code>VARCHAR</code> </td><td>no
</td></tr><tr><td><code>VARINT</code> </td><td>no
</td></tr><tr><td><code>WHERE</code> </td><td>yes
</td></tr><tr><td><code>WITH</code> </td><td>yes
</td></tr><tr><td><code>WRITETIME</code> </td><td>no
</td></tr><tr><td><code>DISTINCT</code> </td><td>no </td></tr></table><h2
id="changes">Changes</h2><p>The following describes the addition/changes
brought for each version of CQL.</p><h3
id="a3.1.1">3.1.1</h3><ul><li><code>SELECT</code> statement now allows listing
the partition keys (using the <code>DISTINCT</code> modifier). See <a
href="https://issues.apache.
org/jira/browse/CASSANDRA-4536">CASSANDRA-4536</a>.</li><li>The syntax <code>c
IN ?</code> is now supported in <code>WHERE</code> clauses. In that case, the
value expected for the bind variable will be a list of whatever type
<code>c</code> is.</li><li>It is now possible to use named bind variables
(using <code>:name</code> instead of <code>?</code>).</li></ul><h3
id="a3.1.0">3.1.0</h3><ul><li><a href="#alterTableStmt">ALTER TABLE</a>
<code>DROP</code> option has been reenabled for CQL3 tables and has new
semantics now: the space formerly used by dropped columns will now be
eventually reclaimed (post-compaction). You should not readd previously dropped
columns unless you use timestamps with microsecond precision (see <a
href="https://issues.apache.org/jira/browse/CASSANDRA-3919">CASSANDRA-3919</a>
for more details).</li><li><code>SELECT</code> statement now supports aliases
in select clause. Aliases in WHERE and ORDER BY clauses are not supported. See
the “section on select
221;#selectStmt for details.</li><li><code>CREATE</code> statements for
<code>KEYSPACE</code>, <code>TABLE</code> and <code>INDEX</code> now supports
an <code>IF NOT EXISTS</code> condition. Similarly, <code>DROP</code>
statements support a <code>IF EXISTS</code>
condition.</li><li><code>INSERT</code> statements optionally supports a
<code>IF NOT EXISTS</code> condition and <code>UDPATE</code> supports
<code>IF</code> conditions.</li></ul><h3
id="a3.0.5">3.0.5</h3><ul><li><code>SELECT</code>, <code>UPDATE</code>, and
<code>DELETE</code> statements now allow empty <code>IN</code> relations (see
<a
href="https://issues.apache.org/jira/browse/CASSANDRA-5626">CASSANDRA-5626</a>).</li></ul><h3
id="a3.0.4">3.0.4</h3><ul><li>Updated the syntax for custom <a
href="#createIndexStmt">secondary indexes</a>.</li><li>Non-equal condition on
the partition key are now never supported, even for ordering partitioner as
this was not correct (the order was <strong>not</strong> the one of the type of
th
e partition key). Instead, the <code>token</code> method should always be used
for range queries on the partition key (see <a href="#selectWhere">WHERE
clauses</a>).</li></ul><h3 id="a3.0.3">3.0.3</h3><ul><li>Support for custom <a
href="#createIndexStmt">secondary indexes</a> has been added.</li></ul><h3
id="a3.0.2">3.0.2</h3><ul><li>Type validation for the <a
href="#constants">constants</a> has been fixed. For instance, the
implementation used to allow <code>'2'</code> as a valid value for an
<code>int</code> column (interpreting it has the equivalent of <code>2</code>),
or <code>42</code> as a valid <code>blob</code> value (in which case
<code>42</code> was interpreted as an hexadecimal representation of the blob).
This is no longer the case, type validation of constants is now more strict.
See the <a href="#types">data types</a> section for details on which constant
is allowed for which type.</li><li>The type validation fixed of the previous
point has lead to the introduction of
<a href="#constants">blobs constants</a> to allow inputing blobs. Do note that
while inputing blobs as strings constant is still supported by this version (to
allow smoother transition to blob constant), it is now deprecated (in
particular the <a href="#types">data types</a> section does not list strings
constants as valid blobs) and will be removed by a future version. If you were
using strings as blobs, you should thus update your client code asap to switch
blob constants.</li><li>A number of functions to convert native types to blobs
have also been introduced. Furthermore the token function is now also allowed
in select clauses. See the <a href="#functions">section on functions</a> for
details.</li></ul><h3 id="a3.0.1">3.0.1</h3><ul><li><a href="#usingdates">Date
strings</a> (and timestamps) are no longer accepted as valid
<code>timeuuid</code> values. Doing so was a bug in the sense that date string
are not valid <code>timeuuid</code>, and it was thus resulting in <a href="https
://issues.apache.org/jira/browse/CASSANDRA-4936">confusing behaviors</a>.
However, the following new methods have been added to help working with
<code>timeuuid</code>: <code>now</code>, <code>minTimeuuid</code>,
<code>maxTimeuuid</code> , <code>dateOf</code> and
<code>unixTimestampOf</code>. See the <a href="#usingtimeuuid">section
dedicated to these methods</a> for more detail.</li><li>“Float
constants”#constants now support the exponent notation. In other words,
<code>4.2E10</code> is now a valid floating point value.</li></ul><h2
id="Versioning">Versioning</h2><p>Versioning of the CQL language adheres to the
<a href="http://semver.org">Semantic Versioning</a> guidelines. Versions take
the form X.Y.Z where X, Y, and Z are integer values representing major, minor,
and patch level respectively. There is no correlation between Cassandra release
versions and the CQL language
version.</p><table><tr><th>version</th><th>description</th></tr><tr><td>Major
</td><td>The ma
jor version <em>must</em> be bumped when backward incompatible changes are
introduced. This should rarely occur.</td></tr><tr><td>Minor </td><td>Minor
version increments occur when new, but backward compatible, functionality is
introduced.</td></tr><tr><td>Patch </td><td>The patch version is
incremented when bugs are fixed.</td></tr></table></body></html>
\ No newline at end of file
Modified: cassandra/site/publish/download/index.html
URL:
http://svn.apache.org/viewvc/cassandra/site/publish/download/index.html?rev=1525592&r1=1525591&r2=1525592&view=diff
==============================================================================
--- cassandra/site/publish/download/index.html (original)
+++ cassandra/site/publish/download/index.html Mon Sep 23 13:52:02 2013
@@ -49,8 +49,8 @@
Cassandra releases include the core server, the <a
href="http://wiki.apache.org/cassandra/NodeTool">nodetool</a> administration
command-line interface, and a development shell (<a
href="http://cassandra.apache.org/doc/cql/CQL.html"><tt>cqlsh</tt></a> and the
old <tt>cassandra-cli</tt>).
<p>
- The latest stable release of Apache Cassandra is 2.0.0
- (released on 2013-09-03). <i>If you're just
+ The latest stable release of Apache Cassandra is 2.0.1
+ (released on 2013-09-23). <i>If you're just
starting out, download this one.</i>
</p>
@@ -59,13 +59,13 @@
<ul>
<li>
<a class="filename"
-
href="http://www.apache.org/dyn/closer.cgi?path=/cassandra/2.0.0/apache-cassandra-2.0.0-bin.tar.gz"
+
href="http://www.apache.org/dyn/closer.cgi?path=/cassandra/2.0.1/apache-cassandra-2.0.1-bin.tar.gz"
onclick="javascript:
pageTracker._trackPageview('/clicks/binary_download');">
- apache-cassandra-2.0.0-bin.tar.gz
+ apache-cassandra-2.0.1-bin.tar.gz
</a>
- [<a
href="http://www.apache.org/dist/cassandra/2.0.0/apache-cassandra-2.0.0-bin.tar.gz.asc">PGP</a>]
- [<a
href="http://www.apache.org/dist/cassandra/2.0.0/apache-cassandra-2.0.0-bin.tar.gz.md5">MD5</a>]
- [<a
href="http://www.apache.org/dist/cassandra/2.0.0/apache-cassandra-2.0.0-bin.tar.gz.sha1">SHA1</a>]
+ [<a
href="http://www.apache.org/dist/cassandra/2.0.1/apache-cassandra-2.0.1-bin.tar.gz.asc">PGP</a>]
+ [<a
href="http://www.apache.org/dist/cassandra/2.0.1/apache-cassandra-2.0.1-bin.tar.gz.md5">MD5</a>]
+ [<a
href="http://www.apache.org/dist/cassandra/2.0.1/apache-cassandra-2.0.1-bin.tar.gz.sha1">SHA1</a>]
</li>
<li>
<a href="http://wiki.apache.org/cassandra/DebianPackaging">Debian
installation instructions</a>
@@ -144,13 +144,13 @@
<ul>
<li>
<a class="filename"
-
href="http://www.apache.org/dyn/closer.cgi?path=/cassandra/2.0.0/apache-cassandra-2.0.0-src.tar.gz"
+
href="http://www.apache.org/dyn/closer.cgi?path=/cassandra/2.0.1/apache-cassandra-2.0.1-src.tar.gz"
onclick="javascript:
pageTracker._trackPageview('/clicks/source_download');">
- apache-cassandra-2.0.0-src.tar.gz
+ apache-cassandra-2.0.1-src.tar.gz
</a>
- [<a
href="http://www.apache.org/dist/cassandra/2.0.0/apache-cassandra-2.0.0-src.tar.gz.asc">PGP</a>]
- [<a
href="http://www.apache.org/dist/cassandra/2.0.0/apache-cassandra-2.0.0-src.tar.gz.md5">MD5</a>]
- [<a
href="http://www.apache.org/dist/cassandra/2.0.0/apache-cassandra-2.0.0-src.tar.gz.sha1">SHA1</a>]
+ [<a
href="http://www.apache.org/dist/cassandra/2.0.1/apache-cassandra-2.0.1-src.tar.gz.asc">PGP</a>]
+ [<a
href="http://www.apache.org/dist/cassandra/2.0.1/apache-cassandra-2.0.1-src.tar.gz.md5">MD5</a>]
+ [<a
href="http://www.apache.org/dist/cassandra/2.0.1/apache-cassandra-2.0.1-src.tar.gz.sha1">SHA1</a>]
</li>
<li>
Modified: cassandra/site/publish/index.html
URL:
http://svn.apache.org/viewvc/cassandra/site/publish/index.html?rev=1525592&r1=1525591&r2=1525592&view=diff
==============================================================================
--- cassandra/site/publish/index.html (original)
+++ cassandra/site/publish/index.html Mon Sep 23 13:52:02 2013
@@ -76,8 +76,8 @@
<h2>Download</h2>
<div class="inner rc">
<p>
- The latest release is <b>2.0.0</b>
- <span class="relnotes">(<a
href="http://git-wip-us.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=refs/tags/cassandra-2.0.0">Changes</a>)</span>
+ The latest release is <b>2.0.1</b>
+ <span class="relnotes">(<a
href="http://git-wip-us.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=refs/tags/cassandra-2.0.1">Changes</a>)</span>
</p>
<p><a class="filename" href="/download/">Download options</a></p>
Modified: cassandra/site/src/settings.py
URL:
http://svn.apache.org/viewvc/cassandra/site/src/settings.py?rev=1525592&r1=1525591&r2=1525592&view=diff
==============================================================================
--- cassandra/site/src/settings.py (original)
+++ cassandra/site/src/settings.py Mon Sep 23 13:52:02 2013
@@ -98,8 +98,8 @@ class CassandraDef(object):
veryoldstable_version = '1.1.12'
veryoldstable_release_date = '2013-05-27'
veryoldstable_exists = True
- stable_version = '2.0.0'
- stable_release_date = '2013-09-03'
+ stable_version = '2.0.1'
+ stable_release_date = '2013-09-23'
devel_version = '2.0.0-rc2'
devel_release_date = '2013-08-20'
devel_exists = False