1. 20 Jul, 2023 4 commits
    • Dmitry Shulga's avatar
      MDEV-5816: Stored programs: validation of stored program statements · 9f34225e
      Dmitry Shulga authored
      This is the prerequisite patch to remove the data member
      sp_head::m_trg_table_fields and the method is_fields_updated_in_trigger
      that used it but is not called anywhere in the source code.
      
      The commit 5f1f2fc0 introduced the
      data member sp_head::m_trg_table_fields and the method
      Table_triggers_list::is_fields_updated_in_trigger() that used this data member.
      
      The method Table_triggers_list::is_fields_updated_in_trigger() was invoked
      by the method partition_info::can_prune_insert() also introduced by
      the same commit 5f1f2fc0
      
      The method partition_info::can_prune_insert() is not called anywhere
      in the code and later these  methods were removed from the source code
      but the data member sp_head::m_trg_table_fields wasn't.
      So, remove the data member sp_head::m_trg_table_fields and declaration of
      the method is_fields_updated_in_trigger() for purpose of code cleaning up.
      9f34225e
    • Dmitry Shulga's avatar
      MDEV-5816: Stored programs: validation of stored program statements · 9e48460b
      Dmitry Shulga authored
      This is the prerequisite patch to move the sp_instr class and classes derived
      from it into the files sp_instr.cc/sp_instr.h. The classes sp_lex_cursor and
      sp_lex_keeper are also moved to the files files sp_instr.cc/sp_instr.h.
      
      Additionally,
        * all occurrences of macroses NULL, FALSE, TRUE are replaced
          with the corresponding C++ keywords nullptr, false, true.
        * the keyword 'override' is added in and the keyword 'virtual' is removed
          from signatures of every virtual method implemented in classes derived
          from the base class sp_instr.
        * the keyword 'final' is added into declaration of the class sp_lex_keeper
          since this class shouldn't have a derived class by design.
        * the function cmp_rqp_locations is made static since it is not called
          outside the file sp_instr.cc.
        * the function subst_spvars() is moved into the file sp_instr.cc since this
          function used only by the method sp_instr_stmt::execute
      9e48460b
    • Dmitry Shulga's avatar
      MDEV-5816: Stored programs: validation of stored program statements · 053475fe
      Dmitry Shulga authored
      This is the prerequisite patch to make interface of the class
      Reprepare_observer more similar to the one used by MySQL.
      
      This patch adds the method can_retry() to the class Reprepare_observer
      that returns true in case max. number of attempts to re-run a failing
      statement is not yet reached. To control the number of re-run attempts
      already done the data member m_attempt has been introduced. Doing this way,
      we encapsulate activity with incrementing a counter on every statement
      run and checking whether it reaches a limit or not inside implementation
      of the class Reprepare_observer instead duplicating such boiler plate code
      in every place where controlling for reaching a limit of max. number attempts
      for re-running failed statement is required.
      053475fe
    • Nicholas Othieno's avatar
      A procedure and script to speed up translation of MariaDB error messages to a new language · c5405c07
      Nicholas Othieno authored
      Instructions and a script to help speed up language translations
      for MariaDB are provided. The README.md provides instructions of
      a recommended workflow that involves:
      
      - Extracting the English language entries in the file
      errmsg-utf8.txt
      - Using online tools to do automatic translation.
      - Proof-reading the automatic translations.
      - Running the script insert_translations_into_errmsg.py that
      will take the original errmsg-utf8.txt file, the extracted
      english translations file and the new language translations
      file and generate a new file errmsg-utf8-with-new-language.txt
      that is a copy of errmsg-utf8.txt but with the new language
      entries inserted into it at the correct positions.
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the
      BSD-new license. I am contributing on behalf of my employer Amazon Web
      Services, Inc.
      c5405c07
  2. 17 Jul, 2023 1 commit
    • Alexander Barkov's avatar
      MDEV-30164 System variable for default collations · 75f25e4c
      Alexander Barkov authored
      This patch adds a way to override default collations
      (or "character set collations") for desired character sets.
      
      The SQL standard says:
      > Each collation known in an SQL-environment is applicable to one
      > or more character sets, and for each character set, one or more
      > collations are applicable to it, one of which is associated with
      > it as its character set collation.
      
      In MariaDB, character set collations has been hard-coded so far,
      e.g. utf8mb4_general_ci has been a hard-coded character set collation
      for utf8mb4.
      
      This patch allows to override (globally per server, or per session)
      character set collations, so for example, uca1400_ai_ci can be set as a
      character set collation for Unicode character sets
      (instead of compiled xxx_general_ci).
      
      The array of overridden character set collations is stored in a new
      (session and global) system variable @@character_set_collations and
      can be set as a comma separated list of charset=collation pairs, e.g.:
      
      SET @@character_set_collations='utf8mb3=uca1400_ai_ci,utf8mb4=uca1400_ai_ci';
      
      The variable is empty by default, which mean use the hard-coded
      character set collations (e.g. utf8mb4_general_ci for utf8mb4).
      
      The variable can also be set globally by passing to the server startup command
      line, and/or in my.cnf.
      75f25e4c
  3. 12 Jul, 2023 1 commit
    • Andrew Hutchings's avatar
      MDEV-15736 Remove mariadb-admin --vertical · 584c2351
      Andrew Hutchings authored
      The `--vertical` option does not appear to behave as documented and
      research shows it never appears to have behaved as intended.
      
      As this appears to be a completely unused feature, let's remove it.
      584c2351
  4. 06 Jul, 2023 1 commit
  5. 05 Jul, 2023 1 commit
    • Robin Newhouse's avatar
      Implement mysql_upgrade upgrade testing in CI · a63c558b
      Robin Newhouse authored
      Performs an upgrade of mariadb from an earlier version to the rpms built
      in CI. Then checks whether log contains evidence of upgrade in the form
      of "Needs upgrade" or "Table rebuild required". Designed to check minor
      version upgrades which should not trigger rebuilds.
      
      The test is written in bash script so it can be executed from other CI
      systems.
      
      $ test_upgrade.sh source_version target_version
      $ test_upgrade.sh source_version # defaults to rpm/
      $ test_upgrade.sh source_version --rpm-dir <directory>
      
      Binaries must be created with performance schema enabled, or
      mysql_upgrade complains about missing tables.
      
      Upgrade testing is parallelized with a "matrix" of source versions.
      Others can be introduced later.
      
      This was partially designed to catch issues like that seen in
      https://jira.mariadb.org/browse/MDEV-28727 where a minor version upgrade
      (e.g. 10.4.8 -> 10.4.26) triggered a system table rebuild.
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the
      BSD-new license. I am contributing on behalf of my employer
      Amazon Web Services, Inc.
      a63c558b
  6. 04 Jul, 2023 8 commits
    • Yuchen Pei's avatar
      MDEV-26137 Improve import tablespace workflow. · 9b431d71
      Yuchen Pei authored
      Allow ALTER TABLE ... IMPORT TABLESPACE without creating the table
      followed by discarding the tablespace.
      
      That is, assuming we want to import table t1 to t2, instead of
      
      CREATE TABLE t2 LIKE t1;
      ALTER TABLE t2 DISCARD TABLESPACE;
      FLUSH TABLES t1 FOR EXPORT;
      --copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t2.cfg
      --copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
      UNLOCK TABLES;
      ALTER TABLE t2 IMPORT TABLESPACE;
      
      We can simply do
      
      FLUSH TABLES t1 FOR EXPORT;
      --copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t2.cfg
      --copy_file $MYSQLD_DATADIR/test/t1.frm $MYSQLD_DATADIR/test/t2.frm
      --copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
      UNLOCK TABLES;
      ALTER TABLE t2 IMPORT TABLESPACE;
      
      We achieve this by creating a "stub" table in the second scenario
      while opening the table, where t2 does not exist but needs to import
      from t1. The "stub" table is similar to a table that is created but
      then instructed to discard its tablespace.
      
      We include tests with various row formats, encryption, with indexes
      and auto-increment.
      9b431d71
    • Marko Mäkelä's avatar
      Merge 11.1 into 11.2 · b7ee3c7b
      Marko Mäkelä authored
      b7ee3c7b
    • Marko Mäkelä's avatar
      Merge 11.0 into 11.1 · cee9b3b8
      Marko Mäkelä authored
      cee9b3b8
    • Marko Mäkelä's avatar
      Merge 10.11 into 11.0 · a906046f
      Marko Mäkelä authored
      a906046f
    • Marko Mäkelä's avatar
      Merge 10.10 into 10.11 · 3430767e
      Marko Mäkelä authored
      3430767e
    • Marko Mäkelä's avatar
      Merge 10.9 into 10.10 · c2d55235
      Marko Mäkelä authored
      c2d55235
    • Nicholas Othieno's avatar
      MDEV-31530 Localizations for Swahili language · c054a628
      Nicholas Othieno authored
      Kenyan Swahili is enabled for error messages as well as datetime.
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the
      BSD-new license. I am contributing on behalf of my employer Amazon Web
      Services, Inc.
      c054a628
    • Yuchen Pei's avatar
      MDEV-31463 [fixup] Spider: error code in mdev_31463.test · a9e13866
      Yuchen Pei authored
      The error code is non-deterministic, presumably due to some race
      condition from the SLEEP statement above. The correct error should be
      12701 ER_SPIDER_REMOTE_SERVER_GONE_AWAY_NUM as it is the last failure.
      Nevertheless, this contrived test is needed to cover the error
      reporting when setting lock wait timeout, until we find a better test
      case and/or fixing the non-deterministic error reporting (MDEV-31586)
      a9e13866
  7. 03 Jul, 2023 4 commits
  8. 02 Jul, 2023 3 commits
    • Trevor Gross's avatar
      Fix encryption calls with overlapping buffers · 941f91ed
      Trevor Gross authored
      Allocate a temporary buffer instead of using the same buffer in some
      cases, and add assertions to verify the buffers do not overlap. See [1]
      for reasonsing.
      
      [1] https://github.com/MariaDB/server/pull/2438#discussion_r1137403645Signed-off-by: default avatarTrevor Gross <tmgross@umich.edu>
      941f91ed
    • Trevor Gross's avatar
      MDEV-30389 Ensure correct dlen during encryption · 17a32c3b
      Trevor Gross authored
      This patch ensures that all direct and indirect calls to
      encryption_crypt provide a `dlen` value correctly initialized to the
      destination buffer length, allowing encryption plugins to verify
      available space. It also adds assertions to verify related invariants.
      Signed-off-by: default avatarTrevor Gross <tmgross@umich.edu>
      17a32c3b
    • Sergei Golubchik's avatar
      MDEV-29827 collateral cleanup · 279b0db8
      Sergei Golubchik authored
      * removed universal suppression of everything "Event Schedule" everywhere
      * added suppressions in tests as needed
      * moved events test to the events suite
      * renamed -master.opt -> .opt
      * added standard test header
      * verified in the test that the error, indeed, was written into the log
      * removed useless suppressions
      * removed ER_EVENTS_NO_ACL, replaced with ER_OPTION_PREVENTS_STATEMENT
      * fixed error message to say exactly what option disabled event scheduler
        instead of "this or that or that, you figure it out"
      * also fixed old message for SET event_scheduler=
        (it was also non-translatable)
      * changed to use sql_print_error() when an error is not sent to the user
      * removed duplicate hard-coded error message
      279b0db8
  9. 30 Jun, 2023 4 commits
    • Marko Mäkelä's avatar
      MDEV-31559 btr_search_hash_table_validate() does not check if CHECK TABLE is killed · 3d901438
      Marko Mäkelä authored
      btr_search_hash_table_validate(), btr_search_validate(): Add the
      parameter THD for checking if the statement has been killed.
      Any non-QUICK CHECK TABLE will validate the entire adaptive hash index
      for all InnoDB tables, which may be extremely slow when running
      multiple concurrent CHECK TABLE.
      3d901438
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.9 · d04de1aa
      Marko Mäkelä authored
      d04de1aa
    • Oleg Smirnov's avatar
      MDEV-30639 Upgrade to 10.8 and later does not work on Windows · 6d911219
      Oleg Smirnov authored
      During the upgrade procedure on Windows mysqld.exe is started with
      the named pipe connection protocol. mysqladmin.exe then pings the
      server to check if is up and running. Command line looks like:
         mysqladmin.exe --protocol=pipe --socket=mysql_upgrade_service_xxx ping
      But the "socket" parameter resets the "protocol" which was previously
      initialized with the "pipe" value, setting it to "socket".
      As a result, connection cannot be established and the upgrade
      procedure fails.
      "socket" in Windows is used to pass the name of the pipe so resetting
      the protocol is not valid in this case.
      
      This commit fixes resetting of the "protocol" parameter with "socket"
      parameter in the case when protocol has been previously initialized
      to "pipe" value
      6d911219
    • Oleg Smirnov's avatar
      MDEV-30828 Prevent pushing down unions with incorrect ORDER BY · d6c6102c
      Oleg Smirnov authored
      Fake_select_lex->join was prepared at the unit execution stage so
      the validation of fake_select_lex before the unit pushdown
      was incomplete. That caused pushing down of statements having
      an incorrect ORDER BY clause.
      This commit moves preparation of the fake_select_lex->join to the unit
      prepare() method, before initializing of the pushdown handler,
      so incorrect clauses error out before being pushed down
      d6c6102c
  10. 29 Jun, 2023 1 commit
    • Oleg Smirnov's avatar
      MDEV-30639 Upgrade to 10.8 and later does not work on Windows · 8e2b20bf
      Oleg Smirnov authored
      During the upgrade procedure on Windows mysqld.exe is started with
      the named pipe connection protocol. mysqladmin.exe then pings the
      server to check if is up and running. Command line looks like:
         mysqladmin.exe --protocol=pipe --socket=mysql_upgrade_service_xxx ping
      But the "socket" parameter resets the "protocol" which was previously
      initialized with the "pipe" value, setting it to "socket".
      As a result, connection cannot be established and the upgrade
      procedure fails.
      "socket" in Windows is used to pass the name of the pipe so resetting
      the protocol is not valid in this case.
      
      This commit fixes resetting of the "protocol" parameter with "socket"
      parameter in the case when protocol has been previously initialized
      to "pipe" value
      8e2b20bf
  11. 28 Jun, 2023 8 commits
    • Sergei Petrunia's avatar
      MDEV-31573: rocksdb.group_min_max test fails · cd39f4ab
      Sergei Petrunia authored
      Set the histogram_type to be DOUBLE_PREC_HB as
      it originally was.
      cd39f4ab
    • Vlad Lesin's avatar
      MDEV-31570 gap_lock_split.test hangs sporadically · 3e89b4fc
      Vlad Lesin authored
      The fix is in replacing the waiting for the whole purge finishing
      with the the waiting for only delete-marked records purging finishing.
      
      Reviewed by: Marko Mäkelä
      3e89b4fc
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-31537 Bulk insert operation aborts the server for redundant table · 73f78fb3
      Thirunarayanan Balathandayuthapani authored
      - InnoDB bulk insert operation aborts the server for redundant
      table. InnoDB miscalculates the record size in temporary file
      for the redundant table. CHAR in redundant row format table
      always fixed length, but in temporary file, it is variable-length
      for variable-length character sets.
      73f78fb3
    • Vlad Lesin's avatar
      MDEV-30648 btr_estimate_n_rows_in_range() accesses unfixed, unlatched page · 687fd6be
      Vlad Lesin authored
      The issue is caused by MDEV-30400 fix.
      
      There are two cursors in btr_estimate_n_rows_in_range() - p1 and p2, but
      both share the same mtr. Each cursor contains mtr savepoint for the
      previously fetched block to release it then the current block is
      fetched.
      
      Before MDEV-30400 the block was released with
      mtr_t::release_block_at_savepoint(), it just unfixed a block and
      released its page patch. In MDEV-30400 it was replaced with
      mtr_t::rollback_to_savepoint(), which does the same as the former
      mtr_t::release_block_at_savepoint(ulint begin, ulint end) but also
      erases the corresponding slots from mtr memo, what invalidates any
      stored mtr's memo savepoints, greater or equal to "begin".
      
      The idea of the fix is to get rid of savepoints at all in
      btr_estimate_n_rows_in_range() and
      btr_estimate_n_rows_in_range_on_level(). As
      mtr_t::rollback_to_savepoint() erases elements from mtr_t::m_memo, we
      know what element of mtr_t::m_memo can be deleted on the certain case,
      so there is no need to store savepoints.
      
      See also the following slides for details:
      https://docs.google.com/presentation/d/1RFYBo7EUhM22ab3GOYctv3j_3yC0vHtBY9auObZec8U
      
      Reviewed by: Marko Mäkelä
      687fd6be
    • Marko Mäkelä's avatar
      Merge 11.1 into 11.2 · 2867894a
      Marko Mäkelä authored
      2867894a
    • Marko Mäkelä's avatar
      Merge 11.0 into 11.1 · 8290a46d
      Marko Mäkelä authored
      8290a46d
    • Marko Mäkelä's avatar
      Merge 10.11 into 11.0 · 1fe4bcbe
      Marko Mäkelä authored
      1fe4bcbe
    • Yuchen Pei's avatar
      MDEV-31463 Spider should check connection before setting lock wait timeout · 5ef27d27
      Yuchen Pei authored
      When setting the server lockwait timeout, spider should do some basic
      checks first, like whether the remote server is still reachable. So
      instead of directly calling spider_db_mbase::exec_query(), it should
      call spider_db_query().
      
      The reset of the lock wait timeout does not need to do such checks,
      because they happen after the successfully setting the lock wait
      timeout, implying the checks have been passed already.
      5ef27d27
  12. 27 Jun, 2023 4 commits