[MDEV-23554] Wrong default value for foreign_key_checks variable Created: 2020-08-24  Updated: 2020-10-06  Resolved: 2020-08-25

Status: Closed
Project: MariaDB Server
Component/s: Server
Affects Version/s: 10.2, 10.3, 10.4, 10.5
Fix Version/s: 10.2.35, 10.3.26, 10.4.16, 10.5.7

Type: Bug Priority: Critical
Reporter: Aleksey Midenkov Assignee: Aleksey Midenkov
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Blocks
blocks MDEV-16417 Store Foreign Key metadata outside of... In Review

 Description   

Reproduce

select @@foreign_key_checks;
set foreign_key_checks= default;
select @@foreign_key_checks;

Result

select @@foreign_key_checks;
@@foreign_key_checks
1
set foreign_key_checks= default;
select @@foreign_key_checks;
@@foreign_key_checks
0

Expected

foreign_key_checks has default value of 1

Tests affected

innodb.foreign_key

Cause

session_save_default() ignores reverse_semantics setting:

++
1852      void session_save_default(THD *thd, set_var *var)
1853      { var->save_result.ulonglong_value= global_var(ulonglong) & bitmask; }

global_var(ulonglong) has OPTION_NO_FOREIGN_KEY_CHECKS bit 0.
var->save_result.ulonglong_value has foreign_key_checks semantics!

Then:

++
1809    class Sys_var_bit: public Sys_var_typelib
1810    {
1811      ulonglong bitmask;
1812      bool reverse_semantics;
1813      void set(uchar *ptr, ulonglong value)
1814      {
1815        if ((value != 0) ^ reverse_semantics)
1816          (*(ulonglong *)ptr)|= bitmask;
1817        else
1818          (*(ulonglong *)ptr)&= ~bitmask;
1819      }


Generated at Thu Feb 08 09:23:17 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.