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
Lawrin Novitsky
Increased min required smake version to 3.10

To eliminate the cmake warning and to trigger the build
Georg Richter
Fix CONC-626: don't revalidate certificate after COM_CHANGE_USER

Before client sends COM_CHANGE_USER the client needs to clear
tls_verification_status to avoid server certificate verification.
ParadoxV5
[skip ci] MDEV-38972: preliminarily reörganize in one `.h`–`.cc` pair

This commit forcibly reörganizes the contents in the `rpl_info_file.h`
trio of header-only files to one `rpl_info_file.h` for declarations and
one `rpl_info_file.cc` for long definitions.

Due to the files’ extensive use of C++ templates, compiling at this
commit _will_ fail with “undefined reference” linker errors.
Rather, this incomplete migration commit intends to avoid muddying the
following commits’ refactors to this relocation.

The only other change in this commit is the omission of pre-C++17 stubs
used by RocksDB, as they’re obsolete since MDEV-38213 and shall be
wiped as a part of MDEV-35462.
The `RPL_MASTER_INFO_FILE_H` compile guard, howëver, is kept for now
(removed later) for compatibility with a workaround in ColumnStore.
PranavKTiwari
MDEV-36990: SIGFPE in get_max_range_rowid_filter_elems_for_table
Reject key definitions where a column contributes zero bytes to an index
but is part of a PRIMARY KEY (or otherwise semantically NOT NULL) and no
hash-based index fallback is used.

Previously, ALTER TABLE allowing BINARY(0) as part of a PRIMARY KEY could
produce a zero-length clustered index. This propagated into InnoDB as
tab->file->ref_length == 0, leading to division-by-zero in
get_max_range_rowid_filter_elems_for_table() during optimizer cost
estimation.

This change enforces validation in init_key_part_spec() to ensure that
PRIMARY KEY columns cannot have effective key length 0, preventing invalid
index creation and downstream optimizer/runtime crashes.
Lawrin Novitsky
Made prepearedstatement testsuite not to force CSPS for defautl connection

This way it can be controlled via params/env which typ of PS is tested.
Tests requiring CSPS should take care of that
Vladislav Vaintroub
MDEV-40115 DENY EXECUTE hides unrelated routines in SHOW commands or I_S

Fix check_routine_level_acl() to pass parent access, for accurate
calculation.

Previously, if (db_level_access & privs) returned 0, it was treated as
no-access on DB level in check_some_routine_access().

This is not the complete truth, with DENY, it may mean there is access,
but some routines have DENY. So pass the db level grants/denies to the
function for more accurate checking.
Lawrin Novitsky
CONCPP-157, CONCPP-158 setBytes() parameter is sent as binary type in

binary protocol. It is sent as MYSQL_TYPE_BLOB. As counterpart, binary
types received from the server via binary protocol are now converted
to int types - berfore the exception would be thrown right away w/out
any attempt to convert.
ParadoxV5
MDEV-38972: Move info files’ `Value` lists to instance method init-lists

Instead of statically constructed collections of bulky member
pointer substitutes, this commit refactors them to initializer
lists of pointers prepared in a virtual instance method.

The choice of these static lists was an aggressive optimization.
Once operations reduce dependence on saving and loading, e.g., for crash
safety in non-GTID mode, that improvement will no longer be significant.
Thirunarayanan Balathandayuthapani
MDEV-39706  Assertion `!thd || !coordinator_thd' failed

Problem:
========
  - This assert was introduced in commit
0152c617e80ccf3f33d3ea4b50c17d5f588613b1 (MDEV-39261), which sets
coordinator_thd in clone_oldest_view() and resets it to nullptr in
batch_cleanup() at the end of the batch.
When innodb_trx_purge_view_update_only_debug is enabled, InnoDB fail
to reset coordinator_thd. As a result, InnoDB fails with assert in
next batch

Solution:
========
trx_purge(): Reset coordinator_thd to nullptr when
innodb_trx_purge_view_update_only_debug is enabled.
PranavKTiwari
Added test case.
Lawrin Novitsky
CONCPP-153 Parameter value escaping did not consider the charset

In case of client side statement prepare, if the data is encoded in multibyte
charsets, escaping of string and binary parameter could lead to incorrect data
that in its turn could let sql injection with charsets like big5, gbk, sjis, cp932.

The fix considers the charset now. The testcase has been added.
ParadoxV5
MDEV-39839: Collect CM optionals with `Item *`s instead of lambdas

As an extension to MDEV-38972, this commit replaces the costly functors
that are effectively for tracking optional CHANGE MASTER option values.

The choice of `Item *`, used by SELECT, SET, etc., not only maintains
the previous design’s vision of consolidating the CHANGE MASTER
command’s evaluation code, but also future-proofs for boarder input
conversions and possibly evaluation of any expression in CHANGE MASTER.

With this switchover, `sql/sql_lex.h` no longer requires
`sql/rpl_info_file.h` (resolves MDEV-39030), though `sql/yy_mariadb.hh`
(generated from `sql/sql_yacc.yy`) still does.
Yuchen Pei
MDEV-40048 [to-squash] Allow trigger and LOCK TABLES to work with range interval auto partitioning

When a range interval auto partitioned table is the target of a
trigger, the triggering statement is not necessarily one that would
cause the auto-creation of new partitions, so we need to account for
that.

Also added support for LOCK TABLES ... WRITE.

Improved tests coverage by adapting tests from versioning.partition.
Oleg Smirnov
MDEV-32326 Recursive CTE reference in a scalar subquery must be rejected

A recursive reference to a WITH RECURSIVE table that is reachable only
through a scalar subquery (in particular through a WITH clause nested
inside such a subquery) was not recognized as a subquery reference. As a
result the recursive CTE was wrongly accepted as standard-compliant instead
of being rejected with ER_NOT_STANDARD_COMPLIANT_RECURSIVE, and execution
later dereferenced an uninitialized join_tab for that reference in
st_select_lex_unit::exec_recursive(), crashing the server.

The cause was in With_element::check_dependencies_in_unit(). The flag
marking that we are inside a subquery (in_subq) was updated only after the
unit's own WITH clause had already been analyzed. Hence dependencies
discovered while descending into a WITH clause attached to a scalar
subquery were recorded in top_level_dep_map instead of sq_dep_map, so
contains_sq_with_recursive_reference() failed to report the violation.

The fix: set in_subq from unit->item before processing the unit's WITH
clause, so that dependencies found in nested WITH clauses of a scalar
subquery are correctly attributed to the subquery context.

The expected error for the MDEV-32299 cases in cte_recursive.test changes
accordingly from ER_BAD_FIELD_ERROR to ER_NOT_STANDARD_COMPLIANT_RECURSIVE:
the query is now rejected at dependency analysis for its non-compliant
recursive reference rather than failing later during name resolution. The
test still verifies that no crash occurs.
Kristian Nielsen
Fix excessive allocations of memory for table object bitmaps
Vladislav Vaintroub
MDEV-40115 DENY EXECUTE hides unrelated routines in SHOW commands or I_S

Fix check_routine_level_acl() to pass parent access, for accurate
calculation.

Previously, if (db_level_access & privs) returned 0, it was treated as
no-access on DB level in check_some_routine_access().

This is not the complete truth, with DENY, it may mean there is access,
but some routines have DENY. So pass the db level grants/denies to the
function for more accurate checking.
Lawrin Novitsky
Minor formatting changes
PranavKTiwari
Added logic for colum typ.
Kristian Nielsen
MDEV-40057: Virtual column included in after-image with unique BLOB index, asserts

Do not put any virtual column values into the before-image or after-image of
row events.

These virtual column values were causing assertion and probably other issues
as well. Concretely, a UNIQUE index on (int_col, blob_col) where the int_col
is being updated would include the hidden virtual column for the index in
the after-image, without including the value of the blob_col in
binlog_row_image=MINIMAL. This would cause an assertion during
TABLE::update_virtual_fields() due to missing bit in the bitmap.

Even if it doesn't cause an assertion, including the virtual column values
makes no sense, as they are recomputed anyway on the slave when applying the
row events.

Also fix excessive allocations of memory for table object bitmaps.

Signed-off-by: Kristian Nielsen <[email protected]>
Vladislav Vaintroub
MDEV-40116 Column-level DENY SELECT hides accessible columns

Allow SHOW if grants on table level indicate "maybe allowed", i.e
there are some grants that are not all denied on this level.

Column level denies are applied in SHOW COLUMS.
They are not applied in SHOW CREATE TABLE, which will succeed if
there are appropriate table level privs, without checking columns.
Alexander Barkov
MDEV-39587 Package-wide TYPE for variable declarations

SET sql_mode=ORACLE;
DELIMITER $$
CREATE OR REPLACE PACKAGE pkg AS
  -- Declare a package public data type
  TYPE varchar_array IS TABLE OF VARCHAR(2000) INDEX BY INTEGER;
END;
$$
DELIMITER ;
DELIMITER $$

CREATE OR REPLACE PROCEDURE p1 AS
  v pkg.varchar_array; -- Use the package public data type
BEGIN
  v(0):='test';
  SELECT v(0);
END;
$$
DELIMITER ;

Note, the change is done only for sql_mode=ORACLE, because the TYPE
declaration is not available for the default mode.

Where package-wide types are available
--------------------------------------
- Variabe list type:
    DECLARE var pkg1.type1;

- RETURN type for a package routine:
    CREATE FUNCTION .. RETURN pkg1.type1 ...

- Parameter type for a package routine:
    PROCEDURE p1(param1 pkg1.type1);

- Assoc array element type:
    TYPE assoc1_t IS TABLE OF pkg1.type1 ...

- REF CURSOR RETURN type:
    TYPE cur1_t IS REF CURSOR RETURN pkg1.type1;

Change details
--------------

- Adding a member Lex_length_and_dec_st::m_foreign_module_type
  It's set to true when the data type was initialized from a TYPE
  in foreign routine (e.g. in PACKAGE spec).
  It's needed to prevent use of qualified identifiers in public contexts,
  i.e. in schema public routine parameter types and schema publuc function
  RETURN types.
  Adding a helper method sp_head::check_applicability() which prevents
  use of qualified types in public context.

- Adding a helper method sp_head::raise_unknown_data_type().

- Adding methods LEX::set_field_type_typedef_package_spec() for
  2-step and 3-step qualified indentifiers.
  It's used in field_type_all_with_typedefs which covers cases:
  - Variabe list type        : DECLARE var pkg1.type1;
  - RETURN type              : CREATE FUNCTION .. RETURN pkg1.type1 ...
  - Parameter type          : PROCEDURE p1(param1 pkg1.type1);
  - Assoc array element type : TYPE assoc1_t IS TABLE OF pkg1.type1 ...

- Adding a method LEX::declare_type_ref_cursor_return_typedef().
  It handles cases when a new TYPE REF CURSOR RETURN is declared,
  for both for qualified RETURN types and non-qualified RETURN types:
  - TYPE cur0_t IS REF CURSOR RETURN rec1_t;
  - TYPE cur0_t IS REF CURSOR RETURN pkg1.rec1_t;
  - TYPE cur0_t IS REF CURSOR RETURN db1.pkg1.rec1_t;

  The code was moved from LEX::declare_type_ref_cursor() into
  LEX::declare_type_ref_cursor_return_typedef() and extended
  to cover qualified RETURN types.

- Adding a method Sql_path::find_package_spec_type().
  It iterates through all schemas specified in @@path and searches
  for the given type in the given package.

- Adding a helper method sp_pcontext::type_defs_add_ref_cursor()
  to reuse the code.

- Adding a new method sp_package::get_typedef() to search
  for TYPE definitions in PACKAGE specifications.

- Adding a new method sp_head::get_typedef_package_spec()
  to search for TYPE definitions used by a PROCEDURE or FUNCTION.

- Adding a helper method
    Sp_handler::sp_cache_routine_reentrant_suppress_errors
  Adding a method Sp_handler::find_package_spec().
Alexey Botchkov
MDEV-36261 XMLTYPE: methods - step 1

Method functions added to the XMLTYPE.
Lawrin Novitsky
CONCPP-152 fix of effect of C/C resetting length of fixed size types

The driver was using that length directly. Now it tests the length and
use either it or buffer length.
Thirunarayanan Balathandayuthapani
MDEV-39707 Assertion `lsn != 0' failed in log_write_up_to

Problem:
========
innodb_make_page_dirty(): Unconditionally calls log_write_up_to()
with mtr.commit_lsn() after committing the mini-transaction.
When the mtr produced no redo records when the targeted page
is full of zeroes.

Solution:
========
innodb_make_page_dirty(): Skip log_write_up_to() when
commit_lsn() is zero.
ParadoxV5
MDEV-39482 Drop support for CHANGE MASTER savefiles from MySQL/MariaDB 5.5 and before

Remove the ugly additional code in `Info_file::load_from_file()`
for the old, inextensible format before MySQL/MariaDB 4.1 for
`@@master_info_file` and 5.6/10.0 for `@@relay_log_info_file`.

Those versions are EOL for 6 years or more,
so there’s no priority keeping a slightly divergent code
path around for them only to hinder code improvements.

MDEV-38020’s MTR test is (temporarily) removed along
with the rest of `rpl.rpl_read_old_relay_log_info`;
it will be ported to the new format in a separate commit.

While here, also replace the corresponding additional parameter for
`Info_file::save_to_file()` with an utilization of zero-initialization.
Kristian Nielsen
MDEV-40057: Virtual column included in after-image with unique BLOB index, asserts

Do not put any virtual column values into the before-image or after-image of
row events.

These virtual column values were causing assertion and probably other issues
as well. Concretely, a UNIQUE index on (int_col, blob_col) where the int_col
is being updated would include the hidden virtual column for the index in
the after-image, without including the value of the blob_col in
binlog_row_image=MINIMAL. This would cause an assertion during
TABLE::update_virtual_fields() due to missing bit in the bitmap.

Even if it doesn't cause an assertion, including the virtual column values
makes no sense, as they are recomputed anyway on the slave when applying the
row events.
Kristian Nielsen
MDEV-40057: Virtual column included in after-image with unique BLOB index, asserts

Do not put any virtual column values into the before-image or after-image of
row events.

These virtual column values were causing assertion and probably other issues
as well. Concretely, a UNIQUE index on (int_col, blob_col) where the int_col
is being updated would include the hidden virtual column for the index in
the after-image, without including the value of the blob_col in
binlog_row_image=MINIMAL. This would cause an assertion during
TABLE::update_virtual_fields() due to missing bit in the bitmap.

Even if it doesn't cause an assertion, including the virtual column values
makes no sense, as they are recomputed anyway on the slave when applying the
row events.

Also fix excessive allocations of memory for table object bitmaps.

Signed-off-by: Kristian Nielsen <[email protected]>
Sergei Golubchik
only check for duckdb stuff if target duckdb is enabled
PranavKTiwari
MDEV-36990: SIGFPE in get_max_range_rowid_filter_elems_for_table
Reject key definitions where a column contributes zero bytes to an index
but is part of a PRIMARY KEY (or otherwise semantically NOT NULL) and no
hash-based index fallback is used.

Previously, ALTER TABLE allowing BINARY(0) as part of a PRIMARY KEY could
produce a zero-length clustered index. This propagated into InnoDB as
tab->file->ref_length == 0, leading to division-by-zero in
get_max_range_rowid_filter_elems_for_table() during optimizer cost
estimation.

This change enforces validation in init_key_part_spec() to ensure that
PRIMARY KEY columns cannot have effective key length 0, preventing invalid
index creation and downstream optimizer/runtime crashes.
Sergei Golubchik
refactor submodule.cmake to fetch less

don't update all submodules automatically,
only update those that are actually used by the build
Yuchen Pei
MDEV-40088 [to-squash] Disallow subqueries in INTERVAL clause in range interval auto partitioning

This is consistent with system time (versioning) partitioning. Also
consistent is that both allow expressions otherwise.
Thirunarayanan Balathandayuthapani
MDEV-39706  Assertion `!thd || !coordinator_thd' failed

Problem:
========
  - This assert was introduced in commit
0152c617e80ccf3f33d3ea4b50c17d5f588613b1 (MDEV-39261), which sets
coordinator_thd in clone_oldest_view() and resets it to nullptr in
batch_cleanup() at the end of the batch.
When innodb_trx_purge_view_update_only_debug is enabled, InnoDB fail
to reset coordinator_thd. As a result, InnoDB fails with assert in
next batch

Solution:
========
trx_purge(): Reset coordinator_thd to nullptr when
innodb_trx_purge_view_update_only_debug is enabled.
Dmitry Shulga
MDEV-40004: Server crashes in sp_head::register_instr_mem_root_for_deallocation upon shutdown

n shutdown server could crash in case triggers executed during server run
and some of triggers instructions were re-compiled.

The crash is caused by attempt to allocate a memory for storing pointers
on mem_roots used for memory allocation taken place on re-parsing failing
trigger's statements. The reason of crash is dereferencing of nullptr
returning by the function current_thd().

To fix the issue, use dummy THD on shutdown the table definition cache.
tdc_start_shutdown() is solely invoked from the function clean_up()
but the later is called from many places around the source code, not only
from mysql_main(), particularly clean_up() is called from unireg_abort().
Therefore, the extra argument added into the signature of the function
cleanup() to allow explicit request of use dummy THD on shutdown the table
definition cache.
Vladislav Vaintroub
MDEV-40115 DENY EXECUTE hides unrelated routines in SHOW commands or I_S

Fix check_routine_level_acl() to pass parent access, for accurate
calculation.

Previously, if (db_level_access & privs) returned 0, it was treated as
no-access on DB level in check_some_routine_access().

This is not the complete truth, with DENY, it may mean there is access,
but some routines have DENY. So pass the db level grants/denies to the
function for more accurate checking.
ParadoxV5
MDEV-38972: Reorganize `Info_file` entities

This commit consolidate the value structs and their related functions
to shrink the class hierarchy and mitigate many templates’s limitations.

* Rename `Persistence` to `Value_interface` and add template `Value`
* Replace subclasses with explicit specializations of the
  `Value` template’s instance methods wherever available
  * This ensures `Value` is used literally as a template – `#define`
    but typed – rather than merely for the generics as much as possible.
* Move `mariadbd_option` reference template parameter to
  `Value::default_value` pointer instance variable
* Merge DEFAULT-less classes to a case of the optional `Value`
template where the `Value::default_value` is `nullptr`
* Replace `trilean` with `std::optional<bool>` from the template
* Rename `enum_master_use_gtid::DEFAULT` to `AUTO` and *intend*
  `std::nullopt` to represent the unset/DEFAULT state for
  `Master_info_file::master_use_gtid` instead
* Dissolve `Int_IO_CACHE` to one `my_b_getsll()` (at least for now)
  and the rest merged into numeric `Value` instance methods
* Split `Master_info_file::Heartbeat_period_value`’s static methods
  to instance methods of a new `Uint32_3` conversion wrapper

Since the publication of MDEV-37530, my unimplemented designs have
evolved to feature split “metaclasses” that it can share with
`information_schema.slave_status`, especially after MDEV-31342.
As such, this commit’s redesign is modelled with a
neutral `Value::default_value` to reflect how NOT NULL
is a column constraint rather than a value property.

While here, the commit also fixes some nits in the code documentation.
PranavKTiwari
MDEV-36990: SIGFPE in get_max_range_rowid_filter_elems_for_table

Reject zero-length key parts for columns that are effectively non-nullable
in key context.

Previously, key validation relied solely on NOT_NULL_FLAG to reject
zero-length key parts. During ALTER TABLE processing, PRIMARY KEY columns
may not yet have their implicit NOT NULL property reflected in
Create_field::flags, allowing definitions such as BINARY(0) in a PRIMARY
KEY to bypass validation.

This could produce a zero-length clustered index and propagate
tab->file->ref_length == 0 into the optimizer, leading to a
division-by-zero in get_max_range_rowid_filter_elems_for_table().

Strengthen validation in init_key_part_spec() by rejecting zero-length key
parts for columns that are explicitly NOT NULL or belong to a PRIMARY KEY,
even when NOT_NULL_FLAG has not yet been materialized during ALTER TABLE
processing.