Home - Waterfall Grid T-Grid Console Builders Recent Builds Buildslaves Changesources - JSON API - About

Console View


Categories: connectors experimental galera main
Legend:   Passed Failed Warnings Failed Again Running Exception Offline No data

connectors experimental galera main
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

Custom actions : get rid of wcautil and dutil library dependencies
They are not an official part of WiX distribution anymore.

Replace the functionality with native MSI api, the Wix helpers
we used were thin wrappers anyway.

Also replace the VBScript FakeFailure custom action with a native
one, VBScript is deprecated in Windows and scheduled for removal.

Read MSI properties with a helper that handles any length and reports
errors. Values are no longer silently truncated to MAX_PATH, e.g a long
data directory could be cut to its parent, and then removed.

Failed custom actions return ERROR_INSTALL_FAILURE, some failures were
silently turned into success before. Use the W versions of MSI functions
only. Log() is a function now, so that it works with any preprocessor.
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

WiX v3 is out of support. Support legacy WiX v3.x (default) and modern
WiX (wix.exe, newer than v3). WXS sources stay in v3 format, modern WiX
(-DWITH_WIX3=OFF) builds them after on-the-fly 'wix convert'.

Two WXS edits make the converted sources valid: ALLUSERS property is
replaced by InstallScope='perMachine', and ProgramMenuFolder is moved
from under INSTALLDIR to TARGETDIR.

WIX_ACCEPT_EULA=ON accepts the EULA of WiX 7 and later, if WiX asks for it.

A failed WiX step is reported by name.
Vladislav Vaintroub
CA: ERROR_INSTALL_FAILURE on failure, Log() as a function, W functions only; CMake: name the failed WiX step
Thirunarayanan Balathandayuthapani
MDEV-41494  Server aborts on crash recovery after an interrupted instant ALTER TABLE reorders/drops columns

Problem:
========
  After an instant ALTER TABLE that reorders or drops columns,
innobase_instant_try() deletes/updates SYS_COLUMNS, SYS_VIRTUAL
and SYS_TABLES.N_COLS, and only afterwards writes the hidden
metadata record that describes the old column layout in the
clustered index. These are separate mini-transactions within
the same DDL transaction.

If the server is killed after the SYS_COLUMNS/SYS_TABLES updates
were made durable but before the metadata record was written,
and recovery does not roll back the transaction then
table's dictionary definition and its on-disk metadata record go out
of sync.

On the next load, btr_cur_instant_init_low() correctly
detects this as "missing instant ALTER metadata" or "contains
unrecognizable instant ALTER metadata" and sets table->corrupted,
but it did not set table->file_unreadable. Since
dict_table_t::is_readable() only tests file_unreadable, the table
was left in an inconsistent corrupted-but-readable state.

Solution:
=========
btr_cur_instant_init_low(): Also set index->table->file_unreadable
in the "missing instant ALTER metadata" and "incompatible instant
ALTER metadata" error paths, consistent with every other corruption
path in this function.
Oleksandr Byelkin
MDEV-32401 expression cache lead to crash if table of wrong type created and the cache switched off

1) take into account TMP_TABLE_ALL_COLUMNS when
  we are modifying agg_item->result_field
2) remove unused now "bool materialized_subquery;"

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Vladislav Vaintroub
CMake: drop EXTRA_WIX_BUILD_ARGS
Marko Mäkelä
fixup! 4898afa8c169aee679661e6848320a7f1c9d890a
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

WiX v3 is out of support. Support legacy WiX v3.x (default) and modern
WiX (wix.exe, newer than v3). WXS sources stay in v3 format, modern WiX
(-DWITH_WIX3=OFF) builds them after on-the-fly 'wix convert'.

Two WXS edits make the converted sources valid: ALLUSERS property is
replaced by InstallScope='perMachine', and ProgramMenuFolder is moved
from under INSTALLDIR to TARGETDIR.

WIX_ACCEPT_EULA=ON accepts the EULA of WiX 7 and later, if WiX asks for it.

A failed WiX step is reported by name.
bsrikanth-mariadb
MDEV-40598: Capture sequences used only in column DEFAULT expressions

Problem:
A sequence referenced only in a column's DEFAULT expression (e.g.
"a INT DEFAULT NEXTVAL(s1)") is opened only when a statement
evaluates DEFAULT values (INSERT, LOAD DATA, etc). A plain SELECT
never opens it, so the sequence never appears in
thd->lex->query_tables, and Optimizer_context_recorder::
dump_sql_script() had no way to see it. The dependent table's
definition was then captured without the sequence it depends on,
making the captured context unusable on replay.

Fix:
TABLE::internal_tables lists these sequences. dump_sql_script() walks
it for each dumped table and calls the new dump_sequence_placeholder()
for each entry, before the table's CREATE TABLE so that replay can
recreate both in order. The sequence is not opened; only its database
and name are used, so for now it is captured as a placeholder
"CREATE SEQUENCE IF NOT EXISTS db.name" without its parameters or
current value. The name is qualified with the sequence's own database,
so a sequence in a different database than the table is recreated in
that database.

Such a placeholder is also remembered in a separate hash. If the query
uses the same sequence directly as well, the main loop of
dump_sql_script() reaches it later, finds the placeholder, emits
"DROP SEQUENCE IF EXISTS db.name", and then dumps the sequence's real
definition and current value (SETVAL) as for any sequence used in the
query, regardless of the order the tables are listed in.

To share code with the existing dump loop, the SETVAL logic of the loop
is factored out into dump_sequence_current_value().

Even for the scenarios where sequence is dropped after table creation,
a name is replaced by a view, or a user doesn't privilege on the sequence;
The name is still captured as a sequence.

Tests (opt_context_store_ddls.test): INSERT-opened sequence; plain
SELECT; LOCK TABLES; a user without privilege on the sequence; two
sequences in one table; dropped sequence; stored function in the
query; name replaced by a view; re-execution as a prepared statement;
sequence in a different database; sequence used both directly and as a
DEFAULT dependency, in both orders.
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

Custom actions : get rid of wcautil and dutil library dependencies
They are not an official part of WiX distribution anymore.

Replace the functionality with native MSI api, the Wix helpers
we used were thin wrappers anyway.

Also replace the VBScript FakeFailure custom action with a native
one, VBScript is deprecated in Windows and scheduled for removal.

Read MSI properties with a helper that handles any length and reports
errors. Values are no longer silently truncated to MAX_PATH, e.g a long
data directory could be cut to its parent, and then removed.

A custom action that fails to read a property or to call a Windows API
returns ERROR_INSTALL_FAILURE, it was silently ignored before.
Oleg Smirnov
MDEV-32412 Pushdown from HAVING: Item_func is immutable while arguments are not

Fix-up for commit e97560eac03 (MDEV-28958), which made set_extraction_flag()
ignore basic constants so that the read-only Item_true/Item_false singletons
are never written to. Because of that, the callers that mark a subtree with
MARKER_IMMUTABLE before pushing a condition from HAVING into WHERE cannot
mark basic constants inside it.

Item::cleanup_excluding_immutables_processor() did not know about this
exception and cleaned such items up, unfixing them while their marked parents
stayed fixed. fix_fields() does not descend into fixed items, so the constant
was left unfixed and Item_direct_view_ref::used_tables() later dereferenced a
NULL null_ref_table. Skip basic constants there too.
Marko Mäkelä
fixup! 4898afa8c169aee679661e6848320a7f1c9d890a
Aleksey Midenkov
MDEV-25176 Shutdown hangs if event scheduler is started during shutdown

SET GLOBAL event_scheduler=1 executed by a connection during shutdown
could start the scheduler thread after close_connections() called
Events::stop(). Nothing stops this thread and close_connections()
waits for it forever.

Now it hangs instead of a crash since MDEV-30260 fix: it moved
deinit() from close_connections() to clean_up(), so the scheduler is
not freed under the running thread anymore.

The fix makes Event_scheduler::start() do nothing when abort_loop is
set. abort_loop is set before close_connections() and is checked under
LOCK_scheduler_state, which stop() also takes, so the scheduler is
either started before stop() and stopped by it, or not started at all.
No error needed: the server is shutting down.
Alexey (Holyfoot) Botchkov
MDEV-40394 XML schema fails on self-referencing type.

A schema type that refers to itself, directly or through other types or
groups, was validated with a single shared compositor state per type.
A nested use of the type reset the state of the outer one, so
XMLISVALID() gave wrong results for recursive schemas.

Now every recursion level of an XMLSchema_user_type gets its own copy
of the type's content (get_copy()/copy_tags()). Copies are kept on a
per-type stack while validating, and released copies are put in
m_c_free and reused, so memory doesn't grow with each validated row.
reset_types() unwinds any state left by a validation that aborted.

Other changes:
- XMLSchema_item::is_validate_done() is replaced with
  ::end_validation(st). It is no longer a pure check: it pops the
  compositor stack and must be paired with validate_prepare().
- validate_prepare() can now fail, and the failure is propagated.
- A recursion depth limit (MAX_RECURSION_DEPTH, 1024) is added, counted
  per type. When it is hit, or on OOM during validation, XMLISVALID()
  returns errors/warnings.
- XMLSchema_group_def now derives from XMLSchema_user_type, so groups
  get the same copy mechanism. As a side effect <xs:group final=...>
  is accepted.
- XMLSchema_group_reference now counts occurrences, so minOccurs and
  maxOccurs of a group reference are enforced.
- XMLSchema_group_def::check_type() checks for circular groups, and
  XMLSchema_attribute::check_type() is removed (named types and groups
  are checked globally).
- The circular-reference error names the construct:
  "complexType B has bad circular references" instead of
  "type B has ...". The affected .result lines are re-recorded.
- Hook chains (m_next_tag) are replaced with List<> because tags are
  now copied.
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

WiX v3 is out of support. Support legacy WiX v3.x (default) and modern
WiX (wix.exe, newer than v3). WXS sources stay in v3 format, modern WiX
(-DWITH_WIX3=OFF) builds them after on-the-fly 'wix convert'.

Two WXS edits make the converted sources valid: ALLUSERS property is
replaced by InstallScope='perMachine', and ProgramMenuFolder is moved
from under INSTALLDIR to TARGETDIR.

WIX_ACCEPT_EULA=ON accepts the EULA of WiX 7 and later, if WiX asks for it.

A failed WiX step is reported by name.
Vladislav Vaintroub
CA: review fixes, WiX version message
Khaled Riyad
MDEV-41408 MTR prepared statement protocol skipping statements starting with '('

With --ps-protocol, mysqltest runs a SELECT a second time and compares
the results. The regex ps2_re only matched a leading SELECT, so a
statement starting with '(' was executed only once.

Allow any number of '(', each optionally followed by spaces, before
SELECT in ps2_re.
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

Custom actions : get rid of wcautil and dutil library dependencies
They are not an official part of WiX distribution anymore.

Replace the functionality with native MSI api, the Wix helpers
we used were thin wrappers anyway.

Also replace the VBScript FakeFailure custom action with a native
one, VBScript is deprecated in Windows and scheduled for removal.

Read MSI properties with a helper that handles any length and reports
errors. Values are no longer silently truncated to MAX_PATH, e.g a long
data directory could be cut to its parent, and then removed.

A custom action that fails to read a property or to call a Windows API
returns ERROR_INSTALL_FAILURE, it was silently ignored before.
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

Support legacy WiX v3.x (default) and modern WiX (wix.exe, v5 or later).
WXS sources stay in v3 format, modern WiX (-DWITH_WIX3=OFF) builds them
after on-the-fly 'wix convert'.

WIX_ACCEPT_EULA=ON accepts the EULA of WiX 7 and later, if WiX asks for it.
Marko Mäkelä
Merge 10.11 into 11.4
Rex Johnston
MDEV-41179 MAX_KEY_PARTS ranges in select causing SEGV

When a select containing 32 ranges is made on a table containing a
compound key with 32 parts, the range optimizer can run off the end
of a stack variable, invalidly overwriting subsequent stack variables.

In the struct st_sel_arg_range_seq, we have an array
  RANGE_SEQ_ENTRY stack[MAX_REF_PARTS];

MAX_REF_PARTS is 32.

check_quick_select
  / sel_arg_range_seq_init
    initialises stack[0] as NOT a key part
  / sel_arg_range_seq_next
    iterates through the key parts, adding key part n to stack[n+1]

key part #32 gets referenced by step_down_to(), setting seq->i off the
end of the array.

Fix: RANGE_SEQ_ENTRY stack[MAX_REF_PARTS+1];

The above change exposed an issue with key length calculation on
MS Windows.  Calling make_prev_keypart_map(32) caused the resultant
bitmap to be calculated as (1UL << 32) - 1.  Using the MSVC compiler
this resulted in an empty key length calculation during
handler::index_read_map, causing an assertion in ha_innobase::index_read().

As we only need 32 bits to represent our key map, we change the type thus
-typedef ulong key_part_map;
+typedef uint32 key_part_map;

We correct make_keypart_map() and make_prev_keypart_map() to call our
overflow safe my_set_bits().  We also correct bka_range_seq_next()
and bkah_range_seq_next() to use make_prev_keypart_map().

We also add some DBUG_ASSERTS in key_part_map processing elsewhere,
exposing some issues in our BNLH implementation.  We cap the number of
keyuse parts here, altering the explain output of 2 of our tests.

Numerous places needed bit shift operations altered to use
make*keymap_part and various format strings needed to be corrected.
Kristian Nielsen
MDEV-41217: Inefficient memory management by parallel slave

The rpl_group_info object is used to keep track of a lot of different state
in an event group/transaction across events. It is also used in parallel
replication for a small set of values that are enqueued by the SQL driver
thread for worker threads to handle. This wastes a lot of memory when a
large number of event groups are enqueued (eg. in case of slave lag), since
most of the rpl_group_info is not used in the queue.

This patch changes the queue to contain only the rgi_queued_part object (ie.
rgi->q), not the full rgi, saving the memory for the parts of rgi that are
not needed in the queue. With this patch, there is one rgi for every worker
thread independent of the amount of queued event groups (as well as one
serial_rgi in the SQL driver thread).

Signed-off-by: Kristian Nielsen <[email protected]>
Kristian Nielsen
MDEV-41217: Inefficient memory management by parallel slave

Remove from rpl_parallel_thread::queued_event the names of relaylog and
master binlog. Each one is an array of size FN_REFLEN, thus we save 1024
bytes of memory for each event queued for parallel replication worker
threads. This can be a very large saving when the slave is lagging behind
and many events are queued for worker threads.

Instead, reference these names from the inuse_relaylog object. This already
contains the relaylog name; this patch adds also the master binlog name in
inuse_relaylog. Since we rotate the slave relaylog whenever we see a master
binlog rotate, there can only ever be one master binlog file name associated
with events in one relaylog.

Signed-off-by: Kristian Nielsen <[email protected]>
Jan Lindström
Merge 10.11 to 11.4.
Kristian Nielsen
Fix inuse_relaylog atomics memory ordering

The inuse_relaylog is refcounted. The SQL driver thread first increments
queued_count until everything in the relaylog has been queued, then sets
completed=true. The worker threads increment dequeued_count, so that once
completed==true and queued_count==dequeued_count we know the inuse_relaylog
object can be safely de-allocated.

The accounting is done with atomic counters; however everything with
std::memory_order_relaxed ordering. This is not correct on weakly ordered
CPU architectures.

When we set completed==true, it most be done with release semantics so that
we know that all increments to queued_count will be visible to other
threads; this way another thread will not see completed==true with a too low
queued_count value. Similarly, when we increment dequeued_count it must be
done with release semantics so that previous accesses to inuse_relaylog will
have completed before the dequeue is visible to other threads. And the check
for completed==true must be done with matching acquire semantics.

Signed-off-by: Kristian Nielsen <[email protected]>
Kristian Nielsen
MDEV-41217: Inefficient memory management by parallel slave

Remove from rpl_parallel_thread::queued_event the names of relaylog and
master binlog. Each one is an array of size FN_REFLEN, thus we save 1024
bytes of memory for each event queued for parallel replication worker
threads. This can be a very large saving when the slave is lagging behind
and many events are queued for worker threads.

Instead, reference these names from the inuse_relaylog object. This already
contains the relaylog name; this patch adds also the master binlog name in
inuse_relaylog. Since we rotate the slave relaylog whenever we see a master
binlog rotate, there can only ever be one master binlog file name associated
with events in one relaylog.

Signed-off-by: Kristian Nielsen <[email protected]>
Vladislav Vaintroub
CMake: link wixca with shell32 and advapi32
Kristian Nielsen
Fix inuse_relaylog atomics memory ordering

The inuse_relaylog is refcounted. The SQL driver thread first increments
queued_count until everything in the relaylog has been queued, then sets
completed=true. The worker threads increment dequeued_count, so that once
completed==true and queued_count==dequeued_count we know the inuse_relaylog
object can be safely de-allocated.

The accounting is done with atomic counters; however everything with
std::memory_order_relaxed ordering. This is not correct on weakly ordered
CPU architectures.

When we set completed==true, it most be done with release semantics so that
we know that all increments to queued_count will be visible to other
threads; this way another thread will not see completed==true with a too low
queued_count value. Similarly, when we increment dequeued_count it must be
done with release semantics so that previous accesses to inuse_relaylog will
have completed before the dequeue is visible to other threads. And the check
for completed==true must be done with matching acquire semantics.

Signed-off-by: Kristian Nielsen <[email protected]>
Rex Johnston
MDEV-41179 MAX_KEY_PARTS ranges in select causing SEGV

When a select containing 32 ranges is made on a table containing a
compound key with 32 parts, the range optimizer can run off the end
of a stack variable, invalidly overwriting subsequent stack variables.

In the struct st_sel_arg_range_seq, we have an array
  RANGE_SEQ_ENTRY stack[MAX_REF_PARTS];

MAX_REF_PARTS is 32.

check_quick_select
  / sel_arg_range_seq_init
    initialises stack[0] as NOT a key part
  / sel_arg_range_seq_next
    iterates through the key parts, adding key part n to stack[n+1]

key part #32 gets referenced by step_down_to(), setting seq->i off the
end of the array.

Fix: RANGE_SEQ_ENTRY stack[MAX_REF_PARTS+1];

The above change exposed an issue with key length calculation on
MS Windows.  Calling make_prev_keypart_map(32) caused the resultant
bitmap to be calculated as (1UL << 32) - 1.  Using the MSVC compiler
this resulted in an empty key length calculation during
handler::index_read_map, causing an assertion in ha_innobase::index_read().

As we only need 32 bits to represent our key map, we change the type thus
-typedef ulong key_part_map;
+typedef uint32 key_part_map;

We correct make_keypart_map() and make_prev_keypart_map() to call our
overflow safe my_set_bits().  We also correct bka_range_seq_next()
and bkah_range_seq_next() to use make_prev_keypart_map().

We also add some DBUG_ASSERTS in key_part_map processing elsewhere,
exposing some issues in our BNLH implementation.  We cap the number of
keyuse parts here, altering the explain output of 2 of our tests.

Numerous places needed bit shift operations altered to use
make*keymap_part and various format strings needed to be corrected.
Khaled Riyad
MDEV-41408 MTR prepared statement protocol skipping statements starting with '('

With --ps-protocol, mysqltest runs a SELECT a second time and compares
the results. The regex ps2_re only matched a leading SELECT, so a
statement starting with '(' was executed only once.

Allow any number of '(', each optionally followed by spaces, before
SELECT in ps2_re.
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

WiX v3 is out of support. Support legacy WiX v3.x (default) and modern
WiX (wix.exe, v5 or later). WXS sources stay in v3 format, modern WiX
(-DWITH_WIX3=OFF) builds them after on-the-fly 'wix convert'.

WIX_ACCEPT_EULA=ON accepts the EULA of WiX 7 and later, if WiX asks for it.
Modern WiX takes extra arguments from the EXTRA_WIX_BUILD_ARGS environment
variable, instead of EXTRA_CANDLE_ARGS and EXTRA_LIGHT_ARGS.
A failed WiX step is reported by name.
Kristian Nielsen
MDEV-41217: Inefficient memory management by parallel slave

The rpl_group_info object is used to keep track of a lot of different state
in an event group/transaction across events. It is also used in parallel
replication for a small set of values that are enqueued by the SQL driver
thread for worker threads to handle. This wastes a lot of memory when a
large number of event groups are enqueued (eg. in case of slave lag), since
most of the rpl_group_info is not used in the queue.

This is a preparatory patch that splits out the part of rpl_group_info that
is needed for the enqueueing into a separate rgi_queued_part object, without
any functional or logic changes. This to separate a lot of mechanical
changes from the actual logic modification for easier review:

- Introduce struct rgi_queued_part and move a bunch of fields XXX into it
  from rpl_group_info.

- Introduce rpl_group_info::q pointing to rgi_queued_part and allocate it
  in the constructor.

- Change references like rgi->XXX into rgi->q->XXX.

This refactoring provides the basis for a follow-up patch where parallel
replication is changes so only the rgi_queued_part object is put in the
queue, not the whole rpl_group_info.

Signed-off-by: Kristian Nielsen <[email protected]>
Rex Johnston
MDEV-41179 MAX_KEY_PARTS ranges in select causing SEGV

When a select containing 32 ranges is made on a table containing a
compound key with 32 parts, the range optimizer can run off the end
of a stack variable, invalidly overwriting subsequent stack variables.

In the struct st_sel_arg_range_seq, we have an array
  RANGE_SEQ_ENTRY stack[MAX_REF_PARTS];

MAX_REF_PARTS is 32.

check_quick_select
  / sel_arg_range_seq_init
    initialises stack[0] as NOT a key part
  / sel_arg_range_seq_next
    iterates through the key parts, adding key part n to stack[n+1]

key part #32 gets referenced by step_down_to(), setting seq->i off the
end of the array.

Fix: RANGE_SEQ_ENTRY stack[MAX_REF_PARTS+1];

The above change exposed an issue with key length calculation on
MS Windows.  Calling make_prev_keypart_map(32) caused the resultant
bitmap to be calculated as (1UL << 32) - 1.  Using the MSVC compiler
this resulted in an empty key length calculation during
handler::index_read_map, causing an assertion in ha_innobase::index_read().

As we only need 32 bits to represent our key map, we change the type thus
-typedef ulong key_part_map;
+typedef uint32 key_part_map;

We correct make_keypart_map() and make_prev_keypart_map() to call our
overflow safe my_set_bits().  We also correct bka_range_seq_next()
and bkah_range_seq_next() to use make_prev_keypart_map().

We also add some DBUG_ASSERTS in key_part_map processing elsewhere,
exposing some issues in our BNLH implementation.  We cap the number of
keyuse parts here, altering the explain output of 2 of our tests.

Numerous places needed bit shift operations altered to use
make*keymap_part and various format strings needed to be corrected.
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

Custom actions : get rid of wcautil and dutil library dependencies
They are not an official part of WiX distribution anymore.

Replace the functionality with native MSI api, the Wix helpers
we used were thin wrappers anyway.

Also replace the VBScript FakeFailure custom action with a native
one, VBScript is deprecated in Windows and scheduled for removal.

Read MSI properties with a helper that handles any length and reports
errors. Values are no longer silently truncated to MAX_PATH, e.g a long
data directory could be cut to its parent, and then removed.

A custom action that fails to read a property or to call a Windows API
returns ERROR_INSTALL_FAILURE, it was silently ignored before.
Vladislav Vaintroub
CMake: drop EXTRA_WIX_BUILD_ARGS
Aleksey Midenkov
MDEV-30441 ASAN heap-use-after-free in Field_blob::pack/pack_row

When InnoDB computes an indexed virtual column (e.g. the long unique
hash), TABLE::update_virtual_field() walked its expression with
update_vcol_processor() and recomputed every vcol it referenced,
including STORED ones. innobase_allocate_row_for_vcol() saves and
restores Field_blob::value only for non-stored blob vcols, so
recomputing a STORED blob vcol in Field_blob::store_field() did
val_str(&value) and freed the buffer that record[0] still pointed to.
The row-format binlog then packed record[0] from freed memory.

The buffer is allocated only when the value is converted, so the bug
needs a character set conversion (e.g. BLOB to utf8mb3 TEXT).

The fix skips STORED vcols in update_vcol_processor(). Their values are
already in the record: InnoDB copies them as base columns of the
virtual column, and the SQL layer computes them before writing.

The test cases detect the bug only under ASAN or Valgrind.
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

WiX v3 is out of support. Support legacy WiX v3.x (default) and modern
WiX (wix.exe, v5 or later). WXS sources stay in v3 format, modern WiX
(-DWITH_WIX3=OFF) builds them after on-the-fly 'wix convert'.

WIX_ACCEPT_EULA=ON accepts the EULA of WiX 7 and later, if WiX asks for it.

A failed WiX step is reported by name.
Vladislav Vaintroub
MDEV-33480 Windows MSI installer, convert from WIX v3 to supported versions

WiX v3 is out of support. Support legacy WiX v3.x (default) and modern
WiX (wix.exe, v5 or later). WXS sources stay in v3 format, modern WiX
(-DWITH_WIX3=OFF) builds them after on-the-fly 'wix convert'.

WIX_ACCEPT_EULA=ON accepts the EULA of WiX 7 and later, if WiX asks for it.

A failed WiX step is reported by name.
Khaled Riyad
MDEV-41408 MTR prepared statement protocol skipping statements starting with '('

With --ps-protocol, mysqltest runs a SELECT a second time and compares
the results. The regex ps2_re only matched a leading SELECT, so a
statement starting with '(' was executed only once.

Allow any number of '(', each optionally followed by spaces, before
SELECT in ps2_re.