1. 13 Jun, 2020 3 commits
  2. 12 Jun, 2020 1 commit
  3. 11 Jun, 2020 3 commits
  4. 10 Jun, 2020 5 commits
  5. 09 Jun, 2020 3 commits
    • Varun Gupta's avatar
      MDEV-11563: GROUP_CONCAT(DISTINCT ...) may produce a non-distinct list · 81a08c54
      Varun Gupta authored
       Backported from MYSQL
       Bug #25331425: DISTINCT CLAUSE DOES NOT WORK IN GROUP_CONCAT
          Issue:
          ------
          The problem occurs when:
          1) GROUP_CONCAT (DISTINCT ....) is used in the query.
          2) Data size greater than value of system variable:
          tmp_table_size.
      
          The result would contain values that are non-unique.
      
          Root cause:
          -----------
          An in-memory structure is used to filter out non-unique
          values. When the data size exceeds tmp_table_size, the
          overflow is written to disk as a separate file. The
          expectation here is that when all such files are merged,
          the full set of unique values can be obtained.
      
          But the Item_func_group_concat::add function is in a bit of
          hurry. Even as it is adding values to the tree, it wants to
          decide if a value is unique and write it to the result
          buffer. This works fine if the configured maximum size is
          greater than the size of the data. But since tmp_table_size
          is set to a low value, the size of the tree is smaller and
          hence requires the creation of multiple copies on disk.
      
          Item_func_group_concat currently has no mechanism to merge
          all the copies on disk and then generate the result. This
          results in duplicate values.
      
          Solution:
          ---------
          In case of the DISTINCT clause, don't write to the result
          buffer immediately. Do the merge and only then put the
          unique values in the result buffer. This has be done in
          Item_func_group_concat::val_str.
      
          Note regarding result file changes:
          -----------------------------------
          Earlier when a unique value was seen in
          Item_func_group_concat::add, it was dumped to the output.
          So result is in the order stored in SE. But with this fix,
          we wait until all the data is read and the final set of
          unique values are written to output buffer. So the data
          appears in the sorted order.
      
          This only fixes the cases when we have DISTINCT without ORDER BY clause
          in GROUP_CONCAT.
      81a08c54
    • Daniel Black's avatar
      innodb: dict_mem_table_add_col - compile warning fix argument 1 null where... · 90274278
      Daniel Black authored
      innodb: dict_mem_table_add_col - compile warning fix argument 1 null where non-null expected (#1584)
      
      cd /build-mariadb-server-10.5-mysql_release/storage/innobase && /usr/bin/powerpc64le-linux-gnu-g++  -DBTR_CUR_ADAPT -DBTR_CUR_HASH_ADAPT -DCOMPILER_HINTS -DDBUG_TRACE -DEMBEDDED_LIBRARY -DHAVE_BZIP2=1 -DHAVE_C99_INITIALIZERS -DHAVE_CONFIG_H -DHAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE=1 -DHAVE_IB_LINUX_FUTEX=1 -DHAVE_LZ4=1 -DHAVE_LZ4_COMPRESS_DEFAULT=1 -DHAVE_LZMA=1 -DHAVE_NANOSLEEP=1 -DHAVE_OPENSSL -DHAVE_SCHED_GETCPU=1 -DLINUX_NATIVE_AIO=1 -DMUTEX_EVENT -DWITH_INNODB_DISALLOW_WRITES -D_FILE_OFFSET_BITS=64 -Iwsrep-lib/include -Iwsrep-lib/wsrep-API/v26 -I/home/dan/build-mariadb-server-10.5-mysql_release/include -Istorage/innobase/include -Istorage/innobase/handler -Ilibbinlogevents/include -Itpool -Iinclude -Isql  -pie -fPIC -Wl,-z,relro,-z,now -fstack-protector --param=ssp-buffer-size=4 -Wconversion -Wno-sign-conversion -O3 -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized -D_FORTIFY_SOURCE=2 -DDBUG_OFF -Wall -Wextra -Wformat-security -Wno-format-truncation -Wno-init-self -Wno-nonnull-compare -Wno-unused-parameter -Woverloaded-virtual -Wnon-virtual-dtor -Wvla -Wwrite-strings   -DUNIV_LINUX -D_GNU_SOURCE=1 -fPIC -fvisibility=hidden -std=gnu++11 -o CMakeFiles/innobase_embedded.dir/dict/dict0load.cc.o -c storage/innobase/dict/dict0load.cc
      storage/innobase/dict/dict0load.cc: In function ‘const char* dict_process_sys_columns_rec(mem_heap_t*, const rec_t*, dict_col_t*, table_id_t*, const char**, ulint*)’:
      storage/innobase/dict/dict0load.cc:1653:26: warning: argument 1 null where non-null expected [-Wnonnull]
          dict_mem_table_add_col(table, heap, name, mtype,
          ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
                   prtype, col_len);
                   ~~~~~~~~~~~~~~~~
      In file included from storage/innobase/include/dict0dict.h:32:0,
                       from storage/innobase/include/btr0pcur.h:30,
                       from storage/innobase/dict/dict0load.cc:31:
      storage/innobase/include/dict0mem.h:323:1: note: in a call to function ‘void dict_mem_table_add_col(dict_table_t*, mem_heap_t*, const char*, ulint, ulint, ulint)’ declared here
       dict_mem_table_add_col(
       ^~~~~~~~~~~~~~~~~~~~~~
      90274278
    • rucha174's avatar
      MDEV-22830: SQL_CALC_FOUND_ROWS not working properly for single SELECT for DUAL · 44339123
      rucha174 authored
      In case of SELECT without tables which returns either 0 or 1 rows,
      JOIN::exec_inner() did not check if the flag representing SQL_CALC_FOUND_ROWS
      is set or not and send_records was direclty assigned 0. So SELECT FOUND_ROWS()
      was giving 0 in the output. Now it checks if the flag is set, if it is set
      send_record=1 else 0. 1 is the number of rows that could have been sent
      to the client if the SELECT query had SQL_CALC_FOUND_ROWS.
      It is 0 when no rows were sent because the SELECT query did not have
      SQL_CALC_FOUND_ROWS.
      44339123
  6. 08 Jun, 2020 4 commits
  7. 07 Jun, 2020 3 commits
  8. 06 Jun, 2020 9 commits
    • Varun Gupta's avatar
      MDEV-22728: SIGFPE in Unique::get_cost_calc_buff_size from... · d218d1aa
      Varun Gupta authored
      MDEV-22728: SIGFPE in Unique::get_cost_calc_buff_size from prepare_search_best_index_intersect on optimized builds
      
      For low sort_buffer_size, in the cost calculation of using the Unique object the elements in the tree were evaluated to 0, make sure to have atleast 1 element in the Unique tree.
      
      Also for the function Unique::get allocate memory for atleast MERGEBUFF2+1 keys.
      d218d1aa
    • Igor Babaev's avatar
      MDEV-22748 MariaDB crash on WITH RECURSIVE large query · e9dbbf11
      Igor Babaev authored
      This bug is the same as the bug MDEV-17024. The crashes caused by these
      bugs were due to premature cleanups of the unit specifying recursive CTEs
      that happened in some cases when there were several outer references the
      same recursive CTE.
      The problem of premature cleanups for recursive CTEs could be already
      resolved by the correction in TABLE_LIST::set_as_with_table() introduced
      in this patch. ALL other changes introduced by the patches for MDEV-17024
      and MDEV-22748 guarantee that this clean-ups are performed as soon as
      possible: when the select containing the last outer reference to a
      recursive CTE is being cleaned up the specification of the recursive CTE
      should be cleaned up as well.
      e9dbbf11
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · 4612cb88
      Marko Mäkelä authored
      4612cb88
    • Marko Mäkelä's avatar
      MDEV-22817: Skip the test in --embedded · be0c46eb
      Marko Mäkelä authored
      be0c46eb
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · b3e395a1
      Marko Mäkelä authored
      b3e395a1
    • Marko Mäkelä's avatar
      MDEV-22721 fixup for 32-bit GCC · e14ffd85
      Marko Mäkelä authored
      lock_check_trx_id_sanity(): Because the argument of UNIV_LIKELY
      or __builtin_expect() can be less than sizeof(trx_id_t) on 32-bit
      systems, it cannot reliably perform an implicit comparison to 0.
      e14ffd85
    • Marko Mäkelä's avatar
      MDEV-22817: Add a test case · 187b9c92
      Marko Mäkelä authored
      187b9c92
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 0df01ccb
      Marko Mäkelä authored
      0df01ccb
    • Marko Mäkelä's avatar
      MDEV-22818 Server crash on corrupted ROW_FORMAT=COMPRESSED page · 1bd5b75c
      Marko Mäkelä authored
      page_zip_fields_decode(): Do not dereference index=NULL.
      Instead, return NULL early. The only caller does not care
      about the values of output parameters in that case.
      
      This bug was introduced in MySQL 5.7.6 by
      mysql/mysql-server@9eae0edb7a8e4004328e61157f5f3b39cebe1b2b
      and in MariaDB 10.2.2 by
      commit 2e814d47.
      
      Thanks to my son for pointing this out after investigating
      the output of a static analysis tool.
      1bd5b75c
  9. 05 Jun, 2020 9 commits
    • Eugene Kosov's avatar
      fix compilation with VS2019, preview of 16.7 version · 7a695d8a
      Eugene Kosov authored
      Compiler tells something about argument-dependent lookup. I do not
      understand how that ADL works. But I know that such operators should
      be free functions, instead of methods:
      http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ro-symmetric
      
      Such syntax defines 'friend' free functions.
      7a695d8a
    • Igor Babaev's avatar
      MDEV-22042 Server crash in Item_field::print on ANALYZE FORMAT=JSON · a8c200c7
      Igor Babaev authored
      When processing a query with a recursive CTE a temporary table is used for
      each recursive reference of the CTE. As any temporary table it uses its own
      mem-root for table definition structures. Due to specifics of the current
      implementation of ANALYZE stmt command this mem-root can be freed only at
      the very of query processing. Such deallocation of mem-root memory happens
      in close_thread_tables(). The function looks through the list of the tmp
      tables rec_tables attached to the THD of the query and frees corresponding
      mem-roots. If the query uses a stored function then such list is created
      for each query of the function. When a new rec_list has to be created the
      old one has to be saved and then restored at the proper moment.
      The bug occurred because only one rec_list for the query containing CTE was
      created. As a result close_thread_tables() freed tmp mem-roots used for
      rec_tables prematurely destroying some data needed for the output produced
      by the ANALYZE command.
      a8c200c7
    • Julius Goryavsky's avatar
    • Julius Goryavsky's avatar
      Merge 10.1 into 10.2 · 5f55f69e
      Julius Goryavsky authored
      5f55f69e
    • Vladislav Vaintroub's avatar
    • Vladislav Vaintroub's avatar
      Fix appveyor build. · 15cdcb2a
      Vladislav Vaintroub authored
      15cdcb2a
    • Marko Mäkelä's avatar
      286e52e9
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · 680463a8
      Marko Mäkelä authored
      680463a8
    • Marko Mäkelä's avatar
      MDEV-22769 Shutdown hang or crash due to XA breaking locks · efc70da5
      Marko Mäkelä authored
      The background drop table queue in InnoDB is a work-around for
      cases where the SQL layer is requesting DDL on tables on which
      transactional locks exist.
      
      One such case are XA transactions. Our test case exploits the
      fact that the recovery of XA PREPARE transactions will
      only resurrect InnoDB table locks, but not MDL that should
      block any concurrent DDL.
      
      srv_shutdown_t: Introduce the srv_shutdown_state=SRV_SHUTDOWN_INITIATED
      for the initial part of shutdown, to wait for the background drop
      table queue to be emptied.
      
      srv_shutdown_bg_undo_sources(): Assign
      srv_shutdown_state=SRV_SHUTDOWN_INITIATED
      before waiting for the background drop table queue to be emptied.
      
      row_drop_tables_for_mysql_in_background(): On slow shutdown, if
      no active transactions exist (excluding ones that are in
      XA PREPARE state), skip any tables on which locks exist.
      
      row_drop_table_for_mysql(): Do not unnecessarily attempt to
      drop InnoDB persistent statistics for tables that have
      already been added to the background drop table queue.
      
      row_mysql_close(): Relax an assertion, and free all memory
      even if innodb_force_recovery=2 would prevent the background
      drop table queue from being emptied.
      efc70da5