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

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
...@@ -46929,6 +46929,10 @@ not yet 100% confident in this code. ...@@ -46929,6 +46929,10 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.53 @appendixsubsec Changes in release 3.23.53
@itemize @bullet @itemize @bullet
@item @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 Fixed a @code{BDB}-related @code{ALTER TABLE} bug with dropping a column
and shutting down immediately thereafter. and shutting down immediately thereafter.
@item @item
...@@ -1097,6 +1097,8 @@ Item_cond::fix_fields(THD *thd,TABLE_LIST *tables) ...@@ -1097,6 +1097,8 @@ Item_cond::fix_fields(THD *thd,TABLE_LIST *tables)
used_tables_cache|=item->used_tables(); used_tables_cache|=item->used_tables();
with_sum_func= with_sum_func || item->with_sum_func; with_sum_func= with_sum_func || item->with_sum_func;
const_item_cache&=item->const_item(); const_item_cache&=item->const_item();
if (item->maybe_null)
maybe_null=1;
} }
if (thd) if (thd)
thd->cond_count+=list.elements; thd->cond_count+=list.elements;
......
...@@ -19,6 +19,9 @@ ...@@ -19,6 +19,9 @@
#include "mysql_priv.h" #include "mysql_priv.h"
#include <hash.h> #include <hash.h>
#ifdef HAVE_BERKELEY_DB
#include <ha_berkeley.h>
#endif
#include <myisam.h> #include <myisam.h>
#ifdef __WIN__ #ifdef __WIN__
...@@ -1675,11 +1678,18 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, ...@@ -1675,11 +1678,18 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
VOID(pthread_cond_broadcast(&COND_refresh)); VOID(pthread_cond_broadcast(&COND_refresh));
VOID(pthread_mutex_unlock(&LOCK_open)); VOID(pthread_mutex_unlock(&LOCK_open));
#ifdef HAVE_BERKELEY_DB #ifdef HAVE_BERKELEY_DB
extern bool berkeley_flush_logs(void);
if (old_db_type == DB_TYPE_BERKELEY_DB) if (old_db_type == DB_TYPE_BERKELEY_DB)
{ {
(void)berkeley_flush_logs(); (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 #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment