Commit 20680f89 authored by monty@mashka.mysql.fi's avatar monty@mashka.mysql.fi
Browse files

Check if AND/OR expression can be NULL

Better fix for ALTER TABLE on BDB tables
(Both of the above fixes are already in 4.0)
parent 184ef91d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -46929,6 +46929,10 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.53
@itemize @bullet
@item
Changed @code{AND/OR} to report that they can return NULL. This fixes a
small problem in @code{GROUP BY} on @code{AND/OR} expression that return
@code{NULL}.
@item
Fixed a @code{BDB}-related @code{ALTER TABLE} bug with dropping a column
and shutting down immediately thereafter.
@item
+2 −0
Original line number Diff line number Diff line
@@ -1097,6 +1097,8 @@ Item_cond::fix_fields(THD *thd,TABLE_LIST *tables)
    used_tables_cache|=item->used_tables();
    with_sum_func= with_sum_func || item->with_sum_func;
    const_item_cache&=item->const_item();
    if (item->maybe_null)
      maybe_null=1;
  }
  if (thd)
    thd->cond_count+=list.elements;
+13 −3
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@

#include "mysql_priv.h"
#include <hash.h>
#ifdef HAVE_BERKELEY_DB
#include <ha_berkeley.h>
#endif
#include <myisam.h>

#ifdef __WIN__
@@ -1675,11 +1678,18 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
  VOID(pthread_cond_broadcast(&COND_refresh));
  VOID(pthread_mutex_unlock(&LOCK_open));
#ifdef HAVE_BERKELEY_DB
  extern bool berkeley_flush_logs(void);
  if (old_db_type == DB_TYPE_BERKELEY_DB)
  {
    (void) berkeley_flush_logs();
    table=open_ltable(thd,table_list,TL_READ);
    /*
      For the alter table to be properly flushed to the logs, we
      have to open the new table.  If not, we get a problem on server
      shutdown.
    */
    if (!open_tables(thd, table_list))		// Should always succeed
    {
      close_thread_table(thd, &table_list->table);
    }
  }
#endif