1. 23 Oct, 2023 13 commits
    • Alexander Barkov's avatar
      MDEV-31184 Remove parser tokens DECODE_MARIADB_SYM and DECODE_ORACLE_SYM · 09e23708
      Alexander Barkov authored
      Changing the code handling sql_mode-dependent function DECODE():
      
      - removing parser tokens DECODE_MARIADB_SYM and DECODE_ORACLE_SYM
      - removing the DECODE() related code from sql_yacc.yy/sql_yacc_ora.yy
      - adding handling of DECODE() with help of a new Create_func_func_decode
      09e23708
    • Brandon Nesterenko's avatar
      MDEV-32265: seconds_behind_master is inaccurate for Delayed replication · c5f776e9
      Brandon Nesterenko authored
      If a replica is actively delaying a transaction when restarted (STOP
      SLAVE/START SLAVE), when the sql thread is back up,
      Seconds_Behind_Master will present as 0 until the configured
      MASTER_DELAY has passed. That is, before the restart,
      last_master_timestamp is updated to the timestamp of the delayed
      event. Then after the restart, the negation of sql_thread_caught_up
      is skipped because the timestamp of the event has already been used
      for the last_master_timestamp, and their update is grouped together
      in the same conditional block.
      
      This patch fixes this by separating the negation of
      sql_thread_caught_up out of the timestamp-dependent block, so it is
      called any time an idle parallel slave queues an event to a worker.
      
      Note that sql_thread_caught_up is still left in the check for internal
      events, as SBM should remain idle in such case to not "magically" begin
      incrementing.
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      c5f776e9
    • Sergei Golubchik's avatar
      remove ./mtr --skip-im · 95177551
      Sergei Golubchik authored
      it did nothing for 14 years
      95177551
    • Sergei Golubchik's avatar
      ./mtr --skip-not-found · 78cd45b2
      Sergei Golubchik authored
      New mtr option --skip-not-found makes it to show not found tests
      as skipped
      
      main.a                                   [ skipped ]  not found
      
      (but only if the test was specified with the suite name)
      and not error out early with
      
      mysql-test-run: *** ERROR: Could not find 'a' in 'main' suite
      
      This is useful in buildbot, on builders that generate the list
      of tests dynamically.
      78cd45b2
    • Sergei Golubchik's avatar
      MDEV-32541 Assertion `!(thd->server_status & (1U | 8192U))' failed in... · b00fd50f
      Sergei Golubchik authored
      MDEV-32541 Assertion `!(thd->server_status & (1U | 8192U))' failed in MDL_context::release_transactional_locks
      
      SERVER_STATUS_IN_TRANS_READONLY should never be set without
      SERVER_STATUS_IN_TRANS.
      
      They're set together, must be removed together.
      b00fd50f
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      MDEV-32500 Information schema leaks table names and structure to unauthorized users · 547dfc0e
      Sergei Golubchik authored
      standard table KEY_COLUMN_USAGE should only show keys where
      a user has some privileges on every column of the key
      
      standard table TABLE_CONSTRAINTS should show tables where
      a user has any non-SELECT privilege on the table or on any column
      of the table
      
      standard table REFERENTIAL_CONSTRAINTS is defined in terms of
      TABLE_CONSTRAINTS, so the same rule applies. If the user
      has no rights to see the REFERENCED_TABLE_NAME value, it should be NULL
      
      SHOW INDEX (and STATISTICS table) is non-standard, but it seems
      reasonable to use the same logic as for KEY_COLUMN_USAGE.
      547dfc0e
    • Sergei Golubchik's avatar
      2eee0e9b
    • Andrei's avatar
      MDEV-31792 Assertion fails in MDL_context::acquire_lock upon parallel... · 1fe4a71b
      Andrei authored
      MDEV-31792 Assertion fails in MDL_context::acquire_lock upon parallel replication of CREATE SEQUENCE
      
      The assert's reason was in missed FL_DDL flagging of CREATE-or-REPLACE
      Query event.
      MDEV-27365 fixes covered only the non-pre-existing table execution branch so
      did not see a possibility of implicit commit in
      the middle of execution in a rollback branch when the being CREATEd
      sequence table is actually replaced.
      The pre-existing table branch cleared the DDL modification
      flag so the query lost FL_DDL in binlog and its parallel execution
      on slave may have ended up with the assert to indicate the query
      is raced by a following in binlog order event.
      
      Fixed with applying the MDEV-27365 pattern.
      An mtr test is added to cover the rollback situation.
      The description test [ pass ] with a generous number of mtr parallel
      reties.
      1fe4a71b
    • Oleksandr Byelkin's avatar
      New CC v3.1 · 5ca941ca
      Oleksandr Byelkin authored
      5ca941ca
    • Alexander Barkov's avatar
      d2d657e7
    • Anthony Ryan's avatar
      MDEV-29914: Fix maridab-upgrade when sql_safe_updates = on is set in my.cnf · babd8336
      Anthony Ryan authored
      Tested multiple major version upgrades with sql_safe_updates enabled, and
      confirmed the issue is resolved.
      
      Reviewer: Daniel Black
      babd8336
    • Alexander Barkov's avatar
      MDEV-32025 Crashes in MDL_key::mdl_key_init with lower-case-table-names=2 · 179424db
      Alexander Barkov authored
      Backporting a part of MDEV-32026 (which also fixed MDEV-32025 in 11.3)
      from 11.3 to 10.4.
      
      The reported crash happened with --lower-case-table-names=2
      on statements like:
      
      ALTER DATABASE Db1 DEFAULT CHARACTER SET utf8;
      ALTER DATABASE `#mysql50#D+b1` UPGRADE DATA DIRECTORY NAME;
      
      lock_schema_name() expects a normalized database name
      and assert if a non-normalized name comes.
      
      mysql_alter_db_internal() and mysql_upgrade_db() get
      a non-normalized database name in the parameter.
      Fixing them to normalize the database name before passing
      it to lock_schema_name().
      179424db
  2. 21 Oct, 2023 1 commit
    • Jan Lindström's avatar
      MDEV-32024 : Galera library 26.4.16 fails with every server version · e913f4e1
      Jan Lindström authored
      Problem was that total order isolation (TOI) is started before
      we know sequence implementing storage engine. This led to
      situation where table implementing persistent storate
      for sequence in case of MyISAM was created on applier causing
      errors later in test execution.
      
      Therefore, in both CREATE SEQUENCE and ALTER TABLE to implementing
      persistent storage we need to check implementing storage engine
      after open_tables and this check must be done in both master
      and applier, because if implementing storage engine is MyISAM
      it does not support rollback.
      
      Added tests to make sure that if sequence implementing storage
      engine is MyISAM or we try to alter it to MyISAM user gets error
      and changes are not replicated.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      e913f4e1
  3. 20 Oct, 2023 4 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-32527 Server aborts during alter operation when table doesn't have foreign index · 7d89dcf1
      Thirunarayanan Balathandayuthapani authored
      Problem:
      ========
      InnoDB fails to find the foreign key index for the
      foreign key relation in the table while iterating the
      foreign key constraints during alter operation. This is
      caused by commit 5f09b53b
      (MDEV-31086).
      
      Fix:
      ====
      In check_col_is_in_fk_indexes(), while iterating through
      the foreign key relationship, InnoDB should consider that
      foreign key relation may not have foreign index when
      foreign key check is disabled.
      7d89dcf1
    • Marko Mäkelä's avatar
      186ac474
    • Daniel Black's avatar
      MDEV-32018 Allow the setting of Auto_increment on FK referenced columns · 1182451a
      Daniel Black authored
      In MDEV-31086, SET FOREIGN_KEY_CHECKS=0 cannot bypass checks that
      make column types of foreign keys incompatible. An unfortunate
      consequence is that adding an AUTO_INCREMENT is considered
      incompatible in Field_{num,decimal}::is_equal and for the purpose
      of FK checks this isn't relevant.
      
      innodb.foreign_key - pragmaticly left wait_until_count_sessions.inc at
      end of test to match the second line of test.
      
      Reporter: horrockss@github - https://github.com/MariaDB/mariadb-docker/issues/528
      Co-Author: Marko Mäkelä <marko.makela@mariadb.com>
      Reviewer: Nikita Malyavin
      
      For the future reader this was attempted:
      
      Removing AUTO_INCREMENT checks from Field_{num,decimal}::is_equals
      failed in the following locations (noted for future fixing):
      * MyISAM and Aria (not InnoDB) don't adjust AUTO_INCREMENT next number
        correctly, hence added a test to main.auto_increment to catch
        the next person that attempts this fix.
      * InnoDB must perform an ALGORITHM=COPY to populate NULL values of
        an original table (MDEV-19190 mtr test period.copy), this requires
        ALTER_STORED_COLUMN_TYPE to be set in fill_alter_inplace_info
        which doesn't get hit because field->is_equal is true.
      * InnoDB must not perform the change inplace (below patch)
      * innodb.innodb-alter-timestamp main.partition_innodb test would
        also need futher investigation.
      
      InnoDB ha_innobase::check_if_supported_inplace_alter to support the
      removal of Field_{num,decimal}::is_equal AUTO_INCREMENT checks would need the following change
      
      diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
      index a5ccb1957f3..9d778e2d39a 100644
      --- a/storage/innobase/handler/handler0alter.cc
      +++ b/storage/innobase/handler/handler0alter.cc
      @@ -2455,10 +2455,15 @@ ha_innobase::check_if_supported_inplace_alter(
                              /* An AUTO_INCREMENT attribute can only
                              be added to an existing column by ALGORITHM=COPY,
                              but we can remove the attribute. */
      -                       ut_ad((MTYP_TYPENR((*af)->unireg_check)
      -                              != Field::NEXT_NUMBER)
      -                             || (MTYP_TYPENR(f->unireg_check)
      -                                 == Field::NEXT_NUMBER));
      +                       if ((MTYP_TYPENR((*af)->unireg_check)
      +                              == Field::NEXT_NUMBER)
      +                             && (MTYP_TYPENR(f->unireg_check)
      +                                 != Field::NEXT_NUMBER))
      +                       {
      +                               ha_alter_info->unsupported_reason = my_get_err_msg(
      +                                       ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC);
      +                               DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
      +                       }
      
      With this change the main.auto_increment test for bug #14573, under
      innodb, will pass without the 2 --error ER_DUP_ENTRY entries.
      
      The function header comment was updated to reflect the MDEV-31086
      changes.
      1182451a
    • Daniel Black's avatar
      MDEV-16641: mysql_client_test now stable · 4f534657
      Daniel Black authored
      10.6+ already unmasked.
      Tested on 10.4 and 10.5 and passes on all 3 tests now occur with
      particular attention to the causing MDEVs:
      
      - MDEV-19511 Big endian issue in libmariadb
        -  has been resolved;
      - CONC-208 Client tests (main.mysql_client_test, main.mysql_client_test_nonblock, main.mysql_client_test_comp) fail in buildbot on Power
        - observed passing in 10.5
      - MDEV-19369 main.mysql_client_test, main.mysql_client_test_comp failed on ASAN build with error: 5888, status: 23, errno: 2
        - passing on ASAN builder
      4f534657
  4. 19 Oct, 2023 3 commits
  5. 18 Oct, 2023 7 commits
  6. 17 Oct, 2023 7 commits
  7. 16 Oct, 2023 4 commits
    • Igor Babaev's avatar
      MDEV-32064 Crash when searching for the best split of derived table · b1c8ea83
      Igor Babaev authored
      This bug could affect queries with IN subqueries in WHERE clause and using
      derived tables to which split optimization potentially could be applied.
      
      When looking for the best split of a splittable derived table T any key
      access from a semi-join materialized table used for lookups S to table T
      must be excluded from consideration because in the current implementation
      of such tables as S the values from its records cannot be used to access
      other tables.
      
      Approved by Oleksandr Byelkin <sanja@mariadb.com>
      b1c8ea83
    • Sergei Petrunia's avatar
      Revert accidentally pushed: commit e8c9cdc2 · 0ca699bf
      Sergei Petrunia authored
      Author: Sergei Petrunia <sergey@mariadb.com>
      Date:   Wed Oct 11 19:02:25 2023 +0300
      
          MDEV-32301: Server crashes at Arg_comparator::compare_row
      
          In  Item_bool_rowready_func2::build_clone(): if we're setting
            clone->cmp.comparators=0
          also set
            const_item_cache=0
          as the Item is currently in a state where one cannot compute it.
      0ca699bf
    • Sergei Petrunia's avatar
      MDEV-32324: Server crashes inside filesort at my_decimal::to_binary · 208ed0d8
      Sergei Petrunia authored
      A subquery in form "(SELECT not_null_value LIMIT 1 OFFSET 1)" will
      produce no rows which will translate into scalar SQL NULL value.
      
      The code in Item_singlerow_subselect::fix_length_and_dec() failed to
      take the LIMIT/OFFSET clause into account and used to set
      item_subselect->maybe_null=0, despite that SQL NULL will be produced.
      
      If such subselect was used in ORDER BY, this would cause a crash in
      filesort() code when it would get a NULL value for a not-nullable item.
      
      also made subselect_engine::no_tables() const function.
      208ed0d8
    • Sergei Petrunia's avatar
      MDEV-32301: Server crashes at Arg_comparator::compare_row · e8c9cdc2
      Sergei Petrunia authored
      In  Item_bool_rowready_func2::build_clone(): if we're setting
        clone->cmp.comparators=0
      also set
        const_item_cache=0
      as the Item is currently in a state where one cannot compute it.
      e8c9cdc2
  8. 15 Oct, 2023 1 commit
    • Sergei Petrunia's avatar
      MDEV-32320: Server crashes at TABLE::add_tmp_key · c8866892
      Sergei Petrunia authored
      The code inside Item_subselect::fix_fields() could fail to check
      that left expression had an Item_row, like this:
      
        (('x', 1.0) ,1) IN (SELECT 'x', 1.23 FROM ... UNION ...)
      
      In order to hit the failure, the first SELECT of the subquery had
      to be a degenerate no-tables select. In this case, execution will
      not enter into Item_in_subselect::create_row_in_to_exists_cond()
      and will not check if left_expr is composed of scalars.
      
      But the subquery is a UNION so as a whole it is not degenerate.
      We try to create an expression cache for the subquery.
      We create a temp.table from left_expr columns. No field is created
      for the Item_row. Then, we crash when trying to add an index over a
      non-existent field.
      
      Fixed by moving the left_expr cardinality check to a point in
      check_and_do_in_subquery_rewrites() which gets executed for all
      cases.
      It's better to make the check early so we don't have to care about
      subquery rewrite code hitting Item_row in left_expr.
      c8866892