← Back to team overview

maria-developers team mailing list archive

String functions have their item->maybe_null=true unnecessarily, blocking optimizations


Hi Alexander,

I was looking at 


and found this piece of code:

bool Item_str_func::fix_fields(THD *thd, Item **ref)
  bool res= Item_func::fix_fields(thd, ref);
    In Item_str_func::check_well_formed_result() we may set null_value
    flag on the same condition as in test() below.
  maybe_null= maybe_null || thd->is_strict_mode();
  return res;

This has been introduced by this cset:


Which says:

  Add Item_str_func::fix_fields() implementation, and set maybe_null to
  TRUE if we are in the SQL mode that requires some functions to return
  null even if they normally do not.

The patch has only one example of CHAR() function doing that.

At the same time, not having NOT-NULL attribute disallows query opimizations
(see MDEV-11893 for an example).
I think we should have this 

  maybe_null= maybe_null || thd->is_strict_mode();

logic on a case-by-case basis only.  I wanted to check with you - are there any
other known string functions that, as the patch puts it "return null even if they
normally do not"? 

Sergei Petrunia, Software Developer
MariaDB Corporation | Skype: sergefp | Blog: http://s.petrunia.net/blog

Follow ups