Commit 9914a0c8 authored by unknown's avatar unknown

Redefinition of myisam_bulk_insert_tree_size

Removed new error message
Fixed test case for varbinary
Threads are again killable in "merge_buffers"
Cleanup of sql_repl.cc
SHOW OPEN TABLES now works when no tables are opened


Docs/manual.texi:
  Redefinition of myisam_bulk_insert_tree_size
client/insert_test.c:
  Changed to use mysql_real_connect()
include/mysql.h:
  Moved things in mysql_options to optimize these for 64 bit processors
include/mysqld_error.h:
  Removed new error message
myisam/mi_write.c:
  Use myisam_bulk_insert_tree_size per table instead of per index
mysql-test/t/varbinary.test:
  Fixed test case for varbinary
mysys/tree.c:
  Fixed missing if
sql/filesort.cc:
  Threads are again killable in "merge_buffers"
sql/log_event.h:
  cleanup
sql/share/czech/errmsg.txt:
  Removed new error message
sql/share/danish/errmsg.txt:
  Removed new error message
sql/share/dutch/errmsg.txt:
  Removed new error message
sql/share/english/errmsg.txt:
  Removed new error message
sql/share/estonian/errmsg.txt:
  Removed new error message
sql/share/french/errmsg.txt:
  Removed new error message
sql/share/german/errmsg.txt:
  Removed new error message
sql/share/greek/errmsg.txt:
  Removed new error message
sql/share/hungarian/errmsg.txt:
  Removed new error message
sql/share/italian/errmsg.txt:
  Removed new error message
sql/share/japanese/errmsg.txt:
  Removed new error message
sql/share/korean/errmsg.txt:
  Removed new error message
sql/share/norwegian-ny/errmsg.txt:
  Removed new error message
sql/share/norwegian/errmsg.txt:
  Removed new error message
sql/share/polish/errmsg.txt:
  Removed new error message
sql/share/portuguese/errmsg.txt:
  Removed new error message
sql/share/romanian/errmsg.txt:
  Removed new error message
sql/share/russian/errmsg.txt:
  Removed new error message
sql/share/slovak/errmsg.txt:
  Removed new error message
sql/share/spanish/errmsg.txt:
  Removed new error message
sql/share/swedish/errmsg.txt:
  Removed new error message
sql/sql_class.h:
  Cleanup
sql/sql_delete.cc:
  Cleanup
sql/sql_repl.cc:
  Cleanup
sql/sql_show.cc:
  SHOW OPEN TABLES now works when no tables are opened
sql/sql_sort.h:
  Threads are again killable in "merge_buffers"
sql/uniques.cc:
  Threads are again killable in "merge_buffers"
parent 0b083a0d
......@@ -22266,11 +22266,11 @@ The buffer that is allocated when sorting the index when doing a
@code{ALTER TABLE}.
@item @code{myisam_bulk_insert_tree_size}
@strong{MySQL} uses special tree-like cache to make bulk inserts (that is,
@code{MyISAM} uses special tree-like cache to make bulk inserts (that is,
@code{INSERT ... SELECT},
@code{INSERT ... VALUES (...), (...), ...}, and
@code{LOAD DATA INFILE}) faster. This variable limits
the size of the cache tree in bytes @strong{per thread, per index}.
the size of the cache tree in bytes @strong{per thread, per table}.
Default value is 8 MB.
@item @code{myisam_max_extra_sort_file_size}.
......@@ -23960,7 +23960,7 @@ The following options to @code{mysqld} can be used to change the behavior of
@item @code{--delay-key-write-for-all-tables} @tab Don't flush key buffers between writes for any MyISAM table
@item @code{-O myisam_max_extra_sort_file_size=#} @tab Used to help @strong{MySQL} to decide when to use the slow but safe key cache index create method. @strong{NOTE} that this parameter is given in megabytes!
@item @code{-O myisam_max_sort_file_size=#} @tab Don't use the fast sort index method to created index if the temporary file would get bigger than this. @strong{NOTE} that this paramter is given in megabytes!
@item @code{-O myisam_bulk_insert_tree_size=#} @tab Size of tree cache used in bulk insert optimization. @strong{NOTE} that this is a limit @strong{per index}!
@item @code{-O myisam_bulk_insert_tree_size=#} @tab Size of tree cache used in bulk insert optimization. @strong{NOTE} that this is the total size used for all index in one table.
@end multitable
The automatic recovery is activated if you start @code{mysqld} with
......@@ -34,19 +34,13 @@ int main(int argc, char **argv)
exit(1);
}
if (!(sock = mysql_connect(&mysql,NULL,0,0)))
if (!(sock = mysql_real_connect(&mysql,NULL,NULL,NULL,argv[1],0,NULL,0)))
{
fprintf(stderr,"Couldn't connect to engine!\n%s\n",mysql_error(&mysql));
perror("");
exit(1);
}
if (mysql_select_db(sock,argv[1]))
{
fprintf(stderr,"Couldn't select database %s!\n%s\n",argv[1],
mysql_error(sock));
}
num = atoi(argv[2]);
count = 0;
while (count < num)
......
......@@ -126,24 +126,30 @@ typedef struct st_mysql_data {
struct st_mysql_options {
unsigned int connect_timeout,client_flag;
my_bool compress,named_pipe;
my_bool rpl_probe; /* on connect, find out the replication
role of the server, and establish connections
to all the peers */
my_bool rpl_parse; /* each call to mysql_real_query() will parse
it to tell if it is a read or a write, and
direct it to the slave or the master */
my_bool no_master_reads; /* if set, never read from
a master,only from slave, when doing
a read that is replication-aware */
unsigned int port;
char *host,*init_command,*user,*password,*unix_socket,*db;
char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name;
my_bool use_ssl; /* if to use SSL or not */
char *ssl_key; /* PEM key file */
char *ssl_cert; /* PEM cert file */
char *ssl_ca; /* PEM CA file */
char *ssl_capath; /* PEM directory of CA-s? */
my_bool use_ssl; /* if to use SSL or not */
my_bool compress,named_pipe;
/*
on connect, find out the replication role of the server, and
establish connections to all the peers
*/
my_bool rpl_probe;
/*
each call to mysql_real_query() will parse it to tell if it is a read
or a write, and direct it to the slave or the master
*/
my_bool rpl_parse;
/*
if set, never read from a master,only from slave, when doing
a read that is replication-aware
*/
my_bool no_master_reads;
};
enum mysql_option { MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS,
......@@ -154,12 +160,13 @@ enum mysql_option { MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS,
enum mysql_status { MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,
MYSQL_STATUS_USE_RESULT};
/* there are three types of queries - the ones that have to go to
the master, the ones that go to a slave, and the adminstrative
type which must happen on the pivot connectioin
/*
There are three types of queries - the ones that have to go to
the master, the ones that go to a slave, and the adminstrative
type which must happen on the pivot connectioin
*/
enum mysql_rpl_type { MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE,
MYSQL_RPL_ADMIN };
MYSQL_RPL_ADMIN };
typedef struct st_mysql {
......@@ -191,15 +198,13 @@ typedef struct st_mysql {
struct st_mysql* master, *next_slave;
struct st_mysql* last_used_slave; /* needed for round-robin slave pick */
struct st_mysql* last_used_con; /* needed for send/read/store/use
result to work
correctly with replication
*/
my_bool rpl_pivot; /* set if this is the original connection,
not a master or a slave we have added though
mysql_rpl_probe() or mysql_set_master()/
mysql_add_slave()
*/
/* needed for send/read/store/use result to work correctly with replication */
struct st_mysql* last_used_con;
/*
Set if this is the original connection, not a master or a slave we have
added though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave()
*/
my_bool rpl_pivot;
} MYSQL;
......@@ -246,11 +251,8 @@ int STDCALL mysql_ssl_set(MYSQL *mysql, const char *key,
char * STDCALL mysql_ssl_cipher(MYSQL *mysql);
int STDCALL mysql_ssl_clear(MYSQL *mysql);
#endif /* HAVE_OPENSSL */
MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host,
const char *user, const char *passwd);
my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
const char *passwd, const char *db);
#if MYSQL_VERSION_ID >= 32200
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
const char *user,
const char *passwd,
......@@ -258,14 +260,6 @@ MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
unsigned int port,
const char *unix_socket,
unsigned int clientflag);
#else
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
const char *user,
const char *passwd,
unsigned int port,
const char *unix_socket,
unsigned int clientflag);
#endif
void STDCALL mysql_close(MYSQL *sock);
int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
int STDCALL mysql_query(MYSQL *mysql, const char *q);
......@@ -285,8 +279,10 @@ int STDCALL mysql_slave_query(MYSQL *mysql, const char *q,
int STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q,
unsigned int length);
/* enable/disable parsing of all queries to decide
if they go on master or slave */
/*
enable/disable parsing of all queries to decide if they go on master or
slave
*/
void STDCALL mysql_enable_rpl_parse(MYSQL* mysql);
void STDCALL mysql_disable_rpl_parse(MYSQL* mysql);
/* get the value of the parse flag */
......@@ -305,17 +301,14 @@ int STDCALL mysql_rpl_probe(MYSQL* mysql);
/* set the master, close/free the old one, if it is not a pivot */
int STDCALL mysql_set_master(MYSQL* mysql, const char* host,
unsigned int port,
const char* user,
const char* passwd);
unsigned int port,
const char* user,
const char* passwd);
int STDCALL mysql_add_slave(MYSQL* mysql, const char* host,
unsigned int port,
const char* user,
const char* passwd);
unsigned int port,
const char* user,
const char* passwd);
int STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
int STDCALL mysql_shutdown(MYSQL *mysql);
int STDCALL mysql_dump_debug_info(MYSQL *mysql);
int STDCALL mysql_refresh(MYSQL *mysql,
......@@ -364,9 +357,15 @@ char * STDCALL mysql_odbc_escape_string(MYSQL *mysql,
void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name);
unsigned int STDCALL mysql_thread_safe(void);
#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT)
#ifndef USE_OLD_FUNCTIONS
MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host,
const char *user, const char *passwd);
int STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
#endif
/* new api functions */
#define HAVE_MYSQL_REAL_CONNECT
......
......@@ -212,6 +212,5 @@
#define ER_CREATE_DB_WITH_READ_LOCK 1209
#define ER_CONNECT_TO_MASTER 1210
#define ER_QUERY_ON_MASTER 1211
#define ER_SHOW_BINLOG_EVENTS 1212
#define ER_SHOW_NEW_MASTER 1213
#define ER_ERROR_MESSAGES 214
#define ER_ERROR_WHEN_EXECUTING_COMMAND 1212
#define ER_ERROR_MESSAGES 213
......@@ -770,8 +770,9 @@ int _mi_init_bulk_insert(MI_INFO *info)
if (info->bulk_insert)
return 0;
info->bulk_insert=(TREE *)my_malloc(
(sizeof(TREE)+sizeof(bulk_insert_param))*share->base.keys, MYF(0));
info->bulk_insert=(TREE *)
my_malloc((sizeof(TREE)+sizeof(bulk_insert_param))*share->base.keys,
MYF(0));
if (!info->bulk_insert)
return HA_ERR_OUT_OF_MEM;
......@@ -785,9 +786,10 @@ int _mi_init_bulk_insert(MI_INFO *info)
if (!(key->flag & HA_NOSAME) && share->base.auto_key != i+1
&& test(share->state.key_map & ((ulonglong) 1 << i)))
{
init_tree(& info->bulk_insert[i], 0, myisam_bulk_insert_tree_size, 0,
(qsort_cmp2)keys_compare, 0,
(tree_element_free) keys_free, (void *)params);
init_tree(& info->bulk_insert[i], 0,
myisam_bulk_insert_tree_size / share->base.keys, 0,
(qsort_cmp2)keys_compare, 0,
(tree_element_free) keys_free, (void *)params);
}
else
info->bulk_insert[i].root=0;
......
......@@ -21,7 +21,7 @@ drop table t1;
#
--error 1064
select x'hello';
--error 1064
--error 1054
select 0xfg;
#
......
......@@ -97,7 +97,8 @@ void init_tree(TREE *tree, uint default_alloc_size, uint memory_limit,
DBUG_ENTER("init_tree");
DBUG_PRINT("enter",("tree: %lx size: %d",tree,size));
default_alloc_size=DEFAULT_ALLOC_SIZE;
if (!default_alloc_size)
default_alloc_size= DEFAULT_ALLOC_SIZE;
bzero((gptr) &tree->null_element,sizeof(tree->null_element));
tree->root= &tree->null_element;
tree->compare=compare;
......
......@@ -86,11 +86,10 @@ ha_rows filesort(TABLE *table, SORT_FIELD *sortorder, uint s_length,
my_b_clear(&tempfile);
buffpek= (BUFFPEK *) NULL; sort_keys= (uchar **) NULL; error= 1;
maxbuffer=1;
bzero((char*) &param,sizeof(param));
param.ref_length= table->file->ref_length;
param.sort_length=sortlength(sortorder,s_length)+ param.ref_length;
param.max_rows= max_rows;
param.examined_rows=0;
param.unique_buff=0;
if (select && select->quick)
{
......@@ -686,9 +685,16 @@ int merge_buffers(SORTPARAM *param, IO_CACHE *from_file,
BUFFPEK *buffpek,**refpek;
QUEUE queue;
qsort2_cmp cmp;
volatile bool *killed= &current_thd->killed;
bool not_killable;
DBUG_ENTER("merge_buffers");
statistic_increment(filesort_merge_passes, &LOCK_status);
if (param->not_killable)
{
killed= &not_killable;
not_killable=0;
}
error=0;
offset=(sort_length=param->sort_length)-param->ref_length;
......@@ -738,6 +744,10 @@ int merge_buffers(SORTPARAM *param, IO_CACHE *from_file,
while (queue.elements > 1)
{
if (*killed)
{
error=1; goto err; /* purecov: inspected */
}
for (;;)
{
buffpek=(BUFFPEK*) queue_top(&queue);
......
......@@ -245,9 +245,9 @@ public:
int get_data_size()
{
return q_len + db_len + 2 +
sizeof(uint32) // thread_id
+ sizeof(uint32) // exec_time
+ sizeof(uint16) // error_code
4 // thread_id
+ 4 // exec_time
+ 2 // error_code
;
}
......
......@@ -222,5 +222,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -216,5 +216,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -213,5 +213,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -213,5 +213,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -217,5 +217,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -213,5 +213,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -216,5 +216,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -213,5 +213,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -215,5 +215,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -213,5 +213,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -215,5 +215,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -213,5 +213,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -215,5 +215,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -215,5 +215,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -217,5 +217,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -213,5 +213,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -217,5 +217,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -216,5 +216,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -221,5 +221,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -214,5 +214,4 @@
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"Error when executing command %s: %-.128s",
......@@ -209,9 +209,8 @@
"Lock wait timeout exceeded",
"The total number of locks exceeds the lock table size",
"Update locks cannot be acquired during a READ UNCOMMITTED transaction",
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error in SHOW BINLOG EVENTS: %-.128s",
"Error in SHOW NEW MASTER: %-.128s",
"DROP DATABASE är inte tillåtet när man har ett globalt läs-lås",
"CREATE DATABASE är inte tillåtet när man har ett globalt läs-lås",
"Fick fel vid anslutning till master: %-.128s",
"Fick fel vid utförande av command på mastern: %-.128s",
"Fick fel vid utförande av %s: %-.128s",
......@@ -421,7 +421,7 @@ public:
virtual int prepare(List<Item> &list) { return 0; }
virtual bool send_fields(List<Item> &list,uint flag)=0;
virtual bool send_data(List<Item> &items)=0;
virtual void initialize_tables (JOIN *join=0) {};
virtual void initialize_tables (JOIN *join=0) {}
virtual void send_error(uint errcode,const char *err)=0;
virtual bool send_eof()=0;
virtual void abort() {}
......
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB & Sinisa
/* Copyright (C) 2000 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -316,14 +316,14 @@ multi_delete::multi_delete(THD *thd_arg, TABLE_LIST *dt,
#endif
(void) dt->table->file->extra(HA_EXTRA_NO_READCHECK);
(void) dt->table->file->extra(HA_EXTRA_NO_KEYREAD);
/* Don't use key read with MULTI-TABLE-DELETE */
(void) dt->table->file->extra(HA_EXTRA_NO_KEYREAD);
dt->table->used_keys=0;
for (dt=dt->next ; dt ; dt=dt->next,counter++)
{
TABLE *table=dt->table;
(void) dt->table->file->extra(HA_EXTRA_NO_READCHECK);
(void) dt->table->file->extra(HA_EXTRA_NO_KEYREAD);
(void) dt->table->file->extra(HA_EXTRA_NO_READCHECK);
(void) dt->table->file->extra(HA_EXTRA_NO_KEYREAD);
#ifdef SINISAS_STRIP
tempfiles[counter]=(IO_CACHE *) sql_alloc(sizeof(IO_CACHE));
if (open_cached_file(tempfiles[counter], mysql_tmpdir,TEMP_PREFIX,
......@@ -366,50 +366,38 @@ multi_delete::prepare(List<Item> &values)
DBUG_RETURN(0);
}
inline static void
link_in_list(SQL_LIST *list,byte *element,byte **next)
{
list->elements++;
(*list->next)=element;
list->next=next;
*next=0;
}
void
multi_delete::initialize_tables(JOIN *join)
{
SQL_LIST *new_list=(SQL_LIST *) sql_alloc(sizeof(SQL_LIST));
new_list->elements=0; new_list->first=0;
new_list->next= (byte**) &(new_list->first);
TABLE_LIST *walk;
table_map tables_to_delete_from=0;
for (walk= delete_tables ; walk ; walk=walk->next)
tables_to_delete_from|= walk->table->map;
walk= delete_tables;
for (JOIN_TAB *tab=join->join_tab, *end=join->join_tab+join->tables;
tab < end;
tab++)
{
TABLE_LIST *walk;
for (walk=(TABLE_LIST*) delete_tables ; walk ; walk=walk->next)
if (!strcmp(tab->table->path,walk->table->path))
break;
if (walk) // Table need not be the one to be deleted
if (tab->table->map & tables_to_delete_from)
{
register TABLE_LIST *ptr = (TABLE_LIST *) sql_alloc(sizeof(TABLE_LIST));
memcpy(ptr,walk,sizeof(TABLE_LIST)); ptr->next=0;
link_in_list(new_list,(byte*) ptr,(byte**) &ptr->next);
/* We are going to delete from this table */
walk->table=tab->table;
walk=walk->next;
}
}
delete_tables=(TABLE_LIST *)new_list->first;
return;
}
multi_delete::~multi_delete()
{
/* Add back EXTRA_READCHECK; In 4.0.1 we shouldn't need this anymore */
for (table_being_deleted=delete_tables ;
table_being_deleted ;
table_being_deleted=table_being_deleted->next)
{
VOID(table_being_deleted->table->file->extra(HA_EXTRA_READCHECK));
}
(void) table_being_deleted->table->file->extra(HA_EXTRA_READCHECK);
for (uint counter = 0; counter < num_of_tables-1; counter++)
{
if (tempfiles[counter])
......
This diff is collapsed.
......@@ -110,7 +110,7 @@ int mysqld_show_open_tables(THD *thd,const char *wild)
if (send_fields(thd,field_list,1))
DBUG_RETURN(1);
if (!(open_list=list_open_tables(thd,wild)))
if (!(open_list=list_open_tables(thd,wild)) && thd->fatal_error)
DBUG_RETURN(-1);
for ( ; open_list ; open_list=open_list->next)
......
......@@ -37,6 +37,7 @@ typedef struct st_sort_param {
SORT_FIELD *local_sortorder;
SORT_FIELD *end;
uchar *unique_buff;
bool not_killable;
#ifdef USE_STRCOLL
char* tmp_buffer;
#endif
......
......@@ -128,10 +128,12 @@ bool Unique::get(TABLE *table)
return 1;
reinit_io_cache(outfile,WRITE_CACHE,0L,0,0);
bzero((char*) &sort_param,sizeof(sort_param));
sort_param.max_rows= elements;
sort_param.sort_form=table;
sort_param.sort_length=sort_param.ref_length=tree.size_of_element;
sort_param.keys= max_in_memory_size / sort_param.sort_length;
sort_param.not_killable=1;
if (!(sort_buffer=(uchar*) my_malloc((sort_param.keys+1) *
sort_param.sort_length,
......
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