From 655e30453135fd95c46ab02644e48e6813fc16f1 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 9 Jan 2013 08:10:48 +0200 Subject: [PATCH] MDEV-4005 fix. Field matching fixed. DBUG_ASSERT fixed. --- mysql-test/r/cassandra.result | 11 ++++++++++ mysql-test/t/cassandra.test | 36 +++++++++++++++++++++++++++++++ storage/cassandra/ha_cassandra.cc | 3 ++- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/cassandra.result b/mysql-test/r/cassandra.result index d11e2f66729..e26df069f93 100644 --- a/mysql-test/r/cassandra.result +++ b/mysql-test/r/cassandra.result @@ -580,3 +580,14 @@ select rowkey, column_json(dyn) from t1; rowkey column_json(dyn) delete from t1; DROP TABLE t1; +# +# MDEV-4005 #Server crashes on creating a Cassandra table +# with a mix of static and dynamic columns +# +DROP TABLE IF EXISTS t1, t2; +CREATE TABLE t1 ( +pk int primary key, +col_int int, +dyncol blob DYNAMIC_COLUMN_STORAGE=yes +) ENGINE=cassandra keyspace='bug' thrift_host = '127.0.0.1' column_family='cf1'; +drop table t1; diff --git a/mysql-test/t/cassandra.test b/mysql-test/t/cassandra.test index 93c81086de8..2b92956d974 100644 --- a/mysql-test/t/cassandra.test +++ b/mysql-test/t/cassandra.test @@ -664,6 +664,42 @@ select rowkey, column_json(dyn) from t1; delete from t1; DROP TABLE t1; +--echo # +--echo # MDEV-4005 #Server crashes on creating a Cassandra table +--echo # with a mix of static and dynamic columns +--echo # +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +--enable_warnings + +--remove_files_wildcard $MYSQLTEST_VARDIR cassandra_test_cleanup.cql +--write_file $MYSQLTEST_VARDIR/cassandra_test_cleanup.cql +drop keyspace bug; +EOF +--error 0,1,2 +--system cqlsh -3 -f $MYSQLTEST_VARDIR/cassandra_test_cleanup.cql + +--remove_files_wildcard $MYSQLTEST_VARDIR cassandra_test_init.cql +--write_file $MYSQLTEST_VARDIR/cassandra_test_init.cql + +CREATE KEYSPACE bug + WITH strategy_class = 'org.apache.cassandra.locator.SimpleStrategy' + AND strategy_options:replication_factor='1'; + +USE bug; +create columnfamily cf1 ( pk int primary key, col_int int, a bigint ); +EOF + +--system cqlsh -3 -f $MYSQLTEST_VARDIR/cassandra_test_init.cql + + +CREATE TABLE t1 ( + pk int primary key, + col_int int, + dyncol blob DYNAMIC_COLUMN_STORAGE=yes +) ENGINE=cassandra keyspace='bug' thrift_host = '127.0.0.1' column_family='cf1'; + +drop table t1; ############################################################################ ## Cassandra cleanup diff --git a/storage/cassandra/ha_cassandra.cc b/storage/cassandra/ha_cassandra.cc index ad6fcf081fa..f2067969a5b 100644 --- a/storage/cassandra/ha_cassandra.cc +++ b/storage/cassandra/ha_cassandra.cc @@ -1517,6 +1517,7 @@ bool ha_cassandra::setup_field_converters(Field **field_arg, uint n_fields) DBUG_RETURN(true); } (*conv)->field= *field; + break; } } if (dyncol_set && !(*field)) // is needed and not found @@ -1611,7 +1612,7 @@ void ha_cassandra::free_field_converters() for (uint i=0; i < n_field_converters; i++) if (field_converters[i]) { - DBUG_ASSERT(!dyncol_set || i == dyncol_field); + DBUG_ASSERT(!dyncol_set || i != dyncol_field); delete field_converters[i]; } my_free(field_converters);