Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-9653

Assertion `length || !scale' failed in uint my_decimal_length_to_precision(uint, uint, bool)

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 10.1
    • Fix Version/s: 10.1.13
    • Component/s: OTHER
    • Labels:
      None
    • Sprint:
      10.1.13

      Description

      SELECT CASE 0 WHEN 1 THEN ( CASE 2 WHEN 3 THEN NULL END ) WHEN 4 THEN 5 END;
      

      Stack trace from 10.1 commit 66832b619510f5b9724d8db1eac48bdafb9225e9

      mysqld: /src/10.1/sql/my_decimal.h:213: uint my_decimal_length_to_precision(uint, uint, bool): Assertion `length || !scale' failed.
      160228 17:50:59 [ERROR] mysqld got signal 6 ;
       
      #7  0x00007f6f1a7a71d2 in __assert_fail () from /lib64/libc.so.6
      #8  0x0000562a24b7abe8 in my_decimal_length_to_precision (length=0, scale=31, unsigned_flag=false) at /src/10.1/sql/my_decimal.h:213
      #9  0x0000562a24bc85ba in Item_func_case::agg_num_lengths (this=0x7f6f10e53408, arg=0x7f6f10e53110) at /src/10.1/sql/item_cmpfunc.cc:3085
      #10 0x0000562a24bc8908 in Item_func_case::fix_length_and_dec (this=0x7f6f10e53408) at /src/10.1/sql/item_cmpfunc.cc:3158
      #11 0x0000562a24beef0e in Item_func::fix_fields (this=0x7f6f10e53408, thd=0x7f6f165c9330, ref=0x7f6f10e535a0) at /src/10.1/sql/item_func.cc:234
      #12 0x0000562a24bc848d in Item_func_case::fix_fields (this=0x7f6f10e53408, thd=0x7f6f165c9330, ref=0x7f6f10e535a0) at /src/10.1/sql/item_cmpfunc.cc:3063
      #13 0x0000562a248f30b9 in setup_fields (thd=0x7f6f165c9330, ref_pointer_array=0x7f6f10e53c90, fields=..., mark_used_columns=MARK_COLUMNS_READ, sum_func_list=0x7f6f10e53a80, allow_sum_func=true) at /src/10.1/sql/sql_base.cc:7896
      #14 0x0000562a2498aaba in JOIN::prepare (this=0x7f6f10e53720, rref_pointer_array=0x7f6f165cd6c0, tables_init=0x0, wild_num=0, conds_init=0x0, og_num=0, order_init=0x0, skip_order_by=false, group_init=0x0, having_init=0x0, proc_param_init=0x0, select_lex_arg=0x7f6f165cd448, unit_arg=0x7f6f165ccd48) at /src/10.1/sql/sql_select.cc:795
      #15 0x0000562a24994214 in mysql_select (thd=0x7f6f165c9330, rref_pointer_array=0x7f6f165cd6c0, tables=0x0, wild_num=0, fields=..., conds=0x0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2147748608, result=0x7f6f10e53700, unit=0x7f6f165ccd48, select_lex=0x7f6f165cd448) at /src/10.1/sql/sql_select.cc:3429
      #16 0x0000562a24989d6b in handle_select (thd=0x7f6f165c9330, lex=0x7f6f165ccc80, result=0x7f6f10e53700, setup_tables_done_option=0) at /src/10.1/sql/sql_select.cc:384
      #17 0x0000562a2495a096 in execute_sqlcom_select (thd=0x7f6f165c9330, all_tables=0x0) at /src/10.1/sql/sql_parse.cc:5936
      #18 0x0000562a2494fe72 in mysql_execute_command (thd=0x7f6f165c9330) at /src/10.1/sql/sql_parse.cc:2962
      #19 0x0000562a2495d6de in mysql_parse (thd=0x7f6f165c9330, rawbuf=0x7f6f10e52d08 "SELECT CASE 0 WHEN 1 THEN ( CASE 2 WHEN 3 THEN NULL END ) WHEN 4 THEN 5 END", length=75, parser_state=0x7f6f1ca755e0) at /src/10.1/sql/sql_parse.cc:7336
      #20 0x0000562a2494c0d9 in dispatch_command (command=COM_QUERY, thd=0x7f6f165c9330, packet=0x7f6f157c9eb1 "SELECT CASE 0 WHEN 1 THEN ( CASE 2 WHEN 3 THEN NULL END ) WHEN 4 THEN 5 END", packet_length=75) at /src/10.1/sql/sql_parse.cc:1488
      #21 0x0000562a2494ae0b in do_command (thd=0x7f6f165c9330) at /src/10.1/sql/sql_parse.cc:1109
      #22 0x0000562a24a80bc0 in do_handle_one_connection (thd_arg=0x7f6f165c9330) at /src/10.1/sql/sql_connect.cc:1349
      #23 0x0000562a24a80924 in handle_one_connection (arg=0x7f6f165c9330) at /src/10.1/sql/sql_connect.cc:1261
      #24 0x0000562a25188afa in pfs_spawn_thread (arg=0x7f6f151b0bf0) at /src/10.1/storage/perfschema/pfs.cc:1860
      #25 0x00007f6f1c6f00a4 in start_thread () from /lib64/libpthread.so.0
      #26 0x00007f6f1a85e04d in clone () from /lib64/libc.so.6
      

      The problem appeared in 10.1 tree with this commit:

      commit cc9cfecab78bde9376e4406bf24506e92fdaaeac
      Author: Alexander Barkov <bar@mariadb.org>
      Date:   Wed Sep 30 12:37:34 2015 +0400
       
          MDEV-8865 Wrong field type or metadata for COALESCE(signed_int_column, unsigned_int_column)
          Item_func_hybrid_field_type did not return correct field_type(), cmp_type()
          and result_type() in some cases, because cached_result_type and
          cached_field_type were set in independent pieces of the code and
          did not properly match to each other.
          Fix:
          - Removing Item_func_hybrid_result_type
          - Deriving Item_func_hybrid_field_type directly from Item_func
          - Introducing a new class Type_handler which guarantees that
            field_type(), cmp_type() and result_type() are always properly synchronized
            and using the new class in Item_func_hybrid_field_type.
      

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              bar Alexander Barkov
              Reporter:
              elenst Elena Stepanova
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:

                  Git Integration