研读MySQL代码时,常常会碰到一些代码不符合自己的思维逻辑,或者根本弄不明白。
这时就需要有更多的历史信息来帮助我们理解代码。一个很有效的方法是,利用
bazaar annotate来找到引入该代码的revision,以及相关的历史信息。
例如,我想知道,是哪个revision引入了此函数,为什么要引入这个函数。
- bool sqlcom_can_generate_row_events(const THD *thd)
-
{
-
return (sql_command_flags[thd->lex->sql_command] &
- CF_CAN_GENERATE_ROW_EVENTS);
-
}
通过 bzr annoate 来查找引入此代码的revision
- # bzr annotate --show-ids sql/sql_parse.cc >a
a 中的内容如下
- 。。。。。。此处省略若干行
-
alfranio.correia@sun.com-20100601232508-fo4ug9mfnc4vukmq | bool sqlcom_can_generate_row_events(const THD *thd)
- | {
-
| return (sql_command_flags[thd->lex->sql_command] &
-
| CF_CAN_GENERATE_ROW_EVENTS);
- | }
-
。。。。。。此处省略若干行
从中可以知道,引入此代码的patch的revision id 是“alfranio.correia@sun.com-20100601232508-fo4ug9mfnc4vukmq“
然后查看此revision的日志
# bzr log -r alfranio.correia@sun.com-20100601232508-fo4ug9mfnc4vukmq- ------------------------------------------------------------
revno: 2995.24.2
committer: Alfranio Correia
branch nick: mysql-trunk-bugfixing - timestamp: Wed 2010-06-02 00:25:08 +0100
message:
BUG#50479 DDL stmt on row-only/stmt-only tables generate spurious binlog_format
- errors
In the fix of BUG#39934 in 5.1-rep+3, errors are generated when
binlog_format=row and a statement modifies a table restricted to
statement-logging (ER_BINLOG_ROW_MODE_AND_STMT_ENGINE); or if
binlog_format=statement and a statement modifies a table restricted to
row-logging (ER_BINLOG_STMT_MODE_AND_ROW_ENGINE).
。。。。。。此处省略若干行
Revision 日志通常包含了相关的bug号或者worklog号。通过这个ID,
我们可以在MySQL的上找到更多的信息。
另外,Rivision 日志中包含了patch作者的名字和Email。如果有必要,你可以联系作者本人
来帮中解答疑惑。
阅读(585) | 评论(0) | 转发(0) |