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/06/15 00:54:53 UTC

git commit: cqlsh: Add row count to SELECT output

Updated Branches:
  refs/heads/trunk 241e82d71 -> 629abfb52


cqlsh: Add row count to SELECT output

patch by Aleksey Yeschenko; reviewed by Brandon Williams for
CASSANDRA-5636


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

Branch: refs/heads/trunk
Commit: 629abfb52dc1a24c2dbd2e9316ca2fb77e593554
Parents: 241e82d
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Sat Jun 15 01:53:40 2013 +0300
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Sat Jun 15 01:53:40 2013 +0300

----------------------------------------------------------------------
 CHANGES.txt                              |  1 +
 bin/cqlsh                                |  8 ++-
 pylib/cqlshlib/test/test_cqlsh_output.py | 91 +++++++++++++++++++++------
 3 files changed, 80 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/629abfb5/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 3ccfdf2..4bc15f9 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -57,6 +57,7 @@
  * Support native link w/o JNA in Java7 (CASSANDRA-3734)
  * Use SASL authentication in binary protocol v2 (CASSANDRA-5545)
  * Replace Thrift HsHa with LMAX Disruptor based implementation (CASSANDRA-5582)
+ * cqlsh: Add row count to SELECT output (CASSANDRA-5636)
 
 1.2.6
  * Reduce SSTableLoader memory usage (CASSANDRA-5555)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/629abfb5/bin/cqlsh
----------------------------------------------------------------------
diff --git a/bin/cqlsh b/bin/cqlsh
index 98403d6..c2defd5 100755
--- a/bin/cqlsh
+++ b/bin/cqlsh
@@ -891,7 +891,7 @@ class Shell(cmd.Cmd):
                 self.printerr(traceback.format_exc())
                 return False
 
-        if self.cursor.description is not _VOID_DESCRIPTION:
+        if statement[:6].lower() == 'select':
             self.print_result(self.cursor, with_default_limit)
         self.flush_output()
         return True
@@ -911,7 +911,9 @@ class Shell(cmd.Cmd):
         self.decoding_errors = []
 
         self.writeresult("")
-        self.print_static_result(cursor)
+        if cursor.rowcount != 0:
+            self.print_static_result(cursor)
+        self.writeresult("(%d rows)" % cursor.rowcount)
         self.writeresult("")
 
         if self.decoding_errors:
@@ -962,6 +964,8 @@ class Shell(cmd.Cmd):
             line = ' | '.join(col.rjust(w, color=self.color) for (col, w) in zip(row, widths))
             self.writeresult(' ' + line)
 
+        self.writeresult("")
+
     def print_formatted_result_vertically(self, formatted_names, formatted_values):
         max_col_width = max([n.displaywidth for n in formatted_names])
         max_val_width = max([n.displaywidth for row in formatted_values for n in row])

http://git-wip-us.apache.org/repos/asf/cassandra/blob/629abfb5/pylib/cqlshlib/test/test_cqlsh_output.py
----------------------------------------------------------------------
diff --git a/pylib/cqlshlib/test/test_cqlsh_output.py b/pylib/cqlshlib/test/test_cqlsh_output.py
index a1922b4..b74c895 100644
--- a/pylib/cqlshlib/test/test_cqlsh_output.py
+++ b/pylib/cqlshlib/test/test_cqlsh_output.py
@@ -71,8 +71,7 @@ class TestCqlshOutput(BaseTestCase):
         for ver in cqlver:
             self.assertQueriesGiveColoredOutput(queries_and_expected_outputs, cqlver=ver, **kwargs)
 
-    def assertQueriesGiveColoredOutput(self, queries_and_expected_outputs,
-                                       sort_results=False, **kwargs):
+    def assertQueriesGiveColoredOutput(self, queries_and_expected_outputs, **kwargs):
         """
         Allow queries and expected output to be specified in structured tuples,
         along with expected color information.
@@ -84,17 +83,6 @@ class TestCqlshOutput(BaseTestCase):
                 c_output = ColoredText(output)
                 pairs = at_a_time(dedent(expected).split('\n'), 2)
                 outlines = c_output.splitlines()
-                if sort_results:
-                    if outlines[1].plain().startswith('---'):
-                        firstpart = outlines[:2]
-                        sortme = outlines[2:]
-                    else:
-                        firstpart = []
-                        sortme = outlines
-                    lastpart = []
-                    while sortme[-1].plain() == '':
-                        lastpart.append(sortme.pop(-1))
-                    outlines = firstpart + sorted(sortme, key=lambda c:c.plain()) + lastpart
                 for (plain, colorcodes), outputline in zip(pairs, outlines):
                     self.assertEqual(outputline.plain().rstrip(), plain)
                     self.assertColorFromTags(outputline, colorcodes)
@@ -114,8 +102,8 @@ class TestCqlshOutput(BaseTestCase):
 
     def test_no_prompt_or_colors_output(self):
         # CQL queries and number of lines expected in output:
-        queries = (('select * from has_all_types limit 1;', 5),
-                   ('select * from has_value_encoding_errors limit 1;', 6))
+        queries = (('select * from has_all_types limit 1;', 7),
+                   ('select * from has_value_encoding_errors limit 1;', 8))
         for termname in ('', 'dumb', 'vt100', 'xterm'):
             cqlshlog.debug('TERM=%r' % termname)
             for cql, lines_expected in queries:
@@ -156,6 +144,9 @@ class TestCqlshOutput(BaseTestCase):
                  4
                  G
 
+
+            (1 rows)
+            nnnnnnnn
             """),
 
             ('select COUNT(*) FROM empty_table;', """
@@ -166,6 +157,9 @@ class TestCqlshOutput(BaseTestCase):
                  0
                  G
 
+
+            (1 rows)
+            nnnnnnnn
             """),
 
             ('select COUNT(*) FROM empty_composite_table;', """
@@ -176,6 +170,9 @@ class TestCqlshOutput(BaseTestCase):
                  0
                  G
 
+
+            (1 rows)
+            nnnnnnnn
             """),
 
             ('select COUNT(*) FROM twenty_rows_table limit 10;', """
@@ -186,6 +183,9 @@ class TestCqlshOutput(BaseTestCase):
                 10
                 GG
 
+
+            (1 rows)
+            nnnnnnnn
             """),
 
             ('select COUNT(*) FROM twenty_rows_table limit 1000000;', """
@@ -196,6 +196,9 @@ class TestCqlshOutput(BaseTestCase):
                 20
                 GG
 
+
+            (1 rows)
+            nnnnnnnn
             """),
         ), cqlver=3)
 
@@ -209,6 +212,9 @@ class TestCqlshOutput(BaseTestCase):
                 20
                 GG
 
+
+            (1 rows)
+            nnnnnnnn
             """),
         ), cqlver=3)
 
@@ -226,6 +232,9 @@ class TestCqlshOutput(BaseTestCase):
               2 |  2
              YY   YY
 
+
+            (3 rows)
+            nnnnnnnn
             """),
         ), cqlver=3)
 
@@ -239,19 +248,23 @@ class TestCqlshOutput(BaseTestCase):
                   GG   GGGGGGG   YYYYYYYYYYYYYYYYYYYYYYY
                    2 |     2.3 |         two point three
                   GG   GGGGGGG   YYYYYYYYYYYYYYYYYYYYYYY
-                   3 |      99 |    ninety-nine point oh
+                   3 | -0.0001 | negative ten thousandth
                   GG   GGGGGGG   YYYYYYYYYYYYYYYYYYYYYYY
                    3 |    3.46 |    three point four six
                   GG   GGGGGGG   YYYYYYYYYYYYYYYYYYYYYYY
-                   3 | -0.0001 | negative ten thousandth
+                   3 |      99 |    ninety-nine point oh
                   GG   GGGGGGG   YYYYYYYYYYYYYYYYYYYYYYY
 
+
+            (5 rows)
+            nnnnnnnn
             """),
-        ), cqlver=3, sort_results=True)
+        ), cqlver=3)
 
     def test_empty_cf_output(self):
         self.assertCqlverQueriesGiveColoredOutput((
             ('select * from empty_table;', """
+            (0 rows)
             """),
         ), cqlver=3)
 
@@ -260,6 +273,7 @@ class TestCqlshOutput(BaseTestCase):
         # same query should show up as empty in cql 3
         self.assertQueriesGiveColoredOutput((
             (q, """
+            (0 rows)
             """),
         ), cqlver=3)
 
@@ -277,6 +291,9 @@ class TestCqlshOutput(BaseTestCase):
              2
              Y
 
+
+            (2 rows)
+            nnnnnnnn
             """),
         ), cqlver=3)
 
@@ -298,6 +315,9 @@ class TestCqlshOutput(BaseTestCase):
              -2147483648 | -9223372036854775808 | -10000000000000000000000000
              GGGGGGGGGGG   GGGGGGGGGGGGGGGGGGGG   GGGGGGGGGGGGGGGGGGGGGGGGGGG
 
+
+            (4 rows)
+            nnnnnnnn
             """),
 
             ('''select decimalcol, doublecol, floatcol \
@@ -316,6 +336,9 @@ class TestCqlshOutput(BaseTestCase):
              10.0000000000000 |   -1004.1 |    1e+08
              GGGGGGGGGGGGGGGG     GGGGGGG      GGGGG
 
+
+            (4 rows)
+            nnnnnnnn
             """),
         ), cqlver=3)
 
@@ -329,6 +352,9 @@ class TestCqlshOutput(BaseTestCase):
              2012-05-14 12:53:20+0000
              GGGGGGGGGGGGGGGGGGGGGGGG
 
+
+            (1 rows)
+            nnnnnnnn
             """),
         ), env={'TZ': 'Etc/UTC'})
 
@@ -341,6 +367,9 @@ class TestCqlshOutput(BaseTestCase):
              2012-05-14 07:53:20-0500
              GGGGGGGGGGGGGGGGGGGGGGGG
 
+
+            (1 rows)
+            nnnnnnnn
             """),
         ), env={'TZ': 'EST'})
 
@@ -360,6 +389,9 @@ class TestCqlshOutput(BaseTestCase):
                3 |      False
                G        GGGGG
 
+
+            (4 rows)
+            nnnnnnnn
             """),
         ), cqlver=3)
 
@@ -376,6 +408,9 @@ class TestCqlshOutput(BaseTestCase):
              k2 | c2 |     null
              YY   YY       RRRR
 
+
+            (2 rows)
+            nnnnnnnn
             """),
         ), cqlver=3)
 
@@ -391,6 +426,9 @@ class TestCqlshOutput(BaseTestCase):
              k2 | c2 |     null
              YY   YY       RRRR
 
+
+            (2 rows)
+            nnnnnnnn
             """),
         ), cqlver=3)
 
@@ -412,6 +450,9 @@ class TestCqlshOutput(BaseTestCase):
              4 |                      fake special chars\x00\n
              G                        YYYYYYYYYYYYYYYYYYYYYYYY
 
+
+            (5 rows)
+            nnnnnnnn
             """),
         ), cqlver=3)
 
@@ -443,6 +484,9 @@ class TestCqlshOutput(BaseTestCase):
              6 |      fake special chars\\x00\\n
              G        YYYYYYYYYYYYYYYYYYYYYYYY
 
+
+            (7 rows)
+            nnnnnnnn
             """.encode('utf-8')),
         ), cqlver=3, env={'LANG': 'en_US.UTF-8'})
 
@@ -462,6 +506,9 @@ class TestCqlshOutput(BaseTestCase):
                3 |                 0x80
                G   mmmmmmmmmmmmmmmmmmmm
 
+
+            (4 rows)
+            nnnnnnnn
             """),
         ), cqlver=3)
 
@@ -485,6 +532,10 @@ class TestCqlshOutput(BaseTestCase):
                 Y   RRRRRRRRRRRRRRRRRR
 
 
+            (1 rows)
+            nnnnnnnn
+
+
             Failed to decode value '\x00\xff\x00\xff' (for column 'utf8col') as text: 'utf8' codec can't decode byte 0xff in position 1: invalid start byte
             RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
             """),
@@ -501,6 +552,10 @@ class TestCqlshOutput(BaseTestCase):
              RRRRRRRRRRRRRRRRRR   YYYYYYYY
 
 
+            (1 rows)
+            nnnnnnnn
+
+
             Failed to decode value '\x00\xff\x02\x8f' (for column 'pkey') as text: 'utf8' codec can't decode byte 0xff in position 1: invalid start byte
             RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
             """),