diff options
author | Rohit Kalhans <rohit.kalhans@oracle.com> | 2012-09-22 18:07:04 +0530 |
---|---|---|
committer | Rohit Kalhans <rohit.kalhans@oracle.com> | 2012-09-22 18:07:04 +0530 |
commit | 4802faad3f67e5950858c2eba04271d836c1edb1 (patch) | |
tree | e8c9feb9d583b378ecdda8db05f6871ea6cefdbd /sql/log.cc | |
parent | 02ee112f9ab9d8451755df35a1c3edc9bb3fd75e (diff) | |
parent | 5530c5e38dbefac8e5d2c333c0f35ed9f73946a4 (diff) | |
download | mariadb-git-4802faad3f67e5950858c2eba04271d836c1edb1.tar.gz |
upmerge to bug#14548159
Diffstat (limited to 'sql/log.cc')
-rw-r--r-- | sql/log.cc | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/sql/log.cc b/sql/log.cc index 65923eddce0..43db481b7cc 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -39,6 +39,7 @@ #include "rpl_rli.h" #include "sql_audit.h" +#include "sql_show.h" #include <my_dir.h> #include <stdarg.h> #include <m_ctype.h> // For test_if_number @@ -2016,17 +2017,24 @@ static int binlog_savepoint_set(handlerton *hton, THD *thd, void *sv) DBUG_ENTER("binlog_savepoint_set"); binlog_trans_log_savepos(thd, (my_off_t*) sv); + + // buffer to store quoted identifier + char* buffer= (char *)my_malloc(sizeof("SAVEPOINT ")+ 1 + NAME_LEN * 2 + 2, + MYF(0)); + String log_query(buffer, sizeof(buffer), system_charset_info); + log_query.length(0); + /* Write it to the binary log */ - String log_query; - if (log_query.append(STRING_WITH_LEN("SAVEPOINT ")) || - log_query.append("`") || - log_query.append(thd->lex->ident.str, thd->lex->ident.length) || - log_query.append("`")) + if (log_query.append(STRING_WITH_LEN("SAVEPOINT "))) DBUG_RETURN(1); + else + append_identifier(thd, &log_query, thd->lex->ident.str, + thd->lex->ident.length); int errcode= query_error_code(thd, thd->killed == THD::NOT_KILLED); Query_log_event qinfo(thd, log_query.c_ptr_safe(), log_query.length(), TRUE, FALSE, TRUE, errcode); + my_free(buffer); DBUG_RETURN(mysql_bin_log.write(&qinfo)); } @@ -2042,15 +2050,20 @@ static int binlog_savepoint_rollback(handlerton *hton, THD *thd, void *sv) if (unlikely(trans_has_updated_non_trans_table(thd) || (thd->variables.option_bits & OPTION_KEEP_LOG))) { - String log_query; - if (log_query.append(STRING_WITH_LEN("ROLLBACK TO ")) || - log_query.append("`") || - log_query.append(thd->lex->ident.str, thd->lex->ident.length) || - log_query.append("`")) + // buffer to store rollback query with quoted identifier + char* buffer= (char *)my_malloc(12 + 1 + NAME_LEN * 2 + 2, MYF(0)); + String log_query(buffer, sizeof(buffer), system_charset_info); + log_query.length(0); + + if (log_query.append(STRING_WITH_LEN("ROLLBACK TO "))) DBUG_RETURN(1); + else + append_identifier(thd, &log_query, thd->lex->ident.str, + thd->lex->ident.length); int errcode= query_error_code(thd, thd->killed == THD::NOT_KILLED); Query_log_event qinfo(thd, log_query.c_ptr_safe(), log_query.length(), TRUE, FALSE, TRUE, errcode); + my_free(buffer); DBUG_RETURN(mysql_bin_log.write(&qinfo)); } binlog_trans_log_truncate(thd, *(my_off_t*)sv); |