summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2021-11-08 19:39:13 +0100
committerOleksandr Byelkin <sanja@mariadb.com>2021-11-08 19:39:13 +0100
commitde2fa9eced796a38bf2a194f35589f6eef814483 (patch)
tree531402e9099d1a2c7c2b29db93303e2347498134
parenta19ab67318760f8f155ef7f4f821dfc738542c67 (diff)
parent227b782ad6a6b199caa5dc1c034f6dbe4e44fca8 (diff)
downloadmariadb-git-de2fa9eced796a38bf2a194f35589f6eef814483.tar.gz
Merge branch '10.4' into bb-10.4-release
-rw-r--r--VERSION2
-rw-r--r--mysql-test/main/long_unique_bugs.result14
-rw-r--r--mysql-test/main/long_unique_bugs.test16
-rw-r--r--mysql-test/main/opt_trace.result6
-rw-r--r--mysql-test/main/opt_trace.test2
-rw-r--r--mysql-test/main/opt_trace_default.result8
-rw-r--r--mysql-test/main/opt_trace_default.test11
-rw-r--r--sql/field.h3
-rw-r--r--sql/table.cc5
9 files changed, 62 insertions, 5 deletions
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
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/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);
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';
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;