mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Fix autoincrement for signed columns (Bug #1366)
Fixed problem with char > 128 in QUOTE() function. (Bug #1868) Disable creation of symlinks if my_disable_symlink is set Fixed searching of TEXT with end space. (Bug #1651) Fixed caching bug in multi-table-update where same table was used twice. (Bug #1711) Fixed problem with UNIX_TIMESTAMP() for timestamps close to 0. (Bug #1998) Fixed timestamp.test
This commit is contained in:
@@ -544,6 +544,26 @@ int multi_update::prepare(List<Item> ¬_used_values)
|
||||
for (i=0 ; i < table_count ; i++)
|
||||
set_if_bigger(max_fields, fields_for_table[i]->elements);
|
||||
copy_field= new Copy_field[max_fields];
|
||||
|
||||
/*
|
||||
Mark all copies of tables that are updates to ensure that
|
||||
init_read_record() will not try to enable a cache on them
|
||||
|
||||
The problem is that for queries like
|
||||
|
||||
UPDATE t1, t1 AS t2 SET t1.b=t2.c WHERE t1.a=t2.a;
|
||||
|
||||
the row buffer may contain things that doesn't match what is on disk
|
||||
which will cause an error when reading a row.
|
||||
(This issue is mostly relevent for MyISAM tables)
|
||||
*/
|
||||
for (table_ref= all_tables; table_ref; table_ref=table_ref->next)
|
||||
{
|
||||
TABLE *table=table_ref->table;
|
||||
if (!(tables_to_update & table->map) &&
|
||||
check_dup(table_ref->db, table_ref->real_name, update_tables))
|
||||
table->no_cache= 1; // Disable row cache
|
||||
}
|
||||
DBUG_RETURN(thd->fatal_error != 0);
|
||||
}
|
||||
|
||||
@@ -684,7 +704,7 @@ multi_update::~multi_update()
|
||||
{
|
||||
TABLE_LIST *table;
|
||||
for (table= update_tables ; table; table= table->next)
|
||||
table->table->no_keyread=0;
|
||||
table->table->no_keyread= table->table->no_cache= 0;
|
||||
|
||||
if (tmp_tables)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user