#At file:///home/mayank/mysql-tree/mysql-trunk-wl5767/ based on revid:marc.alff@stripped
3367 Mayank Prasad 2011-05-10
WL#5767 : First commit with skeleton code
Changes Description:
--------------------
Following coding is done as per LLD:
1)
- Add new columns to events_statements_current / history / history_long tables.
- Expose them as NULL.
>> Coded.
2)
- Create a new table events_statements_summary_by_digest
- C++ file for this table:
- storage/perfschema/table_esms_by_digest.h, .cc
>> Coded.
3)
- Add a new perfschema startup option:
- performance-schema-digests-size
>> Coded.
4)
- Define new structures for internal buffers for events_statements_summary_by_digest
- C++ files
- storage/perfschema/pfs_digest.h, .cc
- PFS_statement_digest_stat structure
- statement_digest_stat_array[]
>> Skeleton Coded.
5)
- Change the performance schema initialization to allocate memory
- for buffers in 4), using the size from 3)
>> Skeleton Coded.
added:
storage/perfschema/pfs_digest.cc
storage/perfschema/pfs_digest.h
storage/perfschema/table_esms_by_digest.cc
storage/perfschema/table_esms_by_digest.h
modified:
scripts/mysql_system_tables.sql
sql/sys_vars.cc
storage/perfschema/CMakeLists.txt
storage/perfschema/pfs_column_types.h
storage/perfschema/pfs_engine_table.cc
storage/perfschema/pfs_server.cc
storage/perfschema/pfs_server.h
storage/perfschema/table_events_statements.cc
storage/perfschema/table_events_statements.h
=== modified file 'scripts/mysql_system_tables.sql'
--- a/scripts/mysql_system_tables.sql 2011-03-18 22:51:17 +0000
+++ b/scripts/mysql_system_tables.sql 2011-05-10 18:26:49 +0000
@@ -873,7 +873,8 @@ SET @cmd="CREATE TABLE performance_schem
"NO_INDEX_USED BIGINT unsigned not null,"
"NO_GOOD_INDEX_USED BIGINT unsigned not null,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT')"
+ "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'),"
+ "DIGEST VARCHAR(64) not null"
")ENGINE=PERFORMANCE_SCHEMA;";
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
@@ -922,7 +923,8 @@ SET @cmd="CREATE TABLE performance_schem
"NO_INDEX_USED BIGINT unsigned not null,"
"NO_GOOD_INDEX_USED BIGINT unsigned not null,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT')"
+ "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'),"
+ "DIGEST VARCHAR(64) not null"
")ENGINE=PERFORMANCE_SCHEMA;";
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
@@ -971,7 +973,8 @@ SET @cmd="CREATE TABLE performance_schem
"NO_INDEX_USED BIGINT unsigned not null,"
"NO_GOOD_INDEX_USED BIGINT unsigned not null,"
"NESTING_EVENT_ID BIGINT unsigned,"
- "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT')"
+ "NESTING_EVENT_TYPE ENUM('STATEMENT', 'STAGE', 'WAIT'),"
+ "DIGEST VARCHAR(64) not null"
")ENGINE=PERFORMANCE_SCHEMA;";
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
@@ -1054,6 +1057,21 @@ PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
+--
+-- TABLE EVENTS_STATEMENTS_SUMMARY_BY_DIGEST
+--
+
+SET @cmd="CREATE TABLE performance_schema.events_statements_summary_by_digest("
+ "DIGEST VARCHAR(64) not null,"
+ "COUNT_STAR BIGINT unsigned not null"
+ ")ENGINE=PERFORMANCE_SCHEMA;";
+
+
+SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
+PREPARE stmt FROM @str;
+EXECUTE stmt;
+DROP PREPARE stmt;
+
CREATE TABLE IF NOT EXISTS proxies_priv (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Proxied_host char(60) binary DEFAULT '' NOT NULL, Proxied_user char(16) binary DEFAULT '' NOT NULL, With_grant BOOL DEFAULT 0 NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp, PRIMARY KEY Host (Host,User,Proxied_host,Proxied_user), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User proxy privileges';
=== modified file 'sql/sys_vars.cc'
--- a/sql/sys_vars.cc 2011-04-11 10:28:36 +0000
+++ b/sql/sys_vars.cc 2011-05-10 18:26:49 +0000
@@ -272,6 +272,14 @@ static Sys_var_ulong Sys_pfs_events_stat
DEFAULT(PFS_STATEMENTS_HISTORY_SIZE),
BLOCK_SIZE(1), PFS_TRAILING_PROPERTIES);
+static Sys_var_ulong Sys_pfs_digest_size(
+ "performance_schema_digests_size",
+ "TBD.",
+ READ_ONLY GLOBAL_VAR(pfs_param.m_digest_sizing),
+ CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 200),
+ DEFAULT(PFS_DIGEST_SIZE),
+ BLOCK_SIZE(1), PFS_TRAILING_PROPERTIES);
+
#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
static Sys_var_ulong Sys_auto_increment_increment(
=== modified file 'storage/perfschema/CMakeLists.txt'
--- a/storage/perfschema/CMakeLists.txt 2011-02-14 14:23:55 +0000
+++ b/storage/perfschema/CMakeLists.txt 2011-05-10 18:26:49 +0000
@@ -32,6 +32,7 @@ pfs_column_types.h
pfs_column_values.h
pfs_con_slice.h
pfs_defaults.h
+pfs_digest.h
pfs_engine_table.h
pfs_events.h
pfs_events_stages.h
@@ -50,6 +51,7 @@ pfs_visitor.h
table_all_instr.h
table_esgs_by_thread_by_event_name.h
table_esgs_global_by_event_name.h
+table_esms_by_digest.h
table_esms_by_thread_by_event_name.h
table_esms_global_by_event_name.h
table_events_stages.h
@@ -80,6 +82,7 @@ pfs_check.cc
pfs_column_values.cc
pfs_con_slice.cc
pfs_defaults.cc
+pfs_digest.cc
pfs_engine_table.cc
pfs_events_stages.cc
pfs_events_statements.cc
@@ -95,6 +98,7 @@ pfs_visitor.cc
table_all_instr.cc
table_esgs_by_thread_by_event_name.cc
table_esgs_global_by_event_name.cc
+table_esms_by_digest.cc
table_esms_by_thread_by_event_name.cc
table_esms_global_by_event_name.cc
table_events_stages.cc
=== modified file 'storage/perfschema/pfs_column_types.h'
--- a/storage/perfschema/pfs_column_types.h 2011-04-04 14:34:42 +0000
+++ b/storage/perfschema/pfs_column_types.h 2011-05-10 18:26:49 +0000
@@ -53,6 +53,9 @@
/** Size of the SOURCE columns. */
#define COL_SOURCE_SIZE 64
+/** Size of the Digest columns. */
+#define COL_DIGEST_SIZE 64
+
/**
Enum values for the TIMER_NAME columns.
This enum is found in the following tables:
=== added file 'storage/perfschema/pfs_digest.cc'
--- a/storage/perfschema/pfs_digest.cc 1970-01-01 00:00:00 +0000
+++ b/storage/perfschema/pfs_digest.cc 2011-05-10 18:26:49 +0000
@@ -0,0 +1,51 @@
+/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+/**
+ @file storage/perfschema/pfs_digest.h
+ Statement Digest data structures (implementation).
+*/
+
+#include "pfs_digest.h"
+
+/** EVENTS_STATEMENTS_HISTORY_LONG circular buffer. */
+PFS_statements_digest_stat *statements_digest_stat_array= NULL;
+
+
+/**
+ Initialize table EVENTS_STATEMENTS_SUMMARY_BY_DIGEST.
+ @param digest_sizing
+*/
+int init_digest(unsigned int digest_sizing)
+{
+ printf("\n Initializing performance_schema_digests with\
+ digest_sizing=%d\n",digest_sizing);
+
+ /*
+ TBD. Allocate memory for statements_digest_stat_array based on
+ performance_schema_digests_size values
+ */
+ return 0;
+}
+
+/** Cleanup table EVENTS_STATEMENTS_SUMMARY_BY_DIGEST. */
+int cleanup_digest(void)
+{
+ printf("\n Yes, cleaning up performance_schema_digests\n");
+ /*
+ TBD. Free memory allocated to statements_digest_stat_array.
+ */
+ return 0;
+}
=== added file 'storage/perfschema/pfs_digest.h'
--- a/storage/perfschema/pfs_digest.h 1970-01-01 00:00:00 +0000
+++ b/storage/perfschema/pfs_digest.h 2011-05-10 18:26:49 +0000
@@ -0,0 +1,35 @@
+/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef PFS_DIGEST_H
+#define PFS_DIGEST_H
+
+/**
+ @file storage/perfschema/pfs_digest.h
+ Statement Digest data structures (declarations).
+*/
+
+#include <stdio.h>
+
+/** A statement stat record based on digest. */
+struct PFS_statements_digest_stat
+{
+ /* TBD */
+};
+
+int init_digest(unsigned int digest_sizing);
+int cleanup_digest();
+
+#endif
=== modified file 'storage/perfschema/pfs_engine_table.cc'
--- a/storage/perfschema/pfs_engine_table.cc 2011-02-15 14:31:13 +0000
+++ b/storage/perfschema/pfs_engine_table.cc 2011-05-10 18:26:49 +0000
@@ -46,6 +46,7 @@
#include "table_events_statements.h"
#include "table_esms_by_thread_by_event_name.h"
#include "table_esms_global_by_event_name.h"
+#include "table_esms_by_digest.h"
/* For show status */
#include "pfs_column_values.h"
@@ -99,6 +100,7 @@ static PFS_engine_table_share *all_share
&table_events_statements_history_long::m_share,
&table_esms_by_thread_by_event_name::m_share,
&table_esms_global_by_event_name::m_share,
+ &table_esms_by_digest::m_share,
NULL
};
=== modified file 'storage/perfschema/pfs_server.cc'
--- a/storage/perfschema/pfs_server.cc 2011-02-14 14:23:55 +0000
+++ b/storage/perfschema/pfs_server.cc 2011-05-10 18:26:49 +0000
@@ -33,6 +33,7 @@
#include "pfs_setup_actor.h"
#include "pfs_setup_object.h"
#include "pfs_defaults.h"
+#include "pfs_digest.h"
PFS_global_param pfs_param;
@@ -85,7 +86,8 @@ initialize_performance_schema(const PFS_
init_setup_actor(param) ||
init_setup_actor_hash() ||
init_setup_object(param) ||
- init_setup_object_hash())
+ init_setup_object_hash() ||
+ init_digest(param->m_digest_sizing))
{
/*
The performance schema initialization failed.
@@ -137,6 +139,7 @@ static void cleanup_performance_schema(v
cleanup_setup_actor_hash();
cleanup_setup_object();
cleanup_setup_object_hash();
+ cleanup_digest();
PFS_atomic::cleanup();
}
=== modified file 'storage/perfschema/pfs_server.h'
--- a/storage/perfschema/pfs_server.h 2011-04-04 14:34:42 +0000
+++ b/storage/perfschema/pfs_server.h 2011-05-10 18:26:49 +0000
@@ -90,6 +90,9 @@
#ifndef PFS_STATEMENTS_STACK_SIZE
#define PFS_STATEMENTS_STACK_SIZE 10
#endif
+#ifndef PFS_DIGEST_SIZE
+ #define PFS_DIGEST_SIZE 100
+#endif
/** Performance schema global sizing parameters. */
struct PFS_global_param
@@ -187,6 +190,8 @@ struct PFS_global_param
ulong m_events_statements_history_sizing;
/** Maximum number of rows in table EVENTS_STATEMENTS_HISTORY_LONG. */
ulong m_events_statements_history_long_sizing;
+ /** Maximum number of digests to be captured */
+ ulong m_digest_sizing;
};
/**
=== added file 'storage/perfschema/table_esms_by_digest.cc'
--- a/storage/perfschema/table_esms_by_digest.cc 1970-01-01 00:00:00 +0000
+++ b/storage/perfschema/table_esms_by_digest.cc 2011-05-10 18:26:49 +0000
@@ -0,0 +1,167 @@
+/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+/**
+ @file storage/perfschema/table_esms_by_digest.cc
+ Table EVENTS_STATEMENTS_SUMMARY_GLOBAL_BY_DIGEST (implementation).
+*/
+
+#include "my_global.h"
+#include "my_pthread.h"
+#include "pfs_instr_class.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_esms_by_digest.h"
+#include "pfs_global.h"
+#include "pfs_instr.h"
+#include "pfs_timer.h"
+#include "pfs_visitor.h"
+#include "table_esms_by_digest.h"
+
+THR_LOCK table_esms_by_digest::m_table_lock;
+
+static const TABLE_FIELD_TYPE field_types[]=
+{
+ /* TBD */
+ {
+ { C_STRING_WITH_LEN("DIGEST") },
+ { C_STRING_WITH_LEN("varchar(64)") },
+ { NULL, 0}
+ },
+ {
+ { C_STRING_WITH_LEN("COUNT_STAR") },
+ { C_STRING_WITH_LEN("bigint(20)") },
+ { NULL, 0}
+ },
+};
+
+TABLE_FIELD_DEF
+table_esms_by_digest::m_field_def=
+{ 2, field_types };
+
+PFS_engine_table_share
+table_esms_by_digest::m_share=
+{
+ { C_STRING_WITH_LEN("events_statements_summary_by_digest") },
+ &pfs_truncatable_acl,
+ table_esms_by_digest::create,
+ NULL, /* write_row */
+ table_esms_by_digest::delete_all_rows,
+ NULL, /* get_row_count */
+ 1000, /* records */
+ sizeof(PFS_simple_index),
+ &m_table_lock,
+ &m_field_def,
+ false /* checked */
+};
+
+PFS_engine_table*
+table_esms_by_digest::create(void)
+{
+ return new table_esms_by_digest();
+}
+
+int
+table_esms_by_digest::delete_all_rows(void)
+{
+ /* TBD */
+ return 0;
+}
+
+table_esms_by_digest::table_esms_by_digest()
+ : PFS_engine_table(&m_share, &m_pos),
+ m_row_exists(false), m_pos(1), m_next_pos(1)
+{}
+
+void table_esms_by_digest::reset_position(void)
+{
+ m_pos= 1;
+ m_next_pos= 1;
+}
+
+int table_esms_by_digest::rnd_next(void)
+{
+ PFS_stage_class *stage_class;
+
+ if (global_instr_class_stages_array == NULL)
+ return HA_ERR_END_OF_FILE;
+
+ m_pos.set_at(&m_next_pos);
+
+ stage_class= find_stage_class(m_pos.m_index);
+ if (stage_class)
+ {
+ make_row(/*TBD*/);
+ m_next_pos.set_after(&m_pos);
+ return 0;
+ }
+
+ return HA_ERR_END_OF_FILE;
+}
+
+int
+table_esms_by_digest::rnd_pos(const void *pos)
+{
+ PFS_stage_class *stage_class;
+
+ set_position(pos);
+
+ if (global_instr_class_stages_array == NULL)
+ return HA_ERR_END_OF_FILE;
+
+ stage_class=find_stage_class(m_pos.m_index);
+ if (stage_class)
+ {
+ make_row(/*TBD*/);
+ return 0;
+ }
+
+ return HA_ERR_RECORD_DELETED;
+}
+
+
+void table_esms_by_digest::make_row(/*TBD*/)
+{
+ /* TBD */
+ m_row_exists= true;
+}
+
+int table_esms_by_digest
+::read_row_values(TABLE *table, unsigned char *, Field **fields,
+ bool read_all)
+{
+ Field *f;
+
+ if (unlikely(! m_row_exists))
+ return HA_ERR_RECORD_DELETED;
+
+ /* Set the null bits */
+ DBUG_ASSERT(table->s->null_bytes == 0);
+
+ for (; (f= *fields) ; fields++)
+ {
+ if (read_all || bitmap_is_set(table->read_set, f->field_index))
+ {
+ switch(f->field_index)
+ {
+ default: /* TBD */
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
=== added file 'storage/perfschema/table_esms_by_digest.h'
--- a/storage/perfschema/table_esms_by_digest.h 1970-01-01 00:00:00 +0000
+++ b/storage/perfschema/table_esms_by_digest.h 2011-05-10 18:26:49 +0000
@@ -0,0 +1,91 @@
+/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifndef TABLE_ESMS_BY_DIGEST_H
+#define TABLE_ESMS_BY_DIGEST_H
+
+/**
+ @file storage/perfschema/table_esms_by_digest.h
+ Table EVENTS_STATEMENTS_SUMMARY_BY_DIGEST (declarations).
+*/
+
+#include "table_helper.h"
+
+/**
+ @addtogroup Performance_schema_tables
+ @{
+*/
+
+/**
+ A row of table
+ PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST.
+*/
+struct row_esms_by_digest
+{
+ /** Columns TBD. Adding few dummy as of now. */
+
+ /** Column DIGEST. */
+ char m_digest[COL_DIGEST_SIZE];
+
+ /** Columns COUNT_STAR, SUM/MIN/AVG/MAX TIMER_WAIT. */
+ PFS_statement_stat_row m_stat;
+};
+
+/** Table PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST. */
+class table_esms_by_digest : public PFS_engine_table
+{
+public:
+ /** Table share */
+ static PFS_engine_table_share m_share;
+ static PFS_engine_table* create();
+ static int delete_all_rows();
+
+ virtual int rnd_next();
+ virtual int rnd_pos(const void *pos);
+ virtual void reset_position(void);
+
+protected:
+ virtual int read_row_values(TABLE *table,
+ unsigned char *buf,
+ Field **fields,
+ bool read_all);
+
+ table_esms_by_digest();
+
+public:
+ ~table_esms_by_digest()
+ {}
+
+protected:
+ void make_row(/*TBD*/);
+
+private:
+ /** Table share lock. */
+ static THR_LOCK m_table_lock;
+ /** Fields definition. */
+ static TABLE_FIELD_DEF m_field_def;
+
+ /** Current row. */
+ row_esms_by_digest m_row;
+ /** True is the current row exists. */
+ bool m_row_exists;
+ /** Current position. */
+ PFS_simple_index m_pos;
+ /** Next position. */
+ PFS_simple_index m_next_pos;
+};
+
+/** @} */
+#endif
=== modified file 'storage/perfschema/table_events_statements.cc'
--- a/storage/perfschema/table_events_statements.cc 2011-02-14 14:23:55 +0000
+++ b/storage/perfschema/table_events_statements.cc 2011-05-10 18:26:49 +0000
@@ -216,12 +216,17 @@ static const TABLE_FIELD_TYPE field_type
{ C_STRING_WITH_LEN("NESTING_EVENT_TYPE") },
{ C_STRING_WITH_LEN("enum(\'STATEMENT\',\'STAGE\',\'WAIT\'") },
{ NULL, 0}
+ },
+ {
+ { C_STRING_WITH_LEN("DIGEST") },
+ { C_STRING_WITH_LEN("varchar(64)") },
+ { NULL, 0}
}
};
TABLE_FIELD_DEF
table_events_statements_current::m_field_def=
-{37 , field_types };
+{38 , field_types };
PFS_engine_table_share
table_events_statements_current::m_share=
@@ -351,6 +356,9 @@ void table_events_statements_common::mak
m_row.m_no_index_used= statement->m_no_index_used;
m_row.m_no_good_index_used= statement->m_no_good_index_used;
+ /* TBD. Following */
+ strcpy(m_row.m_digest, "Mayank");
+
m_row_exists= true;
return;
}
@@ -519,6 +527,9 @@ int table_events_statements_common::read
else
f->set_null();
break;
+ case 37: /* DIGEST */
+ /* TBD */
+ break;
default:
DBUG_ASSERT(false);
}
=== modified file 'storage/perfschema/table_events_statements.h'
--- a/storage/perfschema/table_events_statements.h 2011-02-14 14:23:55 +0000
+++ b/storage/perfschema/table_events_statements.h 2011-05-10 18:26:49 +0000
@@ -110,6 +110,8 @@ struct row_events_statements
ulonglong m_no_index_used;
/** Column NO_GOOD_INDEX_USED. */
ulonglong m_no_good_index_used;
+ /** Column DIGEST. */
+ char m_digest[COL_DIGEST_SIZE];
};
/** Position of a cursor on PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_CURRENT. */
Attachment: [text/bzr-bundle] bzr/mayank.prasad@oracle.com-20110510182649-8i8xz73zlm79h70o.bundle
| Thread |
|---|
| • bzr commit into mysql-trunk-wl5767 branch (mayank.prasad:3367) WL#5767 | Mayank Prasad | 10 May |