summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/ndb_partition_error.result8
-rw-r--r--mysql-test/t/ndb_partition_error.test12
-rw-r--r--sql/ha_ndbcluster.cc5
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;