summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
authorIgor Babaev <igor@askmonty.org>2019-08-30 18:47:14 -0700
committerIgor Babaev <igor@askmonty.org>2019-08-30 18:47:14 -0700
commit9380850d874c77656d0c42cfa11bf0d187064849 (patch)
tree5abffcd5f13bfd03089e049cb22c1b0c21c47ce0 /sql/item_func.cc
parentfac81c67527605710e1cc76db6df4b8fce34b06b (diff)
downloadmariadb-git-9380850d874c77656d0c42cfa11bf0d187064849.tar.gz
MDEV-15777 Use inferred IS NOT NULL predicates in the range optimizer
This patch introduces the optimization that allows range optimizer to consider index range scans that are built employing NOT NULL predicates inferred from WHERE conditions and ON expressions. The patch adds a new optimizer switch not_null_range_scan.
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 913442ee22d..af908d9d553 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -404,6 +404,25 @@ Item_func::eval_not_null_tables(void *opt_arg)
}
+bool
+Item_func::find_not_null_fields(table_map allowed)
+{
+ if (~allowed & used_tables())
+ return false;
+
+ Item **arg,**arg_end;
+ if (arg_count)
+ {
+ for (arg=args, arg_end=args+arg_count; arg != arg_end ; arg++)
+ {
+ if (!(*arg)->find_not_null_fields(allowed))
+ continue;
+ }
+ }
+ return false;
+}
+
+
void Item_func::fix_after_pullout(st_select_lex *new_parent, Item **ref,
bool merge)
{