1. 20 Oct, 2023 3 commits
    • 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
  2. 19 Oct, 2023 3 commits
  3. 18 Oct, 2023 7 commits
  4. 17 Oct, 2023 7 commits
  5. 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
  6. 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
  7. 13 Oct, 2023 4 commits
  8. 12 Oct, 2023 4 commits
  9. 11 Oct, 2023 7 commits
    • Alexander Barkov's avatar
      MDEV-32249 strings/ctype-ucs2.c:2336: my_vsnprintf_utf32: Assertion `(n % 4)... · 6400b199
      Alexander Barkov authored
      MDEV-32249 strings/ctype-ucs2.c:2336: my_vsnprintf_utf32: Assertion `(n % 4) == 0' failed in my_vsnprintf_utf32 on INSERT
      
      The crash inside my_vsnprintf_utf32() happened correctly,
      because the caller methods:
        Field_string::sql_rpl_type()
        Field_varstring::sql_rpl_type()
      mis-used the charset library and sent pure ASCII data to the
      virtual function snprintf() of a utf32 CHARSET_INFO.
      
      It was wrong to use Field::charset() in sql_rpl_type().
      We're printing the metadata (the data type) here, not the column data.
      The string contraining the data type of a CHAR/VARCHAR column
      is a pure ASCII string.
      
      Fixing to use res->charset() to print, like all virtual implementations
      of sql_type() do.
      
      Review was done by Andrei Elkin.
      Thanks to Andrei for proposing MTR test improvents.
      6400b199
    • Marko Mäkelä's avatar
      MDEV-31890: Remove COMPILE_FLAGS · 3f1a2562
      Marko Mäkelä authored
      The cmake configuration step is single-threaded and already consuming
      too much time. We should not make it worse by adding invocations like
      MY_CHECK_CXX_COMPILER_FLAG().
      
      Let us prefer something that works on any supported version
      of GCC (4.8.5 or later) or clang, as well as recent versions
      of the Intel C compiler.
      
      This replaces commit 1fde7853
      3f1a2562
    • Sergei Golubchik's avatar
      MDEV-32024 disable failing test · 702dc2ec
      Sergei Golubchik authored
      702dc2ec
    • Sergei Golubchik's avatar
      MDEV-30658 fix failing test · 3e2b1295
      Sergei Golubchik authored
      followup for 96ae37ab
      3e2b1295
    • Sergei Golubchik's avatar
      fix groonga to compile with -Werror=enum-int-mismatch · 69089c71
      Sergei Golubchik authored
      gcc 13.2.1
      69089c71
    • Yuchen Pei's avatar
      MDEV-31996 Create connection on demand in spider_db_delete_all_rows · 2556fe1a
      Yuchen Pei authored
      When spider_db_delete_all_rows() is called, the supplied spider->conns
      may have already been freed. The existing mechanism has spider_trx own
      the connections in trx_conn_hash and it may free a conn during the
      cleanup after a query. When running a delete query and if the table is
      in the table cache, ha_spider::open() would not be called which would
      recreate the conn. So we recreate the conn when necessary during
      delete by calling spider_check_trx_and_get_conn().
      
      We also reduce code duplication as delete_all_rows() and truncate()
      has almost identical code, and there's no need to assign
      wide_handler->sql_command in these functions because it has already
      been correctly assigned.
      2556fe1a
    • Vladislav Vaintroub's avatar