diff options
author | anozdrin/alik@booka. <> | 2006-07-28 02:49:18 +0400 |
---|---|---|
committer | anozdrin/alik@booka. <> | 2006-07-28 02:49:18 +0400 |
commit | 2d082d86c958998328dd969366537c5c98330eeb (patch) | |
tree | c10c09a840456bf62d7906ab2295f10857cf900b /sql/sp.cc | |
parent | b7f403b546b83f40ff48479c9dd909e38ae9eb26 (diff) | |
download | mariadb-git-2d082d86c958998328dd969366537c5c98330eeb.tar.gz |
Fix for BUG#20438: CREATE statements for views, stored routines and triggers
can be not replicable.
Now CREATE statements for writing in the binlog are created as follows:
- the beginning of the statement is re-created;
- the rest of the statement is copied from the original query.
The problem appears when there is a version-specific comment (produced by
mysqldump), started in the re-created part of the statement and closed in the
copied part -- there is closing comment-parenthesis, but there is no opening
one.
The proper fix could be to re-create original statement, but we can not
implement it in 5.0. So, for 5.0 the fix is just to cut closing
comment-parenthesis. This technique is also used for SHOW CREATE PROCEDURE
statement (so we are able to reuse existing code).
Diffstat (limited to 'sql/sp.cc')
-rw-r--r-- | sql/sp.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sql/sp.cc b/sql/sp.cc index b5a4f8bad8f..e8d36e15fa2 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -633,7 +633,10 @@ db_create_routine(THD *thd, int type, sp_head *sp) log_query.append(STRING_WITH_LEN("CREATE ")); append_definer(thd, &log_query, &thd->lex->definer->user, &thd->lex->definer->host); - log_query.append(thd->lex->stmt_definition_begin); + log_query.append(thd->lex->stmt_definition_begin, + (char *)sp->m_body_begin - + thd->lex->stmt_definition_begin + + sp->m_body.length); /* Such a statement can always go directly to binlog, no trans cache */ Query_log_event qinfo(thd, log_query.c_ptr(), log_query.length(), 0, |