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

Assertion `table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2' failed in handler::ha_rnd_next on SELECT

Details

    Description

      PREPARE p FROM 'LOCK TABLE t WRITE';
      CREATE VIEW t AS SELECT 1 AS a;
      EXECUTE p;
      START TRANSACTION;
      RENAME TABLE t TO t2;
      CREATE TABLE t (c INT,d INT,INDEX (c));
      EXECUTE p;
      SELECT * FROM t;
      

      Leads to:

      CS 11.8.1 33e0796e7a154e02a5e53c55cefc5d6feb4f5e6d (Debug) Build 15/02/2025

      mariadbd: /test/11.8_dbg/sql/handler.cc:3735: int handler::ha_rnd_next(uchar *): Assertion `table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2' failed.
      

      CS 11.8.1 33e0796e7a154e02a5e53c55cefc5d6feb4f5e6d (Debug) Build 15/02/2025

      Core was generated by `/test/MD150225-mariadb-11.8.1-linux-x86_64-dbg/bin/mariadbd --no-defaults --max'.
      Program terminated with signal SIGABRT, Aborted.
      Download failed: Invalid argument.  Continuing without source file ./nptl/./nptl/pthread_kill.c.
      #0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:44
       
      [Current thread is 1 (LWP 2443078)]
      (gdb) bt
      #0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:44
      #1  __pthread_kill_internal (signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:78
      #2  __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6)at ./nptl/pthread_kill.c:89
      #3  0x000014ac7804526e in __GI_raise (sig=sig@entry=6)at ../sysdeps/posix/raise.c:26
      #4  0x000014ac780288ff in __GI_abort () at ./stdlib/abort.c:79
      #5  0x000014ac7802881b in __assert_fail_base (fmt=0x14ac781d01e8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x558afce8ba13 "table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2", file=file@entry=0x558afce8a906 "/test/11.8_dbg/sql/handler.cc", line=line@entry=3735, function=function@entry=0x558afce8ba4e "int handler::ha_rnd_next(uchar *)")at ./assert/assert.c:94
      #6  0x000014ac7803b507 in __assert_fail (assertion=0x558afce8ba13 "table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2", file=0x558afce8a906 "/test/11.8_dbg/sql/handler.cc", line=3735, function=0x558afce8ba4e "int handler::ha_rnd_next(uchar *)")at ./assert/assert.c:103
      #7  0x0000558afc203015 in handler::ha_rnd_next (this=0x14ac100333a8, buf=0x14ac10033c00 "\377") at /test/11.8_dbg/sql/handler.cc:3734
      #8  0x0000558afbc9a500 in rr_sequential (info=0x14ac1001cf00)at /test/11.8_dbg/sql/records.cc:509
      #9  0x0000558afbc7fe46 in READ_RECORD::read_record (this=0x14ac1001cf00)at /test/11.8_dbg/sql/records.h:77
      #10 0x0000558afbe689cf in join_init_read_record (tab=0x14ac1001ce30)at /test/11.8_dbg/sql/sql_select.cc:25251
      #11 0x0000558afbe449d1 in sub_select (join=0x14ac1001b438, join_tab=0x14ac1001ce30, end_of_records=false)at /test/11.8_dbg/sql/sql_select.cc:24183
      #12 0x0000558afbe6bec4 in do_select (join=0x14ac1001b438, procedure=0x0)at /test/11.8_dbg/sql/sql_select.cc:23697
      #13 0x0000558afbe6b233 in JOIN::exec_inner (this=0x14ac1001b438)at /test/11.8_dbg/sql/sql_select.cc:5059
      #14 0x0000558afbe6a0de in JOIN::exec (this=0x14ac1001b438)at /test/11.8_dbg/sql/sql_select.cc:4842
      #15 0x0000558afbe4534d in mysql_select (thd=0x14ac10000d58, tables=0x14ac1001a3d0, fields=@0x14ac1001a050: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x14ac1001a380, last = 0x14ac1001be80, elements = 2}, <No data fields>}, conds=0x0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2166622976, result=0x14ac1001b410, unit=0x14ac10005080, select_lex=0x14ac10019d98) at /test/11.8_dbg/sql/sql_select.cc:5375
      #16 0x0000558afbe44dd5 in handle_select (thd=0x14ac10000d58, lex=0x14ac10004fa0, result=0x14ac1001b410, setup_tables_done_option=0)at /test/11.8_dbg/sql/sql_select.cc:633
      #17 0x0000558afbdec771 in execute_sqlcom_select (thd=0x14ac10000d58, all_tables=0x14ac1001a3d0) at /test/11.8_dbg/sql/sql_parse.cc:6191
      #18 0x0000558afbde1650 in mysql_execute_command (thd=0x14ac10000d58, is_called_from_prepared_stmt=false) at /test/11.8_dbg/sql/sql_parse.cc:3979
      #19 0x0000558afbdd97d4 in mysql_parse (thd=0x14ac10000d58, rawbuf=0x14ac10019d20 "SELECT * FROM t", length=15, parser_state=0x14ac70aa2a20) at /test/11.8_dbg/sql/sql_parse.cc:7915
      #20 0x0000558afbdd6ba4 in dispatch_command (command=COM_QUERY, thd=0x14ac10000d58, packet=0x14ac1000b099 "", packet_length=15, blocking=true) at /test/11.8_dbg/sql/sql_parse.cc:1902
      #21 0x0000558afbdda383 in do_command (thd=0x14ac10000d58, blocking=true)at /test/11.8_dbg/sql/sql_parse.cc:1415
      #22 0x0000558afbfc3a19 in do_handle_one_connection (connect=0x558b00750138, put_in_cache=true) at /test/11.8_dbg/sql/sql_connect.cc:1415
      #23 0x0000558afbfc37be in handle_one_connection (arg=0x558b00769348)at /test/11.8_dbg/sql/sql_connect.cc:1327
      #24 0x000014ac7809ca94 in start_thread (arg=<optimized out>)at ./nptl/pthread_create.c:447
      #25 0x000014ac78129c3c in clone3 ()at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
      

      Bug confirmed present in:
      MariaDB: 10.6.22 (dbg), 10.11.12 (dbg), 11.4.6 (dbg), 11.8.1 (dbg), 12.0.0 (dbg)

      Bug (or feature/syntax) confirmed not present in:
      MariaDB: 10.5.29 (dbg), 10.5.29 (opt), 10.6.22 (opt), 10.11.12 (opt), 11.4.6 (opt), 11.8.1 (opt), 12.0.0 (opt)
      MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.51 (dbg), 5.6.51 (opt), 5.7.44 (dbg), 5.7.44 (opt), 8.0.36 (dbg), 8.0.36 (opt), 9.1.0 (dbg), 9.1.0 (opt)

      No ASAN/UBSAN issues were observed for the given testcase.

      Attachments

        Issue Links

          Activity

            MTR Testcase:

            --source include/have_innodb.inc
            PREPARE p FROM 'LOCK TABLE t WRITE';
            CREATE VIEW t AS SELECT 1 AS a;
            EXECUTE p;
            START TRANSACTION;
            RENAME TABLE t TO t2;
            CREATE TABLE t (c INT,d INT,INDEX (c)) ENGINE=InnoDB;
            EXECUTE p;
            SELECT * FROM t;
            

            Roel Roel Van de Paar added a comment - MTR Testcase: --source include/have_innodb.inc PREPARE p FROM 'LOCK TABLE t WRITE' ; CREATE VIEW t AS SELECT 1 AS a; EXECUTE p; START TRANSACTION ; RENAME TABLE t TO t2; CREATE TABLE t (c INT ,d INT , INDEX (c)) ENGINE=InnoDB; EXECUTE p; SELECT * FROM t;

            With MyISAM:

            PREPARE p FROM 'LOCK TABLE t WRITE';
            CREATE VIEW t AS SELECT 1 AS a;
            EXECUTE p;
            START TRANSACTION;
            RENAME TABLE t TO t2;
            CREATE TABLE t (c INT,d INT,INDEX (c));
            EXECUTE p;
            SELECT * FROM t;
            

            We see a similar but different stack:

            CS 11.8.1 33e0796e7a154e02a5e53c55cefc5d6feb4f5e6d (Debug) Build 15/02/2025

            mariadbd: /test/11.8_dbg/sql/handler.cc:3735: int handler::ha_rnd_next(uchar *): Assertion `table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2' failed.
            

            CS 11.8.1 33e0796e7a154e02a5e53c55cefc5d6feb4f5e6d (Debug) Build 15/02/2025

            Core was generated by `/test/MD150225-mariadb-11.8.1-linux-x86_64-dbg/bin/mariadbd --defaults-group-su'.
            Program terminated with signal SIGABRT, Aborted.
            #0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:44
             
            [Current thread is 1 (LWP 3929512)]
            (gdb) bt
            #0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:44
            #1  __pthread_kill_internal (signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:78
            #2  __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6)at ./nptl/pthread_kill.c:89
            #3  0x000014812084526e in __GI_raise (sig=sig@entry=6)at ../sysdeps/posix/raise.c:26
            #4  0x00001481208288ff in __GI_abort () at ./stdlib/abort.c:79
            #5  0x000014812082881b in __assert_fail_base (fmt=0x1481209d01e8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x562c2f670a13 "table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2", file=file@entry=0x562c2f66f906 "/test/11.8_dbg/sql/handler.cc", line=line@entry=3735, function=function@entry=0x562c2f670a4e "int handler::ha_rnd_next(uchar *)")at ./assert/assert.c:94
            #6  0x000014812083b507 in __assert_fail (assertion=0x562c2f670a13 "table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2", file=0x562c2f66f906 "/test/11.8_dbg/sql/handler.cc", line=3735, function=0x562c2f670a4e "int handler::ha_rnd_next(uchar *)")at ./assert/assert.c:103
            #7  0x0000562c2e9e8015 in handler::ha_rnd_next (this=0x1480dc06a5f8, buf=0x1480dc06ae40 "\377") at /test/11.8_dbg/sql/handler.cc:3734
            #8  0x0000562c2e9e9b55 in handler::read_first_row (this=0x1480dc06a5f8, buf=0x1480dc06ae40 "\377", primary_key=64)at /test/11.8_dbg/sql/handler.cc:4057
            #9  0x0000562c2e694bab in handler::ha_read_first_row (this=0x1480dc06a5f8, buf=0x1480dc06ae40 "\377", primary_key=64)at /test/11.8_dbg/sql/sql_class.h:8025
            #10 0x0000562c2e6843af in join_read_system (tab=0x1480dc018c18)at /test/11.8_dbg/sql/sql_select.cc:24727
            #11 0x0000562c2e68360e in join_read_const_table (thd=0x1480dc000d58, tab=0x1480dc018c18, pos=0x1480dc0192b8)at /test/11.8_dbg/sql/sql_select.cc:24631
            #12 0x0000562c2e63b102 in make_join_statistics (join=0x1480dc0180b8, tables_list=@0x1480dc016c30: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x1480dc018880, last = 0x1480dc018880, elements = 1}, <No data fields>}, keyuse_array=0x1480dc018418) at /test/11.8_dbg/sql/sql_select.cc:5867
            #13 0x0000562c2e636f97 in JOIN::optimize_inner (this=0x1480dc0180b8)at /test/11.8_dbg/sql/sql_select.cc:2711
            #14 0x0000562c2e632308 in JOIN::optimize (this=0x1480dc0180b8)at /test/11.8_dbg/sql/sql_select.cc:1994
            #15 0x0000562c2e62a299 in mysql_select (thd=0x1480dc000d58, tables=0x1480dc017050, fields=@0x1480dc016cd0: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x1480dc017000, last = 0x1480dc018b00, elements = 2}, <No data fields>}, conds=0x0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2166622976, result=0x1480dc018090, unit=0x1480dc005080, select_lex=0x1480dc016a18) at /test/11.8_dbg/sql/sql_select.cc:5361
            #16 0x0000562c2e629dd5 in handle_select (thd=0x1480dc000d58, lex=0x1480dc004fa0, result=0x1480dc018090, setup_tables_done_option=0)at /test/11.8_dbg/sql/sql_select.cc:633
            #17 0x0000562c2e5d1771 in execute_sqlcom_select (thd=0x1480dc000d58, all_tables=0x1480dc017050) at /test/11.8_dbg/sql/sql_parse.cc:6191
            #18 0x0000562c2e5c6650 in mysql_execute_command (thd=0x1480dc000d58, is_called_from_prepared_stmt=false) at /test/11.8_dbg/sql/sql_parse.cc:3979
            #19 0x0000562c2e5be7d4 in mysql_parse (thd=0x1480dc000d58, rawbuf=0x1480dc0169a0 "SELECT * FROM t", length=15, parser_state=0x1481199b2a20) at /test/11.8_dbg/sql/sql_parse.cc:7915
            #20 0x0000562c2e5bbba4 in dispatch_command (command=COM_QUERY, thd=0x1480dc000d58, packet=0x1480dc1c90e9 "SELECT * FROM t", packet_length=15, blocking=true) at /test/11.8_dbg/sql/sql_parse.cc:1902
            #21 0x0000562c2e5bf383 in do_command (thd=0x1480dc000d58, blocking=true)at /test/11.8_dbg/sql/sql_parse.cc:1415
            #22 0x0000562c2e7a8a19 in do_handle_one_connection (connect=0x562c32471e28, put_in_cache=true) at /test/11.8_dbg/sql/sql_connect.cc:1415
            #23 0x0000562c2e7a87be in handle_one_connection (arg=0x562c324650c8)at /test/11.8_dbg/sql/sql_connect.cc:1327
            #24 0x000014812089ca94 in start_thread (arg=<optimized out>)at ./nptl/pthread_create.c:447
            #25 0x0000148120929c3c in clone3 ()at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
            

            Roel Roel Van de Paar added a comment - With MyISAM: PREPARE p FROM 'LOCK TABLE t WRITE' ; CREATE VIEW t AS SELECT 1 AS a; EXECUTE p; START TRANSACTION ; RENAME TABLE t TO t2; CREATE TABLE t (c INT ,d INT , INDEX (c)); EXECUTE p; SELECT * FROM t; We see a similar but different stack: CS 11.8.1 33e0796e7a154e02a5e53c55cefc5d6feb4f5e6d (Debug) Build 15/02/2025 mariadbd: /test/11.8_dbg/sql/handler.cc:3735: int handler::ha_rnd_next(uchar *): Assertion `table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2' failed. CS 11.8.1 33e0796e7a154e02a5e53c55cefc5d6feb4f5e6d (Debug) Build 15/02/2025 Core was generated by `/test/MD150225-mariadb-11.8.1-linux-x86_64-dbg/bin/mariadbd --defaults-group-su'. Program terminated with signal SIGABRT, Aborted. #0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:44   [Current thread is 1 (LWP 3929512)] (gdb) bt #0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:44 #1 __pthread_kill_internal (signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:78 #2 __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6)at ./nptl/pthread_kill.c:89 #3 0x000014812084526e in __GI_raise (sig=sig@entry=6)at ../sysdeps/posix/raise.c:26 #4 0x00001481208288ff in __GI_abort () at ./stdlib/abort.c:79 #5 0x000014812082881b in __assert_fail_base (fmt=0x1481209d01e8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x562c2f670a13 "table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2", file=file@entry=0x562c2f66f906 "/test/11.8_dbg/sql/handler.cc", line=line@entry=3735, function=function@entry=0x562c2f670a4e "int handler::ha_rnd_next(uchar *)")at ./assert/assert.c:94 #6 0x000014812083b507 in __assert_fail (assertion=0x562c2f670a13 "table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2", file=0x562c2f66f906 "/test/11.8_dbg/sql/handler.cc", line=3735, function=0x562c2f670a4e "int handler::ha_rnd_next(uchar *)")at ./assert/assert.c:103 #7 0x0000562c2e9e8015 in handler::ha_rnd_next (this=0x1480dc06a5f8, buf=0x1480dc06ae40 "\377") at /test/11.8_dbg/sql/handler.cc:3734 #8 0x0000562c2e9e9b55 in handler::read_first_row (this=0x1480dc06a5f8, buf=0x1480dc06ae40 "\377", primary_key=64)at /test/11.8_dbg/sql/handler.cc:4057 #9 0x0000562c2e694bab in handler::ha_read_first_row (this=0x1480dc06a5f8, buf=0x1480dc06ae40 "\377", primary_key=64)at /test/11.8_dbg/sql/sql_class.h:8025 #10 0x0000562c2e6843af in join_read_system (tab=0x1480dc018c18)at /test/11.8_dbg/sql/sql_select.cc:24727 #11 0x0000562c2e68360e in join_read_const_table (thd=0x1480dc000d58, tab=0x1480dc018c18, pos=0x1480dc0192b8)at /test/11.8_dbg/sql/sql_select.cc:24631 #12 0x0000562c2e63b102 in make_join_statistics (join=0x1480dc0180b8, tables_list=@0x1480dc016c30: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x1480dc018880, last = 0x1480dc018880, elements = 1}, <No data fields>}, keyuse_array=0x1480dc018418) at /test/11.8_dbg/sql/sql_select.cc:5867 #13 0x0000562c2e636f97 in JOIN::optimize_inner (this=0x1480dc0180b8)at /test/11.8_dbg/sql/sql_select.cc:2711 #14 0x0000562c2e632308 in JOIN::optimize (this=0x1480dc0180b8)at /test/11.8_dbg/sql/sql_select.cc:1994 #15 0x0000562c2e62a299 in mysql_select (thd=0x1480dc000d58, tables=0x1480dc017050, fields=@0x1480dc016cd0: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x1480dc017000, last = 0x1480dc018b00, elements = 2}, <No data fields>}, conds=0x0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2166622976, result=0x1480dc018090, unit=0x1480dc005080, select_lex=0x1480dc016a18) at /test/11.8_dbg/sql/sql_select.cc:5361 #16 0x0000562c2e629dd5 in handle_select (thd=0x1480dc000d58, lex=0x1480dc004fa0, result=0x1480dc018090, setup_tables_done_option=0)at /test/11.8_dbg/sql/sql_select.cc:633 #17 0x0000562c2e5d1771 in execute_sqlcom_select (thd=0x1480dc000d58, all_tables=0x1480dc017050) at /test/11.8_dbg/sql/sql_parse.cc:6191 #18 0x0000562c2e5c6650 in mysql_execute_command (thd=0x1480dc000d58, is_called_from_prepared_stmt=false) at /test/11.8_dbg/sql/sql_parse.cc:3979 #19 0x0000562c2e5be7d4 in mysql_parse (thd=0x1480dc000d58, rawbuf=0x1480dc0169a0 "SELECT * FROM t", length=15, parser_state=0x1481199b2a20) at /test/11.8_dbg/sql/sql_parse.cc:7915 #20 0x0000562c2e5bbba4 in dispatch_command (command=COM_QUERY, thd=0x1480dc000d58, packet=0x1480dc1c90e9 "SELECT * FROM t", packet_length=15, blocking=true) at /test/11.8_dbg/sql/sql_parse.cc:1902 #21 0x0000562c2e5bf383 in do_command (thd=0x1480dc000d58, blocking=true)at /test/11.8_dbg/sql/sql_parse.cc:1415 #22 0x0000562c2e7a8a19 in do_handle_one_connection (connect=0x562c32471e28, put_in_cache=true) at /test/11.8_dbg/sql/sql_connect.cc:1415 #23 0x0000562c2e7a87be in handle_one_connection (arg=0x562c324650c8)at /test/11.8_dbg/sql/sql_connect.cc:1327 #24 0x000014812089ca94 in start_thread (arg=<optimized out>)at ./nptl/pthread_create.c:447 #25 0x0000148120929c3c in clone3 ()at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

            People

              sanja Oleksandr Byelkin
              Roel Roel Van de Paar
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.