MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most featureful, stable, and sanely licensed open SQL server in the industry.
Find a file
Alexander Barkov c5d8b9963a MDEV-36716 A case expression with ROW arguments in THEN crashes
The patch for SYS_REFCURSOR (MDEV-20034) overrode these methods:
- Item_func_case_searched::check_arguments()
- Item_func_if::check_arguments()

to validate WHEN-style arguments (e.g. args[0] in case of IF) for being
able to return a boolean result.

However, this unintentionally removed the test for the THEN-style arguments
that they are not expressions of the ROW data type.

This led to a crash inside Type_handler_hybrid_field_type::aggregate_for_result
on a DBUG_ASSERT that arguments are not of the ROW data type.

Fix:

The fix restores blocking ROW expressions in the not supported cases,
to avoid the DBUG_ASSERT and to raise an SQL error instead.

Blocking ROW_RESULT expressions is done per Item_func_case_expression
descendant individually, instead of blocking any ROW_RESULT arguments
at the Item_func_case_expression level.

The fix is done taking into account the upcoming patch for associative arrays
(MDEV-34319). It should be possible to pass associative array expressions into
some hybrid type functions, where ROW type expressions are not possible.

As a side effect, some lecagy ER_OPERAND_COLUMNS changed to
a newer ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION

Changes in the top affected class Item_func_case_expression:

- item_func.h:
  Overriding Item_func_case_expression::check_arguments() to return false,
  without checking any arguments. Descendant validate arguments
  in a various different ways. No needs to block all non-scalar data type at
  this level, to prevent disallowing associative arrays.

Changes in descendants:

- item_cmpfunc.cc:
  Adding a test in Item_func_case_simple::aggregate_switch_and_when_arguments()
  preventing passing ROW_RESULT expression in predicant and WHEN in a
  simple CASE:
    CASE predicant WHEN when1 THEN .. WHEN when2 THEN .. END;
  This is not supported yet. Should be preferrably fixed before MDEV-34319.

- item_cmpfunc.cc:
  Calling args[0]->type_handler()->Item_hybrid_func_fix_attributes()
  from Item_func_nullif::fix_length_and_dec().
  This prevents a ROW expression to be passed to args[0] of NULLIF().
  But will allow to pass associative arrays.

  args[1] is still only checked to be comparable with args[0].
  No needs to add additional tests for it.

- item_cmpfunc.h:
  Adding a call for Item_hybrid_func_fix_attributes() in
  Item_func_case_abbreviation2::cache_type_info().
  This prevents calling the descendant functions with
  a ROW expression in combination with an explicit NULL
  in the THEN-style arguments (but will allow to pass associative arrays):

    IFNULL(row_expression, NULL)
    IFNULL(NULL, row_expression)
    IF(switch, row_expression, NULL)
    IF(switch, NULL, row_expression)
    NVL2(switch, row_expression, NULL)
    NVL2(switch, NULL, row_expression)
  Adding a THD* argument into involved methods.

- item_cmpfunc.h:
  Overriding Item_func_case_abbreviation2_switch::check_arguments() to
  check that the first argument in IF() and NVL2() can return bool.
  Removing Item_func_if::check_arguments(), as it become redundant.

- sql_type.cc:
  Fixing sql_type.cc not to disallow items[0] with ROW_RESULT.
  This makes it call Item_hybrid_func_fix_attributes() at the end,
  which block ROW arguments into THEN-style arguments of hybrid functions.
  But this will allow to pass Type_handler_assoc_array expressions.

- sql_type.cc:
  Changing Type_handler_row::Item_hybrid_func_fix_attributes to raise the
  ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION error instead of the DBUG_ASSERT.
2025-05-05 19:44:04 +04:00
.github Fix remaining typos 2025-04-29 11:18:00 +10:00
BUILD Fix remaining typos 2025-04-29 11:18:00 +10:00
client MDEV-33281 Fix mysql-test-run to correctly handle hints 2025-05-05 12:02:47 +07:00
cmake Fix remaining typos 2025-04-29 11:18:00 +10:00
dbug Reënable ATTRIBUTE_FORMAT on DBUG_PRINT & t/eprint 2025-02-12 10:17:44 +01:00
debian Fix remaining typos 2025-04-29 11:18:00 +10:00
Docs Fix remaining typos 2025-04-29 11:18:00 +10:00
extra Fix remaining typos 2025-04-29 11:18:00 +10:00
include fix error messages 2025-05-02 13:56:25 +02:00
libmariadb@ba712ddf96 update C/C 2025-04-02 10:52:31 +11:00
libmysqld MDEV-33281 Implement optimizer hints 2025-05-05 12:02:47 +07:00
libservices Merge 10.6 into 10.11 2024-02-08 15:04:46 +02:00
man Fix remaining typos 2025-04-29 11:18:00 +10:00
mysql-test MDEV-36716 A case expression with ROW arguments in THEN crashes 2025-05-05 19:44:04 +04:00
mysys Fix remaining typos 2025-04-29 11:18:00 +10:00
mysys_ssl MDEV-34712 Add support to sha2 and pbkdf2 key derivation in file_key_management 2025-04-28 13:43:32 +10:00
plugin MDEV-12182 post-merge 2025-05-02 13:56:25 +02:00
randgen/conf Group commit for maria engine. 2010-02-12 15:12:28 +02:00
scripts Fix remaining typos 2025-04-29 11:18:00 +10:00
sql MDEV-36716 A case expression with ROW arguments in THEN crashes 2025-05-05 19:44:04 +04:00
sql-bench Fix remaining typos 2025-04-29 11:18:00 +10:00
sql-common MDEV-31334: Consider dates ending in 'T' as malformed 2025-04-15 14:39:42 +03:00
storage remove features that were deprecated in 10.5 2025-04-29 16:53:02 +02:00
strings Fix remaining typos 2025-04-29 11:18:00 +10:00
support-files Fix remaining typos 2025-04-29 11:18:00 +10:00
tests MDEV-33281 Implement optimizer hints 2025-05-05 12:02:47 +07:00
tpool Fix typos in C comments in miscellaneous files 2025-03-24 13:36:28 +11:00
unittest Fix typos in C comments in miscellaneous files 2025-03-24 13:36:28 +11:00
vio Fix remaining typos 2025-04-29 11:18:00 +10:00
win Fix remaining typos 2025-04-29 11:18:00 +10:00
wsrep-lib@70cd967f5e galera: wsrep-lib submodule update 2024-12-17 09:53:19 +01:00
zlib Merge branch 'merge-zlib' (1.3.1) into 10.4 2024-04-26 13:50:03 +02:00
.clang-format Remove duplicate key "Language" from .clang-format 2024-04-17 16:52:37 +02:00
.gitattributes Merge branch '10.5' into 10.6 2022-02-03 17:01:31 +01:00
.gitignore MDEV-34979 generate SBOM from server builds 2025-01-15 14:37:43 +01:00
.gitlab-ci.yml Fix remaining typos 2025-04-29 11:18:00 +10:00
.gitmodules Merge remote-tracking branch '10.4' into 10.5 2023-03-31 21:32:41 +02:00
appveyor.yml appveyor - run builds in "main" branch 2025-01-24 13:15:05 +01:00
BUILD-CMAKE Fix remaining typos 2025-04-29 11:18:00 +10:00
CMakeLists.txt Merge 11.4 into 11.8 2025-04-02 14:07:01 +03:00
CODING_STANDARDS.md Fix remaining typos 2025-04-29 11:18:00 +10:00
config.h.cmake Merge 11.4 into 11.8 2025-04-02 14:07:01 +03:00
configure.cmake Merge branch '11.6' into 11.7 2024-11-10 19:22:21 +01:00
CONTRIBUTING.md Add CODING_STANDARDS.md file 2023-02-03 15:47:17 +11:00
COPYING Update FSF Address 2019-05-11 21:29:06 +03:00
CREDITS Update sponsors 2024-08-12 09:32:30 +01:00
INSTALL-SOURCE Update AskMonty and Atlassian references to MariaDB 2016-03-08 15:24:01 +02:00
INSTALL-WIN-SOURCE Update AskMonty and Atlassian references to MariaDB 2016-03-08 15:24:01 +02:00
KNOWN_BUGS.txt Changed some MySQL names in messages to MariaDB 2018-12-09 20:49:05 +02:00
README.md Merge branch '10.11' into 11.1 2024-05-31 10:54:31 +10:00
SECURITY.md Create SECURITY.md 2023-06-05 08:28:06 +10:00
THIRDPARTY Update THIRDPARTY license file to reflect reality 2025-04-18 23:16:46 +02:00
VERSION bump the version 2025-04-18 17:11:09 +02:00

Code status:

  • Appveyor CI status ci.appveyor.com

MariaDB: The innovative open source database

MariaDB was designed as a drop-in replacement of MySQL(R) with more features, new storage engines, fewer bugs, and better performance.

MariaDB is brought to you by the MariaDB Foundation and the MariaDB Corporation. Please read the CREDITS file for details about the MariaDB Foundation, and who is developing MariaDB.

MariaDB is developed by many of the original developers of MySQL who now work for the MariaDB Corporation, the MariaDB Foundation and by many people in the community.

MySQL, which is the base of MariaDB, is a product and trademark of Oracle Corporation, Inc. For a list of developers and other contributors, see the Credits appendix. You can also run 'SHOW authors' to get a list of active contributors.

A description of the MariaDB project and a manual can be found at:

https://mariadb.org

https://mariadb.com/kb/en/

https://mariadb.com/kb/en/mariadb-vs-mysql-features/

https://mariadb.com/kb/en/mariadb-versus-mysql-compatibility/

https://mariadb.com/kb/en/new-and-old-releases/

Getting the code, building it and testing it

Refer to the following guide: https://mariadb.org/get-involved/getting-started-for-developers/get-code-build-test/ which outlines how to build the source code correctly and run the MariaDB testing framework, as well as which branch to target for your contributions.

Help

More help is available from the Maria Discuss mailing list https://lists.mariadb.org/postorius/lists/discuss.lists.mariadb.org/ and MariaDB's Zulip instance, https://mariadb.zulipchat.com/

Licensing


MariaDB is specifically available only under version 2 of the GNU General Public License (GPLv2). (I.e. Without the "any later version" clause.) This is inherited from MySQL. Please see the README file in the MySQL distribution for more information.

License information can be found in the COPYING file. Third party license information can be found in the THIRDPARTY file.


Bug Reports

Bug and/or error reports regarding MariaDB should be submitted at: https://jira.mariadb.org

For reporting security vulnerabilities, see our security-policy.

The code for MariaDB, including all revision history, can be found at: https://github.com/MariaDB/server