1. 31 Jan, 2024 4 commits
  2. 30 Jan, 2024 2 commits
    • Oleksandr Byelkin's avatar
      workaround for MDEV-33218 · 908c9cf9
      Oleksandr Byelkin authored
      908c9cf9
    • Brandon Nesterenko's avatar
      MDEV-33327: rpl_seconds_behind_master_spike Sensitive to IO Thread Stop Position · c75905ca
      Brandon Nesterenko authored
      rpl.rpl_seconds_behind_master_spike uses the DEBUG_SYNC mechanism to
      count how many format descriptor events (FDEs) have been executed,
      to attempt to pause on a specific relay log FDE after executing
      transactions. However, depending on when the IO thread is stopped,
      it can send an extra FDE before sending the transactions, forcing
      the test to pause before executing any transactions, resulting in a
      table not existing, that is attempted to be read for COUNT.
      
      This patch fixes this by no longer counting FDEs, but rather by
      programmatically waiting until the SQL thread has executed the
      transaction and then automatically activating the DEBUG_SYNC point
      to trigger at the next relay log FDE.
      c75905ca
  3. 26 Jan, 2024 2 commits
    • Brandon Nesterenko's avatar
      MDEV-27850: rpl_seconds_behind_master_spike debug_sync fix · 112eb14f
      Brandon Nesterenko authored
      A debug_sync signal could remain for the SQL thread that should have begun
      a wait_for upon seeing a GTID event, but would instead see the old signal
      and continue on without waiting. This broke an "idle" condition in
      SHOW SLAVE STATUS
      which should have automatically negated Seconds_Behind_Master. Instead,
      because the SQL thread had already processed the GTID event, it set
      sql_thread_caught_up to false, and thereby calculated the value of
      Seconds_behind_master, when the test expected 0.
      
      This patch fixes this by resetting the debug_sync state before creating a
      new transaction which sends a GTID event to the replica
      112eb14f
    • Vladislav Vaintroub's avatar
      update C/C · e96a0594
      Vladislav Vaintroub authored
      e96a0594
  4. 25 Jan, 2024 3 commits
    • Vladislav Vaintroub's avatar
      MDEV-26579 fixup · b62f25c6
      Vladislav Vaintroub authored
      b62f25c6
    • Vladislav Vaintroub's avatar
      MDEV-26579 Support minor MSI in Windows installer. · 0f59810b
      Vladislav Vaintroub authored
      With this patch, 4-component MSI version can be used, e.g by setting
      TINY_VERSION variable in CMake, or by adding a string, e.g
      MYSQL_VERSION_EXTRA=-2
      which sets TINY_VERSION to 2, and also changes the package name.
      
      The 4-component MSI versions do not support MSI major upgrades, only minor
      ones, i.e do not reinstall components, just update existing ones based
      on versioning rules.
      
      To support these rules, add DefaultVersion for the files that won't
      otherwise be versioned - headers, static and import libraries,
      pdbs, text - xml, python and perl scripts Also silence WiX warning
      that MSI won't store hashes for those files anymore.
      0f59810b
    • Yuchen Pei's avatar
      MDEV-33191 spider: fix dbton_id when iterating over links · 1070575a
      Yuchen Pei authored
      There are two array fields in spider_share with similar names:
      
      share->use_sql_dbton_ids that maps from i to the i-th dbton used by
      share. Thus it should be used only when i iterates over all distinct
      dbtons used by share.
      
      share->sql_dbton_ids that maps from i to the dbton used by the i-th
      link of the share. Thus it should be used only when i iterates over
      all links of a share.
      
      We correct instances where share->sql_dbton_ids should be used instead
      of share->use_sql_dbton_ids.
      1070575a
  5. 24 Jan, 2024 2 commits
    • Alexander Barkov's avatar
      MDEV-32837 long unique does not work like unique key when using replace · 97fcafb9
      Alexander Barkov authored
      write_record() when performing REPLACE has an optimization:
      - if the unique violation happened in the last unique key, then do UPDATE
      - otherwise, do DELETE+INSERT
      
      This patch changes the way of detecting if this optimization
      can be applied if the table has long (hash based) unique
      (i.e. UNIQUE..USING HASH) constraints.
      
      Problem:
      
      The old condition did not take into account that
      TABLE_SHARE and TABLE see long uniques differently:
      - TABLE_SHARE sees as HA_KEY_ALG_LONG_HASH and HA_NOSAME
      - TABLE sees as usual non-unique indexes
      So the old condition could erroneously decide that the UPDATE optimization
      is possible when there are still some unique hash constraints in the table.
      
      Fix:
      
      - If the current key is a long unique, it now works as follows:
      
        UPDATE can be done if the current long unique is the last
        long unique, and there are no in-engine (normal) uniques.
      
      - For in-engine uniques nothing changes, it still works as before:
      
        If the current key is an in-engine (normal) unique:
        UPDATE can be done if it is the last normal unique.
      97fcafb9
    • Alexander Barkov's avatar
      MDEV-29095 REGEXP_REPLACE treats empty strings different than REPLACE in ORACLE mode · f738cc98
      Alexander Barkov authored
      Turning REGEXP_REPLACE into two schema-qualified functions:
      - mariadb_schema.regexp_replace()
      - oracle_schema.regexp_replace()
      
      Fixing oracle_schema.regexp_replace(subj,pattern,replacement) to treat
      NULL in "replacement" as an empty string.
      
      Adding new classes implementing oracle_schema.regexp_replace():
      - Item_func_regexp_replace_oracle
      - Create_func_regexp_replace_oracle
      
      Adding helper methods:
      - String *Item::val_str_null_to_empty(String *to)
      - String *Item::val_str_null_to_empty(String *to, bool null_to_empty)
      
      and reusing these methods in both Item_func_replace and
      Item_func_regexp_replace.
      f738cc98
  6. 23 Jan, 2024 12 commits
  7. 22 Jan, 2024 7 commits
    • Rex's avatar
      MDEV-33165 Incorrect result interceptor passed to mysql_explain_union() · 11738822
      Rex authored
      Statements affect by this bug are all SQL statements that
      1) prefixed with "EXPLAIN"
      2) have a lower level join structure created for a union subquery.
      
      A bug in select_describe() passed an incorrect "result" object to
      mysql_explain_union(), resulting in unpredictable behaviour and
      out of context calls.
      
      Reviewed by: Oleksandr Byelkin, sanja@mariadb.com
      11738822
    • Oleksandr Byelkin's avatar
      15bd7e0b
    • Oleksandr Byelkin's avatar
    • Brandon Nesterenko's avatar
      MDEV-32168: Postpush fix for rpl_domain_id_filter_master_crash · 01ca57ec
      Brandon Nesterenko authored
      While a replica may be reading events from the
      primary, the primary is killed. Left to its own
      devices, the IO thread may or may not stop in
      error, depending on what it is doing when its
      connection to the primary is killed (e.g. a
      failed read results in an error, whereas if the
      IO thread is idly waiting for events when the
      connection dies, it will enter into a reconnect
      loop and reconnect). MDEV-32168 changed the test
      to always wait for the reconnect, thus breaking
      the error case, as the IO thread would be stopped
      at a time of expecting it to be running.
      
      The fix is to manually stop/start the IO thread
      to ensure it is in a consistent state.
      
      Note that rpl_domain_id_filter_master_crash.test
      will need additional changes after fixing MDEV-33268
      
      Reviewed By:
      ============
      Kristian Nielsen <knielsen@knielsen-hq.org>
      01ca57ec
    • Brandon Nesterenko's avatar
      MDEV-33283: Binlog Checksum is Zeroed by Zlib if Part of Event Data is Empty · 207c8578
      Brandon Nesterenko authored
      An existing binlog checksum can be overridden to 0 if writing a NULL
      payload when using Zlib for the computation. That is, calling into
      Zlib's crc32 with empty data initializes an incremental CRC
      computation to 0.
      
      This patch changes the Log_event_writer::write_data() to exit
      immediately if there is nothing to write, thereby bypassing the
      checksum computation. This follows the pattern of
      Log_event_writer::encrypt_and_write(), which also exits immediately
      if there is no data to write.
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      207c8578
    • Vicențiu Ciorbaru's avatar
      MDEV-14448: Ctrl-C should not exit the client · 3cd88751
      Vicențiu Ciorbaru authored
      This patch introduces the following behaviour for Linux while
      maintaining old behaviour for Windows:
      
      Ctrl + C (sigint) clears the current buffer and redraws the prompt.
      Ctrl-C no longer exits the client if no query is running.
      Ctrl-C kills the current running query if there is one. If there is an
      error communicating with the server while trying to issue a KILL QUERY,
      the client exits. This is in line with the past behaviour of Ctrl-C.
      On Linux Ctrl-D can be used to close the client.
      On Windows Ctrl-C and Ctrl-BREAK still exits the client if no query is running.
      Windows can also exit the client via \q<enter> or exit<enter>.
      
      == Implementation details ==
      The Linux implementation has two corner cases, based on which library is
      used: libreadline or libedit, both are handled in code to achieve the
      same user experience.
      
      Additional code is taken from MySQL, ensuring there is identical
      behaviour on Windows, to MySQL's mysql client implementation for other
      CTRL- related signals.
      
      * The CTRL_CLOSE, CTRL_LOGOFF, CTRL_SHUTDOWN will issue the equivalent
        of CTRL-C and "end" the program. This ensures that the query is killed
        when the client is closed by closing the terminal, logging off the
        user or shutting down the system. The latter two signals are not sent
        for interactive applications, but it handles the case when a user has
        defined a service to use mysql client to issue a command. See
        https://learn.microsoft.com/en-us/windows/console/handlerroutine
      
      This patch is built on top of the initial work done by Anel Husakovic
      <anel@mariadb.org>.
      Closes #2815
      3cd88751
    • Sisi Huang's avatar
      MDEV-32990 federatedx time_zone round trips · 7e8e51eb
      Sisi Huang authored
      Modified `federatedx_io_mysql::actual_query` to set the time zone to '+00:00' only upon establishing a new connection instead of with each query execution.
      7e8e51eb
  8. 19 Jan, 2024 3 commits
  9. 18 Jan, 2024 1 commit
    • Marko Mäkelä's avatar
      MDEV-32268: GNU libc posix_fallocate() may be extremely slow · ee1407f7
      Marko Mäkelä authored
      os_file_set_size(): Let us invoke the Linux system call fallocate(2)
      directly, because the GNU libc posix_fallocate() implements a fallback
      that writes to the file 1 byte every 4096 or fewer bytes. In one
      environment, invoking fallocate() directly would lead to 4 times the
      file growth rate during ALTER TABLE. Presumably, what happened was
      that the NFS server used a smaller allocation block size than 4096 bytes
      and therefore created a heavily fragmented sparse file when
      posix_fallocate() was used. For example, extending a file by 4 MiB
      would create 1,024 file fragments. When the file is actually being
      written to with data, it would be "unsparsed".
      
      The built-in EOPNOTSUPP fallback in os_file_set_size() writes a buffer
      of 1 MiB of NUL bytes. This was always used on musl libc and other
      Linux implementations of posix_fallocate().
      ee1407f7
  10. 17 Jan, 2024 3 commits
    • Sophist's avatar
    • Robin Newhouse's avatar
      MDEV-32587 Allow json exponential notation starting with zero · 615f4a8c
      Robin Newhouse authored
      Modify the NS_ZERO state in the JSON number parser to allow
      exponential notation with a zero coefficient (e.g. 0E-4).
      
      The NS_ZERO state transition on 'E' was updated to move to the
      NS_EX state rather than returning a syntax error. Similar change
      was made for the NS_ZE1 (negative zero) starter state.
      
      This allows accepted number grammar to include cases like:
      
      - 0E4
      - -0E-10
      
      which were previously disallowed. Numeric parsing remains
      the same for all other states.
      
      Test cases are added to func_json.test to validate parsing for
      various exponential numbers starting with zero coefficients.
      
      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.
      615f4a8c
    • Oleksandr Byelkin's avatar
      new WolfSSL v5.6.6-stable · 8e337e01
      Oleksandr Byelkin authored
      8e337e01
  11. 16 Jan, 2024 1 commit