1. 10 Aug, 2020 2 commits
  2. 08 Aug, 2020 1 commit
    • Alexander Barkov's avatar
      MDEV-23415 Server crash or Assertion `dec_length <= str_length' failed in... · fe555b9c
      Alexander Barkov authored
      MDEV-23415 Server crash or Assertion `dec_length <= str_length' failed in Item_func_format::val_str_ascii
      
      Problem:
      
      The crash happened in FORMAT(double, dec>=31, 'de_DE').
      
      The patch for MDEV-23118 (commit 0041dacc)
      did not take into account that String::set_real() has a limit of 31
      (FLOATING_POINT_DECIMALS) fractional digits. So for the range of 31..38
      digits, set_real() switches to use:
      - my_fcvt() - decimal point notation, e.g. 1.9999999999
      - my_gcvt() - scientific notation,    e.g. 1e22
      
      my_gcvt() returned a shorter string than Item_func_format::val_str_ascii()
      expected to get after the my_fcvt() call, so it crashed on assert.
      
      Solution:
      
      We cannot extend set_real() to use the my_fcvt() mode for the range of
      31..38 fractional digits, because set_real() is used in a lot of places
      and such a change will break everything.
      
      Introducing String::set_fcvt() which always prints using my_fcvt()
      for the whole range of decimals 0..38, supported by the FORMAT() function.
      fe555b9c
  3. 06 Aug, 2020 4 commits
  4. 05 Aug, 2020 1 commit
    • Alexander Barkov's avatar
      MDEV-23118 FORMAT(d1,dec) where dec=0/38 and d1 is DECIMAL(38,38) gives incorrect results · 0041dacc
      Alexander Barkov authored
      FORMAT() can print more integer digits (than the argument has)
      if rounding happens:
      
        FORMAT(9.9,0) -> '10'
      
      The old code did not take this into account.
      
      Fix:
      
      1. One extra digit is needed in case of rounding
      
      - If args[1] is a not-NULL constant, then reserve space for one extra integer
        digit if the requested number of decimals is less than args[0]->decimals.
      
      - Otherwise, reserve space for one extra integer digit if
        args[0]->decimals is not 0, because rounding can potentially happen
        (depending on the exact data in arguments).
      
      2. One extra digit is also needed if the argument has no integer digits,
         e.g. in a data type like DECIMAL(38,38).
      
      The conditions 1 and 2 are ORed.
      
      3. Fixing FORMAT_MAX_DECIMALS from 30 to 38. This was forgotten in 10.2.1
         (when the limit for the number of fractional digits in DECIMAL was extended).
      0041dacc
  5. 04 Aug, 2020 9 commits
    • Sergei Golubchik's avatar
      4ed4cf02
    • Sergei Golubchik's avatar
      a09a06d5
    • Elena Stepanova's avatar
      8d462523
    • Jan Lindström's avatar
      Add wait conditions for cluster size. · 14a5f73c
      Jan Lindström authored
      14a5f73c
    • Sergei Golubchik's avatar
      5.6.49-89.0 · 2adaaeba
      Sergei Golubchik authored
      2adaaeba
    • Marko Mäkelä's avatar
      MDEV-23345 Assertion not_redundant() == old.not_redundant() · 9a156e1a
      Marko Mäkelä authored
      In commit fd9ca2a7 (MDEV-23295)
      we added a debug assertion, which caught a similar bug.
      
      prepare_inplace_alter_table_dict(): If we had promised that
      ALGORITHM=INPLACE or ALGORITHM=NOCOPY is supported, we must
      preserve the ROW_FORMAT.
      9a156e1a
    • Sachin's avatar
      MDEV-23089 rpl_parallel2 fails in 10.5 · e3c18b8e
      Sachin authored
      Problem:- rpl_parallel2 was failing non-deterministically
      Analysis:-
      When FLUSH TABLES WITH READ LOCK is executed, it will allow all worker
      threads to complete their ongoing transactions and then it will pause them.
      At this state FTWRL will proceed to acquire global read lock. FTWRL first
      blocks threads from starting new commits, then upgrades the lock to block
      commit of existing transactions.
        Step1:
          FLUSH TABLES WITH READ LOCK - Blocks new commits
        Step2:
          * STOP SLAVE command enables 'force_abort=1' which unblocks workers,
            they continue to execute events.
          * T1: Waits in 'record_gtid' call to update 'gtid_slave_pos' table with
            its current GTID, but it is blocked becuase of Step1.
          * T2: Holds COMMIT lock and waits for T1 to commit.
        Step3:
          FLUSH TABLES WITH READ LOCK - Waiting to get BLOCK_COMMIT.
      This results in deadlock. When STOP SLAVE command allows paused workers to
      proceed, workers should skip the execution of all further events, similar
      to 'conservative' parallel mode.
      Solution:-
      We will assign 1 to skip_event_group when we are aborted in do_ftwrl_wait.
      rpl_parallel_entry->pause_sub_id is only reset when force_abort is off in
      rpl_pause_after_ftwrl.
      e3c18b8e
    • Alexander Barkov's avatar
      MDEV-23388 Assertion `args[0]->decimals == 0' failed in Item_func_round::fix_arg_int · 100f0c96
      Alexander Barkov authored
      Type_handler_temporal_result::Item_func_min_max_fix_attributes()
      in an expression GREATEST(string,date), e.g:
      
        SELECT GREATEST('1', CAST('2020-12-12' AS DATE));
      
      incorrectly evaluated decimals as 6 (like for DATETIME).
      
      Adding a separate virtual implementation:
        Type_handler_date_common::Item_func_min_max_fix_attributes()
      This makes the code simpler.
      100f0c96
    • Alexander Barkov's avatar
      MDEV-23032 FLOOR()/CEIL() incorrectly calculate the precision of a DECIMAL(M,D) column · 6a2ee9c8
      Alexander Barkov authored
      The code in Item_func_int_val::fix_length_and_dec_int_or_decimal()
      calculated badly the result data type for FLOOR()/CEIL(), so for example
      the decimal(38,10) input created a decimal(28,0) result.
      That was not correct, because one extra integer digit is needed.
         floor(-9.9) -> -10
         ceil(9.9)   ->  10
      
      Rewritting the code in a more straightforward way.
      Additional changes:
      - FLOOR() now takes into account the presence of the UNSIGNED
      flag of the argument: FLOOR(unsigned decimal) does not need an extra digits.
      - FLOOR()/CEILING() now preserve the unsigned flag in the result
        data type is decimal.
      These changes give nicer data types.
      6a2ee9c8
  6. 03 Aug, 2020 11 commits
    • Elena Stepanova's avatar
      223aee2e
    • Oleksandr Byelkin's avatar
      Merge branch '10.3' into 10.4 · 57325e47
      Oleksandr Byelkin authored
      57325e47
    • Oleksandr Byelkin's avatar
      Merge branch '10.2' into 10.3 · c32f71af
      Oleksandr Byelkin authored
      c32f71af
    • Sachin's avatar
      MDEV-23089 rpl_parallel2 fails in 10.5 · 706a7101
      Sachin authored
      Problem:- rpl_parallel2 was failing non-deterministically
      Analysis:-
      When FLUSH TABLES WITH READ LOCK is executed, it will allow all worker
      threads to complete their ongoing transactions and then it will pause them.
      At this state FTWRL will proceed to acquire global read lock. FTWRL first
      blocks threads from starting new commits, then upgrades the lock to block
      commit of existing transactions.
        Step1:
          FLUSH TABLES WITH READ LOCK - Blocks new commits
        Step2:
          * STOP SLAVE command enables 'force_abort=1' which unblocks workers,
            they continue to execute events.
          * T1: Waits in 'record_gtid' call to update 'gtid_slave_pos' table with
            its current GTID, but it is blocked becuase of Step1.
          * T2: Holds COMMIT lock and waits for T1 to commit.
        Step3:
          FLUSH TABLES WITH READ LOCK - Waiting to get BLOCK_COMMIT.
      This results in deadlock. When STOP SLAVE command allows paused workers to
      proceed, workers should skip the execution of all further events, similar
      to 'conservative' parallel mode.
      Solution:-
      We will assign 1 to skip_event_group when we are aborted in do_ftwrl_wait.
      rpl_parallel_entry->pause_sub_id is only reset when force_abort is off in
      rpl_pause_after_ftwrl.
      706a7101
    • Oleksandr Byelkin's avatar
      Merge branch '10.1' into 10.2 · 555c6632
      Oleksandr Byelkin authored
      555c6632
    • Sergei Petrunia's avatar
      Fix the typo in fix for MDEV-21472 · 8bca92c8
      Sergei Petrunia authored
      8bca92c8
    • Sergei Golubchik's avatar
      compilation error on bintar-centos6-amd64-debug · acfc500d
      Sergei Golubchik authored
      /home/buildbot/buildbot/build/storage/xtradb/mtr/mtr0mtr.cc:97:37: error: invalid access to non-static data member ‘fil_space_t::latch’  of NULL object [-Werror=invalid-offsetof]
      acfc500d
    • Alexander Barkov's avatar
      MDEV-23366 ROUND(18446744073709551615,rand()*0) returns a wrong result · 9840bb21
      Alexander Barkov authored
      Changing that in case of *INT and hex hybrid input:
      - ROUND(x,NULL) creates a column with the same type as x.
        The old code created a DOUBLE column, which was not relevant at all.
        This change simplifies the code a lot.
      
      - ROUND(x,non_constant) creates a column of the INT, BIGINT or DECIMAL
        data type (depending on the exact type of x).
        The old code created a column of the DOUBLE data type,
        which lead to precision loss. Hence MDEV-23366.
      
      - ROUND(bigint_30,negative_constant) creates a column of the DECIMAL(30,0)
        data type. The old code created DECIMAL(29,0), which looked strange:
        the data type promoted to a higher one, but max length reduced.
        Now the length attribute is preserved.
      9840bb21
    • Rucha Deodhar's avatar
      MDEV-21017: Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' · 97f7bfce
      Rucha Deodhar authored
      failed or late ER_PERIOD_FIELD_WRONG_ATTRIBUTES upon attempt to create
      existing table
      
      Analysis: Error state is not stored when field is checked in
      Table_period_info::check_field()
      Fix: Store error state by setting res to true.
      97f7bfce
    • Alexander Barkov's avatar
      MDEV-23367 ROUND(18446744073709551615,-1) returns a wrong result · 00f964ab
      Alexander Barkov authored
      This problem was fixed by MDEV-23368. Adding tests only.
      00f964ab
    • Elena Stepanova's avatar
      dc716da4
  7. 02 Aug, 2020 10 commits
  8. 01 Aug, 2020 2 commits