Commit 2b55a288 authored by monty@hasky.mysql.fi's avatar monty@hasky.mysql.fi

Merge monty@192.168.0.9:/my/mysql-5.1

into  mysql.com:/home/my/mysql-5.1
parents 729ee036 64915795
--require r/have_binlog_format_row.require
--disable_query_log
--replace_result MIXED ROW
show variables like "binlog_format";
--enable_query_log
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;
**** On Master ****
CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB;
INSERT INTO t1 VALUES (1,1), (2,2);
SELECT * FROM t1 ORDER BY a,b;
a b
1 1
2 2
**** On Slave ****
INSERT INTO t1 VALUE (3,3);
SELECT * FROM t1 ORDER BY a,b;
a b
1 1
2 2
3 3
**** On Master ****
TRUNCATE TABLE t1;
SELECT * FROM t1 ORDER BY a,b;
a b
**** On Slave ****
SELECT * FROM t1 ORDER BY a,b;
a b
**** On Master ****
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
master-bin.000001 102 Query 1 219 use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB
master-bin.000001 219 Query 1 283 BEGIN
master-bin.000001 283 Table_map 1 40 table_id: # (test.t1)
master-bin.000001 323 Table_map 1 93 table_id: # (cluster.apply_status)
master-bin.000001 376 Write_rows 1 135 table_id: #
master-bin.000001 418 Write_rows 1 182 table_id: # flags: STMT_END_F
master-bin.000001 465 Query 1 530 COMMIT
master-bin.000001 530 Query 1 610 use `test`; TRUNCATE TABLE t1
master-bin.000001 610 Query 1 686 use `test`; DROP TABLE t1
**** On Master ****
CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB;
INSERT INTO t1 VALUES (1,1), (2,2);
SELECT * FROM t1 ORDER BY a,b;
a b
1 1
2 2
**** On Slave ****
INSERT INTO t1 VALUE (3,3);
SELECT * FROM t1 ORDER BY a,b;
a b
1 1
2 2
3 3
**** On Master ****
DELETE FROM t1;
SELECT * FROM t1 ORDER BY a,b;
a b
**** On Slave ****
SELECT * FROM t1 ORDER BY a,b;
a b
3 3
**** On Master ****
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
master-bin.000001 102 Query 1 219 use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB
master-bin.000001 219 Query 1 283 BEGIN
master-bin.000001 283 Table_map 1 40 table_id: # (test.t1)
master-bin.000001 323 Table_map 1 93 table_id: # (cluster.apply_status)
master-bin.000001 376 Write_rows 1 135 table_id: #
master-bin.000001 418 Write_rows 1 182 table_id: # flags: STMT_END_F
master-bin.000001 465 Query 1 530 COMMIT
master-bin.000001 530 Query 1 610 use `test`; TRUNCATE TABLE t1
master-bin.000001 610 Query 1 686 use `test`; DROP TABLE t1
master-bin.000001 686 Query 1 803 use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB
master-bin.000001 803 Query 1 867 BEGIN
master-bin.000001 867 Table_map 1 40 table_id: # (test.t1)
master-bin.000001 907 Table_map 1 93 table_id: # (cluster.apply_status)
master-bin.000001 960 Write_rows 1 135 table_id: #
master-bin.000001 1002 Write_rows 1 182 table_id: # flags: STMT_END_F
master-bin.000001 1049 Query 1 1114 COMMIT
master-bin.000001 1114 Query 1 1178 BEGIN
master-bin.000001 1178 Table_map 1 40 table_id: # (test.t1)
master-bin.000001 1218 Table_map 1 93 table_id: # (cluster.apply_status)
master-bin.000001 1271 Write_rows 1 135 table_id: #
master-bin.000001 1313 Delete_rows 1 174 table_id: # flags: STMT_END_F
master-bin.000001 1352 Query 1 1417 COMMIT
master-bin.000001 1417 Query 1 1493 use `test`; DROP TABLE t1
--source include/have_ndb.inc --source include/have_ndb.inc
--source include/master-slave.inc --source include/master-slave.inc
--source include/have_binlog_format_mixed_or_row.inc
--disable_query_log --disable_query_log
--disable_warnings --disable_warnings
......
# Same test as rpl_truncate_7ndb.test, but with mixed mode
# This is marked with 'big_test' just because the rpl_truncate_7ndb test is
# so slow...
--source include/big_test.inc
--source t/rpl_truncate_7ndb.test
...@@ -4056,6 +4056,7 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type) ...@@ -4056,6 +4056,7 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
DBUG_PRINT("warning", ("ops_pending != 0L")); DBUG_PRINT("warning", ("ops_pending != 0L"));
m_ops_pending= 0; m_ops_pending= 0;
} }
thd->set_current_stmt_binlog_row_based_if_mixed();
DBUG_RETURN(error); DBUG_RETURN(error);
} }
...@@ -4105,6 +4106,7 @@ int ha_ndbcluster::start_stmt(THD *thd, thr_lock_type lock_type) ...@@ -4105,6 +4106,7 @@ int ha_ndbcluster::start_stmt(THD *thd, thr_lock_type lock_type)
// Start of statement // Start of statement
m_ops_pending= 0; m_ops_pending= 0;
thd->set_current_stmt_binlog_row_based_if_mixed();
DBUG_RETURN(error); DBUG_RETURN(error);
} }
...@@ -5452,7 +5454,8 @@ void ha_ndbcluster::get_auto_increment(ulonglong offset, ulonglong increment, ...@@ -5452,7 +5454,8 @@ void ha_ndbcluster::get_auto_increment(ulonglong offset, ulonglong increment,
HA_CAN_BIT_FIELD | \ HA_CAN_BIT_FIELD | \
HA_PRIMARY_KEY_REQUIRED_FOR_POSITION | \ HA_PRIMARY_KEY_REQUIRED_FOR_POSITION | \
HA_PRIMARY_KEY_REQUIRED_FOR_DELETE | \ HA_PRIMARY_KEY_REQUIRED_FOR_DELETE | \
HA_PARTIAL_COLUMN_READ HA_PARTIAL_COLUMN_READ | \
HA_HAS_OWN_BINLOGGING
ha_ndbcluster::ha_ndbcluster(TABLE_SHARE *table_arg): ha_ndbcluster::ha_ndbcluster(TABLE_SHARE *table_arg):
handler(&ndbcluster_hton, table_arg), handler(&ndbcluster_hton, table_arg),
...@@ -7954,6 +7957,7 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) ...@@ -7954,6 +7957,7 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
my_net_init(&thd->net, 0); my_net_init(&thd->net, 0);
thd->main_security_ctx.master_access= ~0; thd->main_security_ctx.master_access= ~0;
thd->main_security_ctx.priv_user = 0; thd->main_security_ctx.priv_user = 0;
thd->current_stmt_binlog_row_based= TRUE; // If in mixed mode
/* /*
wait for mysql server to start wait for mysql server to start
......
...@@ -661,8 +661,6 @@ class ha_ndbcluster: public handler ...@@ -661,8 +661,6 @@ class ha_ndbcluster: public handler
bool low_byte_first() const; bool low_byte_first() const;
virtual bool is_injective() const { return true; }
const char* index_type(uint key_number); const char* index_type(uint key_number);
double scan_time(); double scan_time();
......
...@@ -3347,9 +3347,11 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) ...@@ -3347,9 +3347,11 @@ pthread_handler_t ndb_binlog_thread_func(void *arg)
ndb_binlog_thread_running= 1; ndb_binlog_thread_running= 1;
if (opt_bin_log) if (opt_bin_log)
{ {
if (global_system_variables.binlog_format == BINLOG_FORMAT_ROW) if (global_system_variables.binlog_format == BINLOG_FORMAT_ROW ||
global_system_variables.binlog_format == BINLOG_FORMAT_MIXED)
{ {
ndb_binlog_running= TRUE; ndb_binlog_running= TRUE;
thd->current_stmt_binlog_row_based= TRUE; // If in mixed mode
} }
else else
{ {
......
...@@ -3305,7 +3305,7 @@ namespace ...@@ -3305,7 +3305,7 @@ namespace
const byte *before_record, const byte *before_record,
const byte *after_record) const byte *after_record)
{ {
if (table->file->is_injective()) if (table->file->ha_table_flags() & HA_HAS_OWN_BINLOGGING)
return 0; return 0;
bool error= 0; bool error= 0;
THD *const thd= table->in_use; THD *const thd= table->in_use;
......
...@@ -116,6 +116,8 @@ ...@@ -116,6 +116,8 @@
#define HA_ANY_INDEX_MAY_BE_UNIQUE (1 << 30) #define HA_ANY_INDEX_MAY_BE_UNIQUE (1 << 30)
#define HA_NO_COPY_ON_ALTER (LL(1) << 31) #define HA_NO_COPY_ON_ALTER (LL(1) << 31)
#define HA_HAS_RECORDS (LL(1) << 32) /* records() gives exact count*/ #define HA_HAS_RECORDS (LL(1) << 32) /* records() gives exact count*/
/* Has it's own method of binlog logging */
#define HA_HAS_OWN_BINLOGGING (LL(1) << 33)
/* bits in index_flags(index_number) for what you can do with index */ /* bits in index_flags(index_number) for what you can do with index */
#define HA_READ_NEXT 1 /* TODO really use this flag */ #define HA_READ_NEXT 1 /* TODO really use this flag */
...@@ -1053,12 +1055,6 @@ public: ...@@ -1053,12 +1055,6 @@ public:
int ha_update_row(const byte * old_data, byte * new_data); int ha_update_row(const byte * old_data, byte * new_data);
int ha_delete_row(const byte * buf); int ha_delete_row(const byte * buf);
/*
If the handler does it's own injection of the rows, this member function
should return 'true'.
*/
virtual bool is_injective() const { return false; }
/* /*
SYNOPSIS SYNOPSIS
start_bulk_update() start_bulk_update()
......
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