summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2022-10-17 08:44:12 +0200
committerOleksandr Byelkin <sanja@mariadb.com>2022-10-17 08:44:12 +0200
commitf3fddc1b4a3d05167303a87b04be985b17096a46 (patch)
tree534d55b0c299a36dfda13b0829a9313b857ee063
parent851b31bcc47b742cd3b39ad06176b0e8be591c18 (diff)
parentec2b30e7367fcd4b2af0d7ae42d7b83148a859a4 (diff)
downloadmariadb-git-f3fddc1b4a3d05167303a87b04be985b17096a46.tar.gz
Merge branch '10.7' into 10.8
m---------extra/wolfssl/wolfssl0
-rw-r--r--libmysqld/CMakeLists.txt12
-rw-r--r--mysql-test/main/create_or_replace.result3
-rw-r--r--mysql-test/main/create_or_replace.test4
-rw-r--r--mysql-test/main/kill.test1
-rw-r--r--mysql-test/suite/gcol/r/innodb_virtual_index.result65
-rw-r--r--mysql-test/suite/gcol/t/innodb_virtual_index.test50
-rw-r--r--mysql-test/suite/json/r/json_table.result6
-rw-r--r--mysql-test/suite/json/t/json_table.test8
-rw-r--r--sql/item.h5
-rw-r--r--sql/json_table.cc2
-rw-r--r--sql/mysqld.cc24
-rw-r--r--sql/sql_class.h15
-rw-r--r--sql/table.cc25
-rw-r--r--sql/table.h2
-rw-r--r--storage/innobase/handler/ha_innodb.cc7
-rw-r--r--storage/innobase/include/row0mysql.h9
-rw-r--r--storage/innobase/include/row0upd.h5
-rw-r--r--storage/innobase/row/row0ins.cc2
-rw-r--r--storage/innobase/row/row0log.cc2
-rw-r--r--storage/innobase/row/row0sel.cc3
-rw-r--r--storage/innobase/row/row0upd.cc3
-rw-r--r--storage/mroonga/mrn_mysql_compat.h2
-rw-r--r--storage/myisam/ha_myisam.cc4
24 files changed, 232 insertions, 27 deletions
diff --git a/extra/wolfssl/wolfssl b/extra/wolfssl/wolfssl
-Subproject 57aac1c50b45275c7a99eca32ad985998b292dc
+Subproject f1e2165c591f074feb47872a8ff712713ec411e
diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt
index 92a58a6525a..490c2ed41b5 100644
--- a/libmysqld/CMakeLists.txt
+++ b/libmysqld/CMakeLists.txt
@@ -31,15 +31,23 @@ ${SSL_INTERNAL_INCLUDE_DIRS}
)
SET(GEN_SOURCES
-${CMAKE_BINARY_DIR}/sql/sql_yacc.hh
+${CMAKE_BINARY_DIR}/sql/sql_yacc.hh
${CMAKE_BINARY_DIR}/sql/yy_mariadb.cc
${CMAKE_BINARY_DIR}/sql/yy_oracle.hh
${CMAKE_BINARY_DIR}/sql/yy_oracle.cc
-${CMAKE_BINARY_DIR}/sql/lex_hash.h
+${CMAKE_BINARY_DIR}/sql/lex_hash.h
)
SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} PROPERTIES GENERATED TRUE)
+IF(CMAKE_C_COMPILER_ID MATCHES "Clang" AND
+ NOT CMAKE_C_COMPILER_VERSION VERSION_LESS "13.0.0")
+ ADD_COMPILE_FLAGS(
+ ${CMAKE_BINARY_DIR}/sql/yy_mariadb.cc
+ ${CMAKE_BINARY_DIR}/sql/yy_oracle.cc
+ COMPILE_FLAGS "-Wno-unused-but-set-variable")
+ENDIF()
+
SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc
libmysql.c ../sql-common/errmsg.c
../sql-common/client.c
diff --git a/mysql-test/main/create_or_replace.result b/mysql-test/main/create_or_replace.result
index 8aeb83938dc..e7170632fd6 100644
--- a/mysql-test/main/create_or_replace.result
+++ b/mysql-test/main/create_or_replace.result
@@ -576,5 +576,8 @@ CREATE TABLE tm (a INT) ENGINE=MERGE UNION(t);
CREATE OR REPLACE TABLE t LIKE tm;
ERROR HY000: Table 'tm' is specified twice, both as a target for 'CREATE' and as a separate source for data
DROP TABLE IF EXISTS tm, t;
+#
+# End of 10.3 tests
+#
# End of 10.4 tests
SET GLOBAL innodb_stats_persistent=@save_persistent;
diff --git a/mysql-test/main/create_or_replace.test b/mysql-test/main/create_or_replace.test
index 793df1616f6..58221dde4fe 100644
--- a/mysql-test/main/create_or_replace.test
+++ b/mysql-test/main/create_or_replace.test
@@ -524,6 +524,10 @@ CREATE OR REPLACE TABLE t LIKE tm;
# Cleanup
DROP TABLE IF EXISTS tm, t;
+--echo #
+--echo # End of 10.3 tests
+--echo #
+
--echo # End of 10.4 tests
SET GLOBAL innodb_stats_persistent=@save_persistent;
diff --git a/mysql-test/main/kill.test b/mysql-test/main/kill.test
index e0223c068bf..b7c32ae098b 100644
--- a/mysql-test/main/kill.test
+++ b/mysql-test/main/kill.test
@@ -7,6 +7,7 @@
# application. 'mysqltest' does not handle the kill request.
#
+-- source include/count_sessions.inc
-- source include/not_embedded.inc
--disable_service_connection
diff --git a/mysql-test/suite/gcol/r/innodb_virtual_index.result b/mysql-test/suite/gcol/r/innodb_virtual_index.result
index 7e2f77e5d96..52203c0610c 100644
--- a/mysql-test/suite/gcol/r/innodb_virtual_index.result
+++ b/mysql-test/suite/gcol/r/innodb_virtual_index.result
@@ -1,3 +1,4 @@
+SET default_storage_engine= innodb;
SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency;
SET GLOBAL innodb_purge_rseg_truncate_frequency = 1;
#
@@ -248,12 +249,15 @@ ENGINE=InnoDB;
INSERT IGNORE INTO t1 (a,b) VALUES(1,20190132);
Warnings:
Warning 1265 Data truncated for column 'vb' at row 1
+SELECT * FROM t1;
+a b vb
+1 20190132 0000-00-00
BEGIN;
DELETE FROM t1;
INSERT INTO t1 (a,b) VALUES(1,20190123);
-ERROR 22007: Incorrect date value: '20190132' for column `test`.`t1`.`vb` at row 1
SELECT * FROM t1;
a b vb
+1 20190123 2019-01-23
ROLLBACK;
SELECT * FROM t1;
a b vb
@@ -310,3 +314,62 @@ ALTER TABLE t1 ADD KEY (b), ALGORITHM=INPLACE;
# Cleanup
DROP TABLE t1;
# End of 10.2 tests
+#
+# MDEV-29299 SELECT from table with vcol index reports warning
+#
+CREATE TABLE t(fld1 INT NOT NULL,
+fld2 INT AS (100/fld1) VIRTUAL,
+KEY(fld1), KEY(fld2));
+CREATE TABLE t_odd(id int);
+INSERT INTO t(fld1) VALUES(1), (2);
+connect stop_purge,localhost,root;
+START TRANSACTION WITH CONSISTENT SNAPSHOT;
+INSERT INTO t_odd VALUES(10000);
+connection default;
+UPDATE IGNORE t SET fld1= 3 WHERE fld1= 2;
+UPDATE IGNORE t SET fld1= 4 WHERE fld1= 3;
+UPDATE IGNORE t SET fld1= 0 WHERE fld1= 4;
+Warnings:
+Warning 1365 Division by 0
+SELECT fld2 FROM t FORCE INDEX(fld2);
+fld2
+NULL
+100
+SELECT fld2 FROM t FORCE INDEX(fld1);
+fld2
+100
+NULL
+Warnings:
+Warning 1365 Division by 0
+disconnect stop_purge;
+DROP TABLE t, t_odd;
+#
+# MDEV-29753 An error is wrongly reported during INSERT with vcol index
+# See also Bug #22990029
+#
+CREATE TABLE t(pk INT PRIMARY KEY,
+fld1 INT NOT NULL,
+fld2 INT AS (100/fld1) VIRTUAL,
+KEY(fld1), KEY(fld2));
+INSERT IGNORE t(pk, fld1) VALUES(1, 0);
+Warnings:
+Warning 1365 Division by 0
+SELECT * FROM t;
+pk fld1 fld2
+1 0 NULL
+Warnings:
+Warning 1365 Division by 0
+BEGIN;
+DELETE FROM t;
+Warnings:
+Warning 1365 Division by 0
+Warning 1365 Division by 0
+Warning 1365 Division by 0
+INSERT INTO t (pk, fld1) VALUES(1,1);
+SELECT * FROM t;
+pk fld1 fld2
+1 1 100
+# Cleanup
+ROLLBACK;
+DROP TABLE t;
+# End of 10.3 tests
diff --git a/mysql-test/suite/gcol/t/innodb_virtual_index.test b/mysql-test/suite/gcol/t/innodb_virtual_index.test
index 4a41623264e..d0e1951842e 100644
--- a/mysql-test/suite/gcol/t/innodb_virtual_index.test
+++ b/mysql-test/suite/gcol/t/innodb_virtual_index.test
@@ -1,6 +1,8 @@
--source include/have_innodb.inc
--source include/have_sequence.inc
+SET default_storage_engine= innodb;
+
# Ensure that the history list length will actually be decremented by purge.
SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency;
SET GLOBAL innodb_purge_rseg_truncate_frequency = 1;
@@ -280,9 +282,9 @@ DROP TABLE t1;
CREATE TABLE t1(a INT PRIMARY KEY, b INT, vb DATE AS(b) VIRTUAL, KEY(vb))
ENGINE=InnoDB;
INSERT IGNORE INTO t1 (a,b) VALUES(1,20190132);
+SELECT * FROM t1;
BEGIN;
DELETE FROM t1;
---error ER_TRUNCATED_WRONG_VALUE
INSERT INTO t1 (a,b) VALUES(1,20190123);
SELECT * FROM t1;
ROLLBACK;
@@ -341,3 +343,49 @@ DROP TABLE t1;
--echo # End of 10.2 tests
+--echo #
+--echo # MDEV-29299 SELECT from table with vcol index reports warning
+--echo #
+
+CREATE TABLE t(fld1 INT NOT NULL,
+ fld2 INT AS (100/fld1) VIRTUAL,
+ KEY(fld1), KEY(fld2));
+CREATE TABLE t_odd(id int);
+INSERT INTO t(fld1) VALUES(1), (2);
+
+--connect stop_purge,localhost,root
+# This prevents purge for records in t
+START TRANSACTION WITH CONSISTENT SNAPSHOT;
+INSERT INTO t_odd VALUES(10000);
+
+--connection default
+UPDATE IGNORE t SET fld1= 3 WHERE fld1= 2;
+UPDATE IGNORE t SET fld1= 4 WHERE fld1= 3;
+UPDATE IGNORE t SET fld1= 0 WHERE fld1= 4;
+SELECT fld2 FROM t FORCE INDEX(fld2);
+SELECT fld2 FROM t FORCE INDEX(fld1);
+
+--disconnect stop_purge
+DROP TABLE t, t_odd;
+
+--echo #
+--echo # MDEV-29753 An error is wrongly reported during INSERT with vcol index
+--echo # See also Bug #22990029
+--echo #
+
+CREATE TABLE t(pk INT PRIMARY KEY,
+ fld1 INT NOT NULL,
+ fld2 INT AS (100/fld1) VIRTUAL,
+ KEY(fld1), KEY(fld2));
+INSERT IGNORE t(pk, fld1) VALUES(1, 0);
+SELECT * FROM t;
+BEGIN;
+DELETE FROM t;
+INSERT INTO t (pk, fld1) VALUES(1,1);
+SELECT * FROM t;
+
+--echo # Cleanup
+ROLLBACK;
+DROP TABLE t;
+
+--echo # End of 10.3 tests
diff --git a/mysql-test/suite/json/r/json_table.result b/mysql-test/suite/json/r/json_table.result
index fdecd9eb978..b71cc95a4e3 100644
--- a/mysql-test/suite/json/r/json_table.result
+++ b/mysql-test/suite/json/r/json_table.result
@@ -1009,5 +1009,11 @@ name VARCHAR(10) CHARACTER SET latin1 COLLATE DEFAULT PATH '$.name'
name
Jeans
#
+# MDEV-28480: Assertion `0' failed in Item_row::illegal_method_call
+# on SELECT FROM JSON_TABLE
+#
+SELECT 1 FROM JSON_TABLE (row(1,2), '$' COLUMNS (o FOR ORDINALITY)) AS j;
+ERROR 21000: Operand should contain 1 column(s)
+#
# End of 10.6 tests
#
diff --git a/mysql-test/suite/json/t/json_table.test b/mysql-test/suite/json/t/json_table.test
index a6392b7bfff..ec330046f25 100644
--- a/mysql-test/suite/json/t/json_table.test
+++ b/mysql-test/suite/json/t/json_table.test
@@ -864,5 +864,13 @@ SELECT * FROM json_table('[{"name":"Jeans"}]', '$[*]'
--echo #
+--echo # MDEV-28480: Assertion `0' failed in Item_row::illegal_method_call
+--echo # on SELECT FROM JSON_TABLE
+--echo #
+
+--error ER_OPERAND_COLUMNS
+SELECT 1 FROM JSON_TABLE (row(1,2), '$' COLUMNS (o FOR ORDINALITY)) AS j;
+
+--echo #
--echo # End of 10.6 tests
--echo #
diff --git a/sql/item.h b/sql/item.h
index 21377664d5c..b3fc475fcdc 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -1143,6 +1143,11 @@ public:
{
return fixed() ? false : fix_fields(thd, ref);
}
+
+ /*
+ fix_fields_if_needed_for_scalar() is used where we need to filter items
+ that can't be scalars and want to return error for it.
+ */
bool fix_fields_if_needed_for_scalar(THD *thd, Item **ref)
{
return fix_fields_if_needed(thd, ref) || check_cols(1);
diff --git a/sql/json_table.cc b/sql/json_table.cc
index cfc90bb06db..21782a9f14b 100644
--- a/sql/json_table.cc
+++ b/sql/json_table.cc
@@ -1170,7 +1170,7 @@ bool Table_function_json_table::setup(THD *thd, TABLE_LIST *sql_table,
// fields in non_agg_field_used:
const bool saved_non_agg_field_used= s_lex->non_agg_field_used();
- bool res= m_json->fix_fields_if_needed(thd, &m_json);
+ bool res= m_json->fix_fields_if_needed_for_scalar(thd, &m_json);
s_lex->is_item_list_lookup= save_is_item_list_lookup;
s_lex->set_non_agg_field_used(saved_non_agg_field_used);
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index dfa6173f234..31aac7301d2 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -3904,14 +3904,24 @@ static int init_common_variables()
if (ignore_db_dirs_init())
exit(1);
-#ifdef _WIN32
- get_win_tzname(system_time_zone, sizeof(system_time_zone));
-#elif defined(HAVE_TZNAME)
struct tm tm_tmp;
- localtime_r(&server_start_time,&tm_tmp);
- const char *tz_name= tzname[tm_tmp.tm_isdst != 0 ? 1 : 0];
- strmake_buf(system_time_zone, tz_name);
-#endif /* HAVE_TZNAME */
+ localtime_r(&server_start_time, &tm_tmp);
+
+#ifdef HAVE_TZNAME
+#ifdef _WIN32
+ /*
+ If env.variable TZ is set, derive timezone name from it.
+ Otherwise, use IANA tz name from get_win_tzname.
+ */
+ if (!getenv("TZ"))
+ get_win_tzname(system_time_zone, sizeof(system_time_zone));
+ else
+#endif
+ {
+ const char *tz_name= tzname[tm_tmp.tm_isdst != 0 ? 1 : 0];
+ strmake_buf(system_time_zone, tz_name);
+ }
+#endif
/*
We set SYSTEM time zone as reasonable default and
diff --git a/sql/sql_class.h b/sql/sql_class.h
index cae0762d2c9..bd8c1faf412 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -2063,6 +2063,21 @@ public:
};
+struct Suppress_warnings_error_handler : public Internal_error_handler
+{
+ bool handle_condition(THD *thd,
+ uint sql_errno,
+ const char *sqlstate,
+ Sql_condition::enum_warning_level *level,
+ const char *msg,
+ Sql_condition **cond_hdl)
+ {
+ return *level == Sql_condition::WARN_LEVEL_WARN;
+ }
+};
+
+
+
/**
Tables that were locked with LOCK TABLES statement.
diff --git a/sql/table.cc b/sql/table.cc
index e1e61eb2a26..b25779c3de8 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -8876,12 +8876,28 @@ int TABLE::update_virtual_fields(handler *h, enum_vcol_update_mode update_mode)
DBUG_RETURN(in_use->is_error());
}
-int TABLE::update_virtual_field(Field *vf)
+/*
+ Calculate the virtual field value for a specified field.
+ @param vf A field to calculate
+ @param ignore_warnings Ignore the warnings and also make the
+ calculations permissive. This usually means
+ that a calculation is internal and is not
+ expected to fail.
+*/
+int TABLE::update_virtual_field(Field *vf, bool ignore_warnings)
{
DBUG_ENTER("TABLE::update_virtual_field");
Query_arena backup_arena;
Counting_error_handler count_errors;
+ Suppress_warnings_error_handler warning_handler;
in_use->push_internal_handler(&count_errors);
+ bool abort_on_warning;
+ if (ignore_warnings)
+ {
+ abort_on_warning= in_use->abort_on_warning;
+ in_use->abort_on_warning= false;
+ in_use->push_internal_handler(&warning_handler);
+ }
/*
TODO: this may impose memory leak until table flush.
See comment in
@@ -8895,6 +8911,13 @@ int TABLE::update_virtual_field(Field *vf)
DBUG_RESTORE_WRITE_SET(vf);
in_use->restore_active_arena(expr_arena, &backup_arena);
in_use->pop_internal_handler();
+ if (ignore_warnings)
+ {
+ in_use->abort_on_warning= abort_on_warning;
+ in_use->pop_internal_handler();
+ // This is an internal calculation, we expect it to always succeed
+ DBUG_ASSERT(count_errors.errors == 0);
+ }
DBUG_RETURN(count_errors.errors);
}
diff --git a/sql/table.h b/sql/table.h
index 58aa4a37aa7..cab0076cf36 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -1692,7 +1692,7 @@ public:
uint actual_n_key_parts(KEY *keyinfo);
ulong actual_key_flags(KEY *keyinfo);
- int update_virtual_field(Field *vf);
+ int update_virtual_field(Field *vf, bool ignore_warnings);
int update_virtual_fields(handler *h, enum_vcol_update_mode update_mode);
int update_default_fields(bool ignore_errors);
void evaluate_update_default_function();
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 1eb372f0da1..371636a435a 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -20173,7 +20173,8 @@ innobase_get_computed_value(
TABLE* mysql_table,
byte* mysql_rec,
const dict_table_t* old_table,
- const upd_t* update)
+ const upd_t* update,
+ bool ignore_warnings)
{
byte rec_buf2[REC_VERSION_56_MAX_INDEX_COL_LEN];
byte* buf;
@@ -20280,7 +20281,9 @@ innobase_get_computed_value(
MY_BITMAP *old_write_set = dbug_tmp_use_all_columns(mysql_table, &mysql_table->write_set);
MY_BITMAP *old_read_set = dbug_tmp_use_all_columns(mysql_table, &mysql_table->read_set);
- ret = mysql_table->update_virtual_field(mysql_table->field[col->m_col.ind]);
+ ret = mysql_table->update_virtual_field(
+ mysql_table->field[col->m_col.ind],
+ ignore_warnings);
dbug_tmp_restore_column_map(&mysql_table->read_set, old_read_set);
dbug_tmp_restore_column_map(&mysql_table->write_set, old_write_set);
diff --git a/storage/innobase/include/row0mysql.h b/storage/innobase/include/row0mysql.h
index 0414e5b0642..3c624621b1d 100644
--- a/storage/innobase/include/row0mysql.h
+++ b/storage/innobase/include/row0mysql.h
@@ -810,7 +810,9 @@ void innobase_report_computed_value_failed(dtuple_t *row);
@param[in] old_table during ALTER TABLE, this is the old table
or NULL.
@param[in] update update vector for the parent row
-@param[in] foreign foreign key information
+@param[in] ignore_warnings ignore warnings during calculation. Usually
+ means that a calculation is internal and
+ should have no side effects.
@return the field filled with computed value */
dfield_t*
innobase_get_computed_value(
@@ -823,8 +825,9 @@ innobase_get_computed_value(
THD* thd,
TABLE* mysql_table,
byte* mysql_rec,
- const dict_table_t* old_table,
- const upd_t* update);
+ const dict_table_t* old_table=NULL,
+ const upd_t* update=NULL,
+ bool ignore_warnings=false);
/** Get the computed value by supplying the base column values.
@param[in,out] table the table whose virtual column
diff --git a/storage/innobase/include/row0upd.h b/storage/innobase/include/row0upd.h
index 9ee5d77f5e5..d47ec793f89 100644
--- a/storage/innobase/include/row0upd.h
+++ b/storage/innobase/include/row0upd.h
@@ -150,6 +150,8 @@ the equal ordering fields. NOTE: we compare the fields as binary strings!
@param[in] offsets rec_get_offsets(rec,index), or NULL
@param[in] no_sys skip the system columns
DB_TRX_ID and DB_ROLL_PTR
+@param[in] ignore_warnings ignore warnings during vcol calculation, which
+ means that this calculation is internal only
@param[in] trx transaction (for diagnostics),
or NULL
@param[in] heap memory heap from which allocated
@@ -165,11 +167,12 @@ row_upd_build_difference_binary(
const rec_t* rec,
const rec_offs* offsets,
bool no_sys,
+ bool ignore_warnings,
trx_t* trx,
mem_heap_t* heap,
TABLE* mysql_table,
dberr_t* error)
- MY_ATTRIBUTE((nonnull(1,2,3,7,9), warn_unused_result));
+ MY_ATTRIBUTE((nonnull(1,2,3,8,10), warn_unused_result));
/** Apply an update vector to an index entry.
@param[in,out] entry index entry to be updated; the clustered index record
must be covered by a lock or a page latch to prevent
diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc
index 7067304f105..7f9fbe896ee 100644
--- a/storage/innobase/row/row0ins.cc
+++ b/storage/innobase/row/row0ins.cc
@@ -307,7 +307,7 @@ row_ins_clust_index_entry_by_modify(
}
update = row_upd_build_difference_binary(
- cursor->index, entry, rec, NULL, true,
+ cursor->index, entry, rec, NULL, true, true,
thr_get_trx(thr), heap, mysql_table, &err);
if (err != DB_SUCCESS) {
return(err);
diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc
index 27650a3db70..eca894c4fd4 100644
--- a/storage/innobase/row/row0log.cc
+++ b/storage/innobase/row/row0log.cc
@@ -1979,7 +1979,7 @@ func_exit_committed:
row, NULL, index, heap, ROW_BUILD_NORMAL);
upd_t* update = row_upd_build_difference_binary(
index, entry, btr_pcur_get_rec(&pcur), cur_offsets,
- false, NULL, heap, dup->table, &error);
+ false, false, NULL, heap, dup->table, &error);
if (error != DB_SUCCESS || !update->n_fields) {
goto func_exit;
}
diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc
index e70761ba232..f60403ec4eb 100644
--- a/storage/innobase/row/row0sel.cc
+++ b/storage/innobase/row/row0sel.cc
@@ -332,7 +332,8 @@ row_sel_sec_rec_is_for_clust_rec(
&heap, NULL, NULL,
thr_get_trx(thr)->mysql_thd,
thr->prebuilt->m_mysql_table,
- record, NULL, NULL);
+ record, NULL, NULL,
+ true);
if (vfield == NULL) {
innobase_report_computed_value_failed(row);
diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc
index a2eacaf8e12..61ac22ca27a 100644
--- a/storage/innobase/row/row0upd.cc
+++ b/storage/innobase/row/row0upd.cc
@@ -601,6 +601,7 @@ row_upd_build_difference_binary(
const rec_t* rec,
const rec_offs* offsets,
bool no_sys,
+ bool ignore_warnings,
trx_t* trx,
mem_heap_t* heap,
TABLE* mysql_table,
@@ -699,7 +700,7 @@ row_upd_build_difference_binary(
dfield_t* vfield = innobase_get_computed_value(
update->old_vrow, col, index,
&vc.heap, heap, NULL, thd, mysql_table, record,
- NULL, NULL);
+ NULL, NULL, ignore_warnings);
if (vfield == NULL) {
*error = DB_COMPUTE_VALUE_FAILED;
return(NULL);
diff --git a/storage/mroonga/mrn_mysql_compat.h b/storage/mroonga/mrn_mysql_compat.h
index 08d874fabaf..538aaf51cb6 100644
--- a/storage/mroonga/mrn_mysql_compat.h
+++ b/storage/mroonga/mrn_mysql_compat.h
@@ -412,7 +412,7 @@
#ifdef MRN_MARIADB_P
# if (MYSQL_VERSION_ID >= 100203)
# define MRN_GENERATED_COLUMNS_UPDATE_VIRTUAL_FIELD(table, field) \
- (table->update_virtual_field(field))
+ (table->update_virtual_field(field,false))
# else
# define MRN_GENERATED_COLUMNS_UPDATE_VIRTUAL_FIELD(table, field) \
(field->vcol_info->expr_item->save_in_field(field, 0))
diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc
index fff80153310..a1de9edd997 100644
--- a/storage/myisam/ha_myisam.cc
+++ b/storage/myisam/ha_myisam.cc
@@ -1,6 +1,6 @@
/*
Copyright (c) 2000, 2018, Oracle and/or its affiliates.
- Copyright (c) 2009, 2017, MariaDB Corporation.
+ Copyright (c) 2009, 2022, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -731,7 +731,7 @@ static int compute_vcols(MI_INFO *info, uchar *record, int keynum)
{
Field *f= table->field[kp->fieldnr - 1];
if (f->vcol_info && !f->vcol_info->stored_in_db)
- table->update_virtual_field(f);
+ table->update_virtual_field(f, false);
}
mysql_mutex_unlock(&info->s->intern_lock);
return 0;