mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge bk-internal:/home/bk/mysql-3.23/
into serg.mylan:/usr/home/serg/Abk/mysql client/mysqldump.c: Auto merged BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
This commit is contained in:
@ -5,6 +5,7 @@ bar@bar.mysql.r18.ru
|
||||
bar@bar.udmsearch.izhnet.ru
|
||||
bell@sanja.is.com.ua
|
||||
bk@admin.bk
|
||||
guilhem@mysql.com
|
||||
heikki@donna.mysql.fi
|
||||
heikki@hundin.mysql.fi
|
||||
jani@hynda.mysql.fi
|
||||
@ -31,8 +32,10 @@ salle@geopard.(none)
|
||||
salle@geopard.online.bg
|
||||
sasha@mysql.sashanet.com
|
||||
serg@build.mysql2.com
|
||||
serg@serg.mylan
|
||||
serg@serg.mysql.com
|
||||
serg@sergbook.mysql.com
|
||||
sinisa@rhols221.adsl.netsonic.fi
|
||||
vva@eagle.mysql.r18.ru
|
||||
walrus@mysql.com
|
||||
zak@balfor.local
|
||||
|
@ -30,4 +30,5 @@ enum options { OPT_CHARSETS_DIR=256, OPT_DEFAULT_CHARSET,
|
||||
OPT_LOW_PRIORITY, OPT_AUTO_REPAIR, OPT_COMPRESS,
|
||||
OPT_DROP, OPT_LOCKS, OPT_KEYWORDS, OPT_DELAYED, OPT_OPTIMIZE,
|
||||
OPT_FTB, OPT_LTB, OPT_ENC, OPT_O_ENC, OPT_ESC, OPT_TABLES,
|
||||
OPT_MASTER_DATA, OPT_AUTOCOMMIT, OPT_LOCAL_INFILE};
|
||||
OPT_MASTER_DATA, OPT_AUTOCOMMIT, OPT_LOCAL_INFILE,
|
||||
OPT_DELETE_MASTER_LOGS};
|
||||
|
@ -73,7 +73,8 @@ static my_bool verbose=0,tFlag=0,cFlag=0,dFlag=0,quick=0, extended_insert = 0,
|
||||
ignore=0,opt_drop=0,opt_keywords=0,opt_lock=0,opt_compress=0,
|
||||
opt_delayed=0,create_options=0,opt_quoted=0,opt_databases=0,
|
||||
opt_alldbs=0,opt_create_db=0,opt_first_slave=0,
|
||||
opt_autocommit=0,opt_master_data,opt_disable_keys=0,opt_xml=0;
|
||||
opt_autocommit=0,opt_master_data,opt_disable_keys=0,opt_xml=0,
|
||||
opt_delete_master_logs=0;
|
||||
static MYSQL mysql_connection,*sock=0;
|
||||
static char insert_pat[12 * 1024],*opt_password=0,*current_user=0,
|
||||
*current_host=0,*path=0,*fields_terminated=0,
|
||||
@ -101,6 +102,7 @@ static struct option long_options[] =
|
||||
{"debug", optional_argument, 0, '#'},
|
||||
{"default-character-set", required_argument, 0, OPT_DEFAULT_CHARSET},
|
||||
{"delayed-insert", no_argument, 0, OPT_DELAYED},
|
||||
{"delete-master-logs", no_argument, 0, OPT_DELETE_MASTER_LOGS},
|
||||
{"disable-keys", no_argument, 0, 'K'},
|
||||
{"extended-insert", no_argument, 0, 'e'},
|
||||
{"fields-terminated-by", required_argument, 0, (int) OPT_FTB},
|
||||
@ -206,9 +208,12 @@ static void usage(void)
|
||||
--add-locks Add locks around insert statements.\n\
|
||||
--allow-keywords Allow creation of column names that are keywords.\n\
|
||||
--delayed-insert Insert rows with INSERT DELAYED.\n\
|
||||
--delete-master-logs Issue RESET MASTER on the master just after taking\n\
|
||||
the dump, and before unlocking tables.\n\
|
||||
This will automatically enable --first-slave.\n\
|
||||
--master-data This will cause the master position and filename to \n\
|
||||
be appended to your output. This will automagically \n\
|
||||
enable --first-slave.\n\
|
||||
be appended to your output, before unlocking tables.\n\
|
||||
This will automatically enable --first-slave.\n\
|
||||
-F, --flush-logs Flush logs file in server before starting dump.\n\
|
||||
-f, --force Continue even if we get an sql-error.\n\
|
||||
-h, --host=... Connect to host.\n");
|
||||
@ -317,6 +322,10 @@ static int get_options(int *argc,char ***argv)
|
||||
opt_master_data=1;
|
||||
opt_first_slave=1;
|
||||
break;
|
||||
case OPT_DELETE_MASTER_LOGS:
|
||||
opt_delete_master_logs=1;
|
||||
opt_first_slave=1;
|
||||
break;
|
||||
case OPT_AUTOCOMMIT:
|
||||
opt_autocommit=1;
|
||||
break;
|
||||
@ -1489,6 +1498,11 @@ int main(int argc, char **argv)
|
||||
|
||||
if (opt_first_slave)
|
||||
{
|
||||
if (opt_delete_master_logs && mysql_query(sock, "FLUSH MASTER"))
|
||||
{
|
||||
my_printf_error(0, "Error: Couldn't execute 'FLUSH MASTER': %s",
|
||||
MYF(0), mysql_error(sock));
|
||||
}
|
||||
if (opt_master_data)
|
||||
{
|
||||
if (mysql_query(sock, "SHOW MASTER STATUS") ||
|
||||
@ -1511,11 +1525,6 @@ int main(int argc, char **argv)
|
||||
mysql_free_result(master);
|
||||
}
|
||||
}
|
||||
if (mysql_query(sock, "FLUSH MASTER"))
|
||||
{
|
||||
my_printf_error(0, "Error: Couldn't execute 'FLUSH MASTER': %s",
|
||||
MYF(0), mysql_error(sock));
|
||||
}
|
||||
if (mysql_query(sock, "UNLOCK TABLES"))
|
||||
{
|
||||
my_printf_error(0, "Error: Couldn't execute 'UNLOCK TABLES': %s",
|
||||
|
@ -62,8 +62,8 @@ int _mi_write_blob_record(MI_INFO *info, const byte *record)
|
||||
|
||||
extra=ALIGN_SIZE(MI_MAX_DYN_BLOCK_HEADER)+MI_SPLIT_LENGTH+
|
||||
MI_DYN_DELETE_BLOCK_HEADER+1;
|
||||
reclength=info->s->base.pack_reclength+
|
||||
_my_calc_total_blob_length(info,record)+ extra;
|
||||
reclength= (info->s->base.pack_reclength+ info->s->base.pack_bits+
|
||||
_my_calc_total_blob_length(info,record)+ extra);
|
||||
if (reclength > MI_DYN_MAX_ROW_LENGTH)
|
||||
{
|
||||
my_errno=HA_ERR_TO_BIG_ROW;
|
||||
|
@ -501,3 +501,13 @@ table type possible_keys key key_len ref rows Extra
|
||||
t1 ALL NULL NULL NULL NULL 4
|
||||
Field Type Null Key Default Extra
|
||||
testint int(11) 1
|
||||
a b
|
||||
1 1
|
||||
102 2
|
||||
103 3
|
||||
4 4
|
||||
5 5
|
||||
6 6
|
||||
7 7
|
||||
8 8
|
||||
9 9
|
||||
|
@ -41,3 +41,6 @@ rate_code base_rate
|
||||
cust 20
|
||||
rate_code base_rate
|
||||
cust 20
|
||||
ID Value1 ID Value2
|
||||
ID Value1 ID Value2
|
||||
ID Value1 ID Value2
|
||||
|
@ -537,3 +537,14 @@ drop table t1;
|
||||
create table t1 (testint int not null default 1) type=innodb;
|
||||
desc t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Check update with conflicting key
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a int not null primary key, b int not null, unique (b)) type=innodb;
|
||||
INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
|
||||
# We need the a < 1000 test here to quard against the halloween problems
|
||||
UPDATE t1 set a=a+100 where b between 2 and 3 and a < 1000;
|
||||
SELECT * from t1;
|
||||
drop table t1;
|
||||
|
@ -243,3 +243,17 @@ INSERT INTO t2 VALUES ('rivercats','cust',20);
|
||||
SELECT emp.rate_code, lr.base_rate FROM t1 AS emp LEFT JOIN t2 AS lr USING (siteid, rate_code) WHERE emp.emp_id = 'psmith' AND lr.siteid = 'rivercats';
|
||||
SELECT emp.rate_code, lr.base_rate FROM t1 AS emp LEFT JOIN t2 AS lr USING (siteid, rate_code) WHERE lr.siteid = 'rivercats' AND emp.emp_id = 'psmith';
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
# Problem with internal list handling when reducing WHERE
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (ID INTEGER NOT NULL PRIMARY KEY, Value1 VARCHAR(255));
|
||||
CREATE TABLE t2 (ID INTEGER NOT NULL PRIMARY KEY, Value2 VARCHAR(255));
|
||||
INSERT INTO t1 VALUES (1, 'A');
|
||||
INSERT INTO t2 VALUES (1, 'B');
|
||||
|
||||
SELECT * FROM t1 NATURAL JOIN t2 WHERE 1 AND (Value1 = 'A' AND Value2 <> 'B');
|
||||
SELECT * FROM t1 NATURAL JOIN t2 WHERE 1 AND Value1 = 'A' AND Value2 <> 'B';
|
||||
SELECT * FROM t1 NATURAL JOIN t2 WHERE (Value1 = 'A' AND Value2 <> 'B') AND 1;
|
||||
drop table t1,t2;
|
||||
|
@ -244,7 +244,7 @@ int, i967 int, i968 int, i969 int, i970 int, i971 int, i972 int, i973 int, i974
|
||||
int, i975 int, i976 int, i977 int, i978 int, i979 int, i980 int, i981 int, i982
|
||||
int, i983 int, i984 int, i985 int, i986 int, i987 int, i988 int, i989 int, i990
|
||||
int, i991 int, i992 int, i993 int, i994 int, i995 int, i996 int, i997 int, i998
|
||||
int, i999 int, i1000 int) row_format=dynamic;
|
||||
int, i999 int, i1000 int, b blob) row_format=dynamic;
|
||||
insert into t1 values (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
@ -283,6 +283,6 @@ insert into t1 values (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, "Sergei");
|
||||
drop table if exists t1;
|
||||
|
||||
|
@ -1,21 +1,21 @@
|
||||
source include/master-slave.inc;
|
||||
connection master;
|
||||
use test;
|
||||
drop database if exists d1;
|
||||
create database d1;
|
||||
create table d1.t1 ( n int);
|
||||
alter table d1.t1 add m int;
|
||||
insert into d1.t1 values (1,2);
|
||||
create table d1.t2 (n int);
|
||||
insert into d1.t2 values (45);
|
||||
rename table d1.t2 to d1.t3, d1.t1 to d1.t2;
|
||||
drop database if exists test_$1;
|
||||
create database test_$1;
|
||||
create table test_$1.t1 ( n int);
|
||||
alter table test_$1.t1 add m int;
|
||||
insert into test_$1.t1 values (1,2);
|
||||
create table test_$1.t2 (n int);
|
||||
insert into test_$1.t2 values (45);
|
||||
rename table test_$1.t2 to test_$1.t3, test_$1.t1 to test_$1.t2;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
select * from d1.t2;
|
||||
select * from d1.t3;
|
||||
select * from test_$1.t2;
|
||||
select * from test_$1.t3;
|
||||
connection master;
|
||||
drop database d1;
|
||||
drop database test_$1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
@ -85,7 +85,7 @@ static my_bool get_word(struct simpleconfig_buf_st *fb, char *buf)
|
||||
endptr = fb->buf;
|
||||
}
|
||||
|
||||
while (!isspace(*endptr))
|
||||
while (*endptr && !isspace(*endptr))
|
||||
*buf++= *endptr++;
|
||||
*buf=0;
|
||||
fb->p = endptr;
|
||||
|
@ -21,13 +21,18 @@
|
||||
#include <stdarg.h>
|
||||
#include <m_ctype.h>
|
||||
|
||||
|
||||
int my_snprintf(char* to, size_t n, const char* fmt, ...)
|
||||
{
|
||||
int result;
|
||||
va_list args;
|
||||
va_start(args,fmt);
|
||||
return my_vsnprintf(to, n, fmt, args);
|
||||
result= my_vsnprintf(to, n, fmt, args);
|
||||
va_end(args);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap)
|
||||
{
|
||||
char *start=to, *end=to+n-1;
|
||||
@ -79,6 +84,7 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap)
|
||||
return (uint) (to - start);
|
||||
}
|
||||
|
||||
|
||||
#ifdef MAIN
|
||||
static void my_printf(const char * fmt, ...)
|
||||
{
|
||||
@ -92,6 +98,7 @@ static void my_printf(const char * fmt, ...)
|
||||
va_end(ar);
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
|
@ -113,7 +113,7 @@ my_bool innobase_fast_shutdown = TRUE;
|
||||
2 : write to the log file at each commit, but flush to disk only once per
|
||||
second */
|
||||
|
||||
long innobase_flush_log_at_trx_commit = 0;
|
||||
long innobase_flush_log_at_trx_commit = 1;
|
||||
|
||||
/* The following counter is used to convey information to InnoDB
|
||||
about server activity: in selects it is not sensible to call
|
||||
|
@ -953,7 +953,7 @@ int ha_myisam::create(const char *name, register TABLE *form,
|
||||
&keydef, form->keys*sizeof(MI_KEYDEF),
|
||||
&keyseg,
|
||||
((form->key_parts + form->keys) * sizeof(MI_KEYSEG)),
|
||||
0)))
|
||||
NullS)))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
pos=form->key_info;
|
||||
|
@ -269,5 +269,13 @@ bool check_if_key_used(TABLE *table, uint idx, List<Item> &fields)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
If table handler has primary key as part of the index, check that primary
|
||||
key is not updated
|
||||
*/
|
||||
if (idx != table->primary_key && table->primary_key < MAX_KEY &&
|
||||
(table->file->option_flag() & HA_PRIMARY_KEY_IN_READ_INDEX))
|
||||
return check_if_key_used(table, table->primary_key, fields);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1067,6 +1067,8 @@ void sql_print_error(const char *format,...)
|
||||
char buff[1024];
|
||||
my_vsnprintf(buff,sizeof(buff)-1,format,args);
|
||||
DBUG_PRINT("error",("%s",buff));
|
||||
va_end(args);
|
||||
va_start(args,format);
|
||||
}
|
||||
#endif
|
||||
skr=time(NULL);
|
||||
|
@ -304,7 +304,7 @@ void Start_log_event::print(FILE* file, bool short_form, char* last_db)
|
||||
print_header(file);
|
||||
fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version,
|
||||
server_version);
|
||||
print_timestamp(file, (time_t*)&created);
|
||||
print_timestamp(file, &created);
|
||||
fputc('\n', file);
|
||||
fflush(file);
|
||||
}
|
||||
@ -671,9 +671,9 @@ void Load_log_event::print(FILE* file, bool short_form, char* last_db)
|
||||
|
||||
fprintf(file, "LOAD DATA INFILE '%s' ", fname);
|
||||
|
||||
if(sql_ex.opt_flags && REPLACE_FLAG )
|
||||
if(sql_ex.opt_flags & REPLACE_FLAG )
|
||||
fprintf(file," REPLACE ");
|
||||
else if(sql_ex.opt_flags && IGNORE_FLAG )
|
||||
else if(sql_ex.opt_flags & IGNORE_FLAG )
|
||||
fprintf(file," IGNORE ");
|
||||
|
||||
fprintf(file, "INTO TABLE %s ", table_name);
|
||||
@ -685,7 +685,7 @@ void Load_log_event::print(FILE* file, bool short_form, char* last_db)
|
||||
|
||||
if(!(sql_ex.empty_flags & ENCLOSED_EMPTY))
|
||||
{
|
||||
if(sql_ex.opt_flags && OPT_ENCLOSED_FLAG )
|
||||
if(sql_ex.opt_flags & OPT_ENCLOSED_FLAG )
|
||||
fprintf(file," OPTIONALLY ");
|
||||
fprintf(file, " ENCLOSED BY ");
|
||||
pretty_print_char(file, sql_ex.enclosed);
|
||||
|
@ -327,13 +327,13 @@ extern char server_version[SERVER_VERSION_LENGTH];
|
||||
class Start_log_event: public Log_event
|
||||
{
|
||||
public:
|
||||
uint32 created;
|
||||
time_t created;
|
||||
uint16 binlog_version;
|
||||
char server_version[50];
|
||||
|
||||
Start_log_event() :Log_event(time(NULL)),binlog_version(BINLOG_VERSION)
|
||||
{
|
||||
created = (uint32) when;
|
||||
created = (time_t) when;
|
||||
memcpy(server_version, ::server_version, sizeof(server_version));
|
||||
}
|
||||
Start_log_event(IO_CACHE* file, time_t when_arg, uint32 server_id_arg) :
|
||||
@ -345,7 +345,7 @@ public:
|
||||
binlog_version = uint2korr(buf+4);
|
||||
memcpy(server_version, buf + 6, sizeof(server_version));
|
||||
server_version[sizeof(server_version)-1]=0;
|
||||
created = uint4korr(buf + 6 + sizeof(server_version));
|
||||
created = (time_t) uint4korr(buf + 6 + sizeof(server_version));
|
||||
}
|
||||
Start_log_event(const char* buf);
|
||||
|
||||
@ -354,7 +354,7 @@ public:
|
||||
int write_data(IO_CACHE* file);
|
||||
int get_data_size()
|
||||
{
|
||||
// sizeof(binlog_version) + sizeof(server_version) sizeof(created)
|
||||
// size(binlog_version) + sizeof(server_version) + size(created)
|
||||
return 2 + sizeof(server_version) + 4;
|
||||
}
|
||||
void print(FILE* file, bool short_form = 0, char* last_db = 0);
|
||||
|
@ -515,8 +515,6 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
|
||||
host ? host : "(Null)",
|
||||
db ? db : "(Null)",
|
||||
user ? user : "(Null)"));
|
||||
thr_alarm_init(&alarmed);
|
||||
thr_alarm(&alarmed,(uint) net_read_timeout,&alarm_buff);
|
||||
|
||||
bzero((char*) &mysql->options,sizeof(mysql->options));
|
||||
net->vio = 0; /* If something goes wrong */
|
||||
@ -598,7 +596,11 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
|
||||
host=LOCAL_HOST;
|
||||
sprintf(host_info=buff,ER(CR_TCP_CONNECTION),host);
|
||||
DBUG_PRINT("info",("Server name: '%s'. TCP sock: %d", host,port));
|
||||
if ((sock = socket(AF_INET,SOCK_STREAM,0)) == SOCKET_ERROR)
|
||||
thr_alarm_init(&alarmed);
|
||||
thr_alarm(&alarmed, net_read_timeout, &alarm_buff);
|
||||
sock = (my_socket) socket(AF_INET,SOCK_STREAM,0);
|
||||
thr_end_alarm(&alarmed);
|
||||
if (sock == SOCKET_ERROR)
|
||||
{
|
||||
net->last_errno=CR_IPSOCK_ERROR;
|
||||
sprintf(net->last_error,ER(net->last_errno),socket_errno);
|
||||
@ -641,12 +643,8 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
|
||||
socket_errno,host));
|
||||
net->last_errno= CR_CONN_HOST_ERROR;
|
||||
sprintf(net->last_error ,ER(CR_CONN_HOST_ERROR), host, socket_errno);
|
||||
if (thr_alarm_in_use(&alarmed))
|
||||
thr_end_alarm(&alarmed);
|
||||
goto error;
|
||||
}
|
||||
if (thr_alarm_in_use(&alarmed))
|
||||
thr_end_alarm(&alarmed);
|
||||
}
|
||||
|
||||
if (!net->vio || my_net_init(net, net->vio))
|
||||
|
@ -785,7 +785,7 @@ void clean_up(bool print_message)
|
||||
if (!opt_bootstrap)
|
||||
(void) my_delete(pidfile_name,MYF(0)); // This may not always exist
|
||||
#endif
|
||||
if (print_message)
|
||||
if (print_message && errmesg)
|
||||
sql_print_error(ER(ER_SHUTDOWN_COMPLETE),my_progname);
|
||||
x_free((gptr) my_errmsg[ERRMAPP]); /* Free messages */
|
||||
my_thread_end();
|
||||
@ -1433,8 +1433,12 @@ static void *signal_hand(void *arg __attribute__((unused)))
|
||||
my_thread_init(); // Init new thread
|
||||
DBUG_ENTER("signal_hand");
|
||||
|
||||
/* Setup alarm handler */
|
||||
init_thr_alarm(max_connections+max_insert_delayed_threads);
|
||||
/*
|
||||
Setup alarm handler
|
||||
This should actually be '+ max_number_of_slaves' instead of +10,
|
||||
but the +10 should be quite safe.
|
||||
*/
|
||||
init_thr_alarm(max_connections+max_insert_delayed_threads+10);
|
||||
#if SIGINT != THR_KILL_SIGNAL
|
||||
(void) sigemptyset(&set); // Setup up SIGINT for debug
|
||||
(void) sigaddset(&set,SIGINT); // For debugging
|
||||
|
@ -784,9 +784,6 @@ static int safe_sleep(THD* thd, int sec)
|
||||
*/
|
||||
thr_alarm(&alarmed, 2 * nap_time,&alarm_buff);
|
||||
sleep(nap_time);
|
||||
// if we wake up before the alarm goes off, hit the button
|
||||
// so it will not wake up the wife and kids :-)
|
||||
if (thr_alarm_in_use(&alarmed))
|
||||
thr_end_alarm(&alarmed);
|
||||
|
||||
if (slave_killed(thd))
|
||||
@ -1100,9 +1097,9 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len)
|
||||
else
|
||||
{
|
||||
enum enum_duplicates handle_dup = DUP_IGNORE;
|
||||
if(lev->sql_ex.opt_flags && REPLACE_FLAG)
|
||||
if(lev->sql_ex.opt_flags & REPLACE_FLAG)
|
||||
handle_dup = DUP_REPLACE;
|
||||
sql_exchange ex((char*)lev->fname, lev->sql_ex.opt_flags &&
|
||||
sql_exchange ex((char*)lev->fname, lev->sql_ex.opt_flags &
|
||||
DUMPFILE_FLAG );
|
||||
String field_term(&lev->sql_ex.field_term, 1),
|
||||
enclosed(&lev->sql_ex.enclosed, 1),
|
||||
@ -1139,7 +1136,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len)
|
||||
|
||||
List<Item> fields;
|
||||
lev->set_fields(fields);
|
||||
thd->slave_proxy_id = thd->thread_id;
|
||||
thd->slave_proxy_id = thread_id;
|
||||
thd->net.vio = net->vio;
|
||||
// mysql_load will use thd->net to read the file
|
||||
thd->net.pkt_nr = net->pkt_nr;
|
||||
|
@ -30,6 +30,7 @@ int generate_table(THD *thd, TABLE_LIST *table_list, TABLE *locked_table)
|
||||
char path[FN_REFLEN];
|
||||
int error;
|
||||
TABLE **table_ptr;
|
||||
my_bool lock_open_locked= 0;
|
||||
DBUG_ENTER("generate_table");
|
||||
|
||||
thd->proc_info="generate_table";
|
||||
@ -102,7 +103,7 @@ int generate_table(THD *thd, TABLE_LIST *table_list, TABLE *locked_table)
|
||||
error= ha_create_table(path,&create_info,1) ? -1 : 0;
|
||||
if (thd->locked_tables && reopen_tables(thd,1,0))
|
||||
error= -1;
|
||||
VOID(pthread_mutex_unlock(&LOCK_open));
|
||||
lock_open_locked= 1; // Unlock mutex before return
|
||||
}
|
||||
if (!error)
|
||||
{
|
||||
@ -114,6 +115,8 @@ int generate_table(THD *thd, TABLE_LIST *table_list, TABLE *locked_table)
|
||||
}
|
||||
send_ok(&thd->net); // This should return record count
|
||||
}
|
||||
if (lock_open_locked)
|
||||
VOID(pthread_mutex_unlock(&LOCK_open));
|
||||
DBUG_RETURN(error ? -1 : 0);
|
||||
}
|
||||
|
||||
|
@ -160,6 +160,8 @@ public:
|
||||
*new_list.last=current->next;
|
||||
current->info=new_list.first->info;
|
||||
current->next=new_list.first->next;
|
||||
if (list->last == ¤t->next && new_list.elements > 1)
|
||||
list->last= new_list.last;
|
||||
list->elements+=new_list.elements-1;
|
||||
}
|
||||
return ret_value; // return old element
|
||||
|
@ -36,6 +36,8 @@
|
||||
it can be compiled with the UNSIGNED and/or LONGLONG flag set
|
||||
*/
|
||||
|
||||
#define strtoll glob_strtoll /* Fix for True64 */
|
||||
|
||||
#include <global.h>
|
||||
#include "m_string.h"
|
||||
#include "m_ctype.h"
|
||||
|
Reference in New Issue
Block a user