Commit 1944b4ca authored by unknown's avatar unknown
Browse files

Fixed bug #24987.

Made the function opt_sum_query to return HA_ERR_KEY_NOT_FOUND when
no matches were found (instead of -1 it returned prior this patch).
This changes allow us to avoid possible conflicts with return values
from user-defined handler methods which also may return -1. 
No particular test cases are provided with this fix.


sql/opt_sum.cc:
  Fixed bug #24987.
  Made the function opt_sum_query to return HA_ERR_KEY_NOT_FOUND when
  no matches were found (instead of -1 it returned prior this patch).
  This changes allow us to avoid possible conflicts with return values
  from user-defined handler methods which also may return -1.
sql/sql_select.cc:
  Fixed bug #24987.
  Made the function opt_sum_query to return HA_ERR_KEY_NOT_FOUND when
  no matches were found (instead of -1 it returned prior this patch).
  This changes allow us to avoid possible conflicts with return values
  from user-defined handler methods which also may return -1.
parent da561a80
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -68,9 +68,9 @@ static int maxmin_in_range(bool max_fl, Field* field, COND *cond);
    GROUP BY part.

  RETURN VALUES
    0 No errors
    0                    no errors
    1                    if all items were resolved
   -1 on impossible conditions
    HA_ERR_KEY_NOT_FOUND on impossible conditions
    OR an error number from my_base.h HA_ERR_... if a deadlock or a lock
       wait timeout happens, for example
*/
@@ -216,7 +216,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
          if (error)
	  {
	    if (error == HA_ERR_KEY_NOT_FOUND || error == HA_ERR_END_OF_FILE)
	      return -1;		       // No rows matching WHERE
	      return HA_ERR_KEY_NOT_FOUND;	      // No rows matching WHERE
	    /* HA_ERR_LOCK_DEADLOCK or some other error */
 	    table->file->print_error(error, MYF(0));
            return(error);
@@ -303,7 +303,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
          if (error)
          {
	    if (error == HA_ERR_KEY_NOT_FOUND || error == HA_ERR_END_OF_FILE)
	      return -1;		       // No rows matching WHERE
	      return HA_ERR_KEY_NOT_FOUND;	     // No rows matching WHERE
	    /* HA_ERR_LOCK_DEADLOCK or some other error */
 	    table->file->print_error(error, MYF(0));
            return(error);
+10 −8
Original line number Diff line number Diff line
@@ -531,23 +531,25 @@ JOIN::optimize()
  {
    int res;
    /*
      opt_sum_query() returns -1 if no rows match to the WHERE conditions,
      or 1 if all items were resolved, or 0, or an error number HA_ERR_...
      opt_sum_query() returns HA_ERR_KEY_NOT_FOUND if no rows match
      to the WHERE conditions,
      or 1 if all items were resolved,
      or 0, or an error number HA_ERR_...
    */
    if ((res=opt_sum_query(tables_list, all_fields, conds)))
    {
      if (res == HA_ERR_KEY_NOT_FOUND)
      {
	zero_result_cause= "No matching min/max row";
	error=0;
	DBUG_RETURN(0);
      }
      if (res > 1)
      {
        thd->fatal_error();
        error= res;
	DBUG_RETURN(1);
      }
      if (res < 0)
      {
	zero_result_cause= "No matching min/max row";
	error=0;
	DBUG_RETURN(0);
      }
      zero_result_cause= "Select tables optimized away";
      tables_list= 0;				// All tables resolved
      /*