mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
Merge
Docs/manual.texi: SCCS merged
This commit is contained in:
@@ -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 bug that @code{OPTIMIZE} of locked and modified MyISAM table,
|
Fixed a bug that @code{OPTIMIZE} of locked and modified MyISAM table,
|
||||||
reported table corruption.
|
reported table corruption.
|
||||||
@item
|
@item
|
||||||
|
@@ -69,7 +69,8 @@ a max(id) b
|
|||||||
0 0
|
0 0
|
||||||
NULL NULL NULL
|
NULL NULL NULL
|
||||||
grp count(*)
|
grp count(*)
|
||||||
0 7
|
NULL 1
|
||||||
|
0 6
|
||||||
1 6
|
1 6
|
||||||
FACILITY
|
FACILITY
|
||||||
NULL
|
NULL
|
||||||
|
@@ -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;
|
||||||
|
@@ -447,6 +447,7 @@ bool rm_temporary_table(enum db_type base, char *path);
|
|||||||
bool send_fields(THD *thd,List<Item> &item,uint send_field_count);
|
bool send_fields(THD *thd,List<Item> &item,uint send_field_count);
|
||||||
void free_io_cache(TABLE *entry);
|
void free_io_cache(TABLE *entry);
|
||||||
void intern_close_table(TABLE *entry);
|
void intern_close_table(TABLE *entry);
|
||||||
|
bool close_thread_table(THD *thd, TABLE **table_ptr);
|
||||||
void close_thread_tables(THD *thd,bool locked=0);
|
void close_thread_tables(THD *thd,bool locked=0);
|
||||||
void close_temporary_tables(THD *thd);
|
void close_temporary_tables(THD *thd);
|
||||||
TABLE **find_temporary_table(THD *thd, const char *db, const char *table_name);
|
TABLE **find_temporary_table(THD *thd, const char *db, const char *table_name);
|
||||||
|
@@ -428,7 +428,6 @@ void close_thread_tables(THD *thd, bool locked)
|
|||||||
DBUG_VOID_RETURN; // LOCK TABLES in use
|
DBUG_VOID_RETURN; // LOCK TABLES in use
|
||||||
}
|
}
|
||||||
|
|
||||||
TABLE *table,*next;
|
|
||||||
bool found_old_table=0;
|
bool found_old_table=0;
|
||||||
|
|
||||||
if (thd->lock)
|
if (thd->lock)
|
||||||
@@ -441,41 +440,10 @@ void close_thread_tables(THD *thd, bool locked)
|
|||||||
|
|
||||||
DBUG_PRINT("info", ("thd->open_tables=%p", thd->open_tables));
|
DBUG_PRINT("info", ("thd->open_tables=%p", thd->open_tables));
|
||||||
|
|
||||||
for (table=thd->open_tables ; table ; table=next)
|
while (thd->open_tables)
|
||||||
{
|
found_old_table|=close_thread_table(thd, &thd->open_tables);
|
||||||
next=table->next;
|
|
||||||
if (table->version != refresh_version ||
|
|
||||||
thd->version != refresh_version || !table->db_stat)
|
|
||||||
{
|
|
||||||
VOID(hash_delete(&open_cache,(byte*) table));
|
|
||||||
found_old_table=1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (table->flush_version != flush_version)
|
|
||||||
{
|
|
||||||
table->flush_version=flush_version;
|
|
||||||
table->file->extra(HA_EXTRA_FLUSH);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Free memory and reset for next loop
|
|
||||||
table->file->extra(HA_EXTRA_RESET);
|
|
||||||
}
|
|
||||||
table->in_use=0;
|
|
||||||
if (unused_tables)
|
|
||||||
{
|
|
||||||
table->next=unused_tables; /* Link in last */
|
|
||||||
table->prev=unused_tables->prev;
|
|
||||||
unused_tables->prev=table;
|
|
||||||
table->prev->next=table;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
unused_tables=table->next=table->prev=table;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
thd->some_tables_deleted=0;
|
thd->some_tables_deleted=0;
|
||||||
thd->open_tables=0;
|
|
||||||
/* Free tables to hold down open files */
|
/* Free tables to hold down open files */
|
||||||
while (open_cache.records > table_cache_size && unused_tables)
|
while (open_cache.records > table_cache_size && unused_tables)
|
||||||
VOID(hash_delete(&open_cache,(byte*) unused_tables)); /* purecov: tested */
|
VOID(hash_delete(&open_cache,(byte*) unused_tables)); /* purecov: tested */
|
||||||
@@ -491,6 +459,48 @@ void close_thread_tables(THD *thd, bool locked)
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* move one table to free list */
|
||||||
|
|
||||||
|
bool close_thread_table(THD *thd, TABLE **table_ptr)
|
||||||
|
{
|
||||||
|
DBUG_ENTER("close_thread_table");
|
||||||
|
|
||||||
|
bool found_old_table=0;
|
||||||
|
TABLE *table=*table_ptr;
|
||||||
|
|
||||||
|
*table_ptr=table->next;
|
||||||
|
if (table->version != refresh_version ||
|
||||||
|
thd->version != refresh_version || !table->db_stat)
|
||||||
|
{
|
||||||
|
VOID(hash_delete(&open_cache,(byte*) table));
|
||||||
|
found_old_table=1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (table->flush_version != flush_version)
|
||||||
|
{
|
||||||
|
table->flush_version=flush_version;
|
||||||
|
table->file->extra(HA_EXTRA_FLUSH);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Free memory and reset for next loop
|
||||||
|
table->file->extra(HA_EXTRA_RESET);
|
||||||
|
}
|
||||||
|
table->in_use=0;
|
||||||
|
if (unused_tables)
|
||||||
|
{
|
||||||
|
table->next=unused_tables; /* Link in last */
|
||||||
|
table->prev=unused_tables->prev;
|
||||||
|
unused_tables->prev=table;
|
||||||
|
table->prev->next=table;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
unused_tables=table->next=table->prev=table;
|
||||||
|
}
|
||||||
|
DBUG_RETURN(found_old_table);
|
||||||
|
}
|
||||||
|
|
||||||
/* Close and delete temporary tables */
|
/* Close and delete temporary tables */
|
||||||
|
|
||||||
void close_temporary(TABLE *table,bool delete_table)
|
void close_temporary(TABLE *table,bool delete_table)
|
||||||
|
@@ -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,
|
|||||||
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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user