You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2013/05/01 19:03:40 UTC

[2/3] git commit: cqlsh: add CLUSTERING ORDER BY support to DESCRIBE

cqlsh: add CLUSTERING ORDER BY support to DESCRIBE

patch by Tyler Hobbs; reviewed by Aleksey Yeschenko for CASSANDRA-5528


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/24f6387b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/24f6387b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/24f6387b

Branch: refs/heads/trunk
Commit: 24f6387bcddc72856569e86a7b3e7a9da86d0037
Parents: 199cd0b
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Wed May 1 19:34:20 2013 +0300
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Wed May 1 19:42:55 2013 +0300

----------------------------------------------------------------------
 CHANGES.txt |    1 +
 bin/cqlsh   |   40 +++++++++++++++++++++++++++++++++++-----
 2 files changed, 36 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/24f6387b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 0045e04..7429401 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -18,6 +18,7 @@
  * Prevent repair when protocol version does not match (CASSANDRA-5523)
  * Disallow renaming columns one at a time for thrift table in CQL3
    (CASSANDRA-5531)
+ * cqlsh: add CLUSTERING ORDER BY support to DESCRIBE (CASSANDRA-5528)
 Merged from 1.1
  * Add retry mechanism to OTC for non-droppable_verbs (CASSANDRA-5393)
  * Use allocator information to improve memtable memory usage estimate

http://git-wip-us.apache.org/repos/asf/cassandra/blob/24f6387b/bin/cqlsh
----------------------------------------------------------------------
diff --git a/bin/cqlsh b/bin/cqlsh
index 5292d5e..853e3fd 100755
--- a/bin/cqlsh
+++ b/bin/cqlsh
@@ -32,7 +32,7 @@ exit 1
 from __future__ import with_statement
 
 description = "CQL Shell for Apache Cassandra"
-version = "2.3.0"
+version = "3.0.0"
 
 from StringIO import StringIO
 from itertools import groupby
@@ -103,7 +103,7 @@ except ImportError, e:
 import cql.decoders
 from cql.cursor import _VOID_DESCRIPTION
 from cql.cqltypes import (cql_types, cql_typename, lookup_casstype, lookup_cqltype,
-                          CassandraType)
+                          CassandraType, ReversedType, CompositeType)
 
 # cqlsh should run correctly when run out of a Cassandra source tree,
 # out of an unpacked Cassandra tarball, and after a proper package install.
@@ -1308,7 +1308,13 @@ class Shell(cmd.Cmd):
         indexed_columns = []
         for col in layout.columns[1:]:
             colname = self.cql_protect_name(col.name)
-            out.write(",\n  %s %s" % (colname, col.cqltype.cql_parameterized_type()))
+            coltype = col.cqltype
+
+            # Reversed types only matter for clustering order, not column definitions
+            if issubclass(coltype, ReversedType):
+                coltype = coltype.subtypes[0]
+
+            out.write(",\n  %s %s" % (colname, coltype.cql_parameterized_type()))
             if col.index_name is not None:
                 indexed_columns.append(col)
 
@@ -1329,8 +1335,32 @@ class Shell(cmd.Cmd):
             out.write(' WITH COMPACT STORAGE')
             joiner = 'AND'
 
-        # TODO: this should display CLUSTERING ORDER BY information too.
-        # work out how to determine that from a layout.
+        # check if we need a CLUSTERING ORDER BY clause
+        if layout.column_aliases:
+            # get a list of clustering component types
+            if issubclass(layout.comparator, CompositeType):
+                clustering_types = layout.comparator.subtypes
+            else:
+                clustering_types = [layout.comparator]
+
+            # only write CLUSTERING ORDER clause of we have >= 1 DESC item
+            if any(issubclass(t, ReversedType) for t in clustering_types):
+                if layout.compact_storage:
+                    out.write(' AND\n ')
+                else:
+                    out.write(' WITH')
+                out.write(' CLUSTERING ORDER BY (')
+
+                clustering_names = self.cql_protect_names(layout.column_aliases)
+
+                inner = []
+                for colname, coltype in zip(clustering_names, clustering_types):
+                    ordering = "DESC" if issubclass(coltype, ReversedType) else "ASC"
+                    inner.append("%s %s" % (colname, ordering))
+                out.write(", ".join(inner))
+
+                out.write(")")
+                joiner = "AND"
 
         cf_opts = []
         compaction_strategy = trim_if_present(getattr(layout, 'compaction_strategy_class'),