diff options
author | unknown <mikael/pappa@dator5.(none)> | 2006-07-20 05:28:16 -0400 |
---|---|---|
committer | unknown <mikael/pappa@dator5.(none)> | 2006-07-20 05:28:16 -0400 |
commit | d3b743ae18801473af91d13a83297bcc0b02fae0 (patch) | |
tree | da310fc6f8a67bd811c883d600b16277eb1c9f3c /sql/sql_partition.cc | |
parent | 98a63cde87b4fc4fced22b12d3a0651afec9a133 (diff) | |
download | mariadb-git-d3b743ae18801473af91d13a83297bcc0b02fae0.tar.gz |
BUG20733: Bug in partition pruning with zerofill field
Problem was with handling NULL values in ranges
mysql-test/r/partition_hash.result:
New partition pruning test cases
mysql-test/r/partition_list.result:
New partition pruning test cases
mysql-test/r/partition_pruning.result:
New partition pruning test cases
mysql-test/r/partition_range.result:
New partition pruning test cases
mysql-test/t/partition_hash.test:
New partition pruning test cases
mysql-test/t/partition_list.test:
New partition pruning test cases
mysql-test/t/partition_pruning.test:
New partition pruning test cases
mysql-test/t/partition_range.test:
New partition pruning test cases
sql/opt_range.cc:
Added comment
sql/sql_partition.cc:
Partition pruning didn't handle ranges with NULL values in a proper manner
Diffstat (limited to 'sql/sql_partition.cc')
-rw-r--r-- | sql/sql_partition.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 44c0b8ffcd9..3f1572ee676 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -2415,6 +2415,10 @@ uint32 get_list_array_idx_for_endpoint(partition_info *part_info, bool unsigned_flag= part_info->part_expr->unsigned_flag; DBUG_ENTER("get_list_array_idx_for_endpoint"); + if (part_info->part_expr->null_value) + { + DBUG_RETURN(0); + } if (unsigned_flag) part_func_value-= 0x8000000000000000ULL; DBUG_ASSERT(part_info->no_list_values); @@ -2539,6 +2543,13 @@ uint32 get_partition_id_range_for_endpoint(partition_info *part_info, bool unsigned_flag= part_info->part_expr->unsigned_flag; DBUG_ENTER("get_partition_id_range_for_endpoint"); + if (part_info->part_expr->null_value) + { + uint32 ret_part_id= 0; + if (!left_endpoint && include_endpoint) + ret_part_id= 1; + DBUG_RETURN(ret_part_id); + } if (unsigned_flag) part_func_value-= 0x8000000000000000ULL; while (max_part_id > min_part_id) |