diff options
author | mikael/pappa@dator5.(none) <> | 2006-10-02 15:52:29 -0400 |
---|---|---|
committer | mikael/pappa@dator5.(none) <> | 2006-10-02 15:52:29 -0400 |
commit | 1cdf82e012148370a721d9c4ac5c3cc9bcba00ba (patch) | |
tree | 4bca4ca32b026e15672d4d0284b012a03a358a81 | |
parent | 74c7f60d45e8285b17e2ecac71b33b35114be975 (diff) | |
download | mariadb-git-1cdf82e012148370a721d9c4ac5c3cc9bcba00ba.tar.gz |
BUG#18198: Partition function handling
Fixes of after review fixes
-rw-r--r-- | mysql-test/r/partition_hash.result | 14 | ||||
-rw-r--r-- | mysql-test/r/partition_range.result | 12 | ||||
-rw-r--r-- | mysql-test/t/partition_range.test | 12 | ||||
-rw-r--r-- | sql/ha_ndbcluster.cc | 7 | ||||
-rw-r--r-- | sql/ha_partition.cc | 4 | ||||
-rw-r--r-- | sql/partition_info.cc | 2 | ||||
-rw-r--r-- | sql/partition_info.h | 5 | ||||
-rw-r--r-- | sql/sql_partition.cc | 4 |
8 files changed, 43 insertions, 17 deletions
diff --git a/mysql-test/r/partition_hash.result b/mysql-test/r/partition_hash.result index 9a82a36d902..7ef3ee5c6c8 100644 --- a/mysql-test/r/partition_hash.result +++ b/mysql-test/r/partition_hash.result @@ -1,4 +1,18 @@ drop table if exists t1; +create table t1 (a varchar(10) charset latin1 collate latin1_bin) +partition by hash(length(a)) +partitions 10; +insert into t1 values (''),(' '),('a'),('a '),('a '); +explain partitions select * from t1 where a='a '; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where +explain partitions select * from t1 where a='a'; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where +explain partitions select * from t1 where a='a ' OR a='a'; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where +drop table t1; create table t1 (a int unsigned) partition by hash(a div 2) partitions 4; diff --git a/mysql-test/r/partition_range.result b/mysql-test/r/partition_range.result index c8380446f44..d39b39f413a 100644 --- a/mysql-test/r/partition_range.result +++ b/mysql-test/r/partition_range.result @@ -1,36 +1,36 @@ drop table if exists t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b int) partition by range (length(a) * b) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 2),('a',3); drop table t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b int) partition by range (b* length(a) * b) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 2),('a',3); drop table t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b varchar(10) charset latin1 collate latin1_bin) partition by range (length(b) * length(a)) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 'b '),('a','b'); drop table t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b varchar(10) charset latin1 collate latin1_bin) partition by range (length(a) * length(b)) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 'b '),('a','b'); drop table t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b varchar(10) charset latin1 collate latin1_bin, c int) partition by range (length(a) * c) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 'b ', 2),('a','b', 3); drop table t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b varchar(10) charset latin1 collate latin1_bin, c int) partition by range (c * length(a)) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 'b ', 2),('a','b', 3); drop table t1; create table t1 (a int unsigned) diff --git a/mysql-test/t/partition_range.test b/mysql-test/t/partition_range.test index ead971c189e..84f67febe8b 100644 --- a/mysql-test/t/partition_range.test +++ b/mysql-test/t/partition_range.test @@ -14,41 +14,41 @@ drop table if exists t1; # create table t1 (a varchar(10) charset latin1 collate latin1_bin, b int) partition by range (length(a) * b) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 2),('a',3); drop table t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b int) partition by range (b* length(a) * b) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 2),('a',3); drop table t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b varchar(10) charset latin1 collate latin1_bin) partition by range (length(b) * length(a)) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 'b '),('a','b'); drop table t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b varchar(10) charset latin1 collate latin1_bin) partition by range (length(a) * length(b)) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 'b '),('a','b'); drop table t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b varchar(10) charset latin1 collate latin1_bin, c int) partition by range (length(a) * c) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 'b ', 2),('a','b', 3); drop table t1; create table t1 (a varchar(10) charset latin1 collate latin1_bin, b varchar(10) charset latin1 collate latin1_bin, c int) partition by range (c * length(a)) -(partition p0 values less than (2), partition p1 values less than (10)); +(partition p0 values less than (2), partition p1 values less than (400)); insert into t1 values ('a ', 'b ', 2),('a','b', 3); drop table t1; diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 0739b704462..ccfe8e717fb 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -1899,7 +1899,10 @@ int ha_ndbcluster::peek_indexed_rows(const byte *record) error= m_part_info->get_partition_id(m_part_info, &part_id, &func_value); dbug_tmp_restore_column_map(table->read_set, old_map); if (error) + { + m_part_info->err_value= func_value; DBUG_RETURN(error); + } op->setPartitionId(part_id); } } @@ -2534,7 +2537,10 @@ int ha_ndbcluster::write_row(byte *record) error= m_part_info->get_partition_id(m_part_info, &part_id, &func_value); dbug_tmp_restore_column_map(table->read_set, old_map); if (error) + { + m_part_info->err_value= func_value; DBUG_RETURN(error); + } op->setPartitionId(part_id); } @@ -2726,6 +2732,7 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data) m_part_info, &old_part_id, &new_part_id, &func_value))) { + m_part_info->err_value= func_value; DBUG_RETURN(error); } diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 3cb855b1035..1e75dd08f38 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -2670,7 +2670,10 @@ int ha_partition::write_row(byte * buf) #endif dbug_tmp_restore_column_map(table->read_set, old_map); if (unlikely(error)) + { + m_part_info->err_value= func_value; DBUG_RETURN(error); + } m_last_part= part_id; DBUG_PRINT("info", ("Insert in partition %d", part_id)); DBUG_RETURN(m_file[part_id]->write_row(buf)); @@ -2719,6 +2722,7 @@ int ha_partition::update_row(const byte *old_data, byte *new_data) m_part_info, &old_part_id, &new_part_id, &func_value))) { + m_part_info->err_value= func_value; DBUG_RETURN(error); } diff --git a/sql/partition_info.cc b/sql/partition_info.cc index 1f84d3f1e83..2a06a649eca 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -855,7 +855,7 @@ void partition_info::print_no_partition_found(TABLE *table) if (part_expr->null_value) buf_ptr= (char*)"NULL"; else - longlong2str(part_expr->val_int(), buf, + longlong2str(err_value, 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); diff --git a/sql/partition_info.h b/sql/partition_info.h index b45789c4bae..09d827d44c4 100644 --- a/sql/partition_info.h +++ b/sql/partition_info.h @@ -150,7 +150,8 @@ public: /******************************************** * INTERVAL ANALYSIS ENDS ********************************************/ - + + longlong err_value; char* part_info_string; char *part_func_string; @@ -227,7 +228,7 @@ public: restore_full_part_field_ptrs(NULL), part_expr(NULL), subpart_expr(NULL), item_free_list(NULL), first_log_entry(NULL), exec_log_entry(NULL), frm_log_entry(NULL), - list_array(NULL), + list_array(NULL), err_value(0), part_info_string(NULL), part_func_string(NULL), subpart_func_string(NULL), part_state(NULL), diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 0944db9ccb8..a20e5dd512b 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -2771,8 +2771,8 @@ notfound: int get_partition_id_range(partition_info *part_info, - uint32 *part_id, - longlong *func_value) + uint32 *part_id, + longlong *func_value) { longlong *range_array= part_info->range_int_array; uint max_partition= part_info->no_parts - 1; |