1. 11 May, 2023 3 commits
    • Jan Lindström's avatar
      MDEV-30388 : Assertion `!wsrep_has_changes(thd) || (thd->lex->sql_command ==... · 28eaf66e
      Jan Lindström authored
      MDEV-30388 : Assertion `!wsrep_has_changes(thd) || (thd->lex->sql_command == SQLCOM_CREATE_TABLE && !thd->is_current_stmt_binlog_format_row()) || thd->wsrep_cs().transaction().state() == wsrep::transaction::s_aborted' failed
      
      Problem for Galera is the fact that sequences are not really
      transactional. Sequence operation is committed immediately
      in sql_sequence.cd and later Galera could find out that
      we have changes but actual statement is not there anymore.
      
      Therefore, we must make some restrictions what kind
      of sequences Galera can support.
      
      (1) Galera cluster supports only sequences implemented
      by InnoDB storage engine. This is because Galera replication
      supports currently only InnoDB.
      
      (2) We do not allow LOCK TABLE on sequence object and
      we do not allow sequence creation under LOCK TABLE, instead
      lock is released and we issue warning.
      
      (3) We allow sequences with NOCACHE definition or with
      INCREMEMENT BY 0 CACHE=n definition. This makes sure that
      sequence values are unique accross Galera cluster.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      28eaf66e
    • Oleksandr Byelkin's avatar
      de703a2b
    • Oleg Smirnov's avatar
      MDEV-30765 SHOW TABLES not working properly with lower_case_table_names=2 · 7e7e12e7
      Oleg Smirnov authored
      lower_case_table_names=2 means "table names and database names are
      stored as declared, but they are compared in lowercase".
      But names of objects in grants are stored in lowercase for any value
      of lower_case_table_names. This caused an error when checking grants
      for objects containing uppercase letters since table_hash_search()
      didn't take into account lower_case_table_names value
      7e7e12e7
  2. 10 May, 2023 2 commits
  3. 08 May, 2023 1 commit
    • Igor Babaev's avatar
      MDEV-31181 Crash with EXPLAIN EXTENDED for single-table DELETE using IN predicand · a09f661f
      Igor Babaev authored
      This bug affected EXPLAIN EXTENDED command for single-table DELETE that
      used an IN subquery in its WHERE clause. A crash happened if the optimizer
      chose to employ index_subquery or unique_subquery access when processing
      such command.
      The crash happened when the command tried to print the transformed query.
      In the current code of 10.4 for single-table DELETE statements the output
      of any explain command is produced after the join structures of all used
      subqueries have been destroyed. JOIN::destroy() sets the field tab of the
      JOIN_TAB structures created for subquery tables to NULL. As a result
      subselect_indexsubquery_engine::print(), subselect_indexsubquery_engine()
      cannot use this field to get the alias name of the joined table.
      
      This patch suggests to use the field TABLE_LIST::TAB that can be accessed
      from JOIN_TAB::tab_list to get the alias name of the joined table.
      
      Approved by Oleksandr Byelkin <sanja@mariadb.com>
      a09f661f
  4. 05 May, 2023 5 commits
    • Monty's avatar
      Fixed wrong test cases (embedded and ASAN) · 84b9fc25
      Monty authored
      - main.selectivity failed because one test produced different result with
        embedded (missing feature). Fixed by moving the failing part to
        selectivity_notembedded.
      - Disabled maria.encrypt-no-key for embedded as embedded does not support
        encryption
      - Moved test from join_cache to join_cache_notasan that tried to alloc()
        a buffer bigger than available memory.
      84b9fc25
    • Monty's avatar
      Added missing test file · c874d5c6
      Monty authored
      c874d5c6
    • Monty's avatar
      Cleanup of sql_join_cache code (no logic changes) · e74390d9
      Monty authored
      - Remove virtual from get_min_join_buffer_size() and
        get_max_join_buffer_size().
      - Avoid some calls to get_min_buffer_size()
      - Simply cache usage in get_..._join_buffer_size()
      - Simplify get_max_join_buffer_size() when using optimize_buff_size
      - Reindented some long comments
      
      Reviewer: Sergei Petrunia <sergey@mariadb.com>
      e74390d9
    • Monty's avatar
      Fixed calculation of JOIN_CACHE::max_records · 5fd46be5
      Monty authored
      The old code did set max_records to either number_of_rows
      (partial_join_cardinality) or memory size (join_buffer_space_limit)
      which did not make sense.
      
      Fixed by setting max_records to number of rows that fits into
      join_buffer_size.
      
      Other things:
      - Initialize buffer cache values in JOIN_CACHE constructors (safety)
      
      Reviewer: Sergei Petrunia <sergey@mariadb.com>
      5fd46be5
    • Sergei Petrunia's avatar
      MDEV-31194: Server crash or assertion failure with join_cache_level=4 · 2594da7a
      Sergei Petrunia authored
      The problem, introduced in patch for MDEV-26301:
      
      When check_join_cache_usage() decides not to use join buffer, it must
      adjust the access method accordingly. For BNL-H joins this means switching
      from pseudo-"ref access"(with index=MAX_KEY) to some other access method.
      
      Failing to do this will cause assertions down the line when code that is
      not aware of BNL-H will try to initialize index use for ref access with
      index=MAX_KEY.
      
      The fix is to follow the regular code path to disable the join buffer for
      the join_tab ("goto no_join_cache") instead of just returning from
      check_join_cache_usage().
      2594da7a
  5. 04 May, 2023 6 commits
  6. 03 May, 2023 6 commits
  7. 02 May, 2023 11 commits
    • Monty's avatar
      MDEV-6768 Wrong result with aggregate with join with no result set · 7f96dd50
      Monty authored
      When a query does implicit grouping and join operation produces an empty
      result set, a NULL-complemented row combination is generated.
      However, constant table fields still show non-NULL values.
      
      What happens in the is that end_send_group() is called with a
      const row but without any rows matching the WHERE clause.
      This last part is shown by 'join->first_record' not being set.
      
      This causes item->no_rows_in_result() to be called for all items to reset
      all sum functions to their initial state. However fields are not set
      to NULL.
      
      The used fix is to produce NULL-complemented records for constant tables
      as well. Also, reset the constant table's records back in case we're
      in a subquery which may get re-executed.
      An alternative fix would have item->no_rows_in_result() also work
      with Item_field objects.
      
      There is some other issues with the code:
      - join->no_rows_in_result_called is used but never set.
      - Tables that are used with group functions are not properly marked as
        maybe_null, which is required if the table rows should be regarded as
        null-complemented (not existing).
      - The code that tries to detect if mixed_implicit_grouping should be set
        didn't take into account all usage of fields and sum functions.
      - Item_func::restore_to_before_no_rows_in_result() called the wrong
        function.
      - join->clear() does not use a table_map argument to clear_tables(),
        which caused it to ignore constant tables.
      - unclear_tables() does not correctly restore status to what is
        was before clear_tables().
      
      Main bug fix was to always use a table_map argument to clear_tables() and
      always use join->clear() and clear_tables() together with unclear_tables().
      
      Other fixes:
      - Fixed Item_func::restore_to_before_no_rows_in_result()
      - Set 'join->no_rows_in_result_called' when no_rows_in_result_set()
        is called.
      - Removed not used argument from setup_end_select_func().
      - More code comments
      - Ensure that end_send_group() modifies the same fields as are in the
        result set.
      - Changed return_zero_rows() to use pointers instead of references,
        similar to the rest of the code.
      7f96dd50
    • Monty's avatar
      Fixed "Trying to lock uninitialized mutex' in parallel replication · 4f731757
      Monty authored
      The problem was that mutex_init() was called after the worker was
      put into the domain_hash, which allowed other threads to access it
      before mutex was initialized.
      4f731757
    • Monty's avatar
      MDEV-28054 Various crashes upon INSERT/UPDATE after changing Aria settings · 4cb0d43a
      Monty authored
      The cause of the crash was that test was setting
      aria_sort_buffer_size to MAX_LONG_LONG, which caused an overflow in
      my_malloc() when trying to allocate the buffer + 8 bytes.
      
      Fixed by reducing max size of sort_buffer for Aria and MyISAM
      
      Other things:
      - Added code in maria_repair_parallell() to not allocate a big sort buffer
        for small files.
      - Updated size of minumim sort buffer in Aria
      4cb0d43a
    • Monty's avatar
      MDEV-26258 Various crashes/asserts/corruptions when Aria encryption is... · 1ef22e28
      Monty authored
      MDEV-26258 Various crashes/asserts/corruptions when Aria encryption is enabled/used, but the encryption plugin is not loaded
      
      The reason for the MDEV reported failures is that the tests are enabling
      encryption for Aria but not providing any encryption keys.
      
      Fixed by checking if encryption keys exists before creating the table.
      
      Other things:
      - maria.encrypt_wrong-key changed as we now get the error on CREATE
        instead during insert.
      1ef22e28
    • Oleksandr Byelkin's avatar
      Merge branch '10.3' into 10.4 · 5597562a
      Oleksandr Byelkin authored
      5597562a
    • Oleksandr Byelkin's avatar
      New CC 3.1 · ca001cf2
      Oleksandr Byelkin authored
      ca001cf2
    • Oleksandr Byelkin's avatar
      1d15300b
    • Julius Goryavsky's avatar
      wsrep-lib external submodule update · c6ef9b1c
      Julius Goryavsky authored
      c6ef9b1c
    • Oleksandr Byelkin's avatar
      Merge branch '10.3' into 10.4 · edd0b03e
      Oleksandr Byelkin authored
      edd0b03e
    • Daniele Sciascia's avatar
      MDEV-30838 Assertion `m_thd == _current_thd()' · ef227762
      Daniele Sciascia authored
      - Update wsrep-lib which contains fix for the assertion
      - Fix error handling for appending fragment to streaming log,
        make sure tables are closed after rollback.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      ef227762
    • sara's avatar
      MDEV-30414 sporadic failures with galera var retry autocommit · 4e942bcd
      sara authored
      changed tast case 2 to be deterministic
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      4e942bcd
  8. 29 Apr, 2023 2 commits
  9. 28 Apr, 2023 4 commits
    • Angelique's avatar
      MDEV-30221: Move environmental macros to before master-slave · 1963a87b
      Angelique authored
      The fix was introduced, along with re-ordering to do other macros that check test environment capabilities before master/slave is set up.
      1963a87b
    • Sergei Petrunia's avatar
      MDEV-31067: selectivity_from_histogram >1.0 for a DOUBLE_PREC_HB histogram · 85cc8318
      Sergei Petrunia authored
      Variant #2.
      
      When Histogram::point_selectivity() sees that the point value of interest
      falls into one bucket, it tries to guess whether the bucket has many
      different (unpopular) values or a few popular values. (The number of
      rows is fixed, as it's a Height-balanced histogram).
      The basis for this guess is the "width" of the value range the bucket
      covers. Buckets covering wider value ranges are assumed to contain
      values with proportionally lower frequencies.
      
      This is just a [brave] guesswork. For a very narrow bucket, it may
      produce an estimate that's larger than total #rows in the bucket
      or even in the whole table.
      
      Remove the guesswork and replace it with basic logic: return
      either the per-table average selectivity of col=const, or selectivity
      of one bucket, whichever is lower.
      85cc8318
    • Sergei Golubchik's avatar
      MDEV-22756 SQL Error (1364): Field 'DB_ROW_HASH_1' doesn't have a default value · bc970573
      Sergei Golubchik authored
      exclude generated columns from the "has default value" check
      bc970573
    • Oleg Smirnov's avatar
      MDEV-31113 Server crashes in store_length /... · adbad5e3
      Oleg Smirnov authored
      MDEV-31113 Server crashes in store_length / Type_handler_string_result::make_sort_key with DISTINCT and group function
      
      Fix-up for commit 476b24d0
        Author: Monty
        Date:   Thu Feb 16 14:19:33 2023 +0200
          MDEV-20057 Distinct SUM on CROSS JOIN and grouped returns wrong result
      which misses initializing of sorder->suffix_length.
      In this commit the initialization is implemented by passing
      MY_ZEROFILL flag to the allocation of SORT_FIELD elements
      adbad5e3