Manual merge from mysql-5.1-bugteam into mysql-trunk-merge.
Conflicts: Text conflict in .bzr-mysql/default.conf Text conflict in mysql-test/suite/rpl/r/rpl_loaddata_fatal.result Text conflict in mysql-test/suite/rpl/r/rpl_stm_log.result Text conflict in mysql-test/t/mysqlbinlog.test Text conflict in sql/sql_acl.cc Text conflict in sql/sql_servers.cc Text conflict in sql/sql_update.cc Text conflict in support-files/mysql.spec.sh
This commit is contained in:
commit
0a5b406fc5
13
configure.in
13
configure.in
@ -31,12 +31,14 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0
|
|||||||
# Remember that regexps needs to quote [ and ] since this is run through m4
|
# Remember that regexps needs to quote [ and ] since this is run through m4
|
||||||
# We take some made up examples
|
# We take some made up examples
|
||||||
#
|
#
|
||||||
# VERSION 5.1.40sp1-alpha 5.0.34a
|
# VERSION 5.1.40sp1-alpha 5.0.34a 5.5.1-m2
|
||||||
# MYSQL_NO_DASH_VERSION 5.1.40sp1 5.0.34a
|
# MYSQL_U_SCORE_VERSION 5.1.40sp1_alpha 5.0.34a 5.5.1_m2
|
||||||
# MYSQL_NUMERIC_VERSION 5.1.40 5.0.34
|
# MYSQL_NO_DASH_VERSION 5.1.40sp1 5.0.34a 5.5.1
|
||||||
# MYSQL_BASE_VERSION 5.1 5.0
|
# MYSQL_NUMERIC_VERSION 5.1.40 5.0.34 5.5.1
|
||||||
# MYSQL_VERSION_ID 50140 50034
|
# MYSQL_BASE_VERSION 5.1 5.0 5.5
|
||||||
|
# MYSQL_VERSION_ID 50140 50034 50501
|
||||||
#
|
#
|
||||||
|
MYSQL_U_SCORE_VERSION=`echo $VERSION | sed -e "s|-|_|"`
|
||||||
MYSQL_NO_DASH_VERSION=`echo $VERSION | sed -e "s|-.*$||"`
|
MYSQL_NO_DASH_VERSION=`echo $VERSION | sed -e "s|-.*$||"`
|
||||||
MYSQL_NUMERIC_VERSION=`echo $MYSQL_NO_DASH_VERSION | sed -e "s|[[a-z]][[a-z0-9]]*$||"`
|
MYSQL_NUMERIC_VERSION=`echo $MYSQL_NO_DASH_VERSION | sed -e "s|[[a-z]][[a-z0-9]]*$||"`
|
||||||
MYSQL_BASE_VERSION=`echo $MYSQL_NUMERIC_VERSION | sed -e "s|\.[[^.]]*$||"`
|
MYSQL_BASE_VERSION=`echo $MYSQL_NUMERIC_VERSION | sed -e "s|\.[[^.]]*$||"`
|
||||||
@ -74,6 +76,7 @@ romanian russian serbian slovak spanish swedish ukrainian"
|
|||||||
#####
|
#####
|
||||||
#####
|
#####
|
||||||
|
|
||||||
|
AC_SUBST(MYSQL_U_SCORE_VERSION)
|
||||||
AC_SUBST(MYSQL_NO_DASH_VERSION)
|
AC_SUBST(MYSQL_NO_DASH_VERSION)
|
||||||
AC_SUBST(MYSQL_BASE_VERSION)
|
AC_SUBST(MYSQL_BASE_VERSION)
|
||||||
AC_SUBST(MYSQL_VERSION_ID)
|
AC_SUBST(MYSQL_VERSION_ID)
|
||||||
|
@ -305,6 +305,7 @@ private:
|
|||||||
bool ValidateSignature(SignerList*);
|
bool ValidateSignature(SignerList*);
|
||||||
bool ConfirmSignature(Source&);
|
bool ConfirmSignature(Source&);
|
||||||
void GetKey();
|
void GetKey();
|
||||||
|
char* AddTag(char*, const char*, const char*, word32, word32);
|
||||||
void GetName(NameType);
|
void GetName(NameType);
|
||||||
void GetValidity();
|
void GetValidity();
|
||||||
void GetDate(DateType);
|
void GetDate(DateType);
|
||||||
|
@ -652,6 +652,23 @@ word32 CertDecoder::GetDigest()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *CertDecoder::AddTag(char *ptr, const char *buf_end,
|
||||||
|
const char *tag_name, word32 tag_name_length,
|
||||||
|
word32 tag_value_length)
|
||||||
|
{
|
||||||
|
if (ptr + tag_name_length + tag_value_length > buf_end)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
memcpy(ptr, tag_name, tag_name_length);
|
||||||
|
ptr+= tag_name_length;
|
||||||
|
|
||||||
|
memcpy(ptr, source_.get_current(), tag_value_length);
|
||||||
|
ptr+= tag_value_length;
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// process NAME, either issuer or subject
|
// process NAME, either issuer or subject
|
||||||
void CertDecoder::GetName(NameType nt)
|
void CertDecoder::GetName(NameType nt)
|
||||||
{
|
{
|
||||||
@ -659,11 +676,21 @@ void CertDecoder::GetName(NameType nt)
|
|||||||
|
|
||||||
SHA sha;
|
SHA sha;
|
||||||
word32 length = GetSequence(); // length of all distinguished names
|
word32 length = GetSequence(); // length of all distinguished names
|
||||||
assert (length < ASN_NAME_MAX);
|
|
||||||
|
if (length >= ASN_NAME_MAX)
|
||||||
|
goto err;
|
||||||
length += source_.get_index();
|
length += source_.get_index();
|
||||||
|
|
||||||
char* ptr = (nt == ISSUER) ? issuer_ : subject_;
|
char *ptr, *buf_end;
|
||||||
word32 idx = 0;
|
|
||||||
|
if (nt == ISSUER) {
|
||||||
|
ptr= issuer_;
|
||||||
|
buf_end= ptr + sizeof(issuer_) - 1; // 1 byte for trailing 0
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ptr= subject_;
|
||||||
|
buf_end= ptr + sizeof(subject_) - 1; // 1 byte for trailing 0
|
||||||
|
}
|
||||||
|
|
||||||
while (source_.get_index() < length) {
|
while (source_.get_index() < length) {
|
||||||
GetSet();
|
GetSet();
|
||||||
@ -685,47 +712,36 @@ void CertDecoder::GetName(NameType nt)
|
|||||||
byte id = source_.next();
|
byte id = source_.next();
|
||||||
b = source_.next(); // strType
|
b = source_.next(); // strType
|
||||||
word32 strLen = GetLength(source_);
|
word32 strLen = GetLength(source_);
|
||||||
bool copy = false;
|
|
||||||
|
|
||||||
if (id == COMMON_NAME) {
|
switch (id) {
|
||||||
memcpy(&ptr[idx], "/CN=", 4);
|
case COMMON_NAME:
|
||||||
idx += 4;
|
if (!(ptr= AddTag(ptr, buf_end, "/CN=", 4, strLen)))
|
||||||
copy = true;
|
goto err;
|
||||||
}
|
break;
|
||||||
else if (id == SUR_NAME) {
|
case SUR_NAME:
|
||||||
memcpy(&ptr[idx], "/SN=", 4);
|
if (!(ptr= AddTag(ptr, buf_end, "/SN=", 4, strLen)))
|
||||||
idx += 4;
|
goto err;
|
||||||
copy = true;
|
break;
|
||||||
}
|
case COUNTRY_NAME:
|
||||||
else if (id == COUNTRY_NAME) {
|
if (!(ptr= AddTag(ptr, buf_end, "/C=", 3, strLen)))
|
||||||
memcpy(&ptr[idx], "/C=", 3);
|
goto err;
|
||||||
idx += 3;
|
break;
|
||||||
copy = true;
|
case LOCALITY_NAME:
|
||||||
}
|
if (!(ptr= AddTag(ptr, buf_end, "/L=", 3, strLen)))
|
||||||
else if (id == LOCALITY_NAME) {
|
goto err;
|
||||||
memcpy(&ptr[idx], "/L=", 3);
|
break;
|
||||||
idx += 3;
|
case STATE_NAME:
|
||||||
copy = true;
|
if (!(ptr= AddTag(ptr, buf_end, "/ST=", 4, strLen)))
|
||||||
}
|
goto err;
|
||||||
else if (id == STATE_NAME) {
|
break;
|
||||||
memcpy(&ptr[idx], "/ST=", 4);
|
case ORG_NAME:
|
||||||
idx += 4;
|
if (!(ptr= AddTag(ptr, buf_end, "/O=", 3, strLen)))
|
||||||
copy = true;
|
goto err;
|
||||||
}
|
break;
|
||||||
else if (id == ORG_NAME) {
|
case ORGUNIT_NAME:
|
||||||
memcpy(&ptr[idx], "/O=", 3);
|
if (!(ptr= AddTag(ptr, buf_end, "/OU=", 4, strLen)))
|
||||||
idx += 3;
|
goto err;
|
||||||
copy = true;
|
break;
|
||||||
}
|
|
||||||
else if (id == ORGUNIT_NAME) {
|
|
||||||
memcpy(&ptr[idx], "/OU=", 4);
|
|
||||||
idx += 4;
|
|
||||||
copy = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (copy) {
|
|
||||||
memcpy(&ptr[idx], source_.get_current(), strLen);
|
|
||||||
idx += strLen;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sha.Update(source_.get_current(), strLen);
|
sha.Update(source_.get_current(), strLen);
|
||||||
@ -739,23 +755,20 @@ void CertDecoder::GetName(NameType nt)
|
|||||||
source_.advance(oidSz + 1);
|
source_.advance(oidSz + 1);
|
||||||
word32 length = GetLength(source_);
|
word32 length = GetLength(source_);
|
||||||
|
|
||||||
if (email) {
|
if (email && !(ptr= AddTag(ptr, buf_end, "/emailAddress=", 14, length)))
|
||||||
memcpy(&ptr[idx], "/emailAddress=", 14);
|
goto err;
|
||||||
idx += 14;
|
|
||||||
|
|
||||||
memcpy(&ptr[idx], source_.get_current(), length);
|
|
||||||
idx += length;
|
|
||||||
}
|
|
||||||
|
|
||||||
source_.advance(length);
|
source_.advance(length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ptr[idx++] = 0;
|
*ptr= 0;
|
||||||
|
|
||||||
if (nt == ISSUER)
|
sha.Final(nt == ISSUER ? issuerHash_ : subjectHash_);
|
||||||
sha.Final(issuerHash_);
|
|
||||||
else
|
return;
|
||||||
sha.Final(subjectHash_);
|
|
||||||
|
err:
|
||||||
|
source_.SetError(CONTENT_E);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -237,4 +237,18 @@ source include/diff_tables.inc;
|
|||||||
|
|
||||||
-- sync_slave_with_master
|
-- sync_slave_with_master
|
||||||
|
|
||||||
|
# BUG#49479: LOAD DATA INFILE is binlogged without escaping field names
|
||||||
|
-- source include/master-slave-reset.inc
|
||||||
|
-- connection master
|
||||||
|
use test;
|
||||||
|
CREATE TABLE t1 (`key` TEXT, `text` TEXT);
|
||||||
|
|
||||||
|
LOAD DATA INFILE '../../std_data/loaddata2.dat' REPLACE INTO TABLE `t1` FIELDS TERMINATED BY ',';
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
-- sync_slave_with_master
|
||||||
|
-- connection master
|
||||||
|
DROP TABLE t1;
|
||||||
|
-- sync_slave_with_master
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
# Vs slave. #
|
# Vs slave. #
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
|
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
||||||
|
|
||||||
# Begin clean up test section
|
# Begin clean up test section
|
||||||
connection master;
|
connection master;
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
@ -43,10 +45,12 @@ RETURN tmp;
|
|||||||
END|
|
END|
|
||||||
delimiter ;|
|
delimiter ;|
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO test.t1 VALUES (null,test.f1()),(null,test.f1()),(null,test.f1());
|
INSERT INTO test.t1 VALUES (null,test.f1()),(null,test.f1()),(null,test.f1());
|
||||||
sleep 6;
|
sleep 6;
|
||||||
INSERT INTO test.t1 VALUES (null,test.f1()),(null,test.f1()),(null,test.f1());
|
INSERT INTO test.t1 VALUES (null,test.f1()),(null,test.f1()),(null,test.f1());
|
||||||
sleep 6;
|
sleep 6;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
#Select in this test are used for debugging
|
#Select in this test are used for debugging
|
||||||
#select * from test.t1;
|
#select * from test.t1;
|
||||||
@ -56,7 +60,9 @@ sleep 6;
|
|||||||
connection master;
|
connection master;
|
||||||
SET AUTOCOMMIT=0;
|
SET AUTOCOMMIT=0;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO test.t1 VALUES (null,test.f1());
|
INSERT INTO test.t1 VALUES (null,test.f1());
|
||||||
|
--enable_warnings
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
SET AUTOCOMMIT=1;
|
SET AUTOCOMMIT=1;
|
||||||
#select * from test.t1;
|
#select * from test.t1;
|
||||||
|
16
mysql-test/include/truncate_file.inc
Normal file
16
mysql-test/include/truncate_file.inc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# truncate a giving file, all contents of the file are be cleared
|
||||||
|
|
||||||
|
if (`SELECT 'x$file' = 'x'`)
|
||||||
|
{
|
||||||
|
--echo Please assign a file name to $file!!
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
let TRUNCATE_FILE= $file;
|
||||||
|
|
||||||
|
perl;
|
||||||
|
use Env;
|
||||||
|
Env::import('TRUNCATE_FILE');
|
||||||
|
open FILE, '>', $TRUNCATE_FILE || die "Can not open file $file";
|
||||||
|
close FILE;
|
||||||
|
EOF
|
@ -1,4 +1,5 @@
|
|||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP PROCEDURE IF EXISTS p1;
|
||||||
CREATE TABLE t1 ( number INT NOT NULL, alpha CHAR(6) NOT NULL );
|
CREATE TABLE t1 ( number INT NOT NULL, alpha CHAR(6) NOT NULL );
|
||||||
INSERT INTO t1 VALUES (1413006,'idlfmv'),
|
INSERT INTO t1 VALUES (1413006,'idlfmv'),
|
||||||
(1413065,'smpsfz'),(1413127,'sljrhx'),(1413304,'qerfnd');
|
(1413065,'smpsfz'),(1413127,'sljrhx'),(1413304,'qerfnd');
|
||||||
@ -119,4 +120,14 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE t2 index NULL PRIMARY 102 NULL 3 Using index
|
1 SIMPLE t2 index NULL PRIMARY 102 NULL 3 Using index
|
||||||
1 SIMPLE t1 eq_ref PRIMARY,a PRIMARY 318 func,const,const 1
|
1 SIMPLE t1 eq_ref PRIMARY,a PRIMARY 318 func,const,const 1
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
#
|
||||||
|
# Bug #50096: CONCAT_WS inside procedure returning wrong data
|
||||||
|
#
|
||||||
|
CREATE PROCEDURE p1(a varchar(255), b int, c int)
|
||||||
|
SET @query = CONCAT_WS(",", a, b, c);
|
||||||
|
CALL p1("abcde", "0", "1234");
|
||||||
|
SELECT @query;
|
||||||
|
@query
|
||||||
|
abcde,0,1234
|
||||||
|
DROP PROCEDURE p1;
|
||||||
# End of 5.1 tests
|
# End of 5.1 tests
|
||||||
|
@ -44,16 +44,16 @@ SET TIMESTAMP=1000000000/*!*/;
|
|||||||
insert into t2 values ()
|
insert into t2 values ()
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (word)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`word`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (word)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`word`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (word)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`word`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (word)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`word`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
@ -144,16 +144,16 @@ SET TIMESTAMP=1000000000/*!*/;
|
|||||||
insert into t2 values ()
|
insert into t2 values ()
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (word)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`word`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (word)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`word`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (word)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`word`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (word)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`word`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
@ -359,29 +359,29 @@ SET @@session.collation_database=DEFAULT/*!*/;
|
|||||||
create table t1 (a varchar(64) character set utf8)
|
create table t1 (a varchar(64) character set utf8)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.collation_database=7/*!*/;
|
SET @@session.collation_database=7/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.collation_database=DEFAULT/*!*/;
|
SET @@session.collation_database=DEFAULT/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.collation_database=7/*!*/;
|
SET @@session.collation_database=7/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-a-0' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-a-0' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
SET @@session.collation_database=DEFAULT/*!*/;
|
SET @@session.collation_database=DEFAULT/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-b-0' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-b-0' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-c-0' INTO TABLE `t1` CHARACTER SET koi8r FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a)
|
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-c-0' INTO TABLE `t1` CHARACTER SET koi8r FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`)
|
||||||
/*!*/;
|
/*!*/;
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
drop table t1
|
drop table t1
|
||||||
|
@ -1942,6 +1942,28 @@ execute stmt;
|
|||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
#
|
#
|
||||||
|
#
|
||||||
|
# Bug #49570: Assertion failed: !(order->used & map)
|
||||||
|
# on re-execution of prepared statement
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a INT PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(0), (1);
|
||||||
|
PREPARE stmt FROM
|
||||||
|
"SELECT 1 FROM t1 JOIN t1 t2 USING(a) GROUP BY t2.a, t1.a";
|
||||||
|
EXECUTE stmt;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
EXECUTE stmt;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
EXECUTE stmt;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
create procedure proc_1() reset query cache;
|
create procedure proc_1() reset query cache;
|
||||||
call proc_1();
|
call proc_1();
|
||||||
|
23
mysql-test/r/sp_sync.result
Normal file
23
mysql-test/r/sp_sync.result
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
Tests of syncronization of stored procedure execution.
|
||||||
|
#
|
||||||
|
# Bug#48157: crash in Item_field::used_tables
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 AS SELECT 1 AS a, 1 AS b;
|
||||||
|
CREATE TABLE t2 AS SELECT 1 AS a, 1 AS b;
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
BEGIN
|
||||||
|
UPDATE t1 JOIN t2 USING( a, b ) SET t1.b = 1, t2.b = 1;
|
||||||
|
END|
|
||||||
|
LOCK TABLES t1 WRITE, t2 WRITE;
|
||||||
|
SET DEBUG_SYNC = 'multi_update_reopen_tables SIGNAL parked WAIT_FOR go';
|
||||||
|
CALL p1();
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
SET DEBUG_SYNC = 'now WAIT_FOR parked';
|
||||||
|
CREATE TABLE t1 AS SELECT 1 AS a, 1 AS b;
|
||||||
|
CREATE TABLE t2 AS SELECT 1 AS a, 1 AS b;
|
||||||
|
SET DEBUG_SYNC = 'now SIGNAL go';
|
||||||
|
# Without the DEBUG_SYNC supplied in the same patch as this test in the
|
||||||
|
# code, this test statement will hang.
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
SET DEBUG_SYNC = 'RESET';
|
@ -1640,9 +1640,6 @@ Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` union select `test`.`t1
|
|||||||
# Should not crash
|
# Should not crash
|
||||||
SELECT * FROM t1 UNION SELECT * FROM t1
|
SELECT * FROM t1 UNION SELECT * FROM t1
|
||||||
ORDER BY (SELECT a FROM t2 WHERE b = 12);
|
ORDER BY (SELECT a FROM t2 WHERE b = 12);
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
# Should not crash
|
# Should not crash
|
||||||
SELECT * FROM t2 UNION SELECT * FROM t2
|
SELECT * FROM t2 UNION SELECT * FROM t2
|
||||||
ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
|
ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
|
||||||
|
@ -19,7 +19,7 @@ ERROR 70100: Query execution was interrupted
|
|||||||
show binlog events from <binlog_start>;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/rpl_loaddata.dat' INTO TABLE `t2` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a, b) ;file_id=#
|
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/rpl_loaddata.dat' INTO TABLE `t2` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`, `b`) ;file_id=#
|
||||||
select
|
select
|
||||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||||
is not null;
|
is not null;
|
||||||
|
@ -929,7 +929,7 @@ master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
|
|||||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Intvar # # INSERT_ID=10
|
master-bin.000001 # Intvar # # INSERT_ID=10
|
||||||
master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
|
master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
|
||||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/rpl_loaddata.dat' INTO TABLE `t4` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a, @b) SET b=((@b) + `bug27417`(2)) ;file_id=#
|
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/rpl_loaddata.dat' INTO TABLE `t4` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`, @b) SET `b`=((@b) + `bug27417`(2)) ;file_id=#
|
||||||
master-bin.000001 # Query # # ROLLBACK
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
drop trigger trg_del_t2;
|
drop trigger trg_del_t2;
|
||||||
drop table t1,t2,t3,t4,t5;
|
drop table t1,t2,t3,t4,t5;
|
||||||
|
@ -127,7 +127,7 @@ master-bin.000001 # Query # # COMMIT
|
|||||||
master-bin.000001 # Query # # use `test`; create table t2 (a varchar(200)) engine=blackhole
|
master-bin.000001 # Query # # use `test`; create table t2 (a varchar(200)) engine=blackhole
|
||||||
master-bin.000001 # Query # # BEGIN
|
master-bin.000001 # Query # # BEGIN
|
||||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=581
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=581
|
||||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE `t2` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a) ;file_id=#
|
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE `t2` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`) ;file_id=#
|
||||||
master-bin.000001 # Query # # COMMIT
|
master-bin.000001 # Query # # COMMIT
|
||||||
master-bin.000001 # Query # # use `test`; alter table t1 add b int
|
master-bin.000001 # Query # # use `test`; alter table t1 add b int
|
||||||
master-bin.000001 # Query # # use `test`; alter table t1 drop b
|
master-bin.000001 # Query # # use `test`; alter table t1 drop b
|
||||||
|
@ -628,7 +628,7 @@ master-bin.000001 # Query # # BEGIN
|
|||||||
master-bin.000001 # Intvar # # INSERT_ID=10
|
master-bin.000001 # Intvar # # INSERT_ID=10
|
||||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Intvar # # INSERT_ID=10
|
master-bin.000001 # Intvar # # INSERT_ID=10
|
||||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/rpl_loaddata.dat' INTO TABLE `t4` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a, @b) SET b=((@b) + `bug27417`(2)) ;file_id=#
|
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/rpl_loaddata.dat' INTO TABLE `t4` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`, @b) SET `b`=((@b) + `bug27417`(2)) ;file_id=#
|
||||||
master-bin.000001 # Query # # ROLLBACK
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
/* the output must denote there is the query */;
|
/* the output must denote there is the query */;
|
||||||
drop trigger trg_del_t2;
|
drop trigger trg_del_t2;
|
||||||
@ -866,7 +866,7 @@ master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
|
|||||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Intvar # # INSERT_ID=10
|
master-bin.000001 # Intvar # # INSERT_ID=10
|
||||||
master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
|
master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
|
||||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/rpl_loaddata.dat' INTO TABLE `t4` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a, @b) SET b=((@b) + `bug27417`(2)) ;file_id=#
|
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/rpl_loaddata.dat' INTO TABLE `t4` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`, @b) SET `b`=((@b) + `bug27417`(2)) ;file_id=#
|
||||||
master-bin.000001 # Query # # ROLLBACK
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
drop trigger trg_del_t2;
|
drop trigger trg_del_t2;
|
||||||
drop table t1,t2,t3,t4,t5;
|
drop table t1,t2,t3,t4,t5;
|
||||||
|
@ -352,6 +352,9 @@ Note 1592 Statement may not be safe to log in statement format.
|
|||||||
INSERT INTO t1 VALUES (VERSION());
|
INSERT INTO t1 VALUES (VERSION());
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1592 Statement may not be safe to log in statement format.
|
Note 1592 Statement may not be safe to log in statement format.
|
||||||
|
INSERT INTO t1 VALUES (RAND());
|
||||||
|
Warnings:
|
||||||
|
Note 1592 Statement may not be safe to log in statement format.
|
||||||
DELETE FROM t1;
|
DELETE FROM t1;
|
||||||
SET TIMESTAMP=1000000;
|
SET TIMESTAMP=1000000;
|
||||||
INSERT INTO t1 VALUES
|
INSERT INTO t1 VALUES
|
||||||
|
@ -47,6 +47,8 @@
|
|||||||
# BUG#34768: nondeterministic INSERT using LIMIT logged in stmt mode if binlog_format=mixed
|
# BUG#34768: nondeterministic INSERT using LIMIT logged in stmt mode if binlog_format=mixed
|
||||||
# BUG#41980, SBL, INSERT .. SELECT .. LIMIT = ERROR, even when @@SQL_LOG_BIN is 0
|
# BUG#41980, SBL, INSERT .. SELECT .. LIMIT = ERROR, even when @@SQL_LOG_BIN is 0
|
||||||
# BUG#42640: mysqld crashes when unsafe statements are executed (STRICT_TRANS_TABLES mode)
|
# BUG#42640: mysqld crashes when unsafe statements are executed (STRICT_TRANS_TABLES mode)
|
||||||
|
# BUG#47995: Mark user functions as unsafe
|
||||||
|
# BUG#49222: Mare RAND() unsafe
|
||||||
#
|
#
|
||||||
# ==== Related test cases ====
|
# ==== Related test cases ====
|
||||||
#
|
#
|
||||||
@ -391,6 +393,7 @@ SET @@SESSION.SQL_MODE = @save_sql_mode;
|
|||||||
|
|
||||||
#
|
#
|
||||||
# BUG#47995: Mark user functions as unsafe
|
# BUG#47995: Mark user functions as unsafe
|
||||||
|
# BUG#49222: Mare RAND() unsafe
|
||||||
#
|
#
|
||||||
# Test that the system functions that are supposed to be marked unsafe
|
# Test that the system functions that are supposed to be marked unsafe
|
||||||
# generate a warning. Each INSERT statement below should generate a
|
# generate a warning. Each INSERT statement below should generate a
|
||||||
@ -400,27 +403,28 @@ SET @@SESSION.SQL_MODE = @save_sql_mode;
|
|||||||
CREATE TABLE t1 (a VARCHAR(1000));
|
CREATE TABLE t1 (a VARCHAR(1000));
|
||||||
INSERT INTO t1 VALUES (CURRENT_USER()); #marked unsafe before BUG#47995
|
INSERT INTO t1 VALUES (CURRENT_USER()); #marked unsafe before BUG#47995
|
||||||
INSERT INTO t1 VALUES (FOUND_ROWS()); #marked unsafe before BUG#47995
|
INSERT INTO t1 VALUES (FOUND_ROWS()); #marked unsafe before BUG#47995
|
||||||
INSERT INTO t1 VALUES (GET_LOCK('tmp', 1));
|
INSERT INTO t1 VALUES (GET_LOCK('tmp', 1)); #marked unsafe in BUG#47995
|
||||||
INSERT INTO t1 VALUES (IS_FREE_LOCK('tmp'));
|
INSERT INTO t1 VALUES (IS_FREE_LOCK('tmp')); #marked unsafe in BUG#47995
|
||||||
INSERT INTO t1 VALUES (IS_USED_LOCK('tmp'));
|
INSERT INTO t1 VALUES (IS_USED_LOCK('tmp')); #marked unsafe in BUG#47995
|
||||||
INSERT INTO t1 VALUES (LOAD_FILE('../../std_data/words2.dat')); #marked unsafe before BUG#47995
|
INSERT INTO t1 VALUES (LOAD_FILE('../../std_data/words2.dat')); #marked unsafe in BUG#39701
|
||||||
INSERT INTO t1 VALUES (MASTER_POS_WAIT('dummy arg', 4711, 1));
|
INSERT INTO t1 VALUES (MASTER_POS_WAIT('dummy arg', 4711, 1));
|
||||||
INSERT INTO t1 VALUES (RELEASE_LOCK('tmp'));
|
INSERT INTO t1 VALUES (RELEASE_LOCK('tmp')); #marked unsafe in BUG#47995
|
||||||
INSERT INTO t1 VALUES (ROW_COUNT()); #marked unsafe before BUG#47995
|
INSERT INTO t1 VALUES (ROW_COUNT()); #marked unsafe before BUG#47995
|
||||||
INSERT INTO t1 VALUES (SESSION_USER()); #marked unsafe before BUG#47995
|
INSERT INTO t1 VALUES (SESSION_USER()); #marked unsafe before BUG#47995
|
||||||
INSERT INTO t1 VALUES (SLEEP(1));
|
INSERT INTO t1 VALUES (SLEEP(1)); #marked unsafe in BUG#47995
|
||||||
INSERT INTO t1 VALUES (SYSDATE());
|
INSERT INTO t1 VALUES (SYSDATE()); #marked unsafe in BUG#47995
|
||||||
INSERT INTO t1 VALUES (SYSTEM_USER()); #marked unsafe before BUG#47995
|
INSERT INTO t1 VALUES (SYSTEM_USER()); #marked unsafe before BUG#47995
|
||||||
INSERT INTO t1 VALUES (USER()); #marked unsafe before BUG#47995
|
INSERT INTO t1 VALUES (USER()); #marked unsafe before BUG#47995
|
||||||
INSERT INTO t1 VALUES (UUID()); #marked unsafe before BUG#47995
|
INSERT INTO t1 VALUES (UUID()); #marked unsafe before BUG#47995
|
||||||
INSERT INTO t1 VALUES (UUID_SHORT()); #marked unsafe before BUG#47995
|
INSERT INTO t1 VALUES (UUID_SHORT()); #marked unsafe before BUG#47995
|
||||||
INSERT INTO t1 VALUES (VERSION());
|
INSERT INTO t1 VALUES (VERSION()); #marked unsafe in BUG#47995
|
||||||
|
INSERT INTO t1 VALUES (RAND()); #marked unsafe in BUG#49222
|
||||||
DELETE FROM t1;
|
DELETE FROM t1;
|
||||||
|
|
||||||
# Since we replicate the TIMESTAMP variable, functions affected by the
|
# Since we replicate the TIMESTAMP variable, functions affected by the
|
||||||
# TIMESTAMP variable are safe to replicate. So we check that the
|
# TIMESTAMP variable are safe to replicate. So we check that the
|
||||||
# following following functions depend on the TIMESTAMP variable and
|
# following following functions that depend on the TIMESTAMP variable
|
||||||
# don't generate a warning.
|
# are not unsafe and don't generate a warning.
|
||||||
|
|
||||||
SET TIMESTAMP=1000000;
|
SET TIMESTAMP=1000000;
|
||||||
INSERT INTO t1 VALUES
|
INSERT INTO t1 VALUES
|
||||||
|
@ -12,3 +12,17 @@ show status like 'Slave_open_temp_tables';
|
|||||||
Variable_name Value
|
Variable_name Value
|
||||||
Slave_open_temp_tables 0
|
Slave_open_temp_tables 0
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp1;
|
||||||
|
Warnings:
|
||||||
|
Note 1051 Unknown table 'tmp1'
|
||||||
|
CREATE TEMPORARY TABLE t1 ( a int );
|
||||||
|
DROP TEMPORARY TABLE t1, t2;
|
||||||
|
ERROR 42S02: Unknown table 't2'
|
||||||
|
DROP TEMPORARY TABLE tmp2;
|
||||||
|
ERROR 42S02: Unknown table 'tmp2'
|
||||||
|
stop slave;
|
||||||
|
**** On Master ****
|
||||||
|
CREATE TEMPORARY TABLE tmp3 (a int);
|
||||||
|
DROP TEMPORARY TABLE tmp3;
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||||
|
START SLAVE;
|
||||||
|
18
mysql-test/suite/rpl/r/rpl_geometry.result
Normal file
18
mysql-test/suite/rpl/r/rpl_geometry.result
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
create table t1(a varchar(100),
|
||||||
|
b multipoint not null,
|
||||||
|
c varchar(256));
|
||||||
|
insert into t1 set
|
||||||
|
a='hello',
|
||||||
|
b=geomfromtext('multipoint(1 1)'),
|
||||||
|
c='geometry';
|
||||||
|
create table t2 (a int(11) not null auto_increment primary key,
|
||||||
|
b geometrycollection default null,
|
||||||
|
c decimal(10,0));
|
||||||
|
insert into t2(c) values (null);
|
||||||
|
drop table t1, t2;
|
@ -885,7 +885,7 @@ master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
|
|||||||
master-bin.000001 # Xid 1 # #
|
master-bin.000001 # Xid 1 # #
|
||||||
master-bin.000001 # Query 1 # BEGIN
|
master-bin.000001 # Query 1 # BEGIN
|
||||||
master-bin.000001 # Begin_load_query 1 # ;file_id=#;block_len=#
|
master-bin.000001 # Begin_load_query 1 # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Execute_load_query 1 # use `test_rpl`; LOAD DATA INFILE 'MYSQLTEST_VARDIR/std_data/rpl_mixed.dat' INTO TABLE `t1` FIELDS TERMINATED BY '|' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a, b) ;file_id=#
|
master-bin.000001 # Execute_load_query 1 # use `test_rpl`; LOAD DATA INFILE 'MYSQLTEST_VARDIR/std_data/rpl_mixed.dat' INTO TABLE `t1` FIELDS TERMINATED BY '|' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`, `b`) ;file_id=#
|
||||||
master-bin.000001 # Xid 1 # #
|
master-bin.000001 # Xid 1 # #
|
||||||
master-bin.000001 # Query 1 # BEGIN
|
master-bin.000001 # Query 1 # BEGIN
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
|
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
|
||||||
|
@ -115,3 +115,20 @@ use b48297_db1;
|
|||||||
Comparing tables master:b48297_db1.t1 and slave:b48297_db1.t1
|
Comparing tables master:b48297_db1.t1 and slave:b48297_db1.t1
|
||||||
DROP DATABASE b48297_db1;
|
DROP DATABASE b48297_db1;
|
||||||
DROP DATABASE b42897_db2;
|
DROP DATABASE b42897_db2;
|
||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
use test;
|
||||||
|
CREATE TABLE t1 (`key` TEXT, `text` TEXT);
|
||||||
|
LOAD DATA INFILE '../../std_data/loaddata2.dat' REPLACE INTO TABLE `t1` FIELDS TERMINATED BY ',';
|
||||||
|
SELECT * FROM t1;
|
||||||
|
key text
|
||||||
|
Field A 'Field B'
|
||||||
|
Field 1 'Field 2'
|
||||||
|
Field 3 'Field 4'
|
||||||
|
'Field 5' 'Field 6'
|
||||||
|
Field 6 'Field 7'
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -5,9 +5,9 @@ show binlog events from <binlog_start>;
|
|||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (c1 char(50))
|
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (c1 char(50))
|
||||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (c1) ;file_id=#
|
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`c1`) ;file_id=#
|
||||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA CONCURRENT INFILE '../../std_data/words.dat' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (c1) ;file_id=#
|
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA CONCURRENT INFILE '../../std_data/words.dat' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`c1`) ;file_id=#
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
stop slave;
|
stop slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
@ -126,3 +126,20 @@ use b48297_db1;
|
|||||||
Comparing tables master:b48297_db1.t1 and slave:b48297_db1.t1
|
Comparing tables master:b48297_db1.t1 and slave:b48297_db1.t1
|
||||||
DROP DATABASE b48297_db1;
|
DROP DATABASE b48297_db1;
|
||||||
DROP DATABASE b42897_db2;
|
DROP DATABASE b42897_db2;
|
||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
use test;
|
||||||
|
CREATE TABLE t1 (`key` TEXT, `text` TEXT);
|
||||||
|
LOAD DATA INFILE '../../std_data/loaddata2.dat' REPLACE INTO TABLE `t1` FIELDS TERMINATED BY ',';
|
||||||
|
SELECT * FROM t1;
|
||||||
|
key text
|
||||||
|
Field A 'Field B'
|
||||||
|
Field 1 'Field 2'
|
||||||
|
Field 3 'Field 4'
|
||||||
|
'Field 5' 'Field 6'
|
||||||
|
Field 6 'Field 7'
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -55,7 +55,7 @@ Master_User root
|
|||||||
Master_Port MASTER_PORT
|
Master_Port MASTER_PORT
|
||||||
Connect_Retry 1
|
Connect_Retry 1
|
||||||
Master_Log_File master-bin.000001
|
Master_Log_File master-bin.000001
|
||||||
Read_Master_Log_Pos 557
|
Read_Master_Log_Pos 561
|
||||||
Relay_Log_File #
|
Relay_Log_File #
|
||||||
Relay_Log_Pos #
|
Relay_Log_Pos #
|
||||||
Relay_Master_Log_File master-bin.000001
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
@ -20,7 +20,7 @@ master-bin.000001 # Query # # use `test`; create table t2 (id int not null prima
|
|||||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Append_block # # ;file_id=#;block_len=#
|
master-bin.000001 # Append_block # # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Append_block # # ;file_id=#;block_len=#
|
master-bin.000001 # Append_block # # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' INTO TABLE `t2` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (id) ;file_id=#
|
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' INTO TABLE `t2` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`id`) ;file_id=#
|
||||||
==== Verify results on slave ====
|
==== Verify results on slave ====
|
||||||
[on slave]
|
[on slave]
|
||||||
select count(*) from t2 /* 5 000 */;
|
select count(*) from t2 /* 5 000 */;
|
||||||
|
25
mysql-test/suite/rpl/r/rpl_manual_change_index_file.result
Normal file
25
mysql-test/suite/rpl/r/rpl_manual_change_index_file.result
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
FLUSH LOGS;
|
||||||
|
CREATE TABLE t1(c1 INT);
|
||||||
|
FLUSH LOGS;
|
||||||
|
call mtr.add_suppression('Got fatal error 1236 from master when reading data from binary log: .*could not find next log');
|
||||||
|
Last_IO_Error
|
||||||
|
Got fatal error 1236 from master when reading data from binary log: 'could not find next log'
|
||||||
|
CREATE TABLE t2(c1 INT);
|
||||||
|
FLUSH LOGS;
|
||||||
|
CREATE TABLE t3(c1 INT);
|
||||||
|
FLUSH LOGS;
|
||||||
|
CREATE TABLE t4(c1 INT);
|
||||||
|
START SLAVE IO_THREAD;
|
||||||
|
SHOW TABLES;
|
||||||
|
Tables_in_test
|
||||||
|
t1
|
||||||
|
t2
|
||||||
|
t3
|
||||||
|
t4
|
||||||
|
DROP TABLE t1, t2, t3, t4;
|
@ -4,6 +4,7 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
||||||
create table t1(id int, i int, r1 int, r2 int, p varchar(100));
|
create table t1(id int, i int, r1 int, r2 int, p varchar(100));
|
||||||
insert into t1 values(1, connection_id(), 0, 0, "");
|
insert into t1 values(1, connection_id(), 0, 0, "");
|
||||||
insert into t1 values(2, 0, rand()*1000, rand()*1000, "");
|
insert into t1 values(2, 0, rand()*1000, rand()*1000, "");
|
||||||
|
24
mysql-test/suite/rpl/r/rpl_myisam_null_values.result
Normal file
24
mysql-test/suite/rpl/r/rpl_myisam_null_values.result
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
CREATE TABLE t1 (c1 BIT, c2 INT);
|
||||||
|
INSERT INTO `t1` VALUES ( 1, 1 );
|
||||||
|
UPDATE t1 SET c1=NULL where c2=1;
|
||||||
|
Comparing tables master:test.t1 and slave:test.t1
|
||||||
|
DELETE FROM t1 WHERE c2=1 LIMIT 1;
|
||||||
|
Comparing tables master:test.t1 and slave:test.t1
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (c1 CHAR);
|
||||||
|
INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c1
|
||||||
|
w
|
||||||
|
# should trigger switch to row due to LIMIT
|
||||||
|
UPDATE t1 SET c1=NULL WHERE c1='w' LIMIT 2;
|
||||||
|
Comparing tables master:test.t1 and slave:test.t1
|
||||||
|
DELETE FROM t1 LIMIT 2;
|
||||||
|
Comparing tables master:test.t1 and slave:test.t1
|
||||||
|
DROP TABLE t1;
|
@ -4,6 +4,7 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
||||||
CREATE TABLE t1 (a VARCHAR(1000));
|
CREATE TABLE t1 (a VARCHAR(1000));
|
||||||
INSERT INTO t1 VALUES (CONNECTION_ID());
|
INSERT INTO t1 VALUES (CONNECTION_ID());
|
||||||
INSERT INTO t1 VALUES (CONNECTION_ID());
|
INSERT INTO t1 VALUES (CONNECTION_ID());
|
||||||
|
@ -4,6 +4,7 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
||||||
create table t1 (a int not null auto_increment primary key, b int, key(b));
|
create table t1 (a int not null auto_increment primary key, b int, key(b));
|
||||||
INSERT INTO t1 (a) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
|
INSERT INTO t1 (a) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
|
||||||
INSERT INTO t1 (a) SELECT null FROM t1;
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
||||||
|
@ -4,6 +4,7 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
||||||
DROP FUNCTION IF EXISTS test.f1;
|
DROP FUNCTION IF EXISTS test.f1;
|
||||||
DROP TABLE IF EXISTS test.t1;
|
DROP TABLE IF EXISTS test.t1;
|
||||||
CREATE TABLE test.t1 (a INT NOT NULL AUTO_INCREMENT, c CHAR(16),PRIMARY KEY(a))ENGINE=INNODB;
|
CREATE TABLE test.t1 (a INT NOT NULL AUTO_INCREMENT, c CHAR(16),PRIMARY KEY(a))ENGINE=INNODB;
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
RESET MASTER;
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
DROP TABLE IF EXISTS `t1`;
|
DROP TABLE IF EXISTS `t1`;
|
||||||
|
### TABLE with field_metadata_size == 290
|
||||||
CREATE TABLE `t1` (
|
CREATE TABLE `t1` (
|
||||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`c2` varchar(30) NOT NULL,
|
`c2` varchar(30) NOT NULL,
|
||||||
@ -150,7 +156,51 @@ CREATE TABLE `t1` (
|
|||||||
PRIMARY KEY (`c1`)
|
PRIMARY KEY (`c1`)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
LOCK TABLES `t1` WRITE;
|
LOCK TABLES `t1` WRITE;
|
||||||
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');
|
INSERT INTO `t1`(c2) VALUES ('1');
|
||||||
DROP TABLE `t1`;
|
|
||||||
FLUSH LOGS;
|
FLUSH LOGS;
|
||||||
|
### assertion: the slave replicated event successfully and tables match
|
||||||
|
Comparing tables master:test.t1 and slave:test.t1
|
||||||
|
DROP TABLE `t1`;
|
||||||
=== Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
|
=== Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
|
||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
### action: generating several tables with different metadata
|
||||||
|
### sizes (resorting to perl)
|
||||||
|
### testing table with 249 field metadata size.
|
||||||
|
### testing table with 250 field metadata size.
|
||||||
|
### testing table with 251 field metadata size.
|
||||||
|
### testing table with 252 field metadata size.
|
||||||
|
### testing table with 253 field metadata size.
|
||||||
|
### testing table with 254 field metadata size.
|
||||||
|
### testing table with 255 field metadata size.
|
||||||
|
### testing table with 256 field metadata size.
|
||||||
|
### testing table with 257 field metadata size.
|
||||||
|
### testing table with 258 field metadata size.
|
||||||
|
FLUSH LOGS;
|
||||||
|
### assertion: the slave replicated event successfully and tables match for t10
|
||||||
|
Comparing tables master:test.t10 and slave:test.t10
|
||||||
|
### assertion: the slave replicated event successfully and tables match for t9
|
||||||
|
Comparing tables master:test.t9 and slave:test.t9
|
||||||
|
### assertion: the slave replicated event successfully and tables match for t8
|
||||||
|
Comparing tables master:test.t8 and slave:test.t8
|
||||||
|
### assertion: the slave replicated event successfully and tables match for t7
|
||||||
|
Comparing tables master:test.t7 and slave:test.t7
|
||||||
|
### assertion: the slave replicated event successfully and tables match for t6
|
||||||
|
Comparing tables master:test.t6 and slave:test.t6
|
||||||
|
### assertion: the slave replicated event successfully and tables match for t5
|
||||||
|
Comparing tables master:test.t5 and slave:test.t5
|
||||||
|
### assertion: the slave replicated event successfully and tables match for t4
|
||||||
|
Comparing tables master:test.t4 and slave:test.t4
|
||||||
|
### assertion: the slave replicated event successfully and tables match for t3
|
||||||
|
Comparing tables master:test.t3 and slave:test.t3
|
||||||
|
### assertion: the slave replicated event successfully and tables match for t2
|
||||||
|
Comparing tables master:test.t2 and slave:test.t2
|
||||||
|
### assertion: the slave replicated event successfully and tables match for t1
|
||||||
|
Comparing tables master:test.t1 and slave:test.t1
|
||||||
|
### assertion: check that binlog is not corrupt. Using mysqlbinlog to
|
||||||
|
### detect failure. Before the patch mysqlbinlog would find
|
||||||
|
### a corrupted event, thence would fail.
|
@ -25,7 +25,7 @@ master-bin.000001 # Query 1 # use `test`; insert into t1 values (NULL)
|
|||||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||||
master-bin.000001 # Query 1 # use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
|
master-bin.000001 # Query 1 # use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
|
||||||
master-bin.000001 # Begin_load_query 1 # ;file_id=1;block_len=581
|
master-bin.000001 # Begin_load_query 1 # ;file_id=1;block_len=581
|
||||||
master-bin.000001 # Execute_load_query 1 # use `test`; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' IGNORE 1 LINES (word) ;file_id=1
|
master-bin.000001 # Execute_load_query 1 # use `test`; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' IGNORE 1 LINES (`word`) ;file_id=1
|
||||||
show binlog events from 107 limit 1;
|
show binlog events from 107 limit 1;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
|
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
|
||||||
@ -193,7 +193,7 @@ master-bin.000001 # Query # # use `test`; insert into t1 values (NULL)
|
|||||||
master-bin.000001 # Query # # use `test`; drop table t1
|
master-bin.000001 # Query # # use `test`; drop table t1
|
||||||
master-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
|
master-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
|
||||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' IGNORE 1 LINES (word) ;file_id=#
|
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' IGNORE 1 LINES (`word`) ;file_id=#
|
||||||
master-bin.000001 # Rotate # # master-bin.000002;pos=4
|
master-bin.000001 # Rotate # # master-bin.000002;pos=4
|
||||||
show binlog events in 'master-bin.000002';
|
show binlog events in 'master-bin.000002';
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
@ -218,7 +218,7 @@ slave-bin.000001 # Query 1 # use `test`; insert into t1 values (NULL)
|
|||||||
slave-bin.000001 # Query 1 # use `test`; drop table t1
|
slave-bin.000001 # Query 1 # use `test`; drop table t1
|
||||||
slave-bin.000001 # Query 1 # use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
|
slave-bin.000001 # Query 1 # use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
|
||||||
slave-bin.000001 # Begin_load_query 1 # ;file_id=1;block_len=581
|
slave-bin.000001 # Begin_load_query 1 # ;file_id=1;block_len=581
|
||||||
slave-bin.000001 # Execute_load_query 1 # use `test`; LOAD DATA INFILE '../../tmp/SQL_LOAD-2-1-1.data' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' IGNORE 1 LINES (word) ;file_id=1
|
slave-bin.000001 # Execute_load_query 1 # use `test`; LOAD DATA INFILE '../../tmp/SQL_LOAD-2-1-1.data' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' IGNORE 1 LINES (`word`) ;file_id=1
|
||||||
slave-bin.000001 # Query 1 # use `test`; create table t3 (a int)ENGINE=MyISAM
|
slave-bin.000001 # Query 1 # use `test`; create table t3 (a int)ENGINE=MyISAM
|
||||||
slave-bin.000001 # Rotate 2 # slave-bin.000002;pos=4
|
slave-bin.000001 # Rotate 2 # slave-bin.000002;pos=4
|
||||||
show binlog events in 'slave-bin.000002' from 4;
|
show binlog events in 'slave-bin.000002' from 4;
|
||||||
|
@ -34,4 +34,36 @@ connection master;
|
|||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#49137
|
||||||
|
# This test verifies if DROP MULTI TEMPORARY TABLE
|
||||||
|
# will cause different errors on master and slave,
|
||||||
|
# when one or more of these tables do not exist.
|
||||||
|
#
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp1;
|
||||||
|
CREATE TEMPORARY TABLE t1 ( a int );
|
||||||
|
--error 1051
|
||||||
|
DROP TEMPORARY TABLE t1, t2;
|
||||||
|
--error 1051
|
||||||
|
DROP TEMPORARY TABLE tmp2;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
stop slave;
|
||||||
|
wait_for_slave_to_stop;
|
||||||
|
|
||||||
|
--echo **** On Master ****
|
||||||
|
connection master;
|
||||||
|
CREATE TEMPORARY TABLE tmp3 (a int);
|
||||||
|
DROP TEMPORARY TABLE tmp3;
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||||
|
START SLAVE;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
26
mysql-test/suite/rpl/t/rpl_geometry.test
Normal file
26
mysql-test/suite/rpl/t/rpl_geometry.test
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
source include/master-slave.inc;
|
||||||
|
source include/have_binlog_format_row.inc;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#48776, Bug#43784
|
||||||
|
#
|
||||||
|
create table t1(a varchar(100),
|
||||||
|
b multipoint not null,
|
||||||
|
c varchar(256));
|
||||||
|
|
||||||
|
insert into t1 set
|
||||||
|
a='hello',
|
||||||
|
b=geomfromtext('multipoint(1 1)'),
|
||||||
|
c='geometry';
|
||||||
|
|
||||||
|
create table t2 (a int(11) not null auto_increment primary key,
|
||||||
|
b geometrycollection default null,
|
||||||
|
c decimal(10,0));
|
||||||
|
|
||||||
|
insert into t2(c) values (null);
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
drop table t1, t2;
|
||||||
|
source include/master-slave-end.inc;
|
106
mysql-test/suite/rpl/t/rpl_manual_change_index_file.test
Normal file
106
mysql-test/suite/rpl/t/rpl_manual_change_index_file.test
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#28421 Infinite loop on slave relay logs
|
||||||
|
#
|
||||||
|
# That, manually deleteing one or more entries from 'master-bin.index', will
|
||||||
|
# cause master infinitely loop to send one binlog file.
|
||||||
|
#
|
||||||
|
# Manually changing index file is a illegal action, so when this happen, we
|
||||||
|
# send a fatal error to slave and close the dump session.
|
||||||
|
|
||||||
|
FLUSH LOGS;
|
||||||
|
# Now, 2 entries in index file.
|
||||||
|
# ./master-bin.000001
|
||||||
|
# ./master-bin.000002
|
||||||
|
|
||||||
|
CREATE TABLE t1(c1 INT);
|
||||||
|
# Now, the current dump file(master-bin.000002) is the second line of index
|
||||||
|
# file
|
||||||
|
sync_slave_with_master;
|
||||||
|
# Now, all events has been replicate to slave. As current dump file
|
||||||
|
# (master-bin.000002) is the last binlog file, so master is waiting for new
|
||||||
|
# events.
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
# Delete './master-bin.000001' from index file.
|
||||||
|
let $MYSQLD_DATADIR= `SELECT @@DATADIR`;
|
||||||
|
let $file= $MYSQLD_DATADIR/master-bin.index;
|
||||||
|
source include/truncate_file.inc;
|
||||||
|
|
||||||
|
if (`SELECT CONVERT(@@VERSION_COMPILE_OS USING latin1) NOT IN ('Win32', 'Win64', 'Windows')`)
|
||||||
|
{
|
||||||
|
append_file $MYSQLD_DATADIR/master-bin.index;
|
||||||
|
./master-bin.000002
|
||||||
|
EOF
|
||||||
|
sleep 0.00000001;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (`SELECT CONVERT(@@VERSION_COMPILE_OS USING latin1) IN ('Win32', 'Win64', 'Windows')`)
|
||||||
|
{
|
||||||
|
append_file $MYSQLD_DATADIR/master-bin.index;
|
||||||
|
.\master-bin.000002
|
||||||
|
EOF
|
||||||
|
sleep 0.00000001;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Now, only 1 entry in index file. ./master-bin.000002
|
||||||
|
|
||||||
|
# Generate master-bin.000003, but it is in the second line.
|
||||||
|
FLUSH LOGS;
|
||||||
|
# Now, 2 entries in index file.
|
||||||
|
# ./master-bin.000002
|
||||||
|
# ./master-bin.000003
|
||||||
|
|
||||||
|
# Now, master know that new binlog file(master-bin.000003) has been generated.
|
||||||
|
# It expects that the new binlog file is in third line of index file, but
|
||||||
|
# there is no third line in index file. It is so strange that master sends an
|
||||||
|
# error to slave.
|
||||||
|
call mtr.add_suppression('Got fatal error 1236 from master when reading data from binary log: .*could not find next log');
|
||||||
|
connection slave;
|
||||||
|
source include/wait_for_slave_io_to_stop.inc;
|
||||||
|
let $last_error= query_get_value(SHOW SLAVE STATUS, Last_IO_Error, 1);
|
||||||
|
echo Last_IO_Error;
|
||||||
|
echo $last_error;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
|
||||||
|
source include/truncate_file.inc;
|
||||||
|
|
||||||
|
if (`SELECT CONVERT(@@VERSION_COMPILE_OS USING latin1) NOT IN ('Win32', 'Win64', 'Windows')`)
|
||||||
|
{
|
||||||
|
append_file $MYSQLD_DATADIR/master-bin.index;
|
||||||
|
./master-bin.000001
|
||||||
|
./master-bin.000002
|
||||||
|
./master-bin.000003
|
||||||
|
EOF
|
||||||
|
sleep 0.00000001;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (`SELECT CONVERT(@@VERSION_COMPILE_OS USING latin1) IN ('Win32', 'Win64', 'Windows')`)
|
||||||
|
{
|
||||||
|
append_file $MYSQLD_DATADIR/master-bin.index;
|
||||||
|
.\master-bin.000001
|
||||||
|
.\master-bin.000002
|
||||||
|
.\master-bin.000003
|
||||||
|
EOF
|
||||||
|
sleep 0.00000001;
|
||||||
|
}
|
||||||
|
|
||||||
|
CREATE TABLE t2(c1 INT);
|
||||||
|
FLUSH LOGS;
|
||||||
|
CREATE TABLE t3(c1 INT);
|
||||||
|
FLUSH LOGS;
|
||||||
|
CREATE TABLE t4(c1 INT);
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
START SLAVE IO_THREAD;
|
||||||
|
source include/wait_for_slave_io_to_start.inc;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
sync_slave_with_master;
|
||||||
|
SHOW TABLES;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
DROP TABLE t1, t2, t3, t4;
|
||||||
|
source include/master-slave-end.inc;
|
@ -3,12 +3,16 @@
|
|||||||
#
|
#
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
||||||
|
|
||||||
create table t1(id int, i int, r1 int, r2 int, p varchar(100));
|
create table t1(id int, i int, r1 int, r2 int, p varchar(100));
|
||||||
insert into t1 values(1, connection_id(), 0, 0, "");
|
insert into t1 values(1, connection_id(), 0, 0, "");
|
||||||
# don't put rand and password in the same query, to see if they replicate
|
# don't put rand and password in the same query, to see if they replicate
|
||||||
# independently
|
# independently
|
||||||
# Pure rand test
|
# Pure rand test
|
||||||
|
--disable_warnings
|
||||||
insert into t1 values(2, 0, rand()*1000, rand()*1000, "");
|
insert into t1 values(2, 0, rand()*1000, rand()*1000, "");
|
||||||
|
--enable_warnings
|
||||||
# change the rand suite on the master (we do this because otherwise password()
|
# change the rand suite on the master (we do this because otherwise password()
|
||||||
# benefits from the fact that the above rand() is well replicated :
|
# benefits from the fact that the above rand() is well replicated :
|
||||||
# it picks the same sequence element, which hides a possible bug in password() replication.
|
# it picks the same sequence element, which hides a possible bug in password() replication.
|
||||||
@ -19,7 +23,9 @@ set sql_log_bin=1;
|
|||||||
# Pure password test
|
# Pure password test
|
||||||
insert into t1 values(3, 0, 0, 0, password('does_this_work?'));
|
insert into t1 values(3, 0, 0, 0, password('does_this_work?'));
|
||||||
# "altogether now"
|
# "altogether now"
|
||||||
|
--disable_warnings
|
||||||
insert into t1 values(4, connection_id(), rand()*1000, rand()*1000, password('does_this_still_work?'));
|
insert into t1 values(4, connection_id(), rand()*1000, rand()*1000, password('does_this_still_work?'));
|
||||||
|
--enable_warnings
|
||||||
select * into outfile 'rpl_misc_functions.outfile' from t1;
|
select * into outfile 'rpl_misc_functions.outfile' from t1;
|
||||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
@ -73,11 +79,13 @@ DELIMITER ;|
|
|||||||
|
|
||||||
# Exercise the functions and procedures then compare the results on
|
# Exercise the functions and procedures then compare the results on
|
||||||
# the master to those on the slave.
|
# the master to those on the slave.
|
||||||
|
--disable_warnings
|
||||||
CALL test_replication_sp1();
|
CALL test_replication_sp1();
|
||||||
CALL test_replication_sp2();
|
CALL test_replication_sp2();
|
||||||
INSERT INTO t1 (col_a) VALUES (test_replication_sf());
|
INSERT INTO t1 (col_a) VALUES (test_replication_sf());
|
||||||
INSERT INTO t1 (col_a) VALUES (test_replication_sf());
|
INSERT INTO t1 (col_a) VALUES (test_replication_sf());
|
||||||
INSERT INTO t1 (col_a) VALUES (test_replication_sf());
|
INSERT INTO t1 (col_a) VALUES (test_replication_sf());
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
--sync_slave_with_master
|
--sync_slave_with_master
|
||||||
|
|
||||||
|
53
mysql-test/suite/rpl/t/rpl_myisam_null_values.test
Normal file
53
mysql-test/suite/rpl/t/rpl_myisam_null_values.test
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# BUG#49481: RBR: MyISAM and bit fields may cause slave to stop on delete cant find record
|
||||||
|
# BUG#49482: RBR: Replication may break on deletes when MyISAM tables + char field are used
|
||||||
|
|
||||||
|
-- source include/master-slave.inc
|
||||||
|
-- source include/have_binlog_format_mixed_or_row.inc
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
CREATE TABLE t1 (c1 BIT, c2 INT);
|
||||||
|
INSERT INTO `t1` VALUES ( 1, 1 );
|
||||||
|
UPDATE t1 SET c1=NULL where c2=1;
|
||||||
|
-- sync_slave_with_master
|
||||||
|
|
||||||
|
-- let $diff_table_1=master:test.t1
|
||||||
|
-- let $diff_table_2=slave:test.t1
|
||||||
|
-- source include/diff_tables.inc
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
DELETE FROM t1 WHERE c2=1 LIMIT 1;
|
||||||
|
-- sync_slave_with_master
|
||||||
|
|
||||||
|
-- let $diff_table_1=master:test.t1
|
||||||
|
-- let $diff_table_2=slave:test.t1
|
||||||
|
-- source include/diff_tables.inc
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
DROP TABLE t1;
|
||||||
|
-- sync_slave_with_master
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
|
||||||
|
CREATE TABLE t1 (c1 CHAR);
|
||||||
|
|
||||||
|
INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
-- echo # should trigger switch to row due to LIMIT
|
||||||
|
UPDATE t1 SET c1=NULL WHERE c1='w' LIMIT 2;
|
||||||
|
-- sync_slave_with_master
|
||||||
|
|
||||||
|
-- let $diff_table_1=master:test.t1
|
||||||
|
-- let $diff_table_2=slave:test.t1
|
||||||
|
-- source include/diff_tables.inc
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
DELETE FROM t1 LIMIT 2;
|
||||||
|
-- sync_slave_with_master
|
||||||
|
|
||||||
|
-- let $diff_table_1=master:test.t1
|
||||||
|
-- let $diff_table_2=slave:test.t1
|
||||||
|
-- source include/diff_tables.inc
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
DROP TABLE t1;
|
||||||
|
-- sync_slave_with_master
|
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
|
|
||||||
|
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
||||||
|
|
||||||
CREATE TABLE t1 (a VARCHAR(1000));
|
CREATE TABLE t1 (a VARCHAR(1000));
|
||||||
|
|
||||||
# We replicate the connection_id in the query_log_event
|
# We replicate the connection_id in the query_log_event
|
||||||
@ -41,7 +43,9 @@ INSERT INTO t1 VALUES
|
|||||||
(UTC_TIMESTAMP());
|
(UTC_TIMESTAMP());
|
||||||
|
|
||||||
# We replicate the random seed in a rand_log_event
|
# We replicate the random seed in a rand_log_event
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO t1 VALUES (RAND());
|
INSERT INTO t1 VALUES (RAND());
|
||||||
|
--enable_warnings
|
||||||
# We replicate the last_insert_id in an intvar_log_event
|
# We replicate the last_insert_id in an intvar_log_event
|
||||||
INSERT INTO t1 VALUES (LAST_INSERT_ID());
|
INSERT INTO t1 VALUES (LAST_INSERT_ID());
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
-- source include/not_ndb_default.inc
|
-- source include/not_ndb_default.inc
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
|
||||||
|
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
||||||
|
|
||||||
create table t1 (a int not null auto_increment primary key, b int, key(b));
|
create table t1 (a int not null auto_increment primary key, b int, key(b));
|
||||||
INSERT INTO t1 (a) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
|
INSERT INTO t1 (a) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
|
||||||
INSERT INTO t1 (a) SELECT null FROM t1;
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
||||||
@ -30,8 +32,8 @@ INSERT INTO t1 (a) SELECT null FROM t1;
|
|||||||
INSERT INTO t1 (a) SELECT null FROM t1;
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
||||||
save_master_pos;
|
save_master_pos;
|
||||||
# a few updates to force OPTIMIZE to do something
|
# a few updates to force OPTIMIZE to do something
|
||||||
update t1 set b=(a/2*rand());
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
|
update t1 set b=(a/2*rand());
|
||||||
delete from t1 order by b limit 10000;
|
delete from t1 order by b limit 10000;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
@ -2,38 +2,39 @@
|
|||||||
# BUG#42749: infinite loop writing to row based binlog - processlist shows
|
# BUG#42749: infinite loop writing to row based binlog - processlist shows
|
||||||
# "freeing items"
|
# "freeing items"
|
||||||
#
|
#
|
||||||
|
#
|
||||||
# WHY
|
# WHY
|
||||||
# ===
|
# ===
|
||||||
#
|
#
|
||||||
# This bug would make table map event to report data_written one byte less
|
# This bug would make table map event to report data_written one
|
||||||
# than what would actually be written in its body. This would cause one byte shorter
|
# byte less than what would actually be written in its body. This
|
||||||
# event end_log_pos. The ultimate impact was that it would make fixing the
|
# would cause one byte shorter event end_log_pos. The ultimate
|
||||||
# position in MYSQL_BIN_LOG::write_cache bogus or end up in an infinite loop.
|
# impact was that it would make fixing the position in
|
||||||
|
# MYSQL_BIN_LOG::write_cache bogus or end up in an infinite loop.
|
||||||
#
|
#
|
||||||
# HOW
|
# HOW
|
||||||
# ===
|
# ===
|
||||||
#
|
#
|
||||||
# Checking that the patch fixes the problem is done as follows:
|
# Checking that the patch fixes the problem is done as follows:
|
||||||
# i) a table with several fields is created;
|
#
|
||||||
|
# i) one table with m_field_metadata sized at 290
|
||||||
# ii) an insert is performed;
|
# ii) an insert is performed;
|
||||||
# iii) the logs are flushed;
|
# iii) the logs are flushed;
|
||||||
# iv) mysqlbinlog is used to check if it succeeds.
|
# iv) mysqlbinlog is used to check if it succeeds.
|
||||||
#
|
#
|
||||||
# In step iv), before the bug was fixed, the test case would fail with
|
# In step iv), before the bug was fixed, the test case would fail
|
||||||
# mysqlbinlog reporting that it was unable to succeed in reading the event.
|
# with mysqlbinlog reporting that it was unable to succeed in
|
||||||
#
|
# reading the event.
|
||||||
|
|
||||||
-- source include/have_log_bin.inc
|
-- source include/master-slave.inc
|
||||||
-- source include/have_innodb.inc
|
-- source include/have_innodb.inc
|
||||||
-- source include/have_binlog_format_row.inc
|
-- source include/have_binlog_format_row.inc
|
||||||
-- connection default
|
|
||||||
|
|
||||||
RESET MASTER;
|
|
||||||
|
|
||||||
-- disable_warnings
|
-- disable_warnings
|
||||||
DROP TABLE IF EXISTS `t1`;
|
DROP TABLE IF EXISTS `t1`;
|
||||||
-- enable_warnings
|
-- enable_warnings
|
||||||
|
|
||||||
|
-- echo ### TABLE with field_metadata_size == 290
|
||||||
CREATE TABLE `t1` (
|
CREATE TABLE `t1` (
|
||||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`c2` varchar(30) NOT NULL,
|
`c2` varchar(30) NOT NULL,
|
||||||
@ -185,15 +186,155 @@ CREATE TABLE `t1` (
|
|||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
LOCK TABLES `t1` WRITE;
|
LOCK TABLES `t1` WRITE;
|
||||||
|
INSERT INTO `t1`(c2) VALUES ('1');
|
||||||
|
FLUSH LOGS;
|
||||||
|
|
||||||
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');
|
-- sync_slave_with_master
|
||||||
|
-- connection master
|
||||||
|
|
||||||
|
-- echo ### assertion: the slave replicated event successfully and tables match
|
||||||
|
-- let $diff_table_1=master:test.t1
|
||||||
|
-- let $diff_table_2=slave:test.t1
|
||||||
|
-- source include/diff_tables.inc
|
||||||
|
|
||||||
DROP TABLE `t1`;
|
DROP TABLE `t1`;
|
||||||
|
|
||||||
FLUSH LOGS;
|
-- connection master
|
||||||
|
-- sync_slave_with_master
|
||||||
|
-- connection master
|
||||||
|
|
||||||
-- echo === Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
|
-- echo === Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
|
||||||
|
|
||||||
-- let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
-- let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||||
-- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
|
-- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
|
||||||
-- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
|
-- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
# BUG#50018: binlog corruption when table has many columns
|
||||||
|
#
|
||||||
|
# Same test from BUG#42749, but now we generate some SQL which
|
||||||
|
# creates and inserts into tables with metadata size from 249
|
||||||
|
# to 258.
|
||||||
|
#
|
||||||
|
# The test works as follows:
|
||||||
|
# 1. SQL for several CREATE TABLE and INSERTS are generated
|
||||||
|
# into a file.
|
||||||
|
# 2. This file is then "sourced"
|
||||||
|
# 3. The slave is synchronized with the master
|
||||||
|
# 4. FLUSH LOGS on master
|
||||||
|
# 5. Compare tables on master and slave.
|
||||||
|
# 6. run mysqlbinlog on master's binary log
|
||||||
|
#
|
||||||
|
# Steps #5 and #6 assert that binary log is not corrupted
|
||||||
|
# in both cases: when slave is replaying events and when
|
||||||
|
# mysqlbinlog is used to read the binary log
|
||||||
|
|
||||||
|
-- source include/master-slave-reset.inc
|
||||||
|
-- connection master
|
||||||
|
|
||||||
|
# Create several tables with field_metadata_size ranging
|
||||||
|
# from 249 to 258 (so that we cover 251 and 255 range).
|
||||||
|
# This should exercise the switch between using 1 or 3
|
||||||
|
# bytes to pack m_field_metadata_size.
|
||||||
|
#
|
||||||
|
# Each varchar field takes up to 2 metadata bytes, see:
|
||||||
|
#
|
||||||
|
# Field_varstring::do_save_field_metadata (field.cc)
|
||||||
|
#
|
||||||
|
# The float field takes 1 byte, see:
|
||||||
|
#
|
||||||
|
# Field_float::do_save_field_metadata (field.cc)
|
||||||
|
#
|
||||||
|
|
||||||
|
-- let $generated_sql= $MYSQLTEST_VARDIR/tmp/b50018.sql
|
||||||
|
-- let B50018_FILE= $generated_sql
|
||||||
|
|
||||||
|
-- echo ### action: generating several tables with different metadata
|
||||||
|
-- echo ### sizes (resorting to perl)
|
||||||
|
-- perl
|
||||||
|
my $file= $ENV{'B50018_FILE'};
|
||||||
|
open(FILE, ">", "$file") or die "Unable to open bug 50018 generated SQL file: $!" ;
|
||||||
|
|
||||||
|
my $tables= "";
|
||||||
|
my $ntables= 10;
|
||||||
|
my $base_ncols= 124;
|
||||||
|
|
||||||
|
for my $i (1..$ntables)
|
||||||
|
{
|
||||||
|
my $ncols= $base_ncols + $i;
|
||||||
|
my $metadata_size= $ncols_variable * 2 + 1;
|
||||||
|
|
||||||
|
print FILE "-- echo ### testing table with " . ($base_ncols*2 + $i) . " field metadata size.\n";
|
||||||
|
print FILE "CREATE TABLE t$i (\n";
|
||||||
|
for my $n (1..$base_ncols)
|
||||||
|
{
|
||||||
|
print FILE "c$n VARCHAR(30) NOT NULL DEFAULT 'BUG#50018',\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
for my $n (1..$i)
|
||||||
|
{
|
||||||
|
print FILE "c" . ($base_ncols+$n) . " FLOAT NOT NULL DEFAULT 0";
|
||||||
|
if ($n < $i)
|
||||||
|
{
|
||||||
|
print FILE ",\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print FILE ") Engine=InnoDB;\n";
|
||||||
|
|
||||||
|
$tables.= " t$i WRITE";
|
||||||
|
if ($i < $ntables)
|
||||||
|
{
|
||||||
|
$tables .=",";
|
||||||
|
}
|
||||||
|
|
||||||
|
print FILE "LOCK TABLES t$i WRITE;\n";
|
||||||
|
print FILE "INSERT INTO t$i(c". ($base_ncols+1) . ") VALUES (50018);\n";
|
||||||
|
print FILE "UNLOCK TABLES;";
|
||||||
|
}
|
||||||
|
|
||||||
|
close(FILE);
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
## we don't need this in the result file
|
||||||
|
## however, for debugging purposes you
|
||||||
|
## may want to reactivate query logging
|
||||||
|
-- disable_query_log
|
||||||
|
-- source $generated_sql
|
||||||
|
-- enable_query_log
|
||||||
|
|
||||||
|
-- sync_slave_with_master
|
||||||
|
-- connection master
|
||||||
|
|
||||||
|
FLUSH LOGS;
|
||||||
|
|
||||||
|
-- let $ntables=10
|
||||||
|
while($ntables)
|
||||||
|
{
|
||||||
|
-- echo ### assertion: the slave replicated event successfully and tables match for t$ntables
|
||||||
|
-- let $diff_table_1=master:test.t$ntables
|
||||||
|
-- let $diff_table_2=slave:test.t$ntables
|
||||||
|
-- source include/diff_tables.inc
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
-- disable_query_log
|
||||||
|
-- eval DROP TABLE t$ntables
|
||||||
|
-- enable_query_log
|
||||||
|
-- sync_slave_with_master
|
||||||
|
-- connection master
|
||||||
|
|
||||||
|
-- dec $ntables
|
||||||
|
}
|
||||||
|
|
||||||
|
-- echo ### assertion: check that binlog is not corrupt. Using mysqlbinlog to
|
||||||
|
-- echo ### detect failure. Before the patch mysqlbinlog would find
|
||||||
|
-- echo ### a corrupted event, thence would fail.
|
||||||
|
-- let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||||
|
-- exec $MYSQL_BINLOG -v --hex $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog
|
||||||
|
|
||||||
|
## clean up
|
||||||
|
## For debugging purposes you might want not to remove these
|
||||||
|
-- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog
|
||||||
|
-- remove_file $generated_sql
|
||||||
|
-- source include/master-slave-end.inc
|
@ -40,10 +40,12 @@ insert into t3 values(100,"log",0,0,0);
|
|||||||
SET @@RAND_SEED1=658490765, @@RAND_SEED2=635893186;
|
SET @@RAND_SEED1=658490765, @@RAND_SEED2=635893186;
|
||||||
|
|
||||||
# Emulate that we have rows 2-9 deleted on the slave
|
# Emulate that we have rows 2-9 deleted on the slave
|
||||||
|
--disable_warnings
|
||||||
insert into t1 values(1,1,rand()),(NULL,2,rand());
|
insert into t1 values(1,1,rand()),(NULL,2,rand());
|
||||||
insert into t2 (b) values(last_insert_id());
|
insert into t2 (b) values(last_insert_id());
|
||||||
insert into t2 values(3,0),(NULL,0);
|
insert into t2 values(3,0),(NULL,0);
|
||||||
insert into t2 values(NULL,0),(500,0);
|
insert into t2 values(NULL,0),(500,0);
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
select a,b, truncate(rand_value,4) from t1;
|
select a,b, truncate(rand_value,4) from t1;
|
||||||
select * from t2;
|
select * from t2;
|
||||||
|
@ -4,6 +4,7 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
||||||
DROP FUNCTION IF EXISTS test.f1;
|
DROP FUNCTION IF EXISTS test.f1;
|
||||||
DROP TABLE IF EXISTS test.t1;
|
DROP TABLE IF EXISTS test.t1;
|
||||||
CREATE TABLE test.t1 (a INT NOT NULL AUTO_INCREMENT, c CHAR(16),PRIMARY KEY(a))ENGINE=NDB;
|
CREATE TABLE test.t1 (a INT NOT NULL AUTO_INCREMENT, c CHAR(16),PRIMARY KEY(a))ENGINE=NDB;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP PROCEDURE IF EXISTS p1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
CREATE TABLE t1 ( number INT NOT NULL, alpha CHAR(6) NOT NULL );
|
CREATE TABLE t1 ( number INT NOT NULL, alpha CHAR(6) NOT NULL );
|
||||||
@ -111,4 +112,16 @@ EXPLAIN SELECT CONCAT('gui_', t2.a), t1.d FROM t2
|
|||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #50096: CONCAT_WS inside procedure returning wrong data
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE PROCEDURE p1(a varchar(255), b int, c int)
|
||||||
|
SET @query = CONCAT_WS(",", a, b, c);
|
||||||
|
|
||||||
|
CALL p1("abcde", "0", "1234");
|
||||||
|
SELECT @query;
|
||||||
|
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
|
||||||
--echo # End of 5.1 tests
|
--echo # End of 5.1 tests
|
||||||
|
@ -71,7 +71,7 @@ select "--- --position --" as "";
|
|||||||
--enable_query_log
|
--enable_query_log
|
||||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
|
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
|
||||||
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --position=331 $MYSQLD_DATADIR/master-bin.000002
|
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --position=333 $MYSQLD_DATADIR/master-bin.000002
|
||||||
|
|
||||||
# These are tests for remote binlog.
|
# These are tests for remote binlog.
|
||||||
# They should return the same as previous test.
|
# They should return the same as previous test.
|
||||||
@ -107,7 +107,7 @@ select "--- --position --" as "";
|
|||||||
--enable_query_log
|
--enable_query_log
|
||||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
|
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
|
||||||
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --position=331 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002
|
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --position=333 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002
|
||||||
|
|
||||||
# Bug#7853 mysqlbinlog does not accept input from stdin
|
# Bug#7853 mysqlbinlog does not accept input from stdin
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
|
@ -2014,6 +2014,22 @@ deallocate prepare stmt;
|
|||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #49570: Assertion failed: !(order->used & map)
|
||||||
|
--echo # on re-execution of prepared statement
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1(a INT PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(0), (1);
|
||||||
|
PREPARE stmt FROM
|
||||||
|
"SELECT 1 FROM t1 JOIN t1 t2 USING(a) GROUP BY t2.a, t1.a";
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
#
|
#
|
||||||
|
58
mysql-test/t/sp_sync.test
Normal file
58
mysql-test/t/sp_sync.test
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# This test should work in embedded server after mysqltest is fixed
|
||||||
|
-- source include/not_embedded.inc
|
||||||
|
|
||||||
|
--echo Tests of syncronization of stored procedure execution.
|
||||||
|
|
||||||
|
--source include/have_debug_sync.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#48157: crash in Item_field::used_tables
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 AS SELECT 1 AS a, 1 AS b;
|
||||||
|
CREATE TABLE t2 AS SELECT 1 AS a, 1 AS b;
|
||||||
|
|
||||||
|
DELIMITER |;
|
||||||
|
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
BEGIN
|
||||||
|
UPDATE t1 JOIN t2 USING( a, b ) SET t1.b = 1, t2.b = 1;
|
||||||
|
END|
|
||||||
|
|
||||||
|
DELIMITER ;|
|
||||||
|
|
||||||
|
connect (con1,localhost,root,,);
|
||||||
|
connect (con2,localhost,root,,);
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
LOCK TABLES t1 WRITE, t2 WRITE;
|
||||||
|
|
||||||
|
connection con2;
|
||||||
|
LET $ID= `select connection_id()`;
|
||||||
|
SET DEBUG_SYNC = 'multi_update_reopen_tables SIGNAL parked WAIT_FOR go';
|
||||||
|
--send CALL p1()
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
let $wait_condition= SELECT 1 FROM information_schema.processlist WHERE ID = $ID AND
|
||||||
|
state = "Locked";
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
SET DEBUG_SYNC = 'now WAIT_FOR parked';
|
||||||
|
CREATE TABLE t1 AS SELECT 1 AS a, 1 AS b;
|
||||||
|
CREATE TABLE t2 AS SELECT 1 AS a, 1 AS b;
|
||||||
|
SET DEBUG_SYNC = 'now SIGNAL go';
|
||||||
|
|
||||||
|
connection con2;
|
||||||
|
--reap
|
||||||
|
|
||||||
|
disconnect con1;
|
||||||
|
disconnect con2;
|
||||||
|
connection default;
|
||||||
|
|
||||||
|
--echo # Without the DEBUG_SYNC supplied in the same patch as this test in the
|
||||||
|
--echo # code, this test statement will hang.
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
|
||||||
|
SET DEBUG_SYNC = 'RESET';
|
||||||
|
|
@ -1144,8 +1144,10 @@ SELECT * FROM t1 UNION SELECT * FROM t1
|
|||||||
ORDER BY (SELECT a FROM t2 WHERE b = 12);
|
ORDER BY (SELECT a FROM t2 WHERE b = 12);
|
||||||
|
|
||||||
--echo # Should not crash
|
--echo # Should not crash
|
||||||
|
--disable_result_log
|
||||||
SELECT * FROM t1 UNION SELECT * FROM t1
|
SELECT * FROM t1 UNION SELECT * FROM t1
|
||||||
ORDER BY (SELECT a FROM t2 WHERE b = 12);
|
ORDER BY (SELECT a FROM t2 WHERE b = 12);
|
||||||
|
--enable_result_log
|
||||||
|
|
||||||
--echo # Should not crash
|
--echo # Should not crash
|
||||||
SELECT * FROM t2 UNION SELECT * FROM t2
|
SELECT * FROM t2 UNION SELECT * FROM t2
|
||||||
|
@ -514,6 +514,13 @@ public:
|
|||||||
char * name; /* Name from select */
|
char * name; /* Name from select */
|
||||||
/* Original item name (if it was renamed)*/
|
/* Original item name (if it was renamed)*/
|
||||||
char * orig_name;
|
char * orig_name;
|
||||||
|
/**
|
||||||
|
Intrusive list pointer for free list. If not null, points to the next
|
||||||
|
Item on some Query_arena's free list. For instance, stored procedures
|
||||||
|
have their own Query_arena's.
|
||||||
|
|
||||||
|
@see Query_arena::free_list
|
||||||
|
*/
|
||||||
Item *next;
|
Item *next;
|
||||||
uint32 max_length;
|
uint32 max_length;
|
||||||
uint name_length; /* Length of name */
|
uint name_length; /* Length of name */
|
||||||
|
@ -4215,6 +4215,16 @@ Create_func_rand::create_native(THD *thd, LEX_STRING name,
|
|||||||
if (item_list != NULL)
|
if (item_list != NULL)
|
||||||
arg_count= item_list->elements;
|
arg_count= item_list->elements;
|
||||||
|
|
||||||
|
/*
|
||||||
|
When RAND() is binlogged, the seed is binlogged too. So the
|
||||||
|
sequence of random numbers is the same on a replication slave as
|
||||||
|
on the master. However, if several RAND() values are inserted
|
||||||
|
into a table, the order in which the rows are modified may differ
|
||||||
|
between master and slave, because the order is undefined. Hence,
|
||||||
|
the statement is unsafe to log in statement format.
|
||||||
|
*/
|
||||||
|
thd->lex->set_stmt_unsafe();
|
||||||
|
|
||||||
switch (arg_count) {
|
switch (arg_count) {
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
|
@ -677,8 +677,8 @@ String *Item_func_concat_ws::val_str(String *str)
|
|||||||
res->length() + sep_str->length() + res2->length())
|
res->length() + sep_str->length() + res2->length())
|
||||||
{
|
{
|
||||||
/* We have room in str; We can't get any errors here */
|
/* We have room in str; We can't get any errors here */
|
||||||
if (str == res2)
|
if (str->ptr() == res2->ptr())
|
||||||
{ // This is quote uncommon!
|
{ // This is quite uncommon!
|
||||||
str->replace(0,0,*sep_str);
|
str->replace(0,0,*sep_str);
|
||||||
str->replace(0,0,*res);
|
str->replace(0,0,*res);
|
||||||
}
|
}
|
||||||
|
@ -3188,7 +3188,18 @@ START SLAVE; . Query: '%s'", expected_error, thd->query());
|
|||||||
|
|
||||||
compare_errors:
|
compare_errors:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
In the slave thread, we may sometimes execute some DROP / * 40005
|
||||||
|
TEMPORARY * / TABLE that come from parts of binlogs (likely if we
|
||||||
|
use RESET SLAVE or CHANGE MASTER TO), while the temporary table
|
||||||
|
has already been dropped. To ignore such irrelevant "table does
|
||||||
|
not exist errors", we silently clear the error if TEMPORARY was used.
|
||||||
|
*/
|
||||||
|
if (thd->lex->sql_command == SQLCOM_DROP_TABLE && thd->lex->drop_temporary &&
|
||||||
|
thd->is_error() && thd->stmt_da->sql_errno() == ER_BAD_TABLE_ERROR &&
|
||||||
|
!expected_error)
|
||||||
|
thd->stmt_da->reset_diagnostics_area();
|
||||||
|
/*
|
||||||
If we expected a non-zero error code, and we don't get the same error
|
If we expected a non-zero error code, and we don't get the same error
|
||||||
code, and it should be ignored or is related to a concurrency issue.
|
code, and it should be ignored or is related to a concurrency issue.
|
||||||
*/
|
*/
|
||||||
@ -7924,10 +7935,10 @@ Table_map_log_event::Table_map_log_event(THD *thd, TABLE *tbl, ulong tid,
|
|||||||
plus one or three bytes (see pack.c:net_store_length) for number of
|
plus one or three bytes (see pack.c:net_store_length) for number of
|
||||||
elements in the field metadata array.
|
elements in the field metadata array.
|
||||||
*/
|
*/
|
||||||
if (m_field_metadata_size > 255)
|
if (m_field_metadata_size < 251)
|
||||||
m_data_size+= m_field_metadata_size + 3;
|
|
||||||
else
|
|
||||||
m_data_size+= m_field_metadata_size + 1;
|
m_data_size+= m_field_metadata_size + 1;
|
||||||
|
else
|
||||||
|
m_data_size+= m_field_metadata_size + 3;
|
||||||
|
|
||||||
bzero(m_null_bits, num_null_bytes);
|
bzero(m_null_bits, num_null_bytes);
|
||||||
for (unsigned int i= 0 ; i < m_table->s->fields ; ++i)
|
for (unsigned int i= 0 ; i < m_table->s->fields ; ++i)
|
||||||
@ -8722,6 +8733,24 @@ static bool record_compare(TABLE *table)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check if we are using MyISAM.
|
||||||
|
|
||||||
|
If this is a myisam table, then we cannot do a memcmp
|
||||||
|
right away because some NULL fields can still contain
|
||||||
|
an old value in the row - they are not shown to the user
|
||||||
|
because the null bit is set, however, the contents are
|
||||||
|
not cleared. As such, plain memory comparison cannot be
|
||||||
|
assured to work. See: BUG#49482 and BUG#49481.
|
||||||
|
|
||||||
|
On top of this, we do not store field contents for null
|
||||||
|
fields in the binlog, so this is extra important when
|
||||||
|
comparing records fetched from binlog and from storage
|
||||||
|
engine.
|
||||||
|
*/
|
||||||
|
if (table->file->ht->db_type == DB_TYPE_MYISAM)
|
||||||
|
goto record_compare_field_by_field;
|
||||||
|
|
||||||
if (table->s->blob_fields + table->s->varchar_fields == 0)
|
if (table->s->blob_fields + table->s->varchar_fields == 0)
|
||||||
{
|
{
|
||||||
result= cmp_record(table,record[1]);
|
result= cmp_record(table,record[1]);
|
||||||
@ -8737,14 +8766,33 @@ static bool record_compare(TABLE *table)
|
|||||||
goto record_compare_exit;
|
goto record_compare_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
record_compare_field_by_field:
|
||||||
|
|
||||||
/* Compare updated fields */
|
/* Compare updated fields */
|
||||||
for (Field **ptr=table->field ; *ptr ; ptr++)
|
for (Field **ptr=table->field ; *ptr ; ptr++)
|
||||||
{
|
{
|
||||||
if ((*ptr)->cmp_binary_offset(table->s->rec_buff_length))
|
Field *f= *ptr;
|
||||||
|
|
||||||
|
/* if just one of the fields is null then there is no match */
|
||||||
|
if ((f->is_null_in_record(table->record[0])) ==
|
||||||
|
!(f->is_null_in_record(table->record[1])))
|
||||||
{
|
{
|
||||||
result= TRUE;
|
result= TRUE;
|
||||||
goto record_compare_exit;
|
goto record_compare_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if both fields are not null then we can compare */
|
||||||
|
if (!(f->is_null_in_record(table->record[0])) &&
|
||||||
|
!(f->is_null_in_record(table->record[1])))
|
||||||
|
{
|
||||||
|
if (f->cmp_binary_offset(table->s->rec_buff_length))
|
||||||
|
{
|
||||||
|
result= TRUE;
|
||||||
|
goto record_compare_exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if both fields are null then there is a match. compare next field */
|
||||||
}
|
}
|
||||||
|
|
||||||
record_compare_exit:
|
record_compare_exit:
|
||||||
|
@ -323,6 +323,24 @@ static bool record_compare(TABLE *table)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check if we are using MyISAM.
|
||||||
|
|
||||||
|
If this is a myisam table, then we cannot do a memcmp
|
||||||
|
right away because some NULL fields can still contain
|
||||||
|
an old value in the row - they are not shown to the user
|
||||||
|
because the null bit is set, however, the contents are
|
||||||
|
not cleared. As such, plain memory comparison cannot be
|
||||||
|
assured to work. See: BUG#49482 and BUG#49481.
|
||||||
|
|
||||||
|
On top of this, we do not store field contents for null
|
||||||
|
fields in the binlog, so this is extra important when
|
||||||
|
comparing records fetched from binlog and from storage
|
||||||
|
engine.
|
||||||
|
*/
|
||||||
|
if (table->file->ht->db_type == DB_TYPE_MYISAM)
|
||||||
|
goto record_compare_field_by_field;
|
||||||
|
|
||||||
if (table->s->blob_fields + table->s->varchar_fields == 0)
|
if (table->s->blob_fields + table->s->varchar_fields == 0)
|
||||||
{
|
{
|
||||||
result= cmp_record(table,record[1]);
|
result= cmp_record(table,record[1]);
|
||||||
@ -338,14 +356,33 @@ static bool record_compare(TABLE *table)
|
|||||||
goto record_compare_exit;
|
goto record_compare_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
record_compare_field_by_field:
|
||||||
|
|
||||||
/* Compare updated fields */
|
/* Compare updated fields */
|
||||||
for (Field **ptr=table->field ; *ptr ; ptr++)
|
for (Field **ptr=table->field ; *ptr ; ptr++)
|
||||||
{
|
{
|
||||||
if ((*ptr)->cmp_binary_offset(table->s->rec_buff_length))
|
Field *f= *ptr;
|
||||||
|
|
||||||
|
/* if just one of the fields is null then there is no match */
|
||||||
|
if ((f->is_null_in_record(table->record[0])) ==
|
||||||
|
!(f->is_null_in_record(table->record[1])))
|
||||||
{
|
{
|
||||||
result= TRUE;
|
result= TRUE;
|
||||||
goto record_compare_exit;
|
goto record_compare_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if both fields are not null then we can compare */
|
||||||
|
if (!(f->is_null_in_record(table->record[0])) &&
|
||||||
|
!(f->is_null_in_record(table->record[1])))
|
||||||
|
{
|
||||||
|
if (f->cmp_binary_offset(table->s->rec_buff_length))
|
||||||
|
{
|
||||||
|
result= TRUE;
|
||||||
|
goto record_compare_exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if both fields are null then there is a match. compare next field */
|
||||||
}
|
}
|
||||||
|
|
||||||
record_compare_exit:
|
record_compare_exit:
|
||||||
|
@ -95,6 +95,7 @@ public:
|
|||||||
case MYSQL_TYPE_LONG_BLOB:
|
case MYSQL_TYPE_LONG_BLOB:
|
||||||
case MYSQL_TYPE_DOUBLE:
|
case MYSQL_TYPE_DOUBLE:
|
||||||
case MYSQL_TYPE_FLOAT:
|
case MYSQL_TYPE_FLOAT:
|
||||||
|
case MYSQL_TYPE_GEOMETRY:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
These types store a single byte.
|
These types store a single byte.
|
||||||
|
@ -310,7 +310,7 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
|||||||
{
|
{
|
||||||
TABLE *table;
|
TABLE *table;
|
||||||
READ_RECORD read_record_info;
|
READ_RECORD read_record_info;
|
||||||
my_bool return_val= 1;
|
my_bool return_val= TRUE;
|
||||||
bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE;
|
bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE;
|
||||||
char tmp_name[NAME_LEN+1];
|
char tmp_name[NAME_LEN+1];
|
||||||
int password_length;
|
int password_length;
|
||||||
@ -623,7 +623,7 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
|||||||
init_check_host();
|
init_check_host();
|
||||||
|
|
||||||
initialized=1;
|
initialized=1;
|
||||||
return_val=0;
|
return_val= FALSE;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
thd->variables.sql_mode= old_sql_mode;
|
thd->variables.sql_mode= old_sql_mode;
|
||||||
@ -674,7 +674,7 @@ my_bool acl_reload(THD *thd)
|
|||||||
DYNAMIC_ARRAY old_acl_hosts,old_acl_users,old_acl_dbs;
|
DYNAMIC_ARRAY old_acl_hosts,old_acl_users,old_acl_dbs;
|
||||||
MEM_ROOT old_mem;
|
MEM_ROOT old_mem;
|
||||||
bool old_initialized;
|
bool old_initialized;
|
||||||
my_bool return_val= 1;
|
my_bool return_val= TRUE;
|
||||||
DBUG_ENTER("acl_reload");
|
DBUG_ENTER("acl_reload");
|
||||||
|
|
||||||
if (thd->locked_tables)
|
if (thd->locked_tables)
|
||||||
@ -701,8 +701,13 @@ my_bool acl_reload(THD *thd)
|
|||||||
|
|
||||||
if (simple_open_n_lock_tables(thd, tables))
|
if (simple_open_n_lock_tables(thd, tables))
|
||||||
{
|
{
|
||||||
sql_print_error("Fatal error: Can't open and lock privilege tables: %s",
|
/*
|
||||||
thd->stmt_da->message());
|
Execution might have been interrupted; only print the error message
|
||||||
|
if an error condition has been raised.
|
||||||
|
*/
|
||||||
|
if (thd->stmt_da->is_error())
|
||||||
|
sql_print_error("Fatal error: Can't open and lock privilege tables: %s",
|
||||||
|
thd->stmt_da->message());
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -678,7 +678,11 @@ static bool write_execute_load_query_log_event(THD *thd, sql_exchange* ex,
|
|||||||
if (n++)
|
if (n++)
|
||||||
pfields.append(", ");
|
pfields.append(", ");
|
||||||
if (item->name)
|
if (item->name)
|
||||||
|
{
|
||||||
|
pfields.append("`");
|
||||||
pfields.append(item->name);
|
pfields.append(item->name);
|
||||||
|
pfields.append("`");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
item->print(&pfields, QT_ORDINARY);
|
item->print(&pfields, QT_ORDINARY);
|
||||||
}
|
}
|
||||||
@ -698,7 +702,9 @@ static bool write_execute_load_query_log_event(THD *thd, sql_exchange* ex,
|
|||||||
val= lv++;
|
val= lv++;
|
||||||
if (n++)
|
if (n++)
|
||||||
pfields.append(", ");
|
pfields.append(", ");
|
||||||
|
pfields.append("`");
|
||||||
pfields.append(item->name);
|
pfields.append(item->name);
|
||||||
|
pfields.append("`");
|
||||||
pfields.append("=");
|
pfields.append("=");
|
||||||
val->print(&pfields, QT_ORDINARY);
|
val->print(&pfields, QT_ORDINARY);
|
||||||
}
|
}
|
||||||
|
@ -616,8 +616,10 @@ void free_items(Item *item)
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This works because items are allocated with sql_alloc() */
|
/**
|
||||||
|
This works because items are allocated with sql_alloc().
|
||||||
|
@note The function also handles null pointers (empty list).
|
||||||
|
*/
|
||||||
void cleanup_items(Item *item)
|
void cleanup_items(Item *item)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("cleanup_items");
|
DBUG_ENTER("cleanup_items");
|
||||||
@ -3515,17 +3517,6 @@ end_with_restore_list:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
If this is a slave thread, we may sometimes execute some
|
|
||||||
DROP / * 40005 TEMPORARY * / TABLE
|
|
||||||
that come from parts of binlogs (likely if we use RESET SLAVE or CHANGE
|
|
||||||
MASTER TO), while the temporary table has already been dropped.
|
|
||||||
To not generate such irrelevant "table does not exist errors",
|
|
||||||
we silently add IF EXISTS if TEMPORARY was used.
|
|
||||||
*/
|
|
||||||
if (thd->slave_thread)
|
|
||||||
lex->drop_if_exists= 1;
|
|
||||||
|
|
||||||
/* So that DROP TEMPORARY TABLE gets to binlog at commit/rollback */
|
/* So that DROP TEMPORARY TABLE gets to binlog at commit/rollback */
|
||||||
thd->options|= OPTION_KEEP_LOG;
|
thd->options|= OPTION_KEEP_LOG;
|
||||||
}
|
}
|
||||||
@ -7052,13 +7043,13 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
|
|||||||
thd->store_globals();
|
thd->store_globals();
|
||||||
lex_start(thd);
|
lex_start(thd);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (thd)
|
if (thd)
|
||||||
{
|
{
|
||||||
bool reload_acl_failed= acl_reload(thd);
|
bool reload_acl_failed= acl_reload(thd);
|
||||||
bool reload_grants_failed= grant_reload(thd);
|
bool reload_grants_failed= grant_reload(thd);
|
||||||
bool reload_servers_failed= servers_reload(thd);
|
bool reload_servers_failed= servers_reload(thd);
|
||||||
|
|
||||||
if (reload_acl_failed || reload_grants_failed || reload_servers_failed)
|
if (reload_acl_failed || reload_grants_failed || reload_servers_failed)
|
||||||
{
|
{
|
||||||
result= 1;
|
result= 1;
|
||||||
@ -7214,7 +7205,10 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
|
|||||||
if (options & REFRESH_USER_RESOURCES)
|
if (options & REFRESH_USER_RESOURCES)
|
||||||
reset_mqh((LEX_USER *) NULL, 0); /* purecov: inspected */
|
reset_mqh((LEX_USER *) NULL, 0); /* purecov: inspected */
|
||||||
*write_to_binlog= tmp_write_to_binlog;
|
*write_to_binlog= tmp_write_to_binlog;
|
||||||
return result;
|
/*
|
||||||
|
If the query was killed then this function must fail.
|
||||||
|
*/
|
||||||
|
return result || thd->killed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -923,11 +923,14 @@ impossible position";
|
|||||||
|
|
||||||
thd_proc_info(thd, "Finished reading one binlog; switching to next binlog");
|
thd_proc_info(thd, "Finished reading one binlog; switching to next binlog");
|
||||||
switch (mysql_bin_log.find_next_log(&linfo, 1)) {
|
switch (mysql_bin_log.find_next_log(&linfo, 1)) {
|
||||||
case LOG_INFO_EOF:
|
|
||||||
loop_breaker = (flags & BINLOG_DUMP_NON_BLOCK);
|
|
||||||
break;
|
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
|
case LOG_INFO_EOF:
|
||||||
|
if (mysql_bin_log.is_active(log_file_name))
|
||||||
|
{
|
||||||
|
loop_breaker = (flags & BINLOG_DUMP_NON_BLOCK);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
errmsg = "could not find next log";
|
errmsg = "could not find next log";
|
||||||
my_errno= ER_MASTER_FATAL_ERROR_READING_BINLOG;
|
my_errno= ER_MASTER_FATAL_ERROR_READING_BINLOG;
|
||||||
|
@ -7174,6 +7174,7 @@ static void update_depend_map(JOIN *join, ORDER *order)
|
|||||||
table_map depend_map;
|
table_map depend_map;
|
||||||
order->item[0]->update_used_tables();
|
order->item[0]->update_used_tables();
|
||||||
order->depend_map=depend_map=order->item[0]->used_tables();
|
order->depend_map=depend_map=order->item[0]->used_tables();
|
||||||
|
order->used= 0;
|
||||||
// Not item_sum(), RAND() and no reference to table outside of sub select
|
// Not item_sum(), RAND() and no reference to table outside of sub select
|
||||||
if (!(order->depend_map & (OUTER_REF_TABLE_BIT | RAND_TABLE_BIT))
|
if (!(order->depend_map & (OUTER_REF_TABLE_BIT | RAND_TABLE_BIT))
|
||||||
&& !order->item[0]->with_sum_func)
|
&& !order->item[0]->with_sum_func)
|
||||||
|
@ -241,8 +241,14 @@ bool servers_reload(THD *thd)
|
|||||||
|
|
||||||
if (simple_open_n_lock_tables(thd, tables))
|
if (simple_open_n_lock_tables(thd, tables))
|
||||||
{
|
{
|
||||||
sql_print_error("Can't open and lock privilege tables: %s",
|
/*
|
||||||
thd->stmt_da->message());
|
Execution might have been interrupted; only print the error message
|
||||||
|
if an error condition has been raised.
|
||||||
|
*/
|
||||||
|
if (thd->stmt_da->is_error())
|
||||||
|
sql_print_error("Can't open and lock privilege tables: %s",
|
||||||
|
thd->stmt_da->message());
|
||||||
|
return_val= FALSE;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "sp_head.h"
|
#include "sp_head.h"
|
||||||
#include "sql_trigger.h"
|
#include "sql_trigger.h"
|
||||||
#include "probes_mysql.h"
|
#include "probes_mysql.h"
|
||||||
|
#include "debug_sync.h"
|
||||||
|
|
||||||
/* Return 0 if row hasn't changed */
|
/* Return 0 if row hasn't changed */
|
||||||
|
|
||||||
@ -1147,8 +1148,11 @@ reopen_tables:
|
|||||||
items from 'fields' list, so the cleanup above is necessary to.
|
items from 'fields' list, so the cleanup above is necessary to.
|
||||||
*/
|
*/
|
||||||
cleanup_items(thd->free_list);
|
cleanup_items(thd->free_list);
|
||||||
|
cleanup_items(thd->stmt_arena->free_list);
|
||||||
close_tables_for_reopen(thd, &table_list);
|
close_tables_for_reopen(thd, &table_list);
|
||||||
|
|
||||||
|
DEBUG_SYNC(thd, "multi_update_reopen_tables");
|
||||||
|
|
||||||
goto reopen_tables;
|
goto reopen_tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,13 +21,13 @@ pkglib_LIBRARIES = libmystrings.a
|
|||||||
# Exact one of ASSEMBLER_X
|
# Exact one of ASSEMBLER_X
|
||||||
if ASSEMBLER_x86
|
if ASSEMBLER_x86
|
||||||
ASRCS = strings-x86.s longlong2str-x86.s my_strtoll10-x86.s
|
ASRCS = strings-x86.s longlong2str-x86.s my_strtoll10-x86.s
|
||||||
CSRCS = bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c str_alloc.c longlong2str_asm.c my_strchr.c
|
CSRCS = bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c str_alloc.c longlong2str_asm.c my_strchr.c strmov.c
|
||||||
else
|
else
|
||||||
if ASSEMBLER_sparc32
|
if ASSEMBLER_sparc32
|
||||||
# These file MUST all be on the same line!! Otherwise automake
|
# These file MUST all be on the same line!! Otherwise automake
|
||||||
# generats a very broken makefile
|
# generats a very broken makefile
|
||||||
ASRCS = bmove_upp-sparc.s strappend-sparc.s strend-sparc.s strinstr-sparc.s strmake-sparc.s strmov-sparc.s strnmov-sparc.s strstr-sparc.s
|
ASRCS = bmove_upp-sparc.s strappend-sparc.s strend-sparc.s strinstr-sparc.s strmake-sparc.s strmov-sparc.s strnmov-sparc.s strstr-sparc.s
|
||||||
CSRCS = strcont.c strfill.c strcend.c is_prefix.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c strxmov.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c my_strtoll10.c str_alloc.c my_strchr.c
|
CSRCS = strcont.c strfill.c strcend.c is_prefix.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c strxmov.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c my_strtoll10.c str_alloc.c my_strchr.c strmov.c
|
||||||
else
|
else
|
||||||
#no assembler
|
#no assembler
|
||||||
ASRCS =
|
ASRCS =
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 2000-2001, 2003-2006 MySQL AB
|
# Copyright (C) 2000-2006 MySQL AB, 2008-2010 Sun Microsystems, Inc.
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Library General Public
|
# modify it under the terms of the GNU Library General Public
|
||||||
@ -120,6 +120,7 @@ SUFFIXES = .sh
|
|||||||
-e 's!@''SHARED_LIB_VERSION''@!@SHARED_LIB_VERSION@!' \
|
-e 's!@''SHARED_LIB_VERSION''@!@SHARED_LIB_VERSION@!' \
|
||||||
-e 's!@''MYSQL_BASE_VERSION''@!@MYSQL_BASE_VERSION@!' \
|
-e 's!@''MYSQL_BASE_VERSION''@!@MYSQL_BASE_VERSION@!' \
|
||||||
-e 's!@''MYSQL_NO_DASH_VERSION''@!@MYSQL_NO_DASH_VERSION@!' \
|
-e 's!@''MYSQL_NO_DASH_VERSION''@!@MYSQL_NO_DASH_VERSION@!' \
|
||||||
|
-e 's!@''MYSQL_U_SCORE_VERSION''@!@MYSQL_U_SCORE_VERSION@!' \
|
||||||
-e 's!@''MYSQL_COPYRIGHT_YEAR''@!@MYSQL_COPYRIGHT_YEAR@!' \
|
-e 's!@''MYSQL_COPYRIGHT_YEAR''@!@MYSQL_COPYRIGHT_YEAR@!' \
|
||||||
-e 's!@''MYSQL_TCP_PORT''@!@MYSQL_TCP_PORT@!' \
|
-e 's!@''MYSQL_TCP_PORT''@!@MYSQL_TCP_PORT@!' \
|
||||||
-e 's!@''PERL_DBI_VERSION''@!@PERL_DBI_VERSION@!' \
|
-e 's!@''PERL_DBI_VERSION''@!@PERL_DBI_VERSION@!' \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
# Copyright (C) 2000-2008 MySQL AB, 2008-2010 Sun Microsystems, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -50,9 +50,9 @@
|
|||||||
%{!?malloc_lib_target:%define WITH_TCMALLOC 0}
|
%{!?malloc_lib_target:%define WITH_TCMALLOC 0}
|
||||||
|
|
||||||
%if %{STATIC_BUILD}
|
%if %{STATIC_BUILD}
|
||||||
%define release 0
|
%define release 1
|
||||||
%else
|
%else
|
||||||
%define release 0.glibc23
|
%define release 1.glibc23
|
||||||
%endif
|
%endif
|
||||||
%define mysql_license GPL
|
%define mysql_license GPL
|
||||||
%define mysqld_user mysql
|
%define mysqld_user mysql
|
||||||
@ -64,6 +64,19 @@
|
|||||||
# See BUG#998 for details.
|
# See BUG#998 for details.
|
||||||
%define _unpackaged_files_terminate_build 0
|
%define _unpackaged_files_terminate_build 0
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# RPM build tools now automatically detects Perl module dependencies. This
|
||||||
|
# detection gives problems as it is broken in some versions, and it also
|
||||||
|
# give unwanted dependencies from mandatory scripts in our package.
|
||||||
|
# Might not be possible to disable in all RPM tool versions, but here we
|
||||||
|
# try. We keep the "AutoReqProv: no" for the "test" sub package, as disabling
|
||||||
|
# here might fail, and that package has the most problems.
|
||||||
|
# See http://fedoraproject.org/wiki/Packaging/Perl#Filtering_Requires:_and_Provides
|
||||||
|
# http://www.wideopen.com/archives/rpm-list/2002-October/msg00343.html
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
%undefine __perl_provides
|
||||||
|
%undefine __perl_requires
|
||||||
|
|
||||||
%define see_base For a description of MySQL see the base MySQL RPM or http://www.mysql.com
|
%define see_base For a description of MySQL see the base MySQL RPM or http://www.mysql.com
|
||||||
|
|
||||||
# On SuSE 9 no separate "debuginfo" package is built. To enable basic
|
# On SuSE 9 no separate "debuginfo" package is built. To enable basic
|
||||||
@ -86,7 +99,7 @@
|
|||||||
Name: MySQL
|
Name: MySQL
|
||||||
Summary: MySQL: a very fast and reliable SQL database server
|
Summary: MySQL: a very fast and reliable SQL database server
|
||||||
Group: Applications/Databases
|
Group: Applications/Databases
|
||||||
Version: @MYSQL_NO_DASH_VERSION@
|
Version: @MYSQL_U_SCORE_VERSION@
|
||||||
Release: %{release}
|
Release: %{release}
|
||||||
License: Copyright 2000-2008 MySQL AB, @MYSQL_COPYRIGHT_YEAR@ Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Under %{mysql_license} license as shown in the Description field.
|
License: Copyright 2000-2008 MySQL AB, @MYSQL_COPYRIGHT_YEAR@ Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Under %{mysql_license} license as shown in the Description field.
|
||||||
Source: http://www.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/mysql-%{mysql_version}.tar.gz
|
Source: http://www.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/mysql-%{mysql_version}.tar.gz
|
||||||
@ -204,7 +217,7 @@ They should be used with caution.
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%package test
|
%package test
|
||||||
Requires: %{name}-client perl-DBI perl
|
Requires: %{name}-client perl
|
||||||
Summary: MySQL - Test suite
|
Summary: MySQL - Test suite
|
||||||
Group: Applications/Databases
|
Group: Applications/Databases
|
||||||
Provides: mysql-test
|
Provides: mysql-test
|
||||||
@ -882,6 +895,12 @@ fi
|
|||||||
# itself - note that they must be ordered by date (important when
|
# itself - note that they must be ordered by date (important when
|
||||||
# merging BK trees)
|
# merging BK trees)
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jan 11 2010 Joerg Bruehe <joerg.bruehe@sun.com>
|
||||||
|
|
||||||
|
- Change RPM file naming:
|
||||||
|
- Suffix like "-m2", "-rc" becomes part of version as "_m2", "_rc".
|
||||||
|
- Release counts from 1, not 0.
|
||||||
|
|
||||||
* Mon Nov 16 2009 Joerg Bruehe <joerg.bruehe@sun.com>
|
* Mon Nov 16 2009 Joerg Bruehe <joerg.bruehe@sun.com>
|
||||||
|
|
||||||
- Fix some problems with the directives around "tcmalloc" (experimental),
|
- Fix some problems with the directives around "tcmalloc" (experimental),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user