diff options
-rw-r--r-- | mysql-test/suite/plugins/r/cassandra.result | 7 | ||||
-rw-r--r-- | mysql-test/suite/plugins/t/cassandra.test | 11 | ||||
-rw-r--r-- | storage/cassandra/ha_cassandra.cc | 6 |
3 files changed, 24 insertions, 0 deletions
diff --git a/mysql-test/suite/plugins/r/cassandra.result b/mysql-test/suite/plugins/r/cassandra.result index 0a54b9d9561..f95044a057c 100644 --- a/mysql-test/suite/plugins/r/cassandra.result +++ b/mysql-test/suite/plugins/r/cassandra.result @@ -627,3 +627,10 @@ rowkey b 1 fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo-bar 2 qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq-baz drop table t1; +# +# MDEV-4001: Cassandra: server crashes in ha_cassandra::end_bulk_insert on INSERT .. SELECT with a non-existing column +# +create table t1 (rowkey int primary key, a int) ENGINE=cassandra thrift_host='127.0.0.1' keyspace='mariadbtest2' column_family='cf14'; +insert into t1 (a) select b from t1; +ERROR 42S22: Unknown column 'b' in 'field list' +drop table t1; diff --git a/mysql-test/suite/plugins/t/cassandra.test b/mysql-test/suite/plugins/t/cassandra.test index 96c8b82e3e6..b12de78e326 100644 --- a/mysql-test/suite/plugins/t/cassandra.test +++ b/mysql-test/suite/plugins/t/cassandra.test @@ -93,6 +93,8 @@ create columnfamily cf12 (rowkey varchar primary key, decimal_col decimal); create columnfamily cf13 (rowkey int primary key, b blob); +create columnfamily cf14 ( rowkey int primary key, a int ); + EOF --error 0,1,2 --system cqlsh -3 -f $MYSQLTEST_VARDIR/cassandra_test_init.cql @@ -727,6 +729,14 @@ insert into t1 values (2, 'qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq select * from t1; drop table t1; +--echo # +--echo # MDEV-4001: Cassandra: server crashes in ha_cassandra::end_bulk_insert on INSERT .. SELECT with a non-existing column +--echo # +create table t1 (rowkey int primary key, a int) ENGINE=cassandra thrift_host='127.0.0.1' keyspace='mariadbtest2' column_family='cf14'; +--error ER_BAD_FIELD_ERROR +insert into t1 (a) select b from t1; +drop table t1; + ############################################################################ ## Cassandra cleanup ############################################################################ @@ -740,6 +750,7 @@ drop columnfamily cf6; drop columnfamily cf7; drop columnfamily cf13; +drop columnfamily cf14; --enable_parsing ############################################################################ ## Cassandra cleanup ends diff --git a/storage/cassandra/ha_cassandra.cc b/storage/cassandra/ha_cassandra.cc index 403d21f75f9..b24c0adb0fb 100644 --- a/storage/cassandra/ha_cassandra.cc +++ b/storage/cassandra/ha_cassandra.cc @@ -2041,6 +2041,12 @@ void ha_cassandra::start_bulk_insert(ha_rows rows, uint flags) int ha_cassandra::end_bulk_insert() { DBUG_ENTER("ha_cassandra::end_bulk_insert"); + + if (!doing_insert_batch) + { + /* SQL layer can make end_bulk_insert call without start_bulk_insert call */ + DBUG_RETURN(0); + } /* Flush out the insert buffer */ doing_insert_batch= false; |