mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Bug#52121 partition by key on utf32 enum field cause debug assertion: (length % 4) == 0
Problem: ENUM columns are sorted and distributed according to their numeric value, but Field::hash() incorrectly passed string character set (utf32) in combination with numeric value to the hash function, which made assertion fail. Fix: pass "binary" character set in combination with numeric value to the hash function. mysql-test/suite/parts/r/part_ctype_utf32.result Adding tests mysql-test/suite/parts/t/part_ctype_utf32.test Adding test sql/field.cc Pass correct character set pointer to the hash function.
This commit is contained in:
parent
508104d7d0
commit
1ed02deea0
3 changed files with 43 additions and 1 deletions
14
mysql-test/suite/parts/r/part_ctype_utf32.result
Normal file
14
mysql-test/suite/parts/r/part_ctype_utf32.result
Normal file
|
@ -0,0 +1,14 @@
|
|||
#
|
||||
# Bug#52121 partition by key on utf32 enum field cause debug assertion: (length % 4) == 0
|
||||
#
|
||||
DROP TABLE IF EXISTS t1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
CREATE TABLE t1 (
|
||||
a enum('a') CHARACTER SET utf32 COLLATE utf32_spanish2_ci
|
||||
) ENGINE=MYISAM PARTITION BY KEY(a) PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
a
|
||||
DROP TABLE t1;
|
28
mysql-test/suite/parts/t/part_ctype_utf32.test
Normal file
28
mysql-test/suite/parts/t/part_ctype_utf32.test
Normal file
|
@ -0,0 +1,28 @@
|
|||
################################################################################
|
||||
# t/partition_ctype_utf32.test #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests for partitions + UTF32 #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: Alexander Barkov #
|
||||
# Original Date: 2010-08-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--source include/have_partition.inc
|
||||
--source include/have_utf32.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#52121 partition by key on utf32 enum field cause debug assertion: (length % 4) == 0
|
||||
--echo #
|
||||
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (
|
||||
a enum('a') CHARACTER SET utf32 COLLATE utf32_spanish2_ci
|
||||
) ENGINE=MYISAM PARTITION BY KEY(a) PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
|
@ -1329,7 +1329,7 @@ void Field::hash(ulong *nr, ulong *nr2)
|
|||
else
|
||||
{
|
||||
uint len= pack_length();
|
||||
CHARSET_INFO *cs= charset();
|
||||
CHARSET_INFO *cs= sort_charset();
|
||||
cs->coll->hash_sort(cs, ptr, len, nr, nr2);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue