Commit a5abde17 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.1-new-rpl

into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.1-merge


client/mysqlbinlog.cc:
  Auto merged
include/my_global.h:
  Auto merged
mysql-test/t/disabled.def:
  Auto merged
sql/field.cc:
  Auto merged
sql/item_func.cc:
  Auto merged
sql/log.cc:
  Auto merged
sql/log_event.cc:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/slave.cc:
  Auto merged
sql/sql_insert.cc:
  Auto merged
sql/sql_show.cc:
  Auto merged
parents 3c990412 56e143c5
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -486,18 +486,15 @@ write_event_header_and_base64(Log_event *ev, FILE *result_file,
  DBUG_ENTER("write_event_header_and_base64");
  /* Write header and base64 output to cache */
  IO_CACHE result_cache;
  if (init_io_cache(&result_cache, -1, 0, WRITE_CACHE, 0L, FALSE,
                    MYF(MY_WME | MY_NABP)))
  {
  if (open_cached_file(&result_cache, NULL, NULL, 0, MYF(MY_WME | MY_NABP)))
    return 1;
  }

  ev->print_header(&result_cache, print_event_info, FALSE);
  ev->print_base64(&result_cache, print_event_info, FALSE);

  /* Read data from cache and write to result file */
  my_b_copy_to_file(&result_cache, result_file);
  end_io_cache(&result_cache);
  close_cached_file(&result_cache);
  DBUG_RETURN(0);
}

@@ -1016,6 +1013,9 @@ static int dump_log_entries(const char* logname)
{
  int rc;
  PRINT_EVENT_INFO print_event_info;

  if (!print_event_info.init_ok())
    return 1;
  /*
     Set safe delimiter, to dump things
     like CREATE PROCEDURE safely
+7 −0
Original line number Diff line number Diff line
@@ -1479,4 +1479,11 @@ do { doubleget_union _tmp; \
#define dlerror() ""
#endif

/*
  Include standard definitions of operator new and delete.
 */
#ifdef __cplusplus
#include <new>
#endif

#endif /* my_global_h */
+11 −0
Original line number Diff line number Diff line
@@ -413,3 +413,14 @@ select * from t1;
insert into t1 values ('abc');
select * from t1;
drop table t1;

#
# Bug#25815 Data truncated for column TEXT
#
set names utf8;
create table t1 (a text) default character set cp932;
insert into t1 values (_utf8 0xE38182);
show warnings;
select * from t1;
select hex(a) from t1;
drop table t1;
+86 −0
Original line number Diff line number Diff line
# The two bugs below (BUG#25507 and BUG#26116) existed only in
# statement-based binlogging; we test that now they are fixed;
# we also test that mixed and row-based binlogging work too,
# for completeness.

connection master;
--disable_warnings
CREATE SCHEMA IF NOT EXISTS mysqlslap;
USE mysqlslap;
--enable_warnings

select @@global.binlog_format;

#
# BUG#25507 "multi-row insert delayed + auto increment causes
# duplicate key entries on slave";
# happened only in statement-based binlogging.
#

CREATE TABLE t1 (id INT primary key auto_increment, name VARCHAR(64));
let $query = "INSERT DELAYED INTO t1 VALUES (null, 'Dr. No'), (null, 'From Russia With Love'), (null, 'Goldfinger'), (null, 'Thunderball'), (null, 'You Only Live Twice')";
--exec $MYSQL_SLAP --silent --concurrency=5 --iterations=200 --query=$query --delimiter=";"

FLUSH TABLE t1; # another way to be sure INSERT DELAYED has inserted
SELECT COUNT(*) FROM t1;
# when bug existed slave failed below ("duplicate key" error at random INSERT)
sync_slave_with_master;
use mysqlslap;
SELECT COUNT(*) FROM t1;

#
# BUG#26116 "If multi-row INSERT DELAYED has errors,
# statement-based binlogging breaks";
# happened only in statement-based binlogging.
#

connection master;
truncate table t1;
# first scenario: duplicate on first row
insert delayed into t1 values(10, "my name");
if ($binlog_format_statement)
{
  # statement below will be converted to non-delayed INSERT and so
  # will stop at first error, guaranteeing replication.
  --error ER_DUP_ENTRY_WITH_KEY_NAME
  insert delayed into t1 values(10, "is Bond"), (20, "James Bond");
}
if (!$binlog_format_statement)
{
  insert delayed into t1 values(10, "is Bond"), (20, "James Bond");
}
flush table t1; # to wait for INSERT DELAYED to be done
select * from t1;
sync_slave_with_master;
# when bug existed in statement-based binlogging, t1 on slave had
# different content from on master
select * from t1;

# second scenario: duplicate on second row
connection master;
delete from t1 where id!=10;
if ($binlog_format_statement)
{
  # statement below will be converted to non-delayed INSERT and so
  # will be binlogged with its ER_DUP_ENTRY error code, guaranteeing
  # replication (slave will hit the same error code and so be fine).
  --error ER_DUP_ENTRY_WITH_KEY_NAME
  insert delayed into t1 values(20, "is Bond"), (10, "James Bond");
}
if (!$binlog_format_statement)
{
  insert delayed into t1 values(20, "is Bond"), (10, "James Bond");
}
flush table t1; # to wait for INSERT DELAYED to be done
select * from t1;
sync_slave_with_master;
# when bug existed in statement-based binlogging, query was binlogged
# with error_code=0 so slave stopped
select * from t1;

# clean up
connection master;
USE test;
DROP SCHEMA mysqlslap;
sync_slave_with_master;
connection master;
+54 −1
Original line number Diff line number Diff line
@@ -209,7 +209,7 @@ connection master;

drop function bug15728;
drop function bug15728_insert;
drop table t1;
drop table t1,t2;
drop procedure foo;

# test of BUG#20188 REPLACE or ON DUPLICATE KEY UPDATE in
@@ -276,6 +276,59 @@ connection master;
drop table t1;
sync_slave_with_master;

#
# BUG#24432 "INSERT... ON DUPLICATE KEY UPDATE skips auto_increment values"
#

connection master;
# testcase with INSERT VALUES
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY AUTO_INCREMENT, b INT,
UNIQUE(b));
INSERT INTO t1(b) VALUES(1),(1),(2) ON DUPLICATE KEY UPDATE t1.b=10;
SELECT * FROM t1;
sync_slave_with_master;
SELECT * FROM t1;
connection master;
drop table t1;

# tescase with INSERT SELECT
CREATE TABLE t1 (
  id bigint(20) unsigned NOT NULL auto_increment,
  field_1 int(10) unsigned NOT NULL,
  field_2 varchar(255) NOT NULL,
  field_3 varchar(255) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY field_1 (field_1, field_2)
);
CREATE TABLE t2 (
  field_a int(10) unsigned NOT NULL,
  field_b varchar(255) NOT NULL,
  field_c varchar(255) NOT NULL
);
INSERT INTO t2 (field_a, field_b, field_c) VALUES (1, 'a', '1a');
INSERT INTO t2 (field_a, field_b, field_c) VALUES (2, 'b', '2b');
INSERT INTO t2 (field_a, field_b, field_c) VALUES (3, 'c', '3c');
INSERT INTO t2 (field_a, field_b, field_c) VALUES (4, 'd', '4d');
INSERT INTO t2 (field_a, field_b, field_c) VALUES (5, 'e', '5e');
# Updating table t1 based on values from table t2
INSERT INTO t1 (field_1, field_2, field_3)
SELECT t2.field_a, t2.field_b, t2.field_c
FROM t2
ON DUPLICATE KEY UPDATE
t1.field_3 = t2.field_c;
# Inserting new record into t2
INSERT INTO t2 (field_a, field_b, field_c) VALUES (6, 'f', '6f');
# Updating t1 again
INSERT INTO t1 (field_1, field_2, field_3)
SELECT t2.field_a, t2.field_b, t2.field_c
FROM t2
ON DUPLICATE KEY UPDATE
t1.field_3 = t2.field_c;
SELECT * FROM t1;
sync_slave_with_master;
SELECT * FROM t1;
connection master;
drop table t1, t2;

#
# BUG#20339: stored procedure using LAST_INSERT_ID() does not
Loading