summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Docs/manual.texi4
-rw-r--r--sql/item_cmpfunc.cc2
-rw-r--r--sql/sql_table.cc16
3 files changed, 19 insertions, 3 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index 87b9a480f3f..c698f8f80c4 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -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
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index f17c8af3519..36ecde337a7 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -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;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 534b267403c..2bb46b5c47d 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -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);
+ (void) berkeley_flush_logs();
+ /*
+ 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