Commit 3bd6ca94 authored by Gleb Shchepa's avatar Gleb Shchepa

auto merge 5.1-main --> 5.1-bugteam

parents aafe0d66 5a041166
...@@ -10,7 +10,7 @@ AC_CANONICAL_SYSTEM ...@@ -10,7 +10,7 @@ AC_CANONICAL_SYSTEM
# #
# When changing major version number please also check switch statement # When changing major version number please also check switch statement
# in mysqlbinlog::check_master_version(). # in mysqlbinlog::check_master_version().
AM_INIT_AUTOMAKE(mysql, 5.1.26-rc) AM_INIT_AUTOMAKE(mysql, 5.1.27)
AM_CONFIG_HEADER([include/config.h:config.h.in]) AM_CONFIG_HEADER([include/config.h:config.h.in])
PROTOCOL_VERSION=10 PROTOCOL_VERSION=10
......
...@@ -130,7 +130,7 @@ test.t1 check error Table upgrade required. Please do "REPAIR TABLE `t1`" to fix ...@@ -130,7 +130,7 @@ test.t1 check error Table upgrade required. Please do "REPAIR TABLE `t1`" to fix
# REPAIR old table USE_FRM should fail # REPAIR old table USE_FRM should fail
REPAIR TABLE t1 USE_FRM; REPAIR TABLE t1 USE_FRM;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
t1 repair error Failed reparing incompatible .FRM file t1 repair error Failed repairing incompatible .frm file
# Run REPAIR TABLE to upgrade .frm file # Run REPAIR TABLE to upgrade .frm file
REPAIR TABLE t1; REPAIR TABLE t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
......
...@@ -4391,3 +4391,10 @@ SELECT * FROM t1 WHERE _utf8'a' = ANY (SELECT s1 FROM t1); ...@@ -4391,3 +4391,10 @@ SELECT * FROM t1 WHERE _utf8'a' = ANY (SELECT s1 FROM t1);
s1 s1
a a
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1(c int, KEY(c));
CREATE TABLE t2(a int, b int);
INSERT INTO t2 VALUES (1, 10), (2, NULL);
INSERT INTO t1 VALUES (1), (3);
SELECT * FROM t2 WHERE b NOT IN (SELECT max(t.c) FROM t1, t1 t WHERE t.c>10);
a b
DROP TABLE t1,t2;
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` (`id` int not null auto_increment primary key);
create trigger `trg` before insert on `t1` for each row begin end;
set @@global.debug="+d,simulate_bug33029";
stop slave;
start slave;
insert into `t1` values ();
select * from t1;
id
1
#
# Bug #36443 Server crashes when executing insert when insert trigger on table
#
# Emulating the former bug#33029 situation to see that there is no crash anymore.
#
source include/master-slave.inc;
create table `t1` (`id` int not null auto_increment primary key);
create trigger `trg` before insert on `t1` for each row begin end;
sync_slave_with_master;
set @@global.debug="+d,simulate_bug33029";
stop slave;
start slave;
connection master;
insert into `t1` values ();
sync_slave_with_master;
select * from t1;
...@@ -12,3 +12,4 @@ ...@@ -12,3 +12,4 @@
rpl_redirect : Failure is sporadic and and the test is superfluous (mats) rpl_redirect : Failure is sporadic and and the test is superfluous (mats)
rpl_innodb_bug28430 : Failure on Solaris Bug #36793 rpl_innodb_bug28430 : Failure on Solaris Bug #36793
rpl_server_id1 : Bug #36818 rpl_server_id1 fails expecting slave has stopped (azundris)
...@@ -3273,3 +3273,15 @@ INSERT INTO t1 VALUES ('a'); ...@@ -3273,3 +3273,15 @@ INSERT INTO t1 VALUES ('a');
SELECT * FROM t1 WHERE _utf8'a' = ANY (SELECT s1 FROM t1); SELECT * FROM t1 WHERE _utf8'a' = ANY (SELECT s1 FROM t1);
DROP TABLE t1; DROP TABLE t1;
#
# Bug #37004: NOT IN subquery with MAX over an empty set
#
CREATE TABLE t1(c int, KEY(c));
CREATE TABLE t2(a int, b int);
INSERT INTO t2 VALUES (1, 10), (2, NULL);
INSERT INTO t1 VALUES (1), (3);
SELECT * FROM t2 WHERE b NOT IN (SELECT max(t.c) FROM t1, t1 t WHERE t.c>10);
DROP TABLE t1,t2;
This diff is collapsed.
...@@ -4136,6 +4136,7 @@ bool rpl_master_erroneous_autoinc(THD *thd) ...@@ -4136,6 +4136,7 @@ bool rpl_master_erroneous_autoinc(THD *thd)
if (active_mi && active_mi->rli.sql_thd == thd) if (active_mi && active_mi->rli.sql_thd == thd)
{ {
Relay_log_info *rli= &active_mi->rli; Relay_log_info *rli= &active_mi->rli;
DBUG_EXECUTE_IF("simulate_bug33029", return TRUE;);
return rpl_master_has_bug(rli, 33029, FALSE); return rpl_master_has_bug(rli, 33029, FALSE);
} }
return FALSE; return FALSE;
......
...@@ -2882,8 +2882,8 @@ void THD::reset_sub_statement_state(Sub_statement_state *backup, ...@@ -2882,8 +2882,8 @@ void THD::reset_sub_statement_state(Sub_statement_state *backup,
*/ */
if (rpl_master_erroneous_autoinc(this)) if (rpl_master_erroneous_autoinc(this))
{ {
backup->auto_inc_intervals_forced= auto_inc_intervals_forced; DBUG_ASSERT(backup->auto_inc_intervals_forced.nb_elements() == 0);
auto_inc_intervals_forced.empty(); auto_inc_intervals_forced.swap(&backup->auto_inc_intervals_forced);
} }
#endif #endif
...@@ -2931,8 +2931,8 @@ void THD::restore_sub_statement_state(Sub_statement_state *backup) ...@@ -2931,8 +2931,8 @@ void THD::restore_sub_statement_state(Sub_statement_state *backup)
*/ */
if (rpl_master_erroneous_autoinc(this)) if (rpl_master_erroneous_autoinc(this))
{ {
auto_inc_intervals_forced= backup->auto_inc_intervals_forced; backup->auto_inc_intervals_forced.swap(&auto_inc_intervals_forced);
backup->auto_inc_intervals_forced.empty(); DBUG_ASSERT(backup->auto_inc_intervals_forced.nb_elements() == 0);
} }
#endif #endif
......
...@@ -888,6 +888,7 @@ JOIN::optimize() ...@@ -888,6 +888,7 @@ JOIN::optimize()
{ {
DBUG_PRINT("info",("No matching min/max row")); DBUG_PRINT("info",("No matching min/max row"));
zero_result_cause= "No matching min/max row"; zero_result_cause= "No matching min/max row";
tables= 0;
error=0; error=0;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
...@@ -901,6 +902,7 @@ JOIN::optimize() ...@@ -901,6 +902,7 @@ JOIN::optimize()
{ {
DBUG_PRINT("info",("No matching min/max row")); DBUG_PRINT("info",("No matching min/max row"));
zero_result_cause= "No matching min/max row"; zero_result_cause= "No matching min/max row";
tables= 0;
error=0; error=0;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
...@@ -4024,7 +4024,7 @@ static int prepare_for_repair(THD *thd, TABLE_LIST *table_list, ...@@ -4024,7 +4024,7 @@ static int prepare_for_repair(THD *thd, TABLE_LIST *table_list,
if (table->s->frm_version != FRM_VER_TRUE_VARCHAR) if (table->s->frm_version != FRM_VER_TRUE_VARCHAR)
{ {
error= send_check_errmsg(thd, table_list, "repair", error= send_check_errmsg(thd, table_list, "repair",
"Failed reparing incompatible .FRM file"); "Failed repairing incompatible .frm file");
goto end; goto end;
} }
......
...@@ -314,31 +314,22 @@ class Discrete_intervals_list { ...@@ -314,31 +314,22 @@ class Discrete_intervals_list {
*/ */
Discrete_interval *current; Discrete_interval *current;
uint elements; // number of elements uint elements; // number of elements
void set_members(Discrete_interval *h, Discrete_interval *t,
/* helper function for copy construct and assignment operator */ Discrete_interval *c, uint el)
void copy_(const Discrete_intervals_list& from) {
{ head= h;
for (Discrete_interval *i= from.head; i; i= i->next) tail= t;
{ current= c;
Discrete_interval j= *i; elements= el;
append(&j);
}
} }
void operator=(Discrete_intervals_list &); /* prevent use of these */
Discrete_intervals_list(const Discrete_intervals_list &);
public: public:
Discrete_intervals_list() : head(NULL), current(NULL), elements(0) {}; Discrete_intervals_list() : head(NULL), current(NULL), elements(0) {};
Discrete_intervals_list(const Discrete_intervals_list& from)
{
copy_(from);
}
void operator=(const Discrete_intervals_list& from)
{
empty();
copy_(from);
}
void empty_no_free() void empty_no_free()
{ {
head= current= NULL; set_members(NULL, NULL, NULL, 0);
elements= 0;
} }
void empty() void empty()
{ {
...@@ -350,7 +341,24 @@ class Discrete_intervals_list { ...@@ -350,7 +341,24 @@ class Discrete_intervals_list {
} }
empty_no_free(); empty_no_free();
} }
void copy_shallow(const Discrete_intervals_list * dli)
{
head= dli->get_head();
tail= dli->get_tail();
current= dli->get_current();
elements= dli->nb_elements();
}
void swap (Discrete_intervals_list * dli)
{
Discrete_interval *h, *t, *c;
uint el;
h= dli->get_head();
t= dli->get_tail();
c= dli->get_current();
el= dli->nb_elements();
dli->copy_shallow(this);
set_members(h, t, c, el);
}
const Discrete_interval* get_next() const Discrete_interval* get_next()
{ {
Discrete_interval *tmp= current; Discrete_interval *tmp= current;
...@@ -364,4 +372,7 @@ class Discrete_intervals_list { ...@@ -364,4 +372,7 @@ class Discrete_intervals_list {
ulonglong minimum() const { return (head ? head->minimum() : 0); }; ulonglong minimum() const { return (head ? head->minimum() : 0); };
ulonglong maximum() const { return (head ? tail->maximum() : 0); }; ulonglong maximum() const { return (head ? tail->maximum() : 0); };
uint nb_elements() const { return elements; } uint nb_elements() const { return elements; }
Discrete_interval* get_head() const { return head; };
Discrete_interval* get_tail() const { return tail; };
Discrete_interval* get_current() const { return current; };
}; };
...@@ -159,7 +159,7 @@ libinnobase_a_CXXFLAGS= $(AM_CFLAGS) ...@@ -159,7 +159,7 @@ libinnobase_a_CXXFLAGS= $(AM_CFLAGS)
libinnobase_a_CFLAGS = $(AM_CFLAGS) libinnobase_a_CFLAGS = $(AM_CFLAGS)
EXTRA_LTLIBRARIES = ha_innodb.la EXTRA_LTLIBRARIES = ha_innodb.la
pkglib_LTLIBRARIES = @plugin_innobase_shared_target@ pkgplugin_LTLIBRARIES= @plugin_innobase_shared_target@
ha_innodb_la_LDFLAGS = -module -rpath $(pkgplugindir) ha_innodb_la_LDFLAGS = -module -rpath $(pkgplugindir)
ha_innodb_la_CXXFLAGS= $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN ha_innodb_la_CXXFLAGS= $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment