diff options
author | Sergei Petrunia <psergey@askmonty.org> | 2020-09-20 00:07:37 +0300 |
---|---|---|
committer | Sergei Petrunia <psergey@askmonty.org> | 2020-09-20 00:07:37 +0300 |
commit | 29a6d23622caabe59c1627e32518f2bfcf8143f9 (patch) | |
tree | 06c3ad73cf06517547fa94e7792c305bedb64c04 /sql/sql_tvc.cc | |
parent | ccbe6bb6fc3cbe31e74404723f4ab78f7c530950 (diff) | |
download | mariadb-git-29a6d23622caabe59c1627e32518f2bfcf8143f9.tar.gz |
MDEV-23767: IN-to-subquery conversion is not visible in optimizer tracebb-10.5-mdev23767
Add the printout
Diffstat (limited to 'sql/sql_tvc.cc')
-rw-r--r-- | sql/sql_tvc.cc | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/sql/sql_tvc.cc b/sql/sql_tvc.cc index 37f0f80e8a0..df774a5d8dd 100644 --- a/sql/sql_tvc.cc +++ b/sql/sql_tvc.cc @@ -22,6 +22,7 @@ #include "sql_explain.h" #include "sql_parse.h" #include "sql_cte.h" +#include "my_json_writer.h" /** @@ -903,6 +904,10 @@ Item *Item_func_in::in_predicate_to_in_subs_transformer(THD *thd, if (!transform_into_subq) return this; + Json_writer_object trace_wrapper(thd); + Json_writer_object trace_conv(thd, "in_to_subquery_conversion"); + trace_conv.add("item", this); + transform_into_subq= false; List<List_item> values; @@ -922,13 +927,29 @@ Item *Item_func_in::in_predicate_to_in_subs_transformer(THD *thd, uint32 length= max_length_of_left_expr(); if (!length || length > tmp_table_max_key_length() || args[0]->cols() > tmp_table_max_key_parts()) + { + trace_conv.add("done", false); + trace_conv.add("reason", "key is too long"); return this; - + } + for (uint i=1; i < arg_count; i++) { - if (!args[i]->const_item() || cmp_row_types(args[0], args[i])) + if (!args[i]->const_item()) + { + trace_conv.add("done", false); + trace_conv.add("reason", "non-constant element in the IN-list"); return this; + } + + if (cmp_row_types(args[0], args[i])) + { + trace_conv.add("done", false); + trace_conv.add("reason", "type mismatch"); + return this; + } } + Json_writer_array trace_nested_obj(thd, "conversion"); Query_arena backup; Query_arena *arena= thd->activate_stmt_arena_if_needed(&backup); @@ -1020,6 +1041,7 @@ Item *Item_func_in::in_predicate_to_in_subs_transformer(THD *thd, goto err; parent_select->curr_tvc_name++; + return sq; err: |