summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <lars@mysql.com>2006-05-17 15:14:07 +0200
committerunknown <lars@mysql.com>2006-05-17 15:14:07 +0200
commit883b2229a52ab3321322f517fb27c371c5f72f3b (patch)
treeebfe2d523ca4483b5f0bc6a4b0d768b11eb4ea39 /sql
parentc4e26cb03dc35bb980e493e37a91b725e0d21b3b (diff)
parent36815fa1ad44d678c7ba01312562d08a550cb0ca (diff)
downloadmariadb-git-883b2229a52ab3321322f517fb27c371c5f72f3b.tar.gz
Merge mysql.com:/users/lthalmann/bkroot/mysql-5.1-new
into mysql.com:/users/lthalmann/bk/mysql-5.1-new-rpl sql/sql_class.h: Auto merged sql/sql_table.cc: Auto merged mysql-test/r/innodb_mysql.result: Manual merge mysql-test/t/innodb_mysql.test: Manual merge sql/log.cc: Manual merge sql/set_var.cc: Manual merge sql/sql_base.cc: Manual merge sql/sql_class.cc: Manual merge sql/sql_parse.cc: Manual merge
Diffstat (limited to 'sql')
-rw-r--r--sql/log.cc11
-rw-r--r--sql/set_var.cc11
-rw-r--r--sql/set_var.h9
-rw-r--r--sql/share/errmsg.txt2
-rw-r--r--sql/sql_class.cc6
-rw-r--r--sql/sql_class.h22
-rw-r--r--sql/sql_insert.cc10
-rw-r--r--sql/sql_table.cc3
8 files changed, 61 insertions, 13 deletions
diff --git a/sql/log.cc b/sql/log.cc
index fa86064682d..5546f47004d 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -63,11 +63,17 @@ static int binlog_prepare(THD *thd, bool all);
struct binlog_trx_data {
bool empty() const
{
+#ifdef HAVE_ROW_BASED_REPLICATION
return pending == NULL && my_b_tell(&trans_log) == 0;
+#else
+ return my_b_tell(&trans_log) == 0;
+#endif
}
binlog_trx_data() {}
IO_CACHE trans_log; // The transaction cache
+#ifdef HAVE_ROW_BASED_REPLICATION
Rows_log_event *pending; // The pending binrows event
+#endif
};
static const char binlog_hton_name[]= "binlog";
@@ -1095,6 +1101,7 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data, Log_event *end_ev)
#endif
error= mysql_bin_log.write(thd, trans_log, end_ev);
}
+#ifdef HAVE_ROW_BASED_REPLICATION
else
{
#ifdef HAVE_ROW_BASED_REPLICATION
@@ -1114,6 +1121,7 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data, Log_event *end_ev)
transaction cache.
*/
mysql_bin_log.update_table_map_version();
+#endif
statistic_increment(binlog_cache_use, &LOCK_status);
if (trans_log->disk_writes != 0)
@@ -2660,6 +2668,7 @@ int THD::binlog_setup_trx_data()
engine has registered for the transaction.
*/
+#ifdef HAVE_ROW_BASED_REPLICATION
int THD::binlog_write_table_map(TABLE *table, bool is_trans)
{
int error;
@@ -2835,6 +2844,7 @@ bool MYSQL_LOG::write(Log_event *event_info)
we are inside a stored function, we do not end the statement since
this will close all tables on the slave.
*/
+#ifdef HAVE_ROW_BASED_REPLICATION
bool const end_stmt=
thd->prelocked_mode && thd->lex->requires_prelocking();
#ifdef HAVE_ROW_BASED_REPLICATION
@@ -2890,7 +2900,6 @@ bool MYSQL_LOG::write(Log_event *event_info)
(binlog_trx_data*) thd->ha_data[binlog_hton.slot];
IO_CACHE *trans_log= &trx_data->trans_log;
bool trans_log_in_use= my_b_tell(trans_log) != 0;
-
if (event_info->get_cache_stmt() && !trans_log_in_use)
trans_register_ha(thd,
(thd->options &
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 588c686e265..26fb42166b1 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -1269,8 +1269,14 @@ bool sys_var_thd_binlog_format::is_readonly() const
if global or not here.
And this test will also prevent switching from RBR to RBR (a no-op which
should not happen too often).
+
+ If we don't have row-based replication compiled in, the variable
+ is always read-only.
*/
-#ifdef HAVE_ROW_BASED_REPLICATION
+#ifndef HAVE_ROW_BASED_REPLICATION
+ my_error(ER_RBR_NOT_AVAILABLE, MYF(0));
+ return 1;
+#else
if ((thd->variables.binlog_format == BINLOG_FORMAT_ROW) &&
thd->temporary_tables)
{
@@ -1297,14 +1303,17 @@ bool sys_var_thd_binlog_format::is_readonly() const
}
#endif
return sys_var_thd_enum::is_readonly();
+#endif
}
+#ifdef HAVE_ROW_BASED_REPLICATION
void fix_binlog_format_after_update(THD *thd, enum_var_type type)
{
#ifdef HAVE_ROW_BASED_REPLICATION
thd->reset_current_stmt_binlog_row_based();
#endif /*HAVE_ROW_BASED_REPLICATION*/
}
+#endif
static void fix_max_binlog_size(THD *thd, enum_var_type type)
{
diff --git a/sql/set_var.h b/sql/set_var.h
index 8076f10bb0a..d52b2720918 100644
--- a/sql/set_var.h
+++ b/sql/set_var.h
@@ -851,15 +851,20 @@ public:
bool update(THD *thd, set_var *var);
};
+#ifdef HAVE_ROW_BASED_REPLICATION
extern void fix_binlog_format_after_update(THD *thd, enum_var_type type);
+#endif
class sys_var_thd_binlog_format :public sys_var_thd_enum
{
public:
sys_var_thd_binlog_format(const char *name_arg, ulong SV::*offset_arg)
:sys_var_thd_enum(name_arg, offset_arg,
- &binlog_format_typelib,
- fix_binlog_format_after_update)
+ &binlog_format_typelib
+#ifdef HAVE_ROW_BASED_REPLICATION
+ , fix_binlog_format_after_update
+#endif
+ )
{};
bool is_readonly() const;
};
diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt
index a2bc77714bb..864df32f9f5 100644
--- a/sql/share/errmsg.txt
+++ b/sql/share/errmsg.txt
@@ -5842,3 +5842,5 @@ ER_WRONG_PARTITION_NAME
swe "Felaktigt partitionsnamn"
ER_CANT_CHANGE_TX_ISOLATION 25001
eng "Transaction isolation level can't be changed while a transaction is in progress"
+ER_RBR_NOT_AVAILABLE
+ eng "The server was not built with row-based replication"
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 4bc89bfe916..916bcd94e0e 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -2115,7 +2115,9 @@ void THD::reset_sub_statement_state(Sub_statement_state *backup,
if ((!lex->requires_prelocking() || is_update_query(lex->sql_command)) &&
!current_stmt_binlog_row_based)
+ {
options&= ~OPTION_BIN_LOG;
+ }
/* Disable result sets */
client_capabilities &= ~CLIENT_MULTI_RESULTS;
in_sub_stmt|= new_state;
@@ -2704,6 +2706,7 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype,
to how you treat this.
*/
case THD::ROW_QUERY_TYPE:
+#ifdef HAVE_ROW_BASED_REPLICATION
if (current_stmt_binlog_row_based)
{
/*
@@ -2724,6 +2727,7 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype,
#endif /*HAVE_ROW_BASED_REPLICATION*/
DBUG_RETURN(0);
}
+#endif
/* Otherwise, we fall through */
case THD::STMT_QUERY_TYPE:
/*
@@ -2732,7 +2736,9 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype,
*/
{
Query_log_event qinfo(this, query, query_len, is_trans, suppress_use);
+#ifdef HAVE_ROW_BASED_REPLICATION
qinfo.flags|= LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F;
+#endif
/*
Binlog table maps will be irrelevant after a Query_log_event
(they are just removed on the slave side) so after the query
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 04095ff9acd..d9118cc7607 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -890,8 +890,10 @@ public:
/* container for handler's private per-connection data */
void *ha_data[MAX_HA];
-#ifdef HAVE_ROW_BASED_REPLICATION
#ifndef MYSQL_CLIENT
+ int binlog_setup_trx_data();
+
+#ifdef HAVE_ROW_BASED_REPLICATION
/*
Public interface to write RBR events to the binlog
@@ -921,7 +923,6 @@ public:
RowsEventT* hint);
Rows_log_event* binlog_get_pending_rows_event() const;
void binlog_set_pending_rows_event(Rows_log_event* ev);
- int binlog_setup_trx_data();
my_size_t max_row_length_blob(TABLE* table, const byte *data) const;
my_size_t max_row_length(TABLE* table, const byte *data) const
@@ -945,8 +946,9 @@ private:
public:
-#endif
#endif /* HAVE_ROW_BASED_REPLICATION */
+#endif /* MYSQL_CLIENT */
+
#ifndef MYSQL_CLIENT
enum enum_binlog_query_type {
/*
@@ -1384,15 +1386,21 @@ public:
inline void set_current_stmt_binlog_row_based_if_mixed()
{
if (variables.binlog_format == BINLOG_FORMAT_MIXED)
- current_stmt_binlog_row_based= 1;
+ current_stmt_binlog_row_based= TRUE;
}
inline void set_current_stmt_binlog_row_based()
{
- current_stmt_binlog_row_based= 1;
+ current_stmt_binlog_row_based= TRUE;
}
+#endif
inline void reset_current_stmt_binlog_row_based()
{
- current_stmt_binlog_row_based= test(variables.binlog_format == BINLOG_FORMAT_ROW);
+#ifdef HAVE_ROW_BASED_REPLICATION
+ current_stmt_binlog_row_based=
+ test(variables.binlog_format == BINLOG_FORMAT_ROW);
+#else
+ current_stmt_binlog_row_based= FALSE;
+#endif
}
#endif /*HAVE_ROW_BASED_REPLICATION*/
};
@@ -1586,7 +1594,9 @@ public:
{}
int prepare(List<Item> &list, SELECT_LEX_UNIT *u);
+#ifdef HAVE_ROW_BASED_REPLICATION
void binlog_show_create_table(TABLE **tables, uint count);
+#endif
void store_values(List<Item> &values);
void send_error(uint errcode,const char *err);
bool send_eof();
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 946c0536897..aed8b12d2c1 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -2523,6 +2523,8 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
{
DBUG_ENTER("select_create::prepare");
+ TABLEOP_HOOKS *hook_ptr= NULL;
+#ifdef HAVE_ROW_BASED_REPLICATION
class MY_HOOKS : public TABLEOP_HOOKS {
public:
MY_HOOKS(select_create *x) : ptr(x) { }
@@ -2537,11 +2539,14 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
};
MY_HOOKS hooks(this);
+ hook_ptr= &hooks;
+#endif
unit= u;
table= create_table_from_items(thd, create_info, create_table,
extra_fields, keys, &values, &lock,
- &hooks);
+ hook_ptr);
+
if (!table)
DBUG_RETURN(-1); // abort() deletes table
@@ -2579,6 +2584,7 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
}
+#ifdef HAVE_ROW_BASED_REPLICATION
void
select_create::binlog_show_create_table(TABLE **tables, uint count)
{
@@ -2622,7 +2628,7 @@ select_create::binlog_show_create_table(TABLE **tables, uint count)
/* is_trans */ TRUE,
/* suppress_use */ FALSE);
}
-
+#endif // HAVE_ROW_BASED_REPLICATION
void select_create::store_values(List<Item> &values)
{
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 37506d11867..ba6555e9010 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -3514,7 +3514,8 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
save us from that ?
*/
table->reginfo.lock_type=TL_WRITE;
- hooks->prelock(&table, 1); // Call prelock hooks
+ if (hooks)
+ hooks->prelock(&table, 1); // Call prelock hooks
if (! ((*lock)= mysql_lock_tables(thd, &table, 1,
MYSQL_LOCK_IGNORE_FLUSH, &not_used)))
{