Commit 1ed02dee authored by Alexander Barkov's avatar Alexander Barkov

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.
parent 508104d7
#
# 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;
################################################################################
# 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);
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment