diff options
-rw-r--r-- | mysql-test/t/partition.test | 1 | ||||
-rw-r--r-- | sql/ha_ndbcluster.cc | 9 | ||||
-rw-r--r-- | sql/ha_partition.cc | 9 | ||||
-rw-r--r-- | sql/partition_info.cc | 24 | ||||
-rw-r--r-- | sql/partition_info.h | 3 |
5 files changed, 29 insertions, 17 deletions
diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index 9b85d6e023e..f62bb2dcd01 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -36,6 +36,7 @@ insert into t1 values (0xFFFFFFFFFFFFFFFD); insert into t1 values (0xFFFFFFFFFFFFFFFE); select * from t1 where (a + 1) < 10; select * from t1 where (a + 1) > 10; +drop table t1; # # Bug 19307: CSV engine crashes diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index d1bd4e057ae..caeb0631d85 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -6420,14 +6420,7 @@ 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_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->read_set); - my_error(ER_NO_PARTITION_FOR_GIVEN_VALUE, MYF(0), - m_part_info->part_expr->null_value ? "NULL" : - llstr(m_part_info->part_expr->val_int(), buf)); - dbug_tmp_restore_column_map(table->read_set, old_map); - } + m_part_info->print_no_partition_found(table); else handler::print_error(error, errflag); DBUG_VOID_RETURN; diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index f151d89bb1a..93fb6409f9f 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -5097,14 +5097,7 @@ void ha_partition::print_error(int error, myf errflag) DBUG_PRINT("enter", ("error: %d", error)); if (error == HA_ERR_NO_PARTITION_FOUND) - { - char buf[100]; - my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->read_set); - my_error(ER_NO_PARTITION_FOR_GIVEN_VALUE, MYF(0), - m_part_info->part_expr->null_value ? "NULL" : - llstr(m_part_info->part_expr->val_int(), buf)); - dbug_tmp_restore_column_map(table->read_set, old_map); - } + m_part_info->print_no_partition_found(table); else m_file[0]->print_error(error, errflag); DBUG_VOID_RETURN; diff --git a/sql/partition_info.cc b/sql/partition_info.cc index 51230a0f5c0..39c8d976732 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -827,4 +827,28 @@ end: } +/* + Print error for no partition found + SYNOPSIS + print_no_partition_found() + table Table object + RETURN VALUES + NONE +*/ + +void partition_info::print_no_partition_found(TABLE *table) +{ + char buf[100]; + char *buf_ptr= (char*)&buf; + my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->read_set); + + if (part_expr->null_value) + buf_ptr= (char*)"NULL"; + else + longlong2str(part_expr->val_int(), buf, + part_expr->unsigned_flag ? 10 : -10); + my_error(ER_NO_PARTITION_FOR_GIVEN_VALUE, MYF(0), buf_ptr); + dbug_tmp_restore_column_map(table->read_set, old_map); +} + #endif /* WITH_PARTITION_STORAGE_ENGINE */ diff --git a/sql/partition_info.h b/sql/partition_info.h index f195e555934..3d8c6a40221 100644 --- a/sql/partition_info.h +++ b/sql/partition_info.h @@ -217,7 +217,7 @@ public: list_of_part_fields(FALSE), list_of_subpart_fields(FALSE), linear_hash_ind(FALSE), fixed(FALSE), is_auto_partitioned(FALSE), from_openfrm(FALSE), - has_null_value(FALSE), has_null_part_id(0) + has_null_value(FALSE) { all_fields_in_PF.clear_all(); all_fields_in_PPF.clear_all(); @@ -251,6 +251,7 @@ public: bool check_list_constants(); bool check_partition_info(THD *thd, handlerton **eng_type, handler *file, ulonglong max_rows); + void print_no_partition_found(TABLE *table); private: static int list_part_cmp(const void* a, const void* b); static int list_part_cmp_unsigned(const void* a, const void* b); |