Assertion `inited==INDEX' failed in handler::ha_index_end on trigger executing INSERT .. SELECT with FROM subquery, view, derived_with_keys=on

Bug #972943 reported by Elena Stepanova on 2012-04-03
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
MariaDB
Fix Released
High
Igor Babaev

Bug Description

mysqld: handler.h:1716: int handler::ha_index_end(): Assertion `inited==INDEX' failed.

#8 0xb74d8014 in __assert_fail () from /lib/libc.so.6
#9 0x081ec79e in handler::ha_index_end (this=0x94b8498) at handler.h:1716
#10 0x0827f0ce in subselect_uniquesubquery_engine::cleanup (this=0x94bcc70)
    at item_subselect.cc:2730
#11 0x082786dc in Item_subselect::cleanup (this=0x9472c40)
    at item_subselect.cc:125
#12 0x082788df in Item_in_subselect::cleanup (this=0x9472c40)
    at item_subselect.cc:167
#13 0x082df9bc in cleanup_items (item=0x9472c40) at sql_parse.cc:654
#14 0x084cca9c in sp_head::execute (this=0x9470480, thd=0x93f1110)
    at sp_head.cc:1286
#15 0x084cd401 in sp_head::execute_trigger (this=0x9470480, thd=0x93f1110,
    db_name=0x946d7dc, table_name=0x946d7e4, grant_info=0x94700f0)
    at sp_head.cc:1586
#16 0x084e044c in Table_triggers_list::process_triggers (this=0x9470098,
    thd=0x93f1110, event=TRG_EVENT_INSERT, time_type=TRG_ACTION_BEFORE,
    old_row_is_record1=true) at sql_trigger.cc:2132
#17 0x0833f7a9 in fill_record_n_invoke_before_triggers (thd=0x93f1110,
    ptr=0x946eca8, values=..., ignore_errors=false, triggers=0x9470098,
    event=TRG_EVENT_INSERT) at sql_base.cc:8845
#18 0x0838a181 in mysql_insert (thd=0x93f1110, table_list=0x948f730,
    fields=..., values_list=..., update_fields=..., update_values=...,
    duplic=DUP_ERROR, ignore=false) at sql_insert.cc:853
#19 0x082e5bf8 in mysql_execute_command (thd=0x93f1110) at sql_parse.cc:3232
#20 0x082ee4d4 in mysql_parse (thd=0x93f1110,
    rawbuf=0x948f688 "INSERT INTO t2 VALUES (1)", length=25,
    found_semicolon=0xae951234) at sql_parse.cc:6152
#21 0x082e0eb5 in dispatch_command (command=COM_QUERY, thd=0x93f1110,
    packet=0x94482d9 "INSERT INTO t2 VALUES (1)", packet_length=25)
    at sql_parse.cc:1228
#22 0x082e035f in do_command (thd=0x93f1110) at sql_parse.cc:923
#23 0x082dd2e5 in handle_one_connection (arg=0x93f1110)
    at sql_connect.cc:1193
#24 0xb7766b25 in start_thread () from /lib/libpthread.so.0

bzr version-info
revision-id: <email address hidden>
date: 2012-04-03 15:42:26 +0300
build-date: 2012-04-04 02:44:16 +0400
revno: 3489

Notes:
Could not reproduce on MariaDB 5.2, MariaDB 5.5, MySQL 5.5, MySQL trunk.
Could not reproduce running the same query without a trigger.
Could not reproduce replacing the view with a table.

Minimal optimizer_switch: derived_with_keys=on,in_to_exists=on
Full optimizer_switch (standard): index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on

EXPLAINs for the SELECT extracted from the trigger (not sure it's relevant since the standalone SELECT does not cause the failure):

With the standard optimizer switch:
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00Using where
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00Using where; Using join buffer (flat, BNL join)
3 MATERIALIZED <derived4> ALL NULL NULL NULL NULL 2100.00
4 DERIVED t1 ALL NULL NULL NULL NULL 2 100.00
Warnings:
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` join `test`.`t1` where (((`test`.`t1`.`a` = 3) or (`test`.`t1`.`a` > 5)) and <in_optimizer>(`test`.`t1`.`b`,`test`.`t1`.`b` in ( <materialize> (select `v1`.`b` from `test`.`v1` ), <primary_index_lookup>(`test`.`t1`.`b` in <temporary table> on distinct_key where ((`test`.`t1`.`b` = `<subquery3>`.`b`))))))

With the minimal optimizer_switch (derived_with_keys=on,in_to_exists=on):
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2 100.00
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00Using where; Using join buffer (flat, BNL join)
2 DERIVED t1 ALL NULL NULL NULL NULL 2 100.00Using where
3 DEPENDENT SUBQUERY <derived4> index_subquery key0 key0 5func 2 100.00
4 DERIVED t1 ALL NULL NULL NULL NULL 2 100.00
Warnings:
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from (select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`b`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`b`) in /home/elenst/maria-5.3/mysql-test/var/tmp/mysqld.1/#sql_6c55_0 on key0)))) `alias1` join `test`.`t1` where ((`test`.`t1`.`a` = 3) or (`test`.`t1`.`a` > 5))

Test case:

SET optimizer_switch = 'derived_with_keys=on,in_to_exists=on';

CREATE TABLE t1 ( a INT, b INT );
INSERT INTO t1 VALUES (1,0),(2,8);

CREATE ALGORITHM=TEMPTABLE VIEW v1
  AS SELECT * FROM t1;

CREATE TABLE t2 ( c INT );
CREATE TABLE t3 ( d INT, e INT );

CREATE TRIGGER tr BEFORE INSERT ON t2 FOR EACH ROW
  INSERT INTO t3
  SELECT t1.* FROM (
   SELECT * FROM t1
   WHERE b IN ( SELECT b FROM v1 )
  ) AS alias1,
  t1
  WHERE t1.a = 3 OR t1.a > 5;

INSERT INTO t2 VALUES (1);

Elena Stepanova (elenst) wrote :

Set to 'High' rather than 'Critical' because I didn't get any visible problems on release (as non-debug) binaries.

Changed in maria:
status: New → Confirmed
assignee: Oleksandr "Sanja" Byelkin (sanja-byelkin) → Igor Babaev (igorb-seattle)
status: Confirmed → In Progress
Changed in maria:
status: In Progress → Fix Committed
Elena Stepanova (elenst) wrote :

Fix released in 5.3.6.

Changed in maria:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers