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/27 00:15:27 UTC

[2/5] git commit: Merge branch 'cassandra-1.2' into trunk

Merge branch 'cassandra-1.2' into trunk

Conflicts:
	bin/cqlsh
	pylib/cqlshlib/test/test_cqlsh_output.py
	pylib/cqlshlib/test/test_keyspace_init2.cql


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

Branch: refs/heads/trunk
Commit: f89784339c87d17152d80ed503703ba5b58e45be
Parents: e5e7225 340a668
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Thu Jun 27 01:01:18 2013 +0300
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Thu Jun 27 01:01:18 2013 +0300

----------------------------------------------------------------------
 CHANGES.txt                                  |  1 +
 bin/cqlsh                                    | 25 ++++++++++++++++++-----
 pylib/cqlshlib/displaying.py                 |  4 ++--
 pylib/cqlshlib/formatting.py                 |  6 ++++--
 pylib/cqlshlib/test/test_cqlsh_completion.py |  2 +-
 pylib/cqlshlib/test/test_cqlsh_output.py     | 15 +++++++++-----
 pylib/cqlshlib/test/test_keyspace_init.cql   |  6 ++++++
 7 files changed, 44 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8978433/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 31cbb05,94830fd..59c9dab
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,75 -1,6 +1,76 @@@
 +2.0
 + * Removed on-heap row cache (CASSANDRA-5348)
 + * use nanotime consistently for node-local timeouts (CASSANDRA-5581)
 + * Avoid unnecessary second pass on name-based queries (CASSANDRA-5577)
 + * Experimental triggers (CASSANDRA-1311)
 + * JEMalloc support for off-heap allocation (CASSANDRA-3997)
 + * Single-pass compaction (CASSANDRA-4180)
 + * Removed token range bisection (CASSANDRA-5518)
 + * Removed compatibility with pre-1.2.5 sstables and network messages
 +   (CASSANDRA-5511)
 + * removed PBSPredictor (CASSANDRA-5455)
 + * CAS support (CASSANDRA-5062, 5441, 5442, 5443, 5619)
 + * Leveled compaction performs size-tiered compactions in L0 
 +   (CASSANDRA-5371, 5439)
 + * Add yaml network topology snitch for mixed ec2/other envs (CASSANDRA-5339)
 + * Log when a node is down longer than the hint window (CASSANDRA-4554)
 + * Optimize tombstone creation for ExpiringColumns (CASSANDRA-4917)
 + * Improve LeveledScanner work estimation (CASSANDRA-5250, 5407)
 + * Replace compaction lock with runWithCompactionsDisabled (CASSANDRA-3430)
 + * Change Message IDs to ints (CASSANDRA-5307)
 + * Move sstable level information into the Stats component, removing the
 +   need for a separate Manifest file (CASSANDRA-4872)
 + * avoid serializing to byte[] on commitlog append (CASSANDRA-5199)
 + * make index_interval configurable per columnfamily (CASSANDRA-3961, CASSANDRA-5650)
 + * add default_time_to_live (CASSANDRA-3974)
 + * add memtable_flush_period_in_ms (CASSANDRA-4237)
 + * replace supercolumns internally by composites (CASSANDRA-3237, 5123)
 + * upgrade thrift to 0.9.0 (CASSANDRA-3719)
 + * drop unnecessary keyspace parameter from user-defined compaction API 
 +   (CASSANDRA-5139)
 + * more robust solution to incomplete compactions + counters (CASSANDRA-5151)
 + * Change order of directory searching for c*.in.sh (CASSANDRA-3983)
 + * Add tool to reset SSTable compaction level for LCS (CASSANDRA-5271)
 + * Allow custom configuration loader (CASSANDRA-5045)
 + * Remove memory emergency pressure valve logic (CASSANDRA-3534)
 + * Reduce request latency with eager retry (CASSANDRA-4705)
 + * cqlsh: Remove ASSUME command (CASSANDRA-5331)
 + * Rebuild BF when loading sstables if bloom_filter_fp_chance
 +   has changed since compaction (CASSANDRA-5015)
 + * remove row-level bloom filters (CASSANDRA-4885)
 + * Change Kernel Page Cache skipping into row preheating (disabled by default)
 +   (CASSANDRA-4937)
 + * Improve repair by deciding on a gcBefore before sending
 +   out TreeRequests (CASSANDRA-4932)
 + * Add an official way to disable compactions (CASSANDRA-5074)
 + * Reenable ALTER TABLE DROP with new semantics (CASSANDRA-3919)
 + * Add binary protocol versioning (CASSANDRA-5436)
 + * Swap THshaServer for TThreadedSelectorServer (CASSANDRA-5530)
 + * Add alias support to SELECT statement (CASSANDRA-5075)
 + * Don't create empty RowMutations in CommitLogReplayer (CASSANDRA-5541)
 + * Use range tombstones when dropping cfs/columns from schema (CASSANDRA-5579)
 + * cqlsh: drop CQL2/CQL3-beta support (CASSANDRA-5585)
 + * Track max/min column names in sstables to be able to optimize slice
 +   queries (CASSANDRA-5514, CASSANDRA-5595, CASSANDRA-5600)
 + * Binary protocol: allow batching already prepared statements (CASSANDRA-4693)
 + * Allow preparing timestamp, ttl and limit in CQL3 queries (CASSANDRA-4450)
 + * 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)
 + * Include a timestamp with all read commands to determine column expiration
 +   (CASSANDRA-5149)
 + * Streaming 2.0 (CASSANDRA-5286)
 + * Conditional create/drop ks/table/index statements in CQL3 (CASSANDRA-2737)
 + * more pre-table creation property validation (CASSANDRA-5693)
 + * Redesign repair messages (CASSANDRA-5426)
 + * Fix ALTER RENAME post-5125 (CASSANDRA-5702)
 + * Disallow renaming a 2ndary indexed column (CASSANDRA-5705)
 +
 +
  1.2.7
   * Fix serialization of the LEFT gossip value (CASSANDRA-5696)
+  * cqlsh: Don't show 'null' in place of empty values (CASSANDRA-5675)
  
  1.2.6
   * Fix tracing when operation completes before all responses arrive (CASSANDRA-5668)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8978433/bin/cqlsh
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8978433/pylib/cqlshlib/test/test_cqlsh_completion.py
----------------------------------------------------------------------
diff --cc pylib/cqlshlib/test/test_cqlsh_completion.py
index b8f0167,3051378..63296fa
--- a/pylib/cqlshlib/test/test_cqlsh_completion.py
+++ b/pylib/cqlshlib/test/test_cqlsh_completion.py
@@@ -125,7 -132,60 +125,7 @@@ class TestCqlshCompletion(CqlshCompleti
          pass
  
      def test_complete_in_create_keyspace(self):
-         self.trycompletions('create keyspace ', '', choices=('<identifier>', '<quotedName>'))
 -        self.trycompletions('create keyspace ', '', choices=('<new_keyspace_name>',))
 -        self.trycompletions('create keyspace moo ', "WITH strategy_class = '")
 -        self.trycompletions("create keyspace '12SomeName' with ", "strategy_class = '")
 -        self.trycompletions("create keyspace moo with strategy_class", " = '")
 -        self.trycompletions("create keyspace moo with strategy_class='",
 -                            choices=self.strategies())
 -        self.trycompletions("create keySPACE 123 with strategy_class='SimpleStrategy' A",
 -                            "ND strategy_options:replication_factor = ")
 -        self.trycompletions("create keyspace fish with strategy_class='SimpleStrategy'"
 -                                  "and strategy_options:replication_factor = ", '',
 -                            choices=('<option_value>',))
 -        self.trycompletions("create keyspace 'PB and J' with strategy_class="
 -                               "'NetworkTopologyStrategy' AND", ' ')
 -        self.trycompletions("create keyspace 'PB and J' with strategy_class="
 -                               "'NetworkTopologyStrategy' AND ", '',
 -                            choices=('<strategy_option_name>',))
 -
 -    def test_complete_in_drop_keyspace(self):
 -        pass
 -
 -    def test_complete_in_create_columnfamily(self):
 -        pass
 -
 -    def test_complete_in_drop_columnfamily(self):
 -        pass
 -
 -    def test_complete_in_truncate(self):
 -        pass
 -
 -    def test_complete_in_alter_columnfamily(self):
 -        pass
 -
 -    def test_complete_in_use(self):
 -        pass
 -
 -    def test_complete_in_create_index(self):
 -        pass
 -
 -    def test_complete_in_drop_index(self):
 -        pass
 -
 -class TestCqlshCompletion_CQL3final(TestCqlshCompletion_CQL2):
 -    cqlver = '3.0.0'
 -    module = cqlsh.cql3handling
 -
 -    def test_complete_on_empty_string(self):
 -        self.trycompletions('', choices=('?', 'ALTER', 'ASSUME', 'BEGIN', 'CAPTURE', 'CONSISTENCY',
 -                                         'COPY', 'CREATE', 'DEBUG', 'DELETE', 'DESC', 'DESCRIBE',
 -                                         'DROP', 'GRANT', 'HELP', 'INSERT', 'LIST', 'REVOKE',
 -                                         'SELECT', 'SHOW', 'SOURCE', 'TRACING', 'EXPAND', 'TRUNCATE',
 -                                         'UPDATE', 'USE', 'exit', 'quit'))
 -
 -    def test_complete_in_create_keyspace(self):
 -        self.trycompletions('create keyspace ', '', choices=('<identifier>', '<quotedName>'))
++        self.trycompletions('create keyspace ', '', choices=('<identifier>', '<quotedName>', 'IF'))
          self.trycompletions('create keyspace moo ',
                              "WITH replication = {'class': '")
          self.trycompletions('create keyspace "12SomeName" with ',

http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8978433/pylib/cqlshlib/test/test_cqlsh_output.py
----------------------------------------------------------------------
diff --cc pylib/cqlshlib/test/test_cqlsh_output.py
index b74c895,07abc29..aa92a7f
--- a/pylib/cqlshlib/test/test_cqlsh_output.py
+++ b/pylib/cqlshlib/test/test_cqlsh_output.py
@@@ -141,12 -153,9 +141,12 @@@ class TestCqlshOutput(BaseTestCase)
               MMMMM
              -------
  
-                  4
+                  5
                   G
  
 +
 +            (1 rows)
 +            nnnnnnnn
              """),
  
              ('select COUNT(*) FROM empty_table;', """
@@@ -314,10 -384,7 +314,12 @@@
               GGGGGGGGGGG   GGGGGGGGGGGGGGGGGGGG   GGGGGGGGGGGGGGGGGGGGGGGGGGG
               -2147483648 | -9223372036854775808 | -10000000000000000000000000
               GGGGGGGGGGG   GGGGGGGGGGGGGGGGGGGG   GGGGGGGGGGGGGGGGGGGGGGGGGGG
+                          |                      |
++             nnnnnnnnnnn   nnnnnnnnnnnnnnnnnnnn   nnnnnnnnnnnnnnnnnnnnnnnnnnn
 +
 +
-             (4 rows)
++            (5 rows)
 +            nnnnnnnn
              """),
  
              ('''select decimalcol, doublecol, floatcol \
@@@ -335,12 -402,21 +337,14 @@@
               GGGGGGGGGGGGGGGG     GGGGGGG      GGGGG
               10.0000000000000 |   -1004.1 |    1e+08
               GGGGGGGGGGGGGGGG     GGGGGGG      GGGGG
+                               |           |
 -            """),
 -        ), cqlver=(2, 3))
 -
 -        self.assertQueriesGiveColoredOutput((
 -            ('''select * from dynamic_columns where somekey = 3;''', """
 -             somekey | -0.0001                 | 3.46                 | 99
 -             MMMMMMM   MMMMMMM                   MMMM                   MM
 -            ---------+-------------------------+----------------------+----------------------
++             nnnnnnnnnnnnnnnn     nnnnnnn      nnnnn
  
 -                   3 | negative ten thousandth | three point four six | ninety-nine point oh
 -                   G   YYYYYYYYYYYYYYYYYYYYYYY   YYYYYYYYYYYYYYYYYYYY   YYYYYYYYYYYYYYYYYYYY
  
-             (4 rows)
++            (5 rows)
 +            nnnnnnnn
              """),
 -        ), cqlver=2)
 +        ), cqlver=3)
  
      def test_timestamp_output(self):
          self.assertQueriesGiveColoredOutput((
@@@ -654,6 -777,6 +658,7 @@@
                comment='' AND
                dclocal_read_repair_chance=0.000000 AND
                gc_grace_seconds=864000 AND
++              index_interval=128 AND
                read_repair_chance=0.100000 AND
                replicate_on_write='true' AND
                populate_io_cache_on_flush='false' AND

http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8978433/pylib/cqlshlib/test/test_keyspace_init.cql
----------------------------------------------------------------------
diff --cc pylib/cqlshlib/test/test_keyspace_init.cql
index 30a22bc,0000000..e92d5d0
mode 100644,000000..100644
--- a/pylib/cqlshlib/test/test_keyspace_init.cql
+++ b/pylib/cqlshlib/test/test_keyspace_init.cql
@@@ -1,198 -1,0 +1,204 @@@
 +CREATE TABLE has_all_types (
 +    num int PRIMARY KEY,
 +    intcol int,
 +    asciicol ascii,
 +    bigintcol bigint,
 +    blobcol blob,
 +    booleancol boolean,
 +    decimalcol decimal,
 +    doublecol double,
 +    floatcol float,
 +    textcol text,
 +    timestampcol timestamp,
 +    uuidcol uuid,
 +    varcharcol varchar,
 +    varintcol varint
 +) WITH compression = {'sstable_compression':'LZ4Compressor'};
 +
 +INSERT INTO has_all_types (num, intcol, asciicol, bigintcol, blobcol, booleancol,
 +                           decimalcol, doublecol, floatcol, textcol,
 +                           timestampcol, uuidcol, varcharcol, varintcol)
 +VALUES (0, -12, 'abcdefg', 1234567890123456789, 0x000102030405fffefd, true,
 +        19952.11882, 1.0, -2.1, 'Voilá!', '2012-05-14 12:53:20+0000',
 +        bd1924e1-6af8-44ae-b5e1-f24131dbd460, '"', 10000000000000000000000000);
 +
 +INSERT INTO has_all_types (num, intcol, asciicol, bigintcol, blobcol, booleancol,
 +                           decimalcol, doublecol, floatcol, textcol,
 +                           timestampcol, uuidcol, varcharcol, varintcol)
 +VALUES (1, 2147483647, '__!''$#@!~"', 9223372036854775807, 0xffffffffffffffffff, true,
 +        0.00000000000001, 9999999.999, 99999.99, '∭Ƕ⑮ฑ➳❏''', '1900-01-01+0000',
 +        ffffffff-ffff-ffff-ffff-ffffffffffff, 'newline->
 +<-', 9);
 +
 +INSERT INTO has_all_types (num, intcol, asciicol, bigintcol, blobcol, booleancol,
 +                           decimalcol, doublecol, floatcol, textcol,
 +                           timestampcol, uuidcol, varcharcol, varintcol)
 +VALUES (2, 0, '', 0, 0x, false,
 +        0.0, 0.0, 0.0, '', 0,
 +        00000000-0000-0000-0000-000000000000, '', 0);
 +
 +INSERT INTO has_all_types (num, intcol, asciicol, bigintcol, blobcol, booleancol,
 +                           decimalcol, doublecol, floatcol, textcol,
 +                           timestampcol, uuidcol, varcharcol, varintcol)
 +VALUES (3, -2147483648, '''''''', -9223372036854775808, 0x80, false,
 +        10.0000000000000, -1004.10, 100000000.9, '龍馭鬱', '2038-01-19T03:14-1200',
 +        ffffffff-ffff-1fff-8fff-ffffffffffff, '''', -10000000000000000000000000);
 +
++INSERT INTO has_all_types (num, intcol, asciicol, bigintcol, blobcol, booleancol,
++                           decimalcol, doublecol, floatcol, textcol,
++                           timestampcol, uuidcol, varcharcol, varintcol)
++VALUES (4, blobAsInt(0x), '', blobAsBigint(0x), 0x, blobAsBoolean(0x), blobAsDecimal(0x),
++        blobAsDouble(0x), blobAsFloat(0x), '', blobAsTimestamp(0x), blobAsUuid(0x), '',
++        blobAsVarint(0x));
 +
 +
 +CREATE TABLE has_value_encoding_errors (
 +    pkey ascii PRIMARY KEY,
 +    utf8col blob
 +);
 +
 +INSERT INTO has_value_encoding_errors (pkey, utf8col) VALUES ('A', 0x00ff00ff);
 +ALTER TABLE has_value_encoding_errors ALTER utf8col TYPE text;
 +
 +CREATE TABLE has_key_encoding_errors (
 +    pkey blob PRIMARY KEY,
 +    col text
 +);
 +
 +INSERT INTO has_key_encoding_errors (pkey, col) VALUES (0x00ff028f, 'whatever');
 +ALTER TABLE has_key_encoding_errors ALTER pkey TYPE text;
 +
 +
 +
 +CREATE TABLE empty_table (
 +    lonelykey float primary key,
 +    lonelycol text
 +);
 +
 +
 +
 +CREATE COLUMNFAMILY dynamic_columns (
 +    somekey int,
 +    column1 float,
 +    value text,
 +    PRIMARY KEY(somekey, column1)
 +) WITH COMPACT STORAGE;
 +
 +INSERT INTO dynamic_columns (somekey, column1, value) VALUES (1, 1.2, 'one point two');
 +INSERT INTO dynamic_columns (somekey, column1, value) VALUES (2, 2.3, 'two point three');
 +INSERT INTO dynamic_columns (somekey, column1, value) VALUES (3, 3.46, 'three point four six');
 +INSERT INTO dynamic_columns (somekey, column1, value) VALUES (3, 99.0, 'ninety-nine point oh');
 +INSERT INTO dynamic_columns (somekey, column1, value) VALUES (3, -0.0001, 'negative ten thousandth');
 +
 +
 +
 +CREATE TABLE twenty_rows_table (
 +    a text primary key,
 +    b text
 +);
 +
 +INSERT INTO twenty_rows_table (a, b) VALUES ('1', '1');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('2', '2');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('3', '3');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('4', '4');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('5', '5');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('6', '6');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('7', '7');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('8', '8');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('9', '9');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('10', '10');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('11', '11');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('12', '12');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('13', '13');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('14', '14');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('15', '15');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('16', '16');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('17', '17');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('18', '18');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('19', '19');
 +INSERT INTO twenty_rows_table (a, b) VALUES ('20', '20');
 +
 +
 +CREATE TABLE undefined_values_table (
 +    k text PRIMARY KEY,
 +    c text,
 +    notthere text
 +);
 +
 +INSERT INTO undefined_values_table (k, c) VALUES ('k1', 'c1');
 +INSERT INTO undefined_values_table (k, c) VALUES ('k2', 'c2');
 +
 +
 +
 +CREATE TABLE ascii_with_invalid_and_special_chars (
 +    k int PRIMARY KEY,
 +    val blob
 +);
 +
 +-- "newline:\n"
 +INSERT INTO ascii_with_invalid_and_special_chars (k, val) VALUES (0, 0x6e65776c696e653a0a);
 +-- "return\rand null\0!"
 +INSERT INTO ascii_with_invalid_and_special_chars (k, val) VALUES (1, 0x72657475726e0d616e64206e756c6c0021);
 +-- "\x00\x01\x02\x03\x04\x05control chars\x06\x07"
 +INSERT INTO ascii_with_invalid_and_special_chars (k, val) VALUES (2, 0x000102030405636f6e74726f6c2063686172730607);
 +-- "\xfe\xffbyte order mark"
 +INSERT INTO ascii_with_invalid_and_special_chars (k, val) VALUES (3, 0xfeff62797465206f72646572206d61726b);
 +-- "fake special chars\\x00\\n"
 +INSERT INTO ascii_with_invalid_and_special_chars (k, val) VALUES (4, 0x66616b65207370656369616c2063686172735c7830305c6e);
 +
 +ALTER TABLE ascii_with_invalid_and_special_chars ALTER val TYPE ascii;
 +
 +
 +
 +CREATE TABLE utf8_with_special_chars (
 +    k int PRIMARY KEY,
 +    val text
 +);
 +
 +INSERT INTO utf8_with_special_chars (k, val) VALUES (0, 'Normal string');
 +INSERT INTO utf8_with_special_chars (k, val) VALUES (1, 'Text with
 +newlines
 +');
 +INSERT INTO utf8_with_special_chars (k, val) VALUES (2, 'Text with embedded  char');
 +INSERT INTO utf8_with_special_chars (k, val) VALUES (3, 'ⓈⓅⒺⒸⒾⒶⓁ ⒞⒣⒜⒭⒮ and normal ones');
 +INSERT INTO utf8_with_special_chars (k, val) VALUES (4, 'double wides: ⾑⾤⾚');
 +INSERT INTO utf8_with_special_chars (k, val) VALUES (5, 'zero width​space');
 +INSERT INTO utf8_with_special_chars (k, val) VALUES (6, 'fake special chars\x00\n');
 +
 +
 +CREATE TABLE empty_composite_table (
 +    lonelykey float,
 +    lonelycol text,
 +    lonelyval int,
 +    primary key (lonelykey, lonelycol)
 +);
 +
 +CREATE TABLE twenty_rows_composite_table (
 +    a text,
 +    b text,
 +    c text,
 +    primary key (a, b)
 +);
 +
 +-- all in the same storage engine row:
 +
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '1', '1');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '2', '2');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '3', '3');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '4', '4');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '5', '5');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '6', '6');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '7', '7');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '8', '8');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '9', '9');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '10', '10');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '11', '11');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '12', '12');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '13', '13');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '14', '14');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '15', '15');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '16', '16');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '17', '17');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '18', '18');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '19', '19');
 +INSERT INTO twenty_rows_composite_table (a, b, c) VALUES ('A', '20', '20');