1. 29 Mar, 2018 7 commits
    • Monty's avatar
      Changed static const in Alter_info and Alter_online_info to defines · 2dbeebdb
      Monty authored
      Main reason was to make it easier to print the above structures in
      a debugger. Additional benefits is that I was able to use same
      defines for both structures, which simplifes some code.
      
      Most of the code is just removing Alter_info:: and Alter_inplace_info::
      from alter table flags.
      
      Following renames was done:
      HA_ALTER_FLAGS        -> alter_table_operations
      CHANGE_CREATE_OPTION  -> ALTER_CHANGE_CREATE_OPTION
      Alter_info::ADD_INDEX -> ALTER_ADD_INDEX
      DROP_INDEX            -> ALTER_DROP_INDEX
      ADD_UNIQUE_INDEX      -> ALTER_ADD_UNIQUE_INDEX
      DROP_UNIQUE_INDEx     -> ALTER_DROP_UNIQUE_INDEX
      ADD_PK_INDEX          -> ALTER_ADD_PK_INDEX
      DROP_PK_INDEX         -> ALTER_DROP_PK_INDEX
      Alter_info:ALTER_ADD_COLUMN    -> ALTER_PARSE_ADD_COLUMN
      Alter_info:ALTER_DROP_COLUMN   -> ALTER_PARSE_DROP_COLUMN
      Alter_inplace_info::ADD_INDEX  -> ALTER_ADD_NON_UNIQUE_NON_PRIM_INDEX
      Alter_inplace_info::DROP_INDEX -> ALTER_DROP_NON_UNIQUE_NON_PRIM_INDEX
      
      Other things:
      - Added typedef alter_table_operatons for alter table flags
      - DROP CHECK CONSTRAINT can now be done online
      - Added checks for Aria tables in alter_table_online.test
      - alter_table_flags now takes an ulonglong as argument.
      - Don't support online operations if checksum option is used.
      - sql_lex.cc doesn't add ALTER_ADD_INDEX if index is not created
      2dbeebdb
    • Monty's avatar
      Fixed some DBUG_PRINT to use %p properly · 0631f20f
      Monty authored
      0631f20f
    • Monty's avatar
      Fixed alter online table for Aria tables · c3f37c07
      Monty authored
      fill_alter_table() always thought that index was changed because of
      of a wrong check of block_size. Some engines had code to correct this
      that should not be needed, Aria didn't and because of this some online
      operations didn't work.
      
      This code fixes the comparision of block_size to only compare if it's set.
      c3f37c07
    • halfspawn's avatar
    • Sergey Vojtovich's avatar
      Clean-up trx_sys.mutex misuse · 4faf34ad
      Sergey Vojtovich authored
      Currently trx_sys.mutex protects only trx_sys.mysql_trx_list and
      trx_sys.m_views, which are not accessed by lock0lock debug routines.
      Thus there's no need to bother trx_sys.mutex here.
      
      Removed trx_assert_started(): this assertion is fully covered by
      check_trx_state().
      4faf34ad
    • Sergey Vojtovich's avatar
      MDEV-15612 - Latching violation in trx_roll_must_shutdown · b36da48a
      Sergey Vojtovich authored
      recv_sys_t::mutex and rw_trx_hash_elementi_t::mutex were acquired
      in reverse (to recorded) order.
      
      Fixed by releasing recv_sys_t::mutex, before iterating rw_trx_hash.
      Statistics gathering doesn't really need recv_sys_t::mutex protection,
      since it is always done in one thread (trx_roll_crash_recv_trx) and
      thus it can't go wrong.
      b36da48a
    • Alexander Barkov's avatar
  2. 28 Mar, 2018 4 commits
  3. 27 Mar, 2018 5 commits
    • Daniel Bartholomew's avatar
      bump the VERSION · aafb9d44
      Daniel Bartholomew authored
      aafb9d44
    • Alexander Barkov's avatar
      MDEV-15689 Fix Item_func_set_collation to pass the collation using CHARSET_INFO instead of Item · 068450a3
      Alexander Barkov authored
      Main changes:
      
      - Changing the constructor to accept a CHARSET_INFO pointer, instead of an Item pointer
      - Updating the bison grammar accordingly
      
      Additional cleanups:
      
      - Simplifying Item_func_set_collation::eq() by reusing Item_func::eq()
      - Removing unused binary_keyword
      068450a3
    • Alexander Barkov's avatar
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-15325 Incomplete validation of missing tablespace during recovery · 73af8af0
      Thirunarayanan Balathandayuthapani authored
      Problem:
      =======
      	During validation of missing tablespace, missing tablespace id is
      being compared with hash table of redo logs (recv_sys->addr_hash). But if the
      hash table ran out of memory then there is a possibility that it will not contain
      the redo logs of all tablespace. In that case, Server will load the InnoDB
      even though there is a missing tablespace.
      
      Solution:
      ========
      	If the recv_sys->addr_hash hash table ran out of memory then InnoDB needs
      to scan the remaining redo log again to validate the missing tablespace.
      73af8af0
    • Alexander Barkov's avatar
      MDEV-15620 Crash when using "SET @@NEW.a=expr" inside a trigger · 902ace09
      Alexander Barkov authored
      The problem resided in this branch of the "option_value_no_option_type" rule:
      
      | '@' '@' opt_var_ident_type internal_variable_name equal set_expr_or_default
      
      Summary:
      
      1. internal_variable_name initialized tmp.var to trg_new_row_fake_var (0x01).
      2. The condition "if (tmp.var == NULL)" did not check
         the special case with trg_new_row_fake_var,
         so Lex->set_system_variable(&tmp, $3, $6) was
         called with tmp.var pointing to trg_new_row_fake_var,
         which created a sys_var instance pointing to 0x01 instead of
         a real system variable.
      3. Later, at the trigger invocation time, this method was called:
         sys_var::do_deprecated_warning (this=0x1, thd=0x7ffe6c000a98)
         Notice, "this" is equal to trg_new_row_fake_var (0x01)
      
      Solution:
      
      The old implementation with separate rules
      internal_variable_name (in sql_yacc.yy and sql_yacc_ora.yy) and
      internal_variable_name_directly_assignable (in sql_yacc_ora.yy only)
      was too complex and hard to follow.
      
      Rewriting the code in a more straightforward way.
      
      1. Changing LEX::set_system_variable()
      
      from:
      
      bool set_system_variable(struct sys_var_with_base *, enum_var_type, Item *);
      
      to:
      
      bool set_system_variable(enum_var_type, sys_var *, const LEX_CSTRING *, Item *);
      
      2. Adding new methods in LEX, which operate with variable names:
      
      bool set_trigger_field(const LEX_CSTRING *, const LEX_CSTRING *, Item *);
      bool set_system_variable(enum_var_type var_type, const LEX_CSTRING *name,
                               Item *val);
      bool set_system_variable(THD *thd, enum_var_type var_type,
                               const LEX_CSTRING *name1,
                               const LEX_CSTRING *name2,
                               Item *val);
      bool set_default_system_variable(enum_var_type var_type,
                                       const LEX_CSTRING *name,
                                       Item *val);
      bool set_variable(const LEX_CSTRING *name, Item *item);
      
      3. Changing the grammar to call the new methods directly
         in option_value_no_option_type,
         Removing rules internal_variable_name and
         internal_variable_name_directly_assignable.
      
      4. Removing "struct sys_var_with_base" and trg_new_row_fake_var.
      
      Good side effect:
      
      - The code in /sql reduced from 314 to 183 lines.
      - MDEV-15615 Unexpected syntax error instead of "Unknown system variable" ...
        was also fixed automatically
      902ace09
  4. 26 Mar, 2018 5 commits
  5. 25 Mar, 2018 1 commit
  6. 24 Mar, 2018 6 commits
  7. 23 Mar, 2018 10 commits
  8. 22 Mar, 2018 2 commits