From fcca0c67b65ba9b869f545b94a4e287a5ec1152d Mon Sep 17 00:00:00 2001 From: Sergei Krivonos Date: Thu, 28 Oct 2021 18:35:33 +0300 Subject: MDEV-26929: fixed opt_trace test for --mysqld=--optimizer_trace=enabled=on --- mysql-test/main/opt_trace.result | 6 +++--- mysql-test/main/opt_trace.test | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mysql-test/main/opt_trace.result b/mysql-test/main/opt_trace.result index c16df0da0b2..f2b69fb1eaa 100644 --- a/mysql-test/main/opt_trace.result +++ b/mysql-test/main/opt_trace.result @@ -4,14 +4,14 @@ OPTIMIZER_TRACE QUERY OPTIMIZER_TRACE TRACE OPTIMIZER_TRACE MISSING_BYTES_BEYOND_MAX_MEM_SIZE OPTIMIZER_TRACE INSUFFICIENT_PRIVILEGES -show variables like 'optimizer_trace'; -Variable_name Value -optimizer_trace enabled=off set optimizer_trace="enabled=on"; show variables like 'optimizer_trace'; Variable_name Value optimizer_trace enabled=on set optimizer_trace="enabled=off"; +show variables like 'optimizer_trace'; +Variable_name Value +optimizer_trace enabled=off create table t1 (a int, b int); insert into t1 values (1,2),(2,3); create table t2 (b int); diff --git a/mysql-test/main/opt_trace.test b/mysql-test/main/opt_trace.test index 1dfb7e5ce8a..2084940fbc5 100644 --- a/mysql-test/main/opt_trace.test +++ b/mysql-test/main/opt_trace.test @@ -1,10 +1,10 @@ --source include/not_embedded.inc --source include/have_sequence.inc SELECT table_name, column_name FROM information_schema.columns where table_name="OPTIMIZER_TRACE"; -show variables like 'optimizer_trace'; set optimizer_trace="enabled=on"; show variables like 'optimizer_trace'; set optimizer_trace="enabled=off"; +show variables like 'optimizer_trace'; create table t1 (a int, b int); insert into t1 values (1,2),(2,3); -- cgit v1.2.1 From 1fdac574470a5103dde689c8ce65041487e77f2c Mon Sep 17 00:00:00 2001 From: Nikita Malyavin Date: Thu, 28 Oct 2021 03:37:23 +0300 Subject: MDEV-26453 Assertion `0' failed in row_upd_sec_index_entry & corruption Long UNIQUE HASH index silently creates virtual column index, which should be impossible for base columns featuring AUTO_INCREMENT. Fix: add a relevant check; add new vcol type for a prettier error message. --- mysql-test/main/long_unique_bugs.result | 14 ++++++++++++++ mysql-test/main/long_unique_bugs.test | 16 ++++++++++++++++ sql/field.h | 3 +++ sql/table.cc | 5 +++++ 4 files changed, 38 insertions(+) diff --git a/mysql-test/main/long_unique_bugs.result b/mysql-test/main/long_unique_bugs.result index 5d6c0562c8a..738744867c0 100644 --- a/mysql-test/main/long_unique_bugs.result +++ b/mysql-test/main/long_unique_bugs.result @@ -288,3 +288,17 @@ Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_par t2 0 a 1 a A NULL NULL NULL YES HASH t2 0 a 2 b A NULL NULL NULL YES HASH DROP TABLE t1,t2; +# +# MDEV-26453 Assertion `0' failed in row_upd_sec_index_entry & corruption +# +CREATE TABLE t (c INT AUTO_INCREMENT KEY, UNIQUE USING HASH(c)); +ERROR HY000: Function or expression 'AUTO_INCREMENT' cannot be used in the USING HASH clause of `c` +CREATE TABLE t (c INT AUTO_INCREMENT KEY); +CREATE UNIQUE INDEX i USING HASH ON t (c); +ERROR HY000: Function or expression 'AUTO_INCREMENT' cannot be used in the USING HASH clause of `c` +INSERT INTO t VALUES (0); +SELECT * FROM t; +c +1 +DELETE FROM t; +DROP TABLE t; diff --git a/mysql-test/main/long_unique_bugs.test b/mysql-test/main/long_unique_bugs.test index 34d02b1c8f4..319940690ea 100644 --- a/mysql-test/main/long_unique_bugs.test +++ b/mysql-test/main/long_unique_bugs.test @@ -368,3 +368,19 @@ show index from t2; # Cleanup DROP TABLE t1,t2; + +--echo # +--echo # MDEV-26453 Assertion `0' failed in row_upd_sec_index_entry & corruption +--echo # + +--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED +CREATE TABLE t (c INT AUTO_INCREMENT KEY, UNIQUE USING HASH(c)); + +CREATE TABLE t (c INT AUTO_INCREMENT KEY); +--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED +CREATE UNIQUE INDEX i USING HASH ON t (c); +INSERT INTO t VALUES (0); +SELECT * FROM t; +DELETE FROM t; + +DROP TABLE t; diff --git a/sql/field.h b/sql/field.h index a51f279e59b..c19a501f1f9 100644 --- a/sql/field.h +++ b/sql/field.h @@ -475,6 +475,7 @@ enum enum_vcol_info_type { VCOL_GENERATED_VIRTUAL, VCOL_GENERATED_STORED, VCOL_DEFAULT, VCOL_CHECK_FIELD, VCOL_CHECK_TABLE, + VCOL_USING_HASH, /* Additional types should be added here */ /* Following is the highest value last */ VCOL_TYPE_NONE = 127 // Since the 0 value is already in use @@ -492,6 +493,8 @@ static inline const char *vcol_type_name(enum_vcol_info_type type) case VCOL_CHECK_FIELD: case VCOL_CHECK_TABLE: return "CHECK"; + case VCOL_USING_HASH: + return "USING HASH"; case VCOL_TYPE_NONE: return "UNTYPED"; } diff --git a/sql/table.cc b/sql/table.cc index 9a2b2819455..4df5af7a6c3 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1065,6 +1065,8 @@ static void mysql57_calculate_null_position(TABLE_SHARE *share, } } +static bool fix_and_check_vcol_expr(THD *thd, TABLE *table, + Virtual_column_info *vcol); /** Parse TABLE_SHARE::vcol_defs @@ -1256,6 +1258,9 @@ bool parse_vcol_defs(THD *thd, MEM_ROOT *mem_root, TABLE *table, Virtual_column_info *v= new (mem_root) Virtual_column_info(); field->vcol_info= v; field->vcol_info->expr= hash_item; + field->vcol_info->set_vcol_type(VCOL_USING_HASH); + if (fix_and_check_vcol_expr(thd, table, v)) + goto end; key->user_defined_key_parts= key->ext_key_parts= key->usable_key_parts= 1; key->key_part+= parts; -- cgit v1.2.1 From d352bc5b6772f735a7e4bc540f578e0efc280e71 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Fri, 29 Oct 2021 11:44:09 +0300 Subject: MDEV-26929: Make the main testsuite runnable with optimizer trace enabled Part#2: check that compile-time default @@optimizer_trace is correct. --- mysql-test/main/opt_trace_default.result | 8 ++++++++ mysql-test/main/opt_trace_default.test | 11 +++++++++++ 2 files changed, 19 insertions(+) create mode 100644 mysql-test/main/opt_trace_default.result create mode 100644 mysql-test/main/opt_trace_default.test diff --git a/mysql-test/main/opt_trace_default.result b/mysql-test/main/opt_trace_default.result new file mode 100644 index 00000000000..4d99128675c --- /dev/null +++ b/mysql-test/main/opt_trace_default.result @@ -0,0 +1,8 @@ +# Verify that compile-time default for optimizer trace is OFF (enabled=off). +select +global_value_origin, +default_value +from +INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace'; +global_value_origin default_value +COMPILE-TIME enabled=off diff --git a/mysql-test/main/opt_trace_default.test b/mysql-test/main/opt_trace_default.test new file mode 100644 index 00000000000..221b68a626c --- /dev/null +++ b/mysql-test/main/opt_trace_default.test @@ -0,0 +1,11 @@ + +if (`SELECT 'COMPILE-TIME'<>GLOBAL_VALUE_ORIGIN from INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace'`) { +--Skip Needs optimizer_trace default to be the compile-time default +} + +--echo # Verify that compile-time default for optimizer trace is OFF (enabled=off). +select + global_value_origin, + default_value +from + INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace'; -- cgit v1.2.1 From 227b782ad6a6b199caa5dc1c034f6dbe4e44fca8 Mon Sep 17 00:00:00 2001 From: Daniel Bartholomew Date: Mon, 8 Nov 2021 12:39:31 -0500 Subject: bump the VERSION --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 6abe981f6c2..16ab780f3f3 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=10 MYSQL_VERSION_MINOR=4 -MYSQL_VERSION_PATCH=22 +MYSQL_VERSION_PATCH=23 SERVER_MATURITY=stable -- cgit v1.2.1