diff options
author | Alexander Barkov <bar@mariadb.com> | 2019-10-18 08:07:40 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2019-10-18 10:15:17 +0400 |
commit | 9a833dc6881b896e65cf76c9699faa6c324e1775 (patch) | |
tree | 25b3daa904d7fb75a50c08d777ae3fce025684f2 /mysql-test/main/partition_utf8-debug.result | |
parent | 9c9606152505792fcb8f4b7386e5b6a25e2790b4 (diff) | |
download | mariadb-git-9a833dc6881b896e65cf76c9699faa6c324e1775.tar.gz |
MDEV-20856 Bad values in metadata views for partitions on VARBINARY
The old code to print partition values was too complicated:
- it created new Items for character set conversion purposes.
- it mixed string conversion and partition error reporting
in the same code blocks.
Simplifying the code as follows:
- Adding helper methods String::can_be_safely_convert_to() and
String::append_introducer_and_hex().
- Adding DBUG_EXECUTE_IF("generate_partition_syntax_for_frm", push_warning...)
into generate_partition_syntax_for_frm(), to test the PARTITON
clause written to FRM. Adding test partition_utf8-debug.test for this.
- Removing functions get_cs_converted_part_value_from_string() and
get_cs_converted_string_value. Changing get_partition_column_description()
to use Type_handler::partition_field_append_value() instead.
This makes SHOW CREATE TABLE and SELECT FROM I_S.PARTITIONS
use the same code path.
- Changing Type_handler::partition_field_append_value() not to
call convert_charset_partition_constant(), to avoid creating a new Item
for string conversion pursposes.
Rewritting the code to use only String methods.
- Removing error reporting code (ER_PARTITION_FUNCTION_IS_NOT_ALLOWED)
from Type_handler::partition_field_append_value().
The error is correctly detected and reported on the caller level.
So error reporting was redundant here.
Also:
- Moving methods Type_handler::partition_field_*() from sql_partition.cc
to sql_type.cc. This fixes compilation problem with -DPLUGIN_PARTITION=NO,
earlier introduced by the patch for MDEV-20831.
Diffstat (limited to 'mysql-test/main/partition_utf8-debug.result')
-rw-r--r-- | mysql-test/main/partition_utf8-debug.result | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/mysql-test/main/partition_utf8-debug.result b/mysql-test/main/partition_utf8-debug.result new file mode 100644 index 00000000000..569bec3ea8a --- /dev/null +++ b/mysql-test/main/partition_utf8-debug.result @@ -0,0 +1,88 @@ +# +# Start of 10.5 tests +# +# +# MDEV-20856 Bad values in metadata views for partitions on VARBINARY +# +SET NAMES utf8; +SET @save_dbug = @@debug_dbug; +SET SESSION debug_dbug="+d,generate_partition_syntax_for_frm"; +CREATE OR REPLACE TABLE t1 (a VARCHAR(10)) CHARACTER SET latin1 +PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN (_utf8'Ṡ')); +ERROR HY000: This partition function is not allowed +CREATE OR REPLACE TABLE t1 (a VARCHAR(10)) CHARACTER SET latin1 +PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN ('Ṡ')); +ERROR HY000: This partition function is not allowed +CREATE OR REPLACE TABLE t1 (a VARCHAR(10)) CHARACTER SET latin1 +PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN (_latin1 0xDF)); +Warnings: +Note 1003 PARTITION BY LIST COLUMNS(`a`) +(PARTITION `p0` VALUES IN (_latin1 0xdf) ENGINE = MyISAM) +SELECT PARTITION_DESCRIPTION FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='t1'; +PARTITION_DESCRIPTION +'ß' +DROP TABLE t1; +CREATE OR REPLACE TABLE t1 (a VARCHAR(10)) CHARACTER SET latin1 +PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN (_utf8'ß')); +Warnings: +Note 1003 PARTITION BY LIST COLUMNS(`a`) +(PARTITION `p0` VALUES IN (_latin1 0xdf) ENGINE = MyISAM) +SELECT PARTITION_DESCRIPTION FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='t1'; +PARTITION_DESCRIPTION +'ß' +DROP TABLE t1; +CREATE OR REPLACE TABLE t1 (a VARCHAR(10)) CHARACTER SET latin1 +PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN ('ß')); +Warnings: +Note 1003 PARTITION BY LIST COLUMNS(`a`) +(PARTITION `p0` VALUES IN (_latin1 0xdf) ENGINE = MyISAM) +DROP TABLE t1; +CREATE OR REPLACE TABLE t1 (a VARCHAR(10)) CHARACTER SET utf8 +PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN (_utf8'ß')); +Warnings: +Note 1003 PARTITION BY LIST COLUMNS(`a`) +(PARTITION `p0` VALUES IN (_utf8 0xc39f) ENGINE = MyISAM) +SELECT PARTITION_DESCRIPTION FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='t1'; +PARTITION_DESCRIPTION +'ß' +DROP TABLE t1; +CREATE OR REPLACE TABLE t1 (a VARCHAR(10)) CHARACTER SET utf8 +PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN ('ß')); +Warnings: +Note 1003 PARTITION BY LIST COLUMNS(`a`) +(PARTITION `p0` VALUES IN (_utf8 0xc39f) ENGINE = MyISAM) +SELECT PARTITION_DESCRIPTION FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='t1'; +PARTITION_DESCRIPTION +'ß' +DROP TABLE t1; +CREATE OR REPLACE TABLE t1 (a VARBINARY(10)) CHARACTER SET utf8 +PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN (0xFF)); +Warnings: +Note 1003 PARTITION BY LIST COLUMNS(`a`) +(PARTITION `p0` VALUES IN (_binary 0xff) ENGINE = MyISAM) +SELECT PARTITION_DESCRIPTION FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='t1'; +PARTITION_DESCRIPTION +_binary 0xff +DROP TABLE t1; +CREATE OR REPLACE TABLE t1 (a DATE) CHARACTER SET utf8 +PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN (FROM_DAYS(NULL))); +Warnings: +Note 1003 PARTITION BY LIST COLUMNS(`a`) +(PARTITION `p0` VALUES IN (NULL) ENGINE = MyISAM) +SELECT PARTITION_DESCRIPTION FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='t1'; +PARTITION_DESCRIPTION +NULL +DROP TABLE t1; +CREATE OR REPLACE TABLE t1 (a DATE) CHARACTER SET utf8 +PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN (FROM_DAYS(100))); +Warnings: +Note 1003 PARTITION BY LIST COLUMNS(`a`) +(PARTITION `p0` VALUES IN (_utf8 0x303030302d30302d3030) ENGINE = MyISAM) +SELECT PARTITION_DESCRIPTION FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='t1'; +PARTITION_DESCRIPTION +'0000-00-00' +DROP TABLE t1; +SET debug_dbug=@save_dbug; +# +# End of 10.5 tests +# |