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
|
bar@bar.udmsearch.izhnet.ru
|
||||||
bell@sanja.is.com.ua
|
bell@sanja.is.com.ua
|
||||||
bk@admin.bk
|
bk@admin.bk
|
||||||
|
guilhem@mysql.com
|
||||||
heikki@donna.mysql.fi
|
heikki@donna.mysql.fi
|
||||||
heikki@hundin.mysql.fi
|
heikki@hundin.mysql.fi
|
||||||
jani@hynda.mysql.fi
|
jani@hynda.mysql.fi
|
||||||
@ -31,8 +32,10 @@ salle@geopard.(none)
|
|||||||
salle@geopard.online.bg
|
salle@geopard.online.bg
|
||||||
sasha@mysql.sashanet.com
|
sasha@mysql.sashanet.com
|
||||||
serg@build.mysql2.com
|
serg@build.mysql2.com
|
||||||
|
serg@serg.mylan
|
||||||
serg@serg.mysql.com
|
serg@serg.mysql.com
|
||||||
serg@sergbook.mysql.com
|
serg@sergbook.mysql.com
|
||||||
sinisa@rhols221.adsl.netsonic.fi
|
sinisa@rhols221.adsl.netsonic.fi
|
||||||
|
vva@eagle.mysql.r18.ru
|
||||||
walrus@mysql.com
|
walrus@mysql.com
|
||||||
zak@balfor.local
|
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_LOW_PRIORITY, OPT_AUTO_REPAIR, OPT_COMPRESS,
|
||||||
OPT_DROP, OPT_LOCKS, OPT_KEYWORDS, OPT_DELAYED, OPT_OPTIMIZE,
|
OPT_DROP, OPT_LOCKS, OPT_KEYWORDS, OPT_DELAYED, OPT_OPTIMIZE,
|
||||||
OPT_FTB, OPT_LTB, OPT_ENC, OPT_O_ENC, OPT_ESC, OPT_TABLES,
|
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,
|
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_delayed=0,create_options=0,opt_quoted=0,opt_databases=0,
|
||||||
opt_alldbs=0,opt_create_db=0,opt_first_slave=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 MYSQL mysql_connection,*sock=0;
|
||||||
static char insert_pat[12 * 1024],*opt_password=0,*current_user=0,
|
static char insert_pat[12 * 1024],*opt_password=0,*current_user=0,
|
||||||
*current_host=0,*path=0,*fields_terminated=0,
|
*current_host=0,*path=0,*fields_terminated=0,
|
||||||
@ -101,6 +102,7 @@ static struct option long_options[] =
|
|||||||
{"debug", optional_argument, 0, '#'},
|
{"debug", optional_argument, 0, '#'},
|
||||||
{"default-character-set", required_argument, 0, OPT_DEFAULT_CHARSET},
|
{"default-character-set", required_argument, 0, OPT_DEFAULT_CHARSET},
|
||||||
{"delayed-insert", no_argument, 0, OPT_DELAYED},
|
{"delayed-insert", no_argument, 0, OPT_DELAYED},
|
||||||
|
{"delete-master-logs", no_argument, 0, OPT_DELETE_MASTER_LOGS},
|
||||||
{"disable-keys", no_argument, 0, 'K'},
|
{"disable-keys", no_argument, 0, 'K'},
|
||||||
{"extended-insert", no_argument, 0, 'e'},
|
{"extended-insert", no_argument, 0, 'e'},
|
||||||
{"fields-terminated-by", required_argument, 0, (int) OPT_FTB},
|
{"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\
|
--add-locks Add locks around insert statements.\n\
|
||||||
--allow-keywords Allow creation of column names that are keywords.\n\
|
--allow-keywords Allow creation of column names that are keywords.\n\
|
||||||
--delayed-insert Insert rows with INSERT DELAYED.\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\
|
--master-data This will cause the master position and filename to \n\
|
||||||
be appended to your output. This will automagically \n\
|
be appended to your output, before unlocking tables.\n\
|
||||||
enable --first-slave.\n\
|
This will automatically enable --first-slave.\n\
|
||||||
-F, --flush-logs Flush logs file in server before starting dump.\n\
|
-F, --flush-logs Flush logs file in server before starting dump.\n\
|
||||||
-f, --force Continue even if we get an sql-error.\n\
|
-f, --force Continue even if we get an sql-error.\n\
|
||||||
-h, --host=... Connect to host.\n");
|
-h, --host=... Connect to host.\n");
|
||||||
@ -317,6 +322,10 @@ static int get_options(int *argc,char ***argv)
|
|||||||
opt_master_data=1;
|
opt_master_data=1;
|
||||||
opt_first_slave=1;
|
opt_first_slave=1;
|
||||||
break;
|
break;
|
||||||
|
case OPT_DELETE_MASTER_LOGS:
|
||||||
|
opt_delete_master_logs=1;
|
||||||
|
opt_first_slave=1;
|
||||||
|
break;
|
||||||
case OPT_AUTOCOMMIT:
|
case OPT_AUTOCOMMIT:
|
||||||
opt_autocommit=1;
|
opt_autocommit=1;
|
||||||
break;
|
break;
|
||||||
@ -1489,6 +1498,11 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (opt_first_slave)
|
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 (opt_master_data)
|
||||||
{
|
{
|
||||||
if (mysql_query(sock, "SHOW MASTER STATUS") ||
|
if (mysql_query(sock, "SHOW MASTER STATUS") ||
|
||||||
@ -1511,11 +1525,6 @@ int main(int argc, char **argv)
|
|||||||
mysql_free_result(master);
|
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"))
|
if (mysql_query(sock, "UNLOCK TABLES"))
|
||||||
{
|
{
|
||||||
my_printf_error(0, "Error: Couldn't execute 'UNLOCK TABLES': %s",
|
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+
|
extra=ALIGN_SIZE(MI_MAX_DYN_BLOCK_HEADER)+MI_SPLIT_LENGTH+
|
||||||
MI_DYN_DELETE_BLOCK_HEADER+1;
|
MI_DYN_DELETE_BLOCK_HEADER+1;
|
||||||
reclength=info->s->base.pack_reclength+
|
reclength= (info->s->base.pack_reclength+ info->s->base.pack_bits+
|
||||||
_my_calc_total_blob_length(info,record)+ extra;
|
_my_calc_total_blob_length(info,record)+ extra);
|
||||||
if (reclength > MI_DYN_MAX_ROW_LENGTH)
|
if (reclength > MI_DYN_MAX_ROW_LENGTH)
|
||||||
{
|
{
|
||||||
my_errno=HA_ERR_TO_BIG_ROW;
|
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
|
t1 ALL NULL NULL NULL NULL 4
|
||||||
Field Type Null Key Default Extra
|
Field Type Null Key Default Extra
|
||||||
testint int(11) 1
|
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
|
cust 20
|
||||||
rate_code base_rate
|
rate_code base_rate
|
||||||
cust 20
|
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;
|
create table t1 (testint int not null default 1) type=innodb;
|
||||||
desc t1;
|
desc t1;
|
||||||
drop table 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 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';
|
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;
|
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, 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, 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, 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,
|
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,
|
||||||
@ -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, 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;
|
drop table if exists t1;
|
||||||
|
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
connection master;
|
connection master;
|
||||||
use test;
|
use test;
|
||||||
drop database if exists d1;
|
drop database if exists test_$1;
|
||||||
create database d1;
|
create database test_$1;
|
||||||
create table d1.t1 ( n int);
|
create table test_$1.t1 ( n int);
|
||||||
alter table d1.t1 add m int;
|
alter table test_$1.t1 add m int;
|
||||||
insert into d1.t1 values (1,2);
|
insert into test_$1.t1 values (1,2);
|
||||||
create table d1.t2 (n int);
|
create table test_$1.t2 (n int);
|
||||||
insert into d1.t2 values (45);
|
insert into test_$1.t2 values (45);
|
||||||
rename table d1.t2 to d1.t3, d1.t1 to d1.t2;
|
rename table test_$1.t2 to test_$1.t3, test_$1.t1 to test_$1.t2;
|
||||||
save_master_pos;
|
save_master_pos;
|
||||||
connection slave;
|
connection slave;
|
||||||
sync_with_master;
|
sync_with_master;
|
||||||
select * from d1.t2;
|
select * from test_$1.t2;
|
||||||
select * from d1.t3;
|
select * from test_$1.t3;
|
||||||
connection master;
|
connection master;
|
||||||
drop database d1;
|
drop database test_$1;
|
||||||
save_master_pos;
|
save_master_pos;
|
||||||
connection slave;
|
connection slave;
|
||||||
sync_with_master;
|
sync_with_master;
|
||||||
|
@ -85,7 +85,7 @@ static my_bool get_word(struct simpleconfig_buf_st *fb, char *buf)
|
|||||||
endptr = fb->buf;
|
endptr = fb->buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!isspace(*endptr))
|
while (*endptr && !isspace(*endptr))
|
||||||
*buf++= *endptr++;
|
*buf++= *endptr++;
|
||||||
*buf=0;
|
*buf=0;
|
||||||
fb->p = endptr;
|
fb->p = endptr;
|
||||||
|
@ -21,13 +21,18 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <m_ctype.h>
|
#include <m_ctype.h>
|
||||||
|
|
||||||
|
|
||||||
int my_snprintf(char* to, size_t n, const char* fmt, ...)
|
int my_snprintf(char* to, size_t n, const char* fmt, ...)
|
||||||
{
|
{
|
||||||
|
int result;
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args,fmt);
|
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)
|
int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap)
|
||||||
{
|
{
|
||||||
char *start=to, *end=to+n-1;
|
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);
|
return (uint) (to - start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef MAIN
|
#ifdef MAIN
|
||||||
static void my_printf(const char * fmt, ...)
|
static void my_printf(const char * fmt, ...)
|
||||||
{
|
{
|
||||||
@ -92,6 +98,7 @@ static void my_printf(const char * fmt, ...)
|
|||||||
va_end(ar);
|
va_end(ar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main()
|
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
|
2 : write to the log file at each commit, but flush to disk only once per
|
||||||
second */
|
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
|
/* The following counter is used to convey information to InnoDB
|
||||||
about server activity: in selects it is not sensible to call
|
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),
|
&keydef, form->keys*sizeof(MI_KEYDEF),
|
||||||
&keyseg,
|
&keyseg,
|
||||||
((form->key_parts + form->keys) * sizeof(MI_KEYSEG)),
|
((form->key_parts + form->keys) * sizeof(MI_KEYSEG)),
|
||||||
0)))
|
NullS)))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
pos=form->key_info;
|
pos=form->key_info;
|
||||||
|
@ -269,5 +269,13 @@ bool check_if_key_used(TABLE *table, uint idx, List<Item> &fields)
|
|||||||
return 1;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1067,6 +1067,8 @@ void sql_print_error(const char *format,...)
|
|||||||
char buff[1024];
|
char buff[1024];
|
||||||
my_vsnprintf(buff,sizeof(buff)-1,format,args);
|
my_vsnprintf(buff,sizeof(buff)-1,format,args);
|
||||||
DBUG_PRINT("error",("%s",buff));
|
DBUG_PRINT("error",("%s",buff));
|
||||||
|
va_end(args);
|
||||||
|
va_start(args,format);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
skr=time(NULL);
|
skr=time(NULL);
|
||||||
|
@ -304,7 +304,7 @@ void Start_log_event::print(FILE* file, bool short_form, char* last_db)
|
|||||||
print_header(file);
|
print_header(file);
|
||||||
fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version,
|
fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version,
|
||||||
server_version);
|
server_version);
|
||||||
print_timestamp(file, (time_t*)&created);
|
print_timestamp(file, &created);
|
||||||
fputc('\n', file);
|
fputc('\n', file);
|
||||||
fflush(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);
|
fprintf(file, "LOAD DATA INFILE '%s' ", fname);
|
||||||
|
|
||||||
if(sql_ex.opt_flags && REPLACE_FLAG )
|
if(sql_ex.opt_flags & REPLACE_FLAG )
|
||||||
fprintf(file," REPLACE ");
|
fprintf(file," REPLACE ");
|
||||||
else if(sql_ex.opt_flags && IGNORE_FLAG )
|
else if(sql_ex.opt_flags & IGNORE_FLAG )
|
||||||
fprintf(file," IGNORE ");
|
fprintf(file," IGNORE ");
|
||||||
|
|
||||||
fprintf(file, "INTO TABLE %s ", table_name);
|
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.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," OPTIONALLY ");
|
||||||
fprintf(file, " ENCLOSED BY ");
|
fprintf(file, " ENCLOSED BY ");
|
||||||
pretty_print_char(file, sql_ex.enclosed);
|
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
|
class Start_log_event: public Log_event
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
uint32 created;
|
time_t created;
|
||||||
uint16 binlog_version;
|
uint16 binlog_version;
|
||||||
char server_version[50];
|
char server_version[50];
|
||||||
|
|
||||||
Start_log_event() :Log_event(time(NULL)),binlog_version(BINLOG_VERSION)
|
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));
|
memcpy(server_version, ::server_version, sizeof(server_version));
|
||||||
}
|
}
|
||||||
Start_log_event(IO_CACHE* file, time_t when_arg, uint32 server_id_arg) :
|
Start_log_event(IO_CACHE* file, time_t when_arg, uint32 server_id_arg) :
|
||||||
@ -345,7 +345,7 @@ public:
|
|||||||
binlog_version = uint2korr(buf+4);
|
binlog_version = uint2korr(buf+4);
|
||||||
memcpy(server_version, buf + 6, sizeof(server_version));
|
memcpy(server_version, buf + 6, sizeof(server_version));
|
||||||
server_version[sizeof(server_version)-1]=0;
|
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);
|
Start_log_event(const char* buf);
|
||||||
|
|
||||||
@ -354,7 +354,7 @@ public:
|
|||||||
int write_data(IO_CACHE* file);
|
int write_data(IO_CACHE* file);
|
||||||
int get_data_size()
|
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;
|
return 2 + sizeof(server_version) + 4;
|
||||||
}
|
}
|
||||||
void print(FILE* file, bool short_form = 0, char* last_db = 0);
|
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)",
|
host ? host : "(Null)",
|
||||||
db ? db : "(Null)",
|
db ? db : "(Null)",
|
||||||
user ? user : "(Null)"));
|
user ? user : "(Null)"));
|
||||||
thr_alarm_init(&alarmed);
|
|
||||||
thr_alarm(&alarmed,(uint) net_read_timeout,&alarm_buff);
|
|
||||||
|
|
||||||
bzero((char*) &mysql->options,sizeof(mysql->options));
|
bzero((char*) &mysql->options,sizeof(mysql->options));
|
||||||
net->vio = 0; /* If something goes wrong */
|
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;
|
host=LOCAL_HOST;
|
||||||
sprintf(host_info=buff,ER(CR_TCP_CONNECTION),host);
|
sprintf(host_info=buff,ER(CR_TCP_CONNECTION),host);
|
||||||
DBUG_PRINT("info",("Server name: '%s'. TCP sock: %d", host,port));
|
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;
|
net->last_errno=CR_IPSOCK_ERROR;
|
||||||
sprintf(net->last_error,ER(net->last_errno),socket_errno);
|
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));
|
socket_errno,host));
|
||||||
net->last_errno= CR_CONN_HOST_ERROR;
|
net->last_errno= CR_CONN_HOST_ERROR;
|
||||||
sprintf(net->last_error ,ER(CR_CONN_HOST_ERROR), host, socket_errno);
|
sprintf(net->last_error ,ER(CR_CONN_HOST_ERROR), host, socket_errno);
|
||||||
if (thr_alarm_in_use(&alarmed))
|
|
||||||
thr_end_alarm(&alarmed);
|
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (thr_alarm_in_use(&alarmed))
|
|
||||||
thr_end_alarm(&alarmed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!net->vio || my_net_init(net, net->vio))
|
if (!net->vio || my_net_init(net, net->vio))
|
||||||
|
@ -785,7 +785,7 @@ void clean_up(bool print_message)
|
|||||||
if (!opt_bootstrap)
|
if (!opt_bootstrap)
|
||||||
(void) my_delete(pidfile_name,MYF(0)); // This may not always exist
|
(void) my_delete(pidfile_name,MYF(0)); // This may not always exist
|
||||||
#endif
|
#endif
|
||||||
if (print_message)
|
if (print_message && errmesg)
|
||||||
sql_print_error(ER(ER_SHUTDOWN_COMPLETE),my_progname);
|
sql_print_error(ER(ER_SHUTDOWN_COMPLETE),my_progname);
|
||||||
x_free((gptr) my_errmsg[ERRMAPP]); /* Free messages */
|
x_free((gptr) my_errmsg[ERRMAPP]); /* Free messages */
|
||||||
my_thread_end();
|
my_thread_end();
|
||||||
@ -1433,8 +1433,12 @@ static void *signal_hand(void *arg __attribute__((unused)))
|
|||||||
my_thread_init(); // Init new thread
|
my_thread_init(); // Init new thread
|
||||||
DBUG_ENTER("signal_hand");
|
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
|
#if SIGINT != THR_KILL_SIGNAL
|
||||||
(void) sigemptyset(&set); // Setup up SIGINT for debug
|
(void) sigemptyset(&set); // Setup up SIGINT for debug
|
||||||
(void) sigaddset(&set,SIGINT); // For debugging
|
(void) sigaddset(&set,SIGINT); // For debugging
|
||||||
|
11
sql/slave.cc
11
sql/slave.cc
@ -784,10 +784,7 @@ static int safe_sleep(THD* thd, int sec)
|
|||||||
*/
|
*/
|
||||||
thr_alarm(&alarmed, 2 * nap_time,&alarm_buff);
|
thr_alarm(&alarmed, 2 * nap_time,&alarm_buff);
|
||||||
sleep(nap_time);
|
sleep(nap_time);
|
||||||
// if we wake up before the alarm goes off, hit the button
|
thr_end_alarm(&alarmed);
|
||||||
// so it will not wake up the wife and kids :-)
|
|
||||||
if (thr_alarm_in_use(&alarmed))
|
|
||||||
thr_end_alarm(&alarmed);
|
|
||||||
|
|
||||||
if (slave_killed(thd))
|
if (slave_killed(thd))
|
||||||
return 1;
|
return 1;
|
||||||
@ -1100,9 +1097,9 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
enum enum_duplicates handle_dup = DUP_IGNORE;
|
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;
|
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 );
|
DUMPFILE_FLAG );
|
||||||
String field_term(&lev->sql_ex.field_term, 1),
|
String field_term(&lev->sql_ex.field_term, 1),
|
||||||
enclosed(&lev->sql_ex.enclosed, 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;
|
List<Item> fields;
|
||||||
lev->set_fields(fields);
|
lev->set_fields(fields);
|
||||||
thd->slave_proxy_id = thd->thread_id;
|
thd->slave_proxy_id = thread_id;
|
||||||
thd->net.vio = net->vio;
|
thd->net.vio = net->vio;
|
||||||
// mysql_load will use thd->net to read the file
|
// mysql_load will use thd->net to read the file
|
||||||
thd->net.pkt_nr = net->pkt_nr;
|
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];
|
char path[FN_REFLEN];
|
||||||
int error;
|
int error;
|
||||||
TABLE **table_ptr;
|
TABLE **table_ptr;
|
||||||
|
my_bool lock_open_locked= 0;
|
||||||
DBUG_ENTER("generate_table");
|
DBUG_ENTER("generate_table");
|
||||||
|
|
||||||
thd->proc_info="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;
|
error= ha_create_table(path,&create_info,1) ? -1 : 0;
|
||||||
if (thd->locked_tables && reopen_tables(thd,1,0))
|
if (thd->locked_tables && reopen_tables(thd,1,0))
|
||||||
error= -1;
|
error= -1;
|
||||||
VOID(pthread_mutex_unlock(&LOCK_open));
|
lock_open_locked= 1; // Unlock mutex before return
|
||||||
}
|
}
|
||||||
if (!error)
|
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
|
send_ok(&thd->net); // This should return record count
|
||||||
}
|
}
|
||||||
|
if (lock_open_locked)
|
||||||
|
VOID(pthread_mutex_unlock(&LOCK_open));
|
||||||
DBUG_RETURN(error ? -1 : 0);
|
DBUG_RETURN(error ? -1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,6 +160,8 @@ public:
|
|||||||
*new_list.last=current->next;
|
*new_list.last=current->next;
|
||||||
current->info=new_list.first->info;
|
current->info=new_list.first->info;
|
||||||
current->next=new_list.first->next;
|
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;
|
list->elements+=new_list.elements-1;
|
||||||
}
|
}
|
||||||
return ret_value; // return old element
|
return ret_value; // return old element
|
||||||
|
@ -36,6 +36,8 @@
|
|||||||
it can be compiled with the UNSIGNED and/or LONGLONG flag set
|
it can be compiled with the UNSIGNED and/or LONGLONG flag set
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define strtoll glob_strtoll /* Fix for True64 */
|
||||||
|
|
||||||
#include <global.h>
|
#include <global.h>
|
||||||
#include "m_string.h"
|
#include "m_string.h"
|
||||||
#include "m_ctype.h"
|
#include "m_ctype.h"
|
||||||
|
Reference in New Issue
Block a user