SELECT 1
|
FROM (( SELECT 1
|
FROM a a_alias_1
|
LEFT JOIN (b b_alias_1 JOIN a a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
|
LEFT JOIN c c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
|
LEFT JOIN d d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
|
LEFT JOIN c c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
|
LEFT JOIN e e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
|
LEFT JOIN f f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
|
) t1)
|
LEFT OUTER JOIN (( SELECT 1
|
FROM a a_alias_1
|
LEFT JOIN (b b_alias_1 JOIN a a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
|
LEFT JOIN c c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
|
LEFT JOIN d d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
|
LEFT JOIN c c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
|
LEFT JOIN e e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
|
LEFT JOIN f f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
|
) t2) ON 1=1
|
LEFT OUTER JOIN (( SELECT 1
|
FROM a a_alias_1
|
LEFT JOIN (b b_alias_1 JOIN a a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
|
LEFT JOIN c c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
|
LEFT JOIN d d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
|
LEFT JOIN c c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
|
LEFT JOIN e e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
|
LEFT JOIN f f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
|
) t3) ON 1=1
|
LEFT OUTER JOIN (( SELECT 1
|
FROM a a_alias_1
|
LEFT JOIN (b b_alias_1 JOIN a a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
|
LEFT JOIN c c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
|
LEFT JOIN d d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
|
LEFT JOIN c c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
|
LEFT JOIN e e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
|
LEFT JOIN f f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
|
) t4) ON 1=1
|
LEFT OUTER JOIN (( SELECT 1
|
FROM a a_alias_1
|
LEFT JOIN (b b_alias_1 JOIN a a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
|
LEFT JOIN c c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
|
LEFT JOIN d d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
|
LEFT JOIN c c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
|
LEFT JOIN e e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
|
LEFT JOIN f f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
|
) t5) ON 1=1
|
LEFT OUTER JOIN (( SELECT 1
|
FROM a a_alias_1
|
LEFT JOIN (b b_alias_1 JOIN a a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
|
LEFT JOIN c c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
|
LEFT JOIN d d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
|
LEFT JOIN c c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
|
LEFT JOIN e e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
|
LEFT JOIN f f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
|
) t6) ON 1=1
|
LEFT OUTER JOIN (( SELECT 1
|
FROM a a_alias_1
|
LEFT JOIN (b b_alias_1 JOIN a a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
|
LEFT JOIN c c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
|
LEFT JOIN d d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
|
LEFT JOIN c c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
|
LEFT JOIN e e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
|
LEFT JOIN f f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
|
) t7) ON 1=1
|
LEFT OUTER JOIN (( SELECT 1
|
FROM a a_alias_1
|
LEFT JOIN (b b_alias_1 JOIN a a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
|
LEFT JOIN c c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
|
LEFT JOIN d d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
|
LEFT JOIN c c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
|
LEFT JOIN e e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
|
LEFT JOIN f f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
|
) t8) ON 1=1
|
;
|
Hi Jonathan,
Thank you for the report and the test case.
Reproducible on MariaDB 5.3, 5.5, 10.0.
The problem happens if the view is a MERGE view.
Assertion and stack trace (just to make it more searchable in JIRA):
mysqld: 5.5/sql/table.cc:4978: void TABLE_LIST::set_check_materialized(): Assertion `derived' failed.
140520 0:35:16 [ERROR] mysqld got signal 6 ;
/lib/x86_64-linux-gnu/libc.so.6(__assert_fail+0xf1)[0x7f33393c1621]
sql/table.cc:4979(TABLE_LIST::set_check_materialized())[0x6fceac]
sql/table.h:2102(TABLE_LIST::set_materialized_derived())[0x5e2f4e]
sql/sql_derived.cc:405(mysql_derived_merge(THD*, LEX*, TABLE_LIST*))[0x60bdd9]
sql/sql_derived.cc:192(mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int))[0x60bae1]
sql/table.cc:6561(TABLE_LIST::handle_derived(LEX*, unsigned int))[0x700895]
sql/sql_lex.cc:3553(st_select_lex::handle_derived(LEX*, unsigned int))[0x6278f6]
sql/sql_select.cc:998(JOIN::optimize())[0x660fea]
sql/sql_select.cc:3075(mysql_select(THD*, Item***, TABLE_LIST*, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*))[0x6684e7]
sql/sql_select.cc:319(handle_select(THD*, LEX*, select_result*, unsigned long))[0x65f079]
sql/sql_parse.cc:4688(execute_sqlcom_select)[0x638693]
sql/sql_parse.cc:2233(mysql_execute_command(THD*))[0x631875]
sql/sql_parse.cc:5799(mysql_parse(THD*, char*, unsigned int, Parser_state*))[0x63ada2]
sql/sql_parse.cc:1081(dispatch_command(enum_server_command, THD*, char*, unsigned int))[0x62eded]
sql/sql_parse.cc:793(do_command(THD*))[0x62df79]
sql/sql_connect.cc:1266(do_handle_one_connection(THD*))[0x72f872]
sql/sql_connect.cc:1182(handle_one_connection)[0x72f331]
perfschema/pfs.cc:1017(pfs_spawn_thread)[0xb636b1]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x6b50)[0x7f333a921b50]
(the stack trace is from 5.5 tree, revno 4190).
MariaDB 5.2 and MySQL return the error instead:
1116: Too many tables; MySQL can only use 61 tables in a join