diff options
author | Galina Shalygina <galina.shalygina@mariadb.com> | 2018-06-01 21:57:10 +0200 |
---|---|---|
committer | Galina Shalygina <galina.shalygina@mariadb.com> | 2018-06-01 21:57:10 +0200 |
commit | 6db465d7ce455cf75ec224108cbe61ca8be63d3d (patch) | |
tree | 9648ff1fc677eebb60b278c2e2c13131934ed2a0 /sql/opt_split.cc | |
parent | ffe83e8e7bef32eb2a80aad2d382f0b023dd3a44 (diff) | |
parent | 4a49f7f88cfa82ae6eb8e7b5a528e91416b33b52 (diff) | |
download | mariadb-git-shagalla-10.4.tar.gz |
Merge 10.3.7 into 10.4shagalla-10.4
Diffstat (limited to 'sql/opt_split.cc')
-rw-r--r-- | sql/opt_split.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/sql/opt_split.cc b/sql/opt_split.cc index 6467706bc0b..37853bdbbe9 100644 --- a/sql/opt_split.cc +++ b/sql/opt_split.cc @@ -352,8 +352,9 @@ bool JOIN::check_for_splittable_materialized() Field *ord_field= ((Item_field *) (ord_item->real_item()))->field; - JOIN_TAB *tab= ord_field->table->reginfo.join_tab; - if (tab->is_inner_table_of_outer_join()) + /* Ignore fields from of inner tables of outer joins */ + TABLE_LIST *tbl= ord_field->table->pos_in_table_list; + if (tbl->is_inner_table_of_outer_join()) continue; List_iterator<Item> li(fields_list); @@ -543,7 +544,14 @@ void TABLE::add_splitting_info_for_key_field(KEY_FIELD *key_field) added_key_field->level= 0; added_key_field->optimize= KEY_OPTIMIZE_EQ; added_key_field->eq_func= true; - added_key_field->null_rejecting= true; + + Item *real= key_field->val->real_item(); + if ((real->type() == Item::FIELD_ITEM) && + ((Item_field*)real)->field->maybe_null()) + added_key_field->null_rejecting= true; + else + added_key_field->null_rejecting= false; + added_key_field->cond_guard= NULL; added_key_field->sj_pred_no= UINT_MAX; return; @@ -862,7 +870,7 @@ SplM_plan_info * JOIN_TAB::choose_best_splitting(double record_count, table_map tables_usable_for_splitting= spl_opt_info->tables_usable_for_splitting; KEYUSE_EXT *keyuse_ext= &join->ext_keyuses_for_splitting->at(0); - KEYUSE_EXT *best_key_keyuse_ext_start; + KEYUSE_EXT *UNINIT_VAR(best_key_keyuse_ext_start); TABLE *best_table= 0; double best_rec_per_key= DBL_MAX; SplM_plan_info *spl_plan= 0; |