diff options
-rw-r--r-- | mysql-test/r/ndb_partition_error.result | 8 | ||||
-rw-r--r-- | mysql-test/t/ndb_partition_error.test | 12 | ||||
-rw-r--r-- | sql/ha_ndbcluster.cc | 5 |
3 files changed, 24 insertions, 1 deletions
diff --git a/mysql-test/r/ndb_partition_error.result b/mysql-test/r/ndb_partition_error.result index 3fd111a7c0f..66f623dee13 100644 --- a/mysql-test/r/ndb_partition_error.result +++ b/mysql-test/r/ndb_partition_error.result @@ -28,3 +28,11 @@ partitions 3 partition x2 values less than (10), partition x3 values less than (20)); drop table t1; +CREATE TABLE t1 (id INT) ENGINE=NDB +PARTITION BY LIST(id) +(PARTITION p0 VALUES IN (2, 4), +PARTITION p1 VALUES IN (42, 142)); +INSERT INTO t1 VALUES (2); +UPDATE t1 SET id=5 WHERE id=2; +ERROR HY000: Table has no partition for value 5 +DROP TABLE t1; diff --git a/mysql-test/t/ndb_partition_error.test b/mysql-test/t/ndb_partition_error.test index cf570cc0234..c84266b66f7 100644 --- a/mysql-test/t/ndb_partition_error.test +++ b/mysql-test/t/ndb_partition_error.test @@ -44,3 +44,15 @@ partitions 3 partition x3 values less than (20)); drop table t1; + +# +# Bug #17763 mysqld cores with list partitioning if update to missing partition +# +CREATE TABLE t1 (id INT) ENGINE=NDB + PARTITION BY LIST(id) + (PARTITION p0 VALUES IN (2, 4), + PARTITION p1 VALUES IN (42, 142)); +INSERT INTO t1 VALUES (2); +--error ER_NO_PARTITION_FOR_GIVEN_VALUE +UPDATE t1 SET id=5 WHERE id=2; +DROP TABLE t1; diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index c8e48c43bee..332e39648b1 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -5988,8 +5988,11 @@ void ha_ndbcluster::print_error(int error, myf errflag) DBUG_PRINT("enter", ("error = %d", error)); if (error == HA_ERR_NO_PARTITION_FOUND) + { + char buf[100]; my_error(ER_NO_PARTITION_FOR_GIVEN_VALUE, MYF(0), - (int)m_part_info->part_expr->val_int()); + llstr(m_part_info->part_expr->val_int(), buf)); + } else handler::print_error(error, errflag); DBUG_VOID_RETURN; |