An error occurred fetching the project authors.
  1. 25 Sep, 2024 1 commit
    • Jan Lindström's avatar
      MDEV-27861: Creating partitioned tables should not be allowed with... · d843b2b4
      Jan Lindström authored
      MDEV-27861: Creating partitioned tables should not be allowed with wsrep_osu_method=TOI and wsrep_strict_ddl=ON
      
      Problem was incorrect handling of partitioned tables,
      because db_type == DB_TYPE_PARTITION_DB
      wsrep_should_replicate_ddl incorrectly marked
      DDL as not replicatable. However, in partitioned
      tables we should check implementing storage engine
      from table->file->partition_ht() if available because
      if partition handler is InnoDB all DDL should be allowed
      even with wsrep_strict_ddl. For other storage engines
      DDL should not be allowed and error should be issued.
      
      This is 10.5 version of the fix.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      d843b2b4
  2. 17 Sep, 2021 1 commit
  3. 06 Sep, 2021 1 commit
  4. 02 Mar, 2021 1 commit
    • Monty's avatar
      MDEV-24532 Table corruption ER_NO_SUCH_TABLE_IN_ENGINE .. on table with foreign key · 676987c4
      Monty authored
      When doing a truncate on an Innodb under lock tables, InnoDB would rename
      the old table to #sql-... and recreate a new 't1' table. The table lock
      would still be on the #sql-table.
      
      When doing ALTER TABLE, Innodb would do the changes on the #sql table
      (which would disappear on close).
      When the SQL layer, as part of inline alter table, would close the
      original t1 table (#sql in InnoDB) and then reopen the t1 table, Innodb
      would notice that this does not match it's own (old) t1 table and
      generate an error.
      
      Fixed by adding code in truncate table that if we are under lock tables
      and truncating an InnoDB table, we would close, reopen and lock the
      table after truncate. This will remove the #sql table and ensure that
      lock tables is using the new empty table.
      
      Reviewer: Marko Mäkelä
      676987c4
  5. 16 Feb, 2021 1 commit
  6. 11 Nov, 2020 1 commit
    • sjaakola's avatar
      MDEV-24119 MDL BF-BF Conflict caused by TRUNCATE TABLE · ad432ef4
      sjaakola authored
      This PR fixes same issue as MDEV-21577 for TRUNCATE TABLE.
      MDEV-21577 fixed TOI replication for OPTIMIZE, REPAIR and ALTER TABLE
      operating on FK child table. It was later found out that also TRUNCATE
      has similar problem and needs a fix.
      
      The actual fix is to do FK parent table lookup before TRUNCATE TOI
      isolation and append found FK parent table names in certification key
      list for the write set.
      
      PR contains also new test scenario in galera_ddl_fk_conflict test where
      FK child has two FK parent tables and there are two DML transactions operating
      on both parent tables.
      
      For development convenience, new TO isolation macro was added:
      WSREP_TO_ISOLATION_BEGIN_IF and WSREP_TO_ISOLATION_BEGIN_ALTER macro was changed
      to skip the goto statement.
      Reviewed-by: default avatarJan Lindström <jan.lindstrom@mariadb.com>
      ad432ef4
  7. 23 May, 2020 1 commit
    • Monty's avatar
      Aria will now register it's transactions · 4102f158
      Monty authored
      MDEV-22531 Remove maria::implicit_commit()
      MDEV-22607 Assertion `ha_info->ht() != binlog_hton' failed in
                 MYSQL_BIN_LOG::unlog_xa_prepare
      
      From the handler point of view, Aria now looks like a transactional
      engine. One effect of this is that we don't need to call
      maria::implicit_commit() anymore.
      
      This change also forces the server to call trans_commit_stmt() after doing
      any read or writes to system tables.  This work will also make it easier
      to later allow users to have system tables in other engines than Aria.
      
      To handle the case that Aria doesn't support rollback, a new
      handlerton flag, HTON_NO_ROLLBACK, was added to engines that has
      transactions without rollback (for the moment only binlog and Aria).
      
      Other things
      - Moved freeing of MARIA_SHARE to a separate function as the MARIA_SHARE
        can be still part of a transaction even if the table has closed.
      - Changed Aria checkpoint to use the new MARIA_SHARE free function. This
        fixes a possible memory leak when using S3 tables
      - Changed testing of binlog_hton to instead test for HTON_NO_ROLLBACK
      - Removed checking of has_transaction_manager() in handler.cc as we can
        assume that as the transaction was started by the engine, it does
        support transactions.
      - Added new class 'start_new_trans' that can be used to start indepdendent
        sub transactions, for example while reading mysql.proc, using help or
        status tables etc.
      - open_system_tables...() and open_proc_table_for_Read() doesn't anymore
        take a Open_tables_backup list. This is now handled by 'start_new_trans'.
      - Split thd::has_transactions() to thd::has_transactions() and
        thd::has_transactions_and_rollback()
      - Added handlerton code to free cached transactions objects.
        Needed by InnoDB.
      
      squash! 2ed35999f2a2d84f1c786a21ade5db716b6f1bbc
      4102f158
  8. 03 Apr, 2020 2 commits
    • Sergey Vojtovich's avatar
      Yet less TDC hash lookups · 4197014b
      Sergey Vojtovich authored
      Let auto repair table and truncate table routines flush TABLE_SHARE
      directly.
      
      Part of MDEV-17882 - Cleanup refresh version
      4197014b
    • Sergey Vojtovich's avatar
      Split tdc_remove_table() · 7a947614
      Sergey Vojtovich authored
      TDC_RT_REMOVE_ALL -> tdc_remove_table(). Some occurrences replaced with
      TDC_element::flush() (whenver TABLE_SHARE is available).
      
      TDC_RT_REMOVE_NOT_OWN[_KEEP_SHARE] -> TDC_element::flush(). These modes
      assume that current thread owns TABLE_SHARE reference, which means we can
      avoid hash lookup and flush unused TABLE instances directly.
      
      TDC_RT_REMOVE_UNUSED -> TDC_element::flush_unused(). Only [ab]used by
      mysql_admin_table() currently. Should be removed eventually.
      
      Part of MDEV-17882 - Cleanup refresh version
      7a947614
  9. 11 Feb, 2020 1 commit
    • Jan Lindström's avatar
      MDEV-20051: Add new mode to wsrep_OSU_method in which Galera checks storage... · e6a50e41
      Jan Lindström authored
      MDEV-20051: Add new mode to wsrep_OSU_method in which Galera checks storage engine of the effected table
      
      Introduced a new wsrep_strict_ddl configuration variable in which
      Galera checks storage engine of the effected table. If table is not
      InnoDB (only storage engine currently fully supporting Galera
      replication) DDL-statement will return error code:
      
      ER_GALERA_REPLICATION_NOT_SUPPORTED
             eng "DDL-statement is forbidden as table storage engine does not support Galera replication"
      
      However, when wsrep_replicate_myisam=ON we allow DDL-statements to
      MyISAM tables. If effected table is allowed storage engine Galera
      will run normal TOI.
      
      This new setting should be for now set globally on all
      nodes in a cluster. When this setting is set following DDL-clauses
      accessing tables not supporting Galera replication are refused:
      
      * CREATE TABLE (e.g. CREATE TABLE t1(a int) engine=Aria
      * ALTER TABLE
      * TRUNCATE TABLE
      * CREATE VIEW
      * CREATE TRIGGER
      * CREATE INDEX
      * DROP INDEX
      * RENAME TABLE
      * DROP TABLE
      
      Statements on PROCEDURE, EVENT, FUNCTION are allowed as effected
      tables are known only at execution. Furthermore, USER, ROLE, SERVER,
      DATABASE statements are also allowed as they do not really have
      effected table.
      e6a50e41
  10. 25 Nov, 2019 1 commit
    • Sergey Vojtovich's avatar
      Removed kill_delayed_threads_for_table() · 092834cd
      Sergey Vojtovich authored
      After 7fb9d649 it is used only by ALTER/DROP SERVER, which most probably
      wasn't intentional as Federated never supported delayed inserts anyway.
      
      If delayed inserts will ever become an issue with ALTER/DROP SERVER, we
      should kill them by acquiring X-lock instead.
      
      Part of MDEV-17882 - Cleanup refresh version
      092834cd
  11. 18 May, 2019 3 commits
  12. 14 May, 2019 1 commit
  13. 11 May, 2019 1 commit
  14. 24 Apr, 2019 1 commit
  15. 23 Jan, 2019 1 commit
  16. 02 Oct, 2018 1 commit
  17. 02 Sep, 2018 1 commit
  18. 19 Jul, 2018 1 commit
  19. 04 Jul, 2018 1 commit
  20. 14 May, 2018 1 commit
  21. 06 May, 2018 1 commit
    • Monty's avatar
      Add likely/unlikely to speed up execution · 30ebc3ee
      Monty authored
      Added to:
      - if (error)
      - Lex
      - sql_yacc.yy and sql_yacc_ora.yy
      - In header files to alloc() calls
      - Added thd argument to thd_net_is_killed()
      30ebc3ee
  22. 20 Apr, 2018 1 commit
    • Sergei Golubchik's avatar
      MDEV-15456 Server crashes upon adding or dropping a partition in ALTER under... · bcb36ee2
      Sergei Golubchik authored
      MDEV-15456 Server crashes upon adding or dropping a partition in ALTER under LOCK TABLE after ER_SAME_NAME_PARTITION
      
      ALTER TABLE ... ADD PARTITION modifies the open TABLE structure,
      and sets table->need_reopen=1 to reset these modifications
      in case of an error.
      
      But under LOCK TABLES the table isn't get reopened, despite need_reopen.
      
      Fixed by reopening need_reopen tables under LOCK TABLE.
      bcb36ee2
  23. 26 Feb, 2018 1 commit
    • Nisha Gopalakrishnan's avatar
      BUG#27216817: INNODB: FAILING ASSERTION: · c0b4d74b
      Nisha Gopalakrishnan authored
                    PREBUILT->TABLE->N_MYSQL_HANDLES_OPENED == 1
      
      ANALYSIS:
      =========
      
      Adding unique index to a InnoDB table which is locked as
      mutliple instances may trigger an InnoDB assert.
      
      When we add a primary key or an unique index, we need to
      drop the original table and rebuild all indexes. InnoDB
      expects that only the instance of the table that is being
      rebuilt, is open during the process. In the current
      scenario we have opened multiple instances of the table.
      This triggers an assert during table rebuild.
      'Locked_tables_list' encapsulates a list of all
      instances of tables locked by LOCK TABLES statement.
      
      FIX:
      ===
      We are now temporarily closing all the instances of the
      table except the one which is being altered and later
      reopen them via Locked_tables_list::reopen_tables().
      c0b4d74b
  24. 30 Jan, 2018 1 commit
    • Monty's avatar
      Changed database, tablename and alias to be LEX_CSTRING · a7e352b5
      Monty authored
      This was done in, among other things:
      - thd->db and thd->db_length
      - TABLE_LIST tablename, db, alias and schema_name
      - Audit plugin database name
      - lex->db
      - All db and table names in Alter_table_ctx
      - st_select_lex db
      
      Other things:
      - Changed a lot of functions to take const LEX_CSTRING* as argument
        for db, table_name and alias. See init_one_table() as an example.
      - Changed some function arguments from LEX_CSTRING to const LEX_CSTRING
      - Changed some lists from LEX_STRING to LEX_CSTRING
      - threads_mysql.result changed because process list_db wasn't always
        correctly updated
      - New append_identifier() function that takes LEX_CSTRING* as arguments
      - Added new element tmp_buff to Alter_table_ctx to separate temp name
        handling from temporary space
      - Ensure we store the length after my_casedn_str() of table/db names
      - Removed not used version of rename_table_in_stat_tables()
      - Changed Natural_join_column::table_name and db_name() to never return
        NULL (used for print)
      - thd->get_db() now returns db as a printable string (thd->db.str or "")
      a7e352b5
  25. 19 Dec, 2017 1 commit
  26. 14 Dec, 2017 1 commit
  27. 08 Sep, 2017 1 commit
  28. 23 Aug, 2017 2 commits
    • Michael Widenius's avatar
      Optimize LEX_STRING comparisons · 25c06f52
      Michael Widenius authored
      - Added inline lex_string_cmp() to replace my_strcase_cmp().
      - Added inline lex_string_eq to first compares lengths before comparing strings
      25c06f52
    • Michael Widenius's avatar
      Enusure that my_global.h is included first · 4aaa38d2
      Michael Widenius authored
      - Added sql/mariadb.h file that should be included first by files in sql
        directory, if sql_plugin.h is not used (sql_plugin.h adds SHOW variables
        that must be done before my_global.h is included)
      - Removed a lot of include my_global.h from include files
      - Removed include's of some files that my_global.h automatically includes
      - Removed duplicated include's of my_sys.h
      - Replaced include my_config.h with my_global.h
      4aaa38d2
  29. 11 Aug, 2017 2 commits
  30. 08 Aug, 2017 1 commit
  31. 05 May, 2017 1 commit
  32. 23 Apr, 2017 1 commit
    • Monty's avatar
      Changing field::field_name and Item::name to LEX_CSTRING · 5a759d31
      Monty authored
      Benefits of this patch:
      - Removed a lot of calls to strlen(), especially for field_string
      - Strings generated by parser are now const strings, less chance of
        accidently changing a string
      - Removed a lot of calls with LEX_STRING as parameter (changed to pointer)
      - More uniform code
      - Item::name_length was not kept up to date. Now fixed
      - Several bugs found and fixed (Access to null pointers,
        access of freed memory, wrong arguments to printf like functions)
      - Removed a lot of casts from (const char*) to (char*)
      
      Changes:
      - This caused some ABI changes
        - lex_string_set now uses LEX_CSTRING
        - Some fucntions are now taking const char* instead of char*
      - Create_field::change and after changed to LEX_CSTRING
      - handler::connect_string, comment and engine_name() changed to LEX_CSTRING
      - Checked printf() related calls to find bugs. Found and fixed several
        errors in old code.
      - A lot of changes from LEX_STRING to LEX_CSTRING, especially related to
        parsing and events.
      - Some changes from LEX_STRING and LEX_STRING & to LEX_CSTRING*
      - Some changes for char* to const char*
      - Added printf argument checking for my_snprintf()
      - Introduced null_clex_str, star_clex_string, temp_lex_str to simplify
        code
      - Added item_empty_name and item_used_name to be able to distingush between
        items that was given an empty name and items that was not given a name
        This is used in sql_yacc.yy to know when to give an item a name.
      - select table_name."*' is not anymore same as table_name.*
      - removed not used function Item::rename()
      - Added comparision of item->name_length before some calls to
        my_strcasecmp() to speed up comparison
      - Moved Item_sp_variable::make_field() from item.h to item.cc
      - Some minimal code changes to avoid copying to const char *
      - Fixed wrong error message in wsrep_mysql_parse()
      - Fixed wrong code in find_field_in_natural_join() where real_item() was
        set when it shouldn't
      - ER_ERROR_ON_RENAME was used with extra arguments.
      - Removed some (wrong) ER_OUTOFMEMORY, as alloc_root will already
        give the error.
      
      TODO:
      - Check possible unsafe casts in plugin/auth_examples/qa_auth_interface.c
      - Change code to not modify LEX_CSTRING for database name
        (as part of lower_case_table_names)
      5a759d31
  33. 07 Apr, 2017 1 commit
    • Monty's avatar
      MDEV-10139 Support for SEQUENCE objects · 17a87d60
      Monty authored
      Working features:
      CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
          [ INCREMENT [ BY | = ] increment ]
          [ MINVALUE [=] minvalue | NO MINVALUE ]
          [ MAXVALUE [=] maxvalue | NO MAXVALUE ]
          [ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
          ENGINE=xxx COMMENT=".."
      SELECT NEXT VALUE FOR sequence_name;
      SELECT NEXTVAL(sequence_name);
      SELECT PREVIOUS VALUE FOR sequence_name;
      SELECT LASTVAL(sequence_name);
      
      SHOW CREATE SEQUENCE sequence_name;
      SHOW CREATE TABLE sequence_name;
      CREATE TABLE sequence-structure ... SEQUENCE=1
      ALTER TABLE sequence RENAME TO sequence2;
      RENAME TABLE sequence TO sequence2;
      DROP [TEMPORARY] SEQUENCE  [IF EXISTS] sequence_names
      
      Missing features
      - SETVAL(value,sequence_name), to be used with replication.
      - Check replication, including checking that sequence tables are marked
        not transactional.
      - Check that a commit happens for NEXT VALUE that changes table data (may
        already work)
      - ALTER SEQUENCE. ANSI SQL version of setval.
      - Share identical sequence entries to not add things twice to table list.
      - testing insert/delete/update/truncate/load data
      - Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
      - Write documentation for NEXT VALUE / PREVIOUS_VALUE
      - NEXTVAL in DEFAULT
        - Ensure that NEXTVAL in DEFAULT uses database from base table
      - Two NEXTVAL for same row should give same answer.
      - Oracle syntax sequence_table.nextval, without any FOR or FROM.
      - Sequence tables are treated as 'not read constant tables' by SELECT; Would
        be better if we would have a separate list for sequence tables so that
        select doesn't know about them, except if refereed to with FROM.
      
      Other things done:
      - Improved output for safemalloc backtrack
      - frm_type_enum changed to Table_type
      - Removed lex->is_view and replaced with lex->table_type. This allows
        use to more easy check if item is view, sequence or table.
      - Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
        that want's to support sequences
      - Added handler calls:
       - engine_name(), to simplify getting engine name for partition and sequences
       - update_first_row(), to be able to do efficient sequence implementations.
       - Made binlog_log_row() global to be able to call it from ha_sequence.cc
      - Added handler variable: row_already_logged, to be able to flag that the
        changed row is already logging to replication log.
      - Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
        deny_updates_if_read_only_option()
      - Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
      - Moved code for add_table_options() out from sql_show.cc::show_create_table()
      - Added String::append_longlong() and used it in sql_show.cc to simplify code.
      - Added extra option to dd_frm_type() and ha_table_exists to indicate if
        the table is a sequence. Needed by DROP SQUENCE to not drop a table.
      17a87d60
  34. 14 Jan, 2015 1 commit
    • Praveenkumar.Hulakund's avatar
      Bug#19786309 - CRASH IN UNLOCK TABLES AFTER LOCKING AND TRUNCATING TEMPORARY TABLE. · 23321f62
      Praveenkumar.Hulakund authored
      Attempt to truncate temporary table using Blackhole storage and
      locked by LOCK TABLES caused assertion failure and crashes.
      
      Blackhole is a transaction-aware engine. While creating the temporary
      table in transaction-aware engine, temporary table of type
      "TRANSACTIONAL_TMP_TABLE" is created. For such temporary tables
      a THR_LOCK lock is acquired by the LOCK TABLE operation. References
      to them are also added into MYSQL_LOCK::table[] array. Also for
      Blackhole engine, flag HTON_CAN_RECREATE is set.
      
      While truncating temporary tables, no locks are taken and
      recreate_temporary_table() is called for engines having
      "HTON_CAN_RECREATE" in flag.
      
      Function closefrm() is called from the recreate_temporary_table(),
      to close the current temporary table. In closefrm(), the lock on
      table expected is "F_UNLCK". In debug builds, assert condition on
      this fails when lock of type "F_WRLCK" is acquired by LOCK TABLE
      operation on temporary tables using Blackhole engine.
      
      In non-debug builds closefrm() simply freed TABLE object leaving
      dangling pointer to this object in MYSQL_LOCK::table[] array which
      might lead to crashes later.
      
      Fix:
      ---------
      To fix this issue, we now unlock and remove table from MYSQL_LOCK::table[]
      array before calling close_temporary_table() in recreate_temporary_table().
      This is achieved by calling mysql_lock_remove() function for this table.
      23321f62
  35. 01 Oct, 2014 1 commit