Author: slebresne
Date: Wed Jun 26 14:51:33 2013
New Revision: 1496950

URL: http://svn.apache.org/r1496950
Log:
Update website for 1.2.6 release

Modified:
    cassandra/site/publish/doc/cql3/CQL.html
    cassandra/site/publish/download/index.html
    cassandra/site/publish/index.html
    cassandra/site/src/settings.py

Modified: cassandra/site/publish/doc/cql3/CQL.html
URL: 
http://svn.apache.org/viewvc/cassandra/site/publish/doc/cql3/CQL.html?rev=1496950&r1=1496949&r2=1496950&view=diff
==============================================================================
--- cassandra/site/publish/doc/cql3/CQL.html (original)
+++ cassandra/site/publish/doc/cql3/CQL.html Wed Jun 26 14:51:33 2013
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD 
XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";><html 
xmlns="http://www.w3.org/1999/xhtml";><head><meta http-equiv="Content-Type" 
content="text/html; charset=utf-8"/><title>CQL</title></head><body><p><link 
rel="StyleSheet" href="CQL.css" type="text/css" media="screen"></p><h1 
id="CassandraQueryLanguageCQLv3.0.3">Cassandra Query Language (CQL) 
v3.0.3</h1><span id="tableOfContents"><ol style="list-style: none;"><li><a 
href="CQL.html#CassandraQueryLanguageCQLv3.0.3">Cassandra Query Language (CQL) 
v3.0.3</a><ol style="list-style: none;"><li><a href="CQL.html#CQLSyntax">CQL 
Syntax</a><ol style="list-style: none;"><li><a 
href="CQL.html#Preamble">Preamble</a></li><li><a 
href="CQL.html#Conventions">Conventions</a></li><li><a 
href="CQL.html#identifiers">Identifiers and keywords</a></li><li><a 
href="CQL.html#constants">Constants</a></li><li><a 
href="CQL.html#Comments">Comment
 s</a></li><li><a href="CQL.html#statements">Statements</a></li><li><a 
href="CQL.html#preparedStatement">Prepared Statement</a></li></ol></li><li><a 
href="CQL.html#dataDefinition">Data Definition</a><ol style="list-style: 
none;"><li><a href="CQL.html#createKeyspaceStmt">CREATE KEYSPACE</a></li><li><a 
href="CQL.html#useStmt">USE</a></li><li><a 
href="CQL.html#alterKeyspaceStmt">ALTER KEYSPACE</a></li><li><a 
href="CQL.html#dropKeyspaceStmt">DROP KEYSPACE</a></li><li><a 
href="CQL.html#createTableStmt">CREATE TABLE</a></li><li><a 
href="CQL.html#alterTableStmt">ALTER TABLE</a></li><li><a 
href="CQL.html#dropTableStmt">DROP TABLE</a></li><li><a 
href="CQL.html#truncateStmt">TRUNCATE</a></li><li><a 
href="CQL.html#createIndexStmt">CREATE INDEX</a></li><li><a 
href="CQL.html#dropIndexStmt">DROP INDEX</a></li></ol></li><li><a 
href="CQL.html#dataManipulation">Data Manipulation</a><ol style="list-style: 
none;"><li><a href="CQL.html#insertStmt">INSERT</a></li><li><a 
href="CQL.html#updateStmt"
 >UPDATE</a></li><li><a href="CQL.html#deleteStmt">DELETE</a></li><li><a 
 >href="CQL.html#batchStmt">BATCH</a></li></ol></li><li><a 
 >href="CQL.html#queries">Queries</a><ol style="list-style: none;"><li><a 
 >href="CQL.html#selectStmt">SELECT</a></li></ol></li><li><a 
 >href="CQL.html#types">Data Types</a><ol style="list-style: none;"><li><a 
 >href="CQL.html#usingdates">Working with dates</a></li><li><a 
 >href="CQL.html#counters">Counters</a></li><li><a 
 >href="CQL.html#collections">Working with collections</a></li></ol></li><li><a 
 >href="CQL.html#functions">Functions</a><ol style="list-style: none;"><li><a 
 >href="CQL.html#tokenFun">Token</a></li><li><a 
 >href="CQL.html#timeuuidFun">Timeuuid functions</a></li><li><a 
 >href="CQL.html#blobFun">Blob conversion functions</a></li></ol></li><li><a 
 >href="CQL.html#appendixA">Appendix A: CQL Keywords</a></li><li><a 
 >href="CQL.html#changes">Changes</a><ol style="list-style: none;"><li><a 
 >href="CQL.html#a3.0.3">3.0.3</a></li><li><a href="CQL.html#a3.0.2">3.0.
 2</a></li><li><a href="CQL.html#a3.0.1">3.0.1</a></li></ol></li><li><a 
href="CQL.html#Versioning">Versioning</a></li></ol></li></ol></span><h2 
id="CQLSyntax">CQL Syntax</h2><h3 id="Preamble">Preamble</h3><p>This document 
describes the Cassandra Query Language (CQL) version 3. CQL v3 is not backward 
compatible with CQL v2 and differs from it in numerous ways. Note that this 
document describes the last version of the languages. However, the <a 
href="#changes">changes</a> section provides the diff between the different 
versions of CQL v3.</p><p>CQL v3 offers a model very close to SQL in the sense 
that data is put in <em>tables</em> containing <em>rows</em> of 
<em>columns</em>. For that reason, when used in this document, these terms 
(tables, rows and columns) have the same definition than they have in SQL. But 
please note that as such, they do <strong>not</strong> refer to the concept of 
rows and columns found in the internal implementation of Cassandra and in the 
thrift and CQ
 L v2 API.</p><h3 id="Conventions">Conventions</h3><p>To aid in specifying the 
CQL syntax, we will use the following conventions in this 
document:</p><ul><li>Language rules will be given in a <a 
href="http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form";>BNF</a> -like 
notation:</li></ul><pre class="syntax"><pre>&lt;start> ::= TERMINAL 
&lt;non-terminal1> &lt;non-terminal1>
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD 
XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";><html 
xmlns="http://www.w3.org/1999/xhtml";><head><meta http-equiv="Content-Type" 
content="text/html; charset=utf-8"/><title>CQL</title></head><body><p><link 
rel="StyleSheet" href="CQL.css" type="text/css" media="screen"></p><h1 
id="CassandraQueryLanguageCQLv3.0.4">Cassandra Query Language (CQL) 
v3.0.4</h1><span id="tableOfContents"><ol style="list-style: none;"><li><a 
href="CQL.html#CassandraQueryLanguageCQLv3.0.4">Cassandra Query Language (CQL) 
v3.0.4</a><ol style="list-style: none;"><li><a href="CQL.html#CQLSyntax">CQL 
Syntax</a><ol style="list-style: none;"><li><a 
href="CQL.html#Preamble">Preamble</a></li><li><a 
href="CQL.html#Conventions">Conventions</a></li><li><a 
href="CQL.html#identifiers">Identifiers and keywords</a></li><li><a 
href="CQL.html#constants">Constants</a></li><li><a 
href="CQL.html#Comments">Comment
 s</a></li><li><a href="CQL.html#statements">Statements</a></li><li><a 
href="CQL.html#preparedStatement">Prepared Statement</a></li></ol></li><li><a 
href="CQL.html#dataDefinition">Data Definition</a><ol style="list-style: 
none;"><li><a href="CQL.html#createKeyspaceStmt">CREATE KEYSPACE</a></li><li><a 
href="CQL.html#useStmt">USE</a></li><li><a 
href="CQL.html#alterKeyspaceStmt">ALTER KEYSPACE</a></li><li><a 
href="CQL.html#dropKeyspaceStmt">DROP KEYSPACE</a></li><li><a 
href="CQL.html#createTableStmt">CREATE TABLE</a></li><li><a 
href="CQL.html#alterTableStmt">ALTER TABLE</a></li><li><a 
href="CQL.html#dropTableStmt">DROP TABLE</a></li><li><a 
href="CQL.html#truncateStmt">TRUNCATE</a></li><li><a 
href="CQL.html#createIndexStmt">CREATE INDEX</a></li><li><a 
href="CQL.html#dropIndexStmt">DROP INDEX</a></li></ol></li><li><a 
href="CQL.html#dataManipulation">Data Manipulation</a><ol style="list-style: 
none;"><li><a href="CQL.html#insertStmt">INSERT</a></li><li><a 
href="CQL.html#updateStmt"
 >UPDATE</a></li><li><a href="CQL.html#deleteStmt">DELETE</a></li><li><a 
 >href="CQL.html#batchStmt">BATCH</a></li></ol></li><li><a 
 >href="CQL.html#queries">Queries</a><ol style="list-style: none;"><li><a 
 >href="CQL.html#selectStmt">SELECT</a></li></ol></li><li><a 
 >href="CQL.html#types">Data Types</a><ol style="list-style: none;"><li><a 
 >href="CQL.html#usingdates">Working with dates</a></li><li><a 
 >href="CQL.html#counters">Counters</a></li><li><a 
 >href="CQL.html#collections">Working with collections</a></li></ol></li><li><a 
 >href="CQL.html#functions">Functions</a><ol style="list-style: none;"><li><a 
 >href="CQL.html#tokenFun">Token</a></li><li><a 
 >href="CQL.html#timeuuidFun">Timeuuid functions</a></li><li><a 
 >href="CQL.html#blobFun">Blob conversion functions</a></li></ol></li><li><a 
 >href="CQL.html#appendixA">Appendix A: CQL Keywords</a></li><li><a 
 >href="CQL.html#changes">Changes</a><ol style="list-style: none;"><li><a 
 >href="CQL.html#a3.0.4">3.0.4</a></li><li><a href="CQL.html#a3.0.3">3.0.
 3</a></li><li><a href="CQL.html#a3.0.2">3.0.2</a></li><li><a 
href="CQL.html#a3.0.1">3.0.1</a></li></ol></li><li><a 
href="CQL.html#Versioning">Versioning</a></li></ol></li></ol></span><h2 
id="CQLSyntax">CQL Syntax</h2><h3 id="Preamble">Preamble</h3><p>This document 
describes the Cassandra Query Language (CQL) version 3. CQL v3 is not backward 
compatible with CQL v2 and differs from it in numerous ways. Note that this 
document describes the last version of the languages. However, the <a 
href="#changes">changes</a> section provides the diff between the different 
versions of CQL v3.</p><p>CQL v3 offers a model very close to SQL in the sense 
that data is put in <em>tables</em> containing <em>rows</em> of 
<em>columns</em>. For that reason, when used in this document, these terms 
(tables, rows and columns) have the same definition than they have in SQL. But 
please note that as such, they do <strong>not</strong> refer to the concept of 
rows and columns found in the internal implemen
 tation of Cassandra and in the thrift and CQL v2 API.</p><h3 
id="Conventions">Conventions</h3><p>To aid in specifying the CQL syntax, we 
will use the following conventions in this document:</p><ul><li>Language rules 
will be given in a <a 
href="http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form";>BNF</a> -like 
notation:</li></ul><pre class="syntax"><pre>&lt;start> ::= TERMINAL 
&lt;non-terminal1> &lt;non-terminal1>
 </pre></pre><ul><li>Nonterminal symbols will have <code>&lt;angle 
brackets></code>.</li><li>As additional shortcut notations to BNF, we&#8217;ll 
use traditional regular expression&#8217;s symbols (<code>?</code>, 
<code>+</code> and <code>*</code>) to signify that a given symbol is optional 
and/or can be repeated. We&#8217;ll also allow parentheses to group symbols and 
the <code>[&lt;characters>]</code> notation to represent any one of 
<code>&lt;characters></code>.</li><li>The grammar is provided for documentation 
purposes and leave some minor details out. For instance, the last column 
definition in a <code>CREATE TABLE</code> statement is optional but supported 
if present even though the provided grammar in this document suggest it is not 
supported. </li><li>Sample code will be provided in a code block:</li></ul><pre 
class="sample"><pre>SELECT sample_usage FROM cql;
 </pre></pre><ul><li>References to keywords or pieces of CQL code in running 
text will be shown in a <code>fixed-width font</code>.</li></ul><h3 
id="identifiers">Identifiers and keywords</h3><p>The CQL language uses 
<em>identifiers</em> (or <em>names</em>) to identify tables, columns and other 
objects. An identifier is a token matching the regular expression <code 
lang="a-zA-Z">[a-zA-Z0-9_]</code><code>*</code>.</p><p>A number of such 
identifiers, like <code>SELECT</code> or <code>WITH</code>, are 
<em>keywords</em>. They have a fixed meaning for the language and most are 
reserved. The list of those keywords can be found in <a 
href="#appendixA">Appendix A</a>.</p><p>Identifiers and (unquoted) keywords are 
case insensitive. Thus <code>SELECT</code> is the same than <code>select</code> 
or <code>sElEcT</code>, and <code>myId</code> is the same than 
<code>myid</code> or <code>MYID</code> for instance. A convention often used 
(in particular by the samples of this documentation) is 
 to use upper case for keywords and lower case for other 
identifiers.</p><p>There is a second kind of identifiers called <em>quoted 
identifiers</em> defined by enclosing an arbitrary sequence of characters in 
double-quotes(<code>"</code>). Quoted identifiers are never keywords. Thus 
<code>"select"</code> is not a reserved keyword and can be used to refer to a 
column, while <code>select</code> would raise a parse error. Also, contrarily 
to unquoted identifiers and keywords, quoted identifiers are case sensitive 
(<code>"My Quoted Id"</code> is <em>different</em> from <code>"my quoted 
id"</code>). A fully lowercase quoted identifier that matches <code 
lang="a-zA-Z">[a-zA-Z0-9_]</code><code>*</code> is equivalent to the unquoted 
identifier obtained by removing the double-quote (so <code>"myid"</code> is 
equivalent to <code>myid</code> and to <code>myId</code> but different from 
<code>"myId"</code>). Inside a quoted identifier, the double-quote character 
can be repeated to escape 
 it, so <code>"foo "" bar"</code> is a valid identifier.</p><h3 
id="constants">Constants</h3><p>CQL defines the following kind of 
<em>constants</em>: strings, integers, floats, booleans, uuids and 
blobs:</p><ul><li>A string constant is an arbitrary sequence of characters 
characters enclosed by single-quote(<code>'</code>). One can include a 
single-quote in a string by repeating it, e.g. <code>'It''s raining 
today'</code>. Those are not to be confused with quoted identifiers that use 
double-quotes.</li><li>An integer constant is defined by 
<code>'-'?[0-9]+</code>.</li><li>A float constant is defined by 
<code>'-'?[0-9]+('.'[0-9]*)?([eE][+-]?[0-9+])?</code>.</li><li>A boolean 
constant is either <code>true</code> or <code>false</code> up to 
case-insensitivity (i.e. <code>True</code> is a valid boolean 
constant).</li><li>A <a 
href="http://en.wikipedia.org/wiki/Universally_unique_identifier";>UUID</a> 
constant is defined by <code>hex{8}-hex{4}-hex{4}-hex{4}-hex{12}</code> where 
<cod
 e>hex</code> is an hexadecimal character, e.g. <code>[0-9a-fA-F]</code> and 
<code>{4}</code> is the number of such characters.</li><li>A blob constant is 
an hexadecimal number defined by <code>0[xX](hex)+</code> where 
<code>hex</code> is an hexadecimal character, e.g. 
<code>[0-9a-fA-F]</code>.</li></ul><p>For how these constants are typed, see 
the <a href="#types">data types section</a>.</p><h3 
id="Comments">Comments</h3><p>A comment in CQL is a line beginning by either 
double dashes (<code>--</code>) or double slash (<code>//</code>).</p><pre 
class="sample"><pre>-- This is a comment
 // This is a comment too
@@ -110,10 +110,10 @@ WITH comment = 'A most excellent and use
 </pre></pre><p>The <code>DROP TABLE</code> statement results in the immediate, 
irreversible removal of a table, including all data contained in it. As for 
table creation, <code>DROP COLUMNFAMILY</code> is allowed as an alias for 
<code>DROP TABLE</code>.</p><h3 
id="truncateStmt">TRUNCATE</h3><p><i>Syntax:</i></p><pre 
class="syntax"><pre>&lt;truncate-stmt> ::= TRUNCATE &lt;tablename>
 </pre></pre><p><i>Sample:</i></p><pre class="sample"><pre>TRUNCATE 
superImportantData;
 </pre></pre><p>The <code>TRUNCATE</code> statement permanently removes all 
data from a table.</p><h3 id="createIndexStmt">CREATE 
INDEX</h3><p><i>Syntax:</i></p><pre class="syntax"><pre>&lt;create-index-stmt> 
::= CREATE ( CUSTOM )? INDEX &lt;identifier>? ON &lt;tablename> '(' 
&lt;identifier> ')'
-                                        ( WITH &lt;properties> )?
+                                        ( USING &lt;string> )?
 </pre></pre><p><i>Sample:</i></p><pre class="sample"><pre>CREATE INDEX 
userIndex ON NerdMovies (user);
 CREATE INDEX ON Mutants (abilityId);
-CREATE CUSTOM INDEX ON users (email) WITH options = {'class': 
'path.to.the.IndexClass'};
+CREATE CUSTOM INDEX ON users (email) USING 'path.to.the.IndexClass';
 </pre></pre><p>The <code>CREATE INDEX</code> statement is used to create a new 
(automatic) secondary index for a given (existing) column in a given table. A 
name for the index itself can be specified before the <code>ON</code> keyword, 
if desired. If data already exists for the column, it will be indexed during 
the execution of this statement. After the index is created, new data for the 
column is indexed automatically at insertion time.</p><h3 
id="dropIndexStmt">DROP INDEX</h3><p><i>Syntax:</i></p><pre 
class="syntax"><pre>&lt;drop-index-stmt> ::= DROP INDEX &lt;identifier>
 </pre></pre><p><i>Sample:</i></p><pre class="sample"><pre>DROP INDEX userIndex;
 </pre></pre><p>The <code>DROP INDEX</code> statement is used to drop an 
existing secondary index. The argument of the statement is the index 
name.</p><h2 id="dataManipulation">Data Manipulation</h2><h3 
id="insertStmt">INSERT</h3><p><i>Syntax:</i></p><pre 
class="syntax"><pre>&lt;insertStatement> ::= INSERT INTO &lt;tablename>
@@ -214,7 +214,7 @@ WHERE event_type = 'myEvent'
   AND time &lt;= 2012-01-01
 
 SELECT COUNT(*) FROM users;
-</pre></pre><p><br/>The <code>SELECT</code> statements reads one or more 
columns for one or more rows in a table. It returns a result-set of rows, where 
each row contains the collection of columns corresponding to the query.</p><h4 
id="selectSelection"><code>&lt;select-clause></code></h4><p>The 
<code>&lt;select-clause></code> determines which columns needs to be queried 
and returned in the result-set. It consists of either the comma-separated list 
of <selector> or the wildcard character (<code>*</code>) to select all the 
columns defined for the table.</p><p>A <code>&lt;selector></code> is either a 
column name to retrieve, or a <code>&lt;function></code> of one or multiple 
column names. The functions allows are the same that for <code>&lt;term></code> 
and are describe in the <a href="#function">function section</a>. In addition 
to these generic functions, the <code>WRITETIME</code> (resp. <code>TTL</code>) 
function allows to select the timestamp of when the column was inserte
 d (resp. the time to live (in seconds) for the column (or null if the column 
has no expiration set)).</p><p>The <code>COUNT</code> keyword can be used with 
parenthesis enclosing <code>*</code>. If so, the query will return a single 
result: the number of rows matching the query. Note that <code>COUNT(1)</code> 
is supported as an alias.</p><h4 
id="selectWhere"><code>&lt;where-clause></code></h4><p>The 
<code>&lt;where-clause></code> specifies which rows must be queried. It is 
composed of relations on the columns that are part of the <code>PRIMARY 
KEY</code> and/or have a <a href="#createIndexStmt">secondary index</a> defined 
on them.</p><p>Not all relations are allowed in a query. For instance, 
non-equal relations (where <code>IN</code> is considered as an equal relation) 
on a partition key is only supported if the partitioner for the keyspace is an 
ordered one. Moreover, for a given partition key, the clustering keys induce an 
ordering of rows and relations on them is restrict
 ed to the relations that allow to select a <strong>contiguous</strong> (for 
the ordering) set of rows. For instance, given</p><pre 
class="sample"><pre>CREATE TABLE posts (
+</pre></pre><p><br/>The <code>SELECT</code> statements reads one or more 
columns for one or more rows in a table. It returns a result-set of rows, where 
each row contains the collection of columns corresponding to the query.</p><h4 
id="selectSelection"><code>&lt;select-clause></code></h4><p>The 
<code>&lt;select-clause></code> determines which columns needs to be queried 
and returned in the result-set. It consists of either the comma-separated list 
of <selector> or the wildcard character (<code>*</code>) to select all the 
columns defined for the table.</p><p>A <code>&lt;selector></code> is either a 
column name to retrieve, or a <code>&lt;function></code> of one or multiple 
column names. The functions allows are the same that for <code>&lt;term></code> 
and are describe in the <a href="#function">function section</a>. In addition 
to these generic functions, the <code>WRITETIME</code> (resp. <code>TTL</code>) 
function allows to select the timestamp of when the column was inserte
 d (resp. the time to live (in seconds) for the column (or null if the column 
has no expiration set)).</p><p>The <code>COUNT</code> keyword can be used with 
parenthesis enclosing <code>*</code>. If so, the query will return a single 
result: the number of rows matching the query. Note that <code>COUNT(1)</code> 
is supported as an alias.</p><h4 
id="selectWhere"><code>&lt;where-clause></code></h4><p>The 
<code>&lt;where-clause></code> specifies which rows must be queried. It is 
composed of relations on the columns that are part of the <code>PRIMARY 
KEY</code> and/or have a <a href="#createIndexStmt">secondary index</a> defined 
on them.</p><p>Not all relations are allowed in a query. For instance, 
non-equal relations (where <code>IN</code> is considered as an equal relation) 
on a partition key are not supported (but see the use of the <code>TOKEN</code> 
method below to do non-equal queries on the partition key). Moreover, for a 
given partition key, the clustering keys induce an or
 dering of rows and relations on them is restricted to the relations that allow 
to select a <strong>contiguous</strong> (for the ordering) set of rows. For 
instance, given</p><pre class="sample"><pre>CREATE TABLE posts (
     userid text,
     blog_title text,
     posted_at timestamp,
@@ -226,7 +226,7 @@ SELECT COUNT(*) FROM users;
 </pre></pre><p>The following query is allowed:</p><pre 
class="sample"><pre>SELECT entry_title, content FROM posts WHERE userid='john 
doe' AND blog_title='John's Blog' AND posted_at >= 2012-01-01 AND posted_at 
&lt; 2012-01-31
 </pre></pre><p>But the following one is not, as it does not select a 
contiguous set of rows (and we suppose no secondary indexes are set):</p><pre 
class="sample"><pre>// Needs a blog_title to be set to select ranges of 
posted_at
 SELECT entry_title, content FROM posts WHERE userid='john doe' AND posted_at 
>= 2012-01-01 AND posted_at &lt; 2012-01-31
-</pre></pre><p>When specifying relations, the <code>TOKEN</code> function can 
be used on the <code>PARTITION KEY</code> column to query. In that case, rows 
will be selected based on the token of their <code>PARTITION_KEY</code> rather 
than on the value (note that the token of a key depends on the partitioner in 
use, and that in particular the RandomPartitioner won&#8217;t yeld a meaningful 
order). Example:</p><pre class="sample"><pre>SELECT * FROM posts WHERE 
token(userid) > token('tom') AND token(userid) &lt; token('bob')
+</pre></pre><p>When specifying relations, the <code>TOKEN</code> function can 
be used on the <code>PARTITION KEY</code> column to query. In that case, rows 
will be selected based on the token of their <code>PARTITION_KEY</code> rather 
than on the value. Note that the token of a key depends on the partitioner in 
use, and that in particular the RandomPartitioner won&#8217;t yeld a meaningful 
order. Also note that ordering partitioners always order token values by bytes 
(so even if the partition key is of type int, <code>token(-1) > token(0)</code> 
in particular). Example:</p><pre class="sample"><pre>SELECT * FROM posts WHERE 
token(userid) > token('tom') AND token(userid) &lt; token('bob')
 </pre></pre><h4 id="selectOrderBy"><code>&lt;order-by></code></h4><p>The 
<code>ORDER BY</code> option allows to select the order of the returned 
results. It takes as argument a list of column names along with the order for 
the column (<code>ASC</code> for ascendant and <code>DESC</code> for 
descendant, omitting the order being equivalent to <code>ASC</code>). Currently 
the possible orderings are limited (which depends on the table <a 
href="#createTableOptions"><code>CLUSTERING ORDER</code></a>):</p><ul><li>if 
the table has been defined without any specific <code>CLUSTERING ORDER</code>, 
then then allowed orderings are the order induced by the clustering key and the 
reverse of that one.</li><li>otherwise, the orderings allowed are the order of 
the <code>CLUSTERING ORDER</code> option and the reversed one.</li></ul><h4 
id="selectLimit"><code>LIMIT</code></h4><p>The <code>LIMIT</code> option to a 
<code>SELECT</code> statement limits the number of rows returned by a 
query.</p><h
 4 id="selectAllowFiltering"><code>ALLOW FILTERING</code></h4><p>By default, 
CQL only allows select queries that don&#8217;t involve &#8220;filtering&#8221; 
server side, i.e. queries where we know that all (live) record read will be 
returned (maybe partly) in the result set. The reasoning is that those 
&#8220;non filtering&#8221; queries have predictable performance in the sense 
that they will execute in a time that is proportional to the amount of data 
<strong>returned</strong> by the query (which can be controlled through 
<code>LIMIT</code>).</p><p>The <code>ALLOW FILTERING</code> option allows to 
explicitely allow (some) queries that require filtering. Please note that a 
query using <code>ALLOW FILTERING</code> may thus have unpredictable 
performance (for the definition above), i.e. even a query that selects a 
handful of records <strong>may</strong> exhibit performance that depends on the 
total amount of data stored in the cluster.</p><p>For instance, considering the 
follo
 wing table holding user profiles with their year of birth (with a secondary 
index on it) and country of residence:</p><pre class="sample"><pre>CREATE TABLE 
users (
     username text PRIMARY KEY,
     firstname text,
@@ -309,4 +309,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 &lt; 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 &#8216;2013-01-01 00:05+0000&#8217; but 
stricly younger than &#8216;2013-02-02 10:00+0000&#8217;.  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 &#8216;2013-01-01 
00:05+0000&#8217; 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 ide
 a</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 &#8220;convert&#8221; the native types into binary data 
(<code>blob</code>). For every <code>&lt;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>blo
 b</code> argument 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>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>CONSISTENCY</code>  </td><td>n
 o  </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>QUORUM</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></table><h2 
id="changes">Changes</h2><p>The following describes the addition/changes 
brought for each version of CQL.</p><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 fi
 xed. 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><l
 i>&#8220;Float constants&#8221;#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 incremented 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 &#8216;2013-01-01 00:05+0000&#8217; but 
stricly younger than &#8216;2013-02-02 10:00+0000&#8217;.  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 &#8216;2013-01-01 
00:05+0000&#8217; 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 ide
 a</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 &#8220;convert&#8221; the native types into binary data 
(<code>blob</code>). For every <code>&lt;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>blo
 b</code> argument 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>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>CONSISTENCY</code>  </td><td>n
 o  </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>QUORUM</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></table><h2 
id="changes">Changes</h2><p>The following describes the addition/changes 
brought for each version of CQL.</p><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 n
 ot 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 
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>&#8220;Float 
constants&#8221;#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 v
 ersion.</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 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=1496950&r1=1496949&r2=1496950&view=diff
==============================================================================
--- cassandra/site/publish/download/index.html (original)
+++ cassandra/site/publish/download/index.html Wed Jun 26 14:51:33 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 1.2.5
-  (released on 2013-05-19).  <i>If you're just
+  The latest stable release of Apache Cassandra is 1.2.6
+  (released on 2013-06-26).  <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/1.2.5/apache-cassandra-1.2.5-bin.tar.gz";
+       
href="http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.6/apache-cassandra-1.2.6-bin.tar.gz";
        onclick="javascript: 
pageTracker._trackPageview('/clicks/binary_download');">
-      apache-cassandra-1.2.5-bin.tar.gz
+      apache-cassandra-1.2.6-bin.tar.gz
     </a>
-    [<a 
href="http://www.apache.org/dist/cassandra/1.2.5/apache-cassandra-1.2.5-bin.tar.gz.asc";>PGP</a>]
-    [<a 
href="http://www.apache.org/dist/cassandra/1.2.5/apache-cassandra-1.2.5-bin.tar.gz.md5";>MD5</a>]
-    [<a 
href="http://www.apache.org/dist/cassandra/1.2.5/apache-cassandra-1.2.5-bin.tar.gz.sha1";>SHA1</a>]
+    [<a 
href="http://www.apache.org/dist/cassandra/1.2.6/apache-cassandra-1.2.6-bin.tar.gz.asc";>PGP</a>]
+    [<a 
href="http://www.apache.org/dist/cassandra/1.2.6/apache-cassandra-1.2.6-bin.tar.gz.md5";>MD5</a>]
+    [<a 
href="http://www.apache.org/dist/cassandra/1.2.6/apache-cassandra-1.2.6-bin.tar.gz.sha1";>SHA1</a>]
     </li>
     <li>
     <a href="http://wiki.apache.org/cassandra/DebianPackaging";>Debian 
installation instructions</a>
@@ -153,13 +153,13 @@
   <ul>
     <li>
     <a class="filename" 
-       
href="http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.5/apache-cassandra-1.2.5-src.tar.gz";
+       
href="http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.6/apache-cassandra-1.2.6-src.tar.gz";
        onclick="javascript: 
pageTracker._trackPageview('/clicks/source_download');">
-      apache-cassandra-1.2.5-src.tar.gz
+      apache-cassandra-1.2.6-src.tar.gz
     </a>
-    [<a 
href="http://www.apache.org/dist/cassandra/1.2.5/apache-cassandra-1.2.5-src.tar.gz.asc";>PGP</a>]
-    [<a 
href="http://www.apache.org/dist/cassandra/1.2.5/apache-cassandra-1.2.5-src.tar.gz.md5";>MD5</a>]
-    [<a 
href="http://www.apache.org/dist/cassandra/1.2.5/apache-cassandra-1.2.5-src.tar.gz.sha1";>SHA1</a>]
+    [<a 
href="http://www.apache.org/dist/cassandra/1.2.6/apache-cassandra-1.2.6-src.tar.gz.asc";>PGP</a>]
+    [<a 
href="http://www.apache.org/dist/cassandra/1.2.6/apache-cassandra-1.2.6-src.tar.gz.md5";>MD5</a>]
+    [<a 
href="http://www.apache.org/dist/cassandra/1.2.6/apache-cassandra-1.2.6-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=1496950&r1=1496949&r2=1496950&view=diff
==============================================================================
--- cassandra/site/publish/index.html (original)
+++ cassandra/site/publish/index.html Wed Jun 26 14:51:33 2013
@@ -76,8 +76,8 @@
   <h2>Download</h2>
   <div class="inner rc">
     <p>
-    The latest release is <b>1.2.5</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-1.2.5";>Changes</a>)</span>
+    The latest release is <b>1.2.6</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-1.2.6";>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=1496950&r1=1496949&r2=1496950&view=diff
==============================================================================
--- cassandra/site/src/settings.py (original)
+++ cassandra/site/src/settings.py Wed Jun 26 14:51:33 2013
@@ -98,8 +98,8 @@ class CassandraDef(object):
     veryoldstable_version = '1.0.12'
     veryoldstable_release_date = '2012-10-04'
     veryoldstable_exists = True
-    stable_version = '1.2.5'
-    stable_release_date = '2013-05-19'
+    stable_version = '1.2.6'
+    stable_release_date = '2013-06-26'
     devel_version = '1.2.0-rc2'
     devel_release_date = '2012-12-21'
     devel_exists = False


Reply via email to