1. 27 Oct, 2021 18 commits
  2. 26 Oct, 2021 22 commits
    • Eugene Kosov's avatar
      MDEV-18543 IMPORT TABLESPACE fails after instant DROP COLUMN · d74d9596
      Eugene Kosov authored
      ALTER TABLE IMPORT doesn't properly handle instant alter metadata.
      This patch makes IMPORT read, parse and apply instant alter metadata at the
      very beginning of operation. So, cases when source table has some metadata
      and destination table doesn't have it now works fine.
      
      DISCARD already removes instant metadata so importing normal table into
      instant table worked fine before this patch.
      
      decrypt_decompress(): decrypts and decompresses page if needed
      
      handle_instant_metadata(): this should be the first thing to read source
      table. Basically, it applies instant metadata to a destination
      dict_table_t object. This is the first thing to read FSP flags so
      all possible checks of it were moved to this function.
      
      PageConverter::update_index_page(): it doesn't now read instant metadata.
      This logic were moved into handle_instant_metadata()
      
      row_import::match_flags(): this is a first part row_import::match_schema().
      As a separate function it's used by handle_instant_metadata().
      
      fil_space_t::is_full_crc32_compressed(): added convenient function
      
      ha_innobase::discard_or_import_tablespace(): do not reload table definition
      to read instant metadata because handle_instant_metadata() does it better.
      The reverted code was originally added in
      4e7ee166
      
      ANONYMOUS_VAR: this is a handy thing to use along with make_scope_exit()
      
      full_crc32_import.test shows different results, because no
      dict_table_close() and dict_table_open_on_id() happens.
      Thus, SHOW CREATE TABLE shows a little bit older table definition.
      d74d9596
    • Rucha Deodhar's avatar
      MDEV-26844: DELETE returns ROW_NUMBER=1 for every row upon · 92f7d008
      Rucha Deodhar authored
      ER_TRUNCATED_WRONG_VALUE
      
      Part 1: Fix for DELETE without ORDER BY
      
      Analysis: m_current_row_for_warning doesn't increment and assumes default
      value which is then used by ROW_NUMBER.
      Fix: Increment m_current_row_for_warning for each processed row.
      92f7d008
    • Rucha Deodhar's avatar
      MDEV-26830: Wrong ROW_NUMBER in diagnostics upon INSERT IGNORE with · e13dc7d0
      Rucha Deodhar authored
      CHECK violation
      
      Analysis: When there is constraint fail we return non-zero value for
      view_check_option(). So we continue the loop which doesn't increment the
      counter because it increments at the end of the loop.
      Fix: Increment m_current_row_for_warning() at the beginning of loop. This
      will also fix similar bugs if any, about counter not incrementing
      correctly because of continue.
      e13dc7d0
    • Rucha Deodhar's avatar
      MDEV-26841: ROW_NUMBER is not set and differs from the message upon · 797bd73c
      Rucha Deodhar authored
      ER_WRONG_VALUE_COUNT_ON_ROW for the 1st row
      
      Analysis: Current row for warning does not increment for prepare phase
      Fix: Increment current row for warning if number of fields in the table and
      row values dont match and number of values in rows is greater than number
      of fields
      797bd73c
    • Rucha Deodhar's avatar
      MDEV-26842: ROW_NUMBER is not set and differs from the message upon... · 635be990
      Rucha Deodhar authored
      MDEV-26842: ROW_NUMBER is not set and differs from the message upon WARN_DATA_TRUNCATED produced by inplace ALTER
      
      Analysis: When row number is passed as parameter to set_warning() it is only
      used for error/warning text but m_current_row_for_warning is not updated.
      Hence default value of m_current_row_for_warning is assumed.
      Fix: update m_current_row_for_warning when error/warning occurs.
      635be990
    • Sergei Golubchik's avatar
      MDEV-26654 ROW_NUMBER is wrong upon INSERT into Federated table · 21d03cb0
      Sergei Golubchik authored
      just a test case
      21d03cb0
    • Sergei Golubchik's avatar
      MDEV-26693 ROW_NUMBER is wrong upon INSERT or UPDATE on Spider table · 5c0b6345
      Sergei Golubchik authored
      in case of a bulk insert the server sends all rows to the engine, and
      then the engine replies that there was ER_DUP_ENTRY somewhere.
      
      the exact number of the row that caused the error is unknown.
      5c0b6345
    • Sergei Golubchik's avatar
      9bbd3282
    • Sergei Golubchik's avatar
      refactor THD::raise_condition() family · b73b7365
      Sergei Golubchik authored
      to remove
      
      Sql_condition*
      raise_condition(const Sql_condition *cond)
      {
        Sql_condition *raised= raise_condition(cond->get_sql_errno(),
                                               cond->get_sqlstate(),
                                               cond->get_level(),
                                               *cond,
                                               cond->get_message_text());
        return raised;
      }
      b73b7365
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      the error should be on the second row, not the first · f845a983
      Sergei Golubchik authored
      otherwise how can we know that the row counter is incremented?
      f845a983
    • Rucha Deodhar's avatar
      MDEV-26832: ROW_NUMBER in SIGNAL/RESIGNAL causes a syntax error · ff5de38d
      Rucha Deodhar authored
      Analysis: Parser was missing ROW_NUMBER as syntax for SIGNAL and RESIGNAL.
      Fix: Fix parser and fix how m_row_number is copied like other attributes
      to avoid ROW_NUMBER from assuming default value.
      ff5de38d
    • Aleksey Midenkov's avatar
      MDEV-26767 Server crashes when rename table and alter storage engine · b15a5f6f
      Aleksey Midenkov authored
      Wrong assertion leftover removed. m_sql_cmd can be allocated by any
      ALTER subcommand and before allocation it is checked for NULL first.
      b15a5f6f
    • Aleksey Midenkov's avatar
      MDEV-22165 CONVERT TABLE: move in partition from existing table · 69724805
      Aleksey Midenkov authored
      Syntax for CONVERT TABLE
      
      ALTER TABLE tbl_name CONVERT TABLE tbl_name TO PARTITION partition_name partition_spec
      
      Examples:
      
          ALTER TABLE t1 CONVERT TABLE tp2 TO PARTITION p2 VALUES LESS THAN MAX_VALUE();
      
      New ALTER_PARTITION_CONVERT_IN command for
      fast_alter_partition_table() is done in alter_partition_convert_in()
      function which basically does ha_rename_table().
      
      Table structure and data check is basically the same as in EXCHANGE
      PARTITION command. And these are done by
      compare_table_with_partition() and check_table_data().
      
      Atomic DDL is done by the scheme from MDEV-22166 (see the
      corresponding commit message). The only differnce is that it also has
      to drop source table frm and that is done by WFRM_DROP_CONVERTED_FROM.
      
      Initial patch was done by Dmitry Shulga <dmitry.shulga@mariadb.com>
      69724805
    • Aleksey Midenkov's avatar
      Review and crash-safety fix · 7da721be
      Aleksey Midenkov authored
      7da721be
    • Sergei Golubchik's avatar
      42802452
    • Aleksey Midenkov's avatar
      MDEV-22166 CONVERT PARTITION: move out partition into a table · b7bba721
      Aleksey Midenkov authored
      Syntax for CONVERT keyword
      
      ALTER TABLE tbl_name
          [alter_option [, alter_option] ...] |
          [partition_options]
      
      partition_option: {
          ...
          | CONVERT PARTITION partition_name TO TABLE tbl_name
      }
      
      Examples:
      
          ALTER TABLE t1 CONVERT PARTITION p2 TO TABLE tp2;
      
      New ALTER_PARTITION_CONVERT_OUT command for
      fast_alter_partition_table() is done in alter_partition_convert_out()
      function which basically does ha_rename_table().
      
      Partition to extract is marked with the same flag as dropped
      partition: PART_TO_BE_DROPPED. Note that we cannot have multiple
      partitioning commands in one ALTER.
      
      For DDL logging basically the principle is the same as for other
      fast_alter_partition_table() commands. The only difference is that it
      integrates late Atomic DDL functions and introduces additional phase
      of WFRM_BACKUP_ORIGINAL. That is required for binlog consistency
      because otherwise we could not revert back after WFRM_INSTALL_SHADOW
      is done. And before DDL log is complete if we crash or fail the
      altered table will be already new but binlog will miss that ALTER
      command. Note that this is different from all other atomic DDL in that
      it rolls back until the ddl_log_complete() is done even if everything
      was done fully before the crash.
      
      Test cases added to:
      
        parts.alter_table \
        parts.partition_debug \
        versioning.partition \
        atomic.alter_partition
      b7bba721
    • Aleksey Midenkov's avatar
      MDEV-26471 Syntax extension: do not require PARTITION keyword in partition definition · f6b0e34c
      Aleksey Midenkov authored
      Instead of
      
        create or replace table t1 (x int)
        partition by range(x) (
          partition p1 values less than (10),
          partition pn values less than maxvalue);
      
      it should be possible to type in shorter form:
      
        create or replace table t1 (x int)
        partition by range(x) (
          p1 values less than (10),
          pn values less than maxvalue);
      
      As above examples demonstrate, make PARTITION keyword in partition
      definition optional.
      f6b0e34c
    • Dmitry Shulga's avatar
      MDEV-22165: Prerequisite patch that adds missing data member initializers in... · 379ddf49
      Dmitry Shulga authored
      MDEV-22165: Prerequisite patch that adds missing data member initializers in constructors of the class Alter_table_ctx
      
      Static analyzer built in Eclipse CDT complained about missing initializers in
      constructors of the class Alter_table_ctx so I've added them in order to
      eliminate annoying warnings.
      379ddf49
    • Aleksey Midenkov's avatar
      Vanilla cleanups and refactorings · d324c03d
      Aleksey Midenkov authored
      Dead code cleanup:
      
      part_info->num_parts usage was wrong and working incorrectly in
      mysql_drop_partitions() because num_parts is already updated in
      prep_alter_part_table(). We don't have to update part_info->partitions
      because part_info is destroyed at alter_partition_lock_handling().
      
      Cleanups:
      
      - DBUG_EVALUATE_IF() macro replaced by shorter form DBUG_IF();
      - Typo in ER_KEY_COLUMN_DOES_NOT_EXITS.
      
      Refactorings:
      
      - Splitted write_log_replace_delete_frm() into write_log_delete_frm()
        and write_log_replace_frm();
      - partition_info via DDL_LOG_STATE;
      - set_part_info_exec_log_entry() removed.
      
      DBUG_EVALUATE removed
      
      DBUG_EVALUTATE was only added for consistency together with
      DBUG_EVALUATE_IF. It is not used anywhere in the code.
      
      DBUG_SUICIDE() fix on release build
      
      On release DBUG_SUICIDE() was statement. It was wrong as
      DBUG_SUICIDE() is used in expression context.
      d324c03d
    • Aleksey Midenkov's avatar
      MDEV-25292 Better debug trace · 2dc3c320
      Aleksey Midenkov authored
      Improves readability of DDL log debug traces.
      2dc3c320
    • Alexander Barkov's avatar
      MDEV-26732 Assertion `0' failed in Item::val_native · 49098bfd
      Alexander Barkov authored
      Also fixes MDEV-24619 Wrong result or Assertion `0' in Item::val_native / Type_handler_inet6::Item_val_native_with_conversion
      
      Type_handler_inet6::create_item_copy() created a generic Item_copy_string,
      which does not implement val_native() - it has a dummy implementation
      with DBUG_ASSERT(0), which made the server crash.
      
      Fix:
      
      - Adding a new class Type_handler_inet6
        which implements val_native().
      - Fixing Type_handler_inet6::create_item_copy()
        to make Item_copy_inet6 instead of Item_copy_string.
      49098bfd