Skip to content

Commit

Permalink
Merge branch 'merge/merge-perfschema-5.6' into 10.0
Browse files Browse the repository at this point in the history
  • Loading branch information
vuvova committed Dec 13, 2015
2 parents 095b7b9 + 6bb292f commit b418e97
Show file tree
Hide file tree
Showing 9 changed files with 77 additions and 8 deletions.
2 changes: 2 additions & 0 deletions include/mysql/psi/psi.h
Original file line number Diff line number Diff line change
Expand Up @@ -1009,6 +1009,8 @@ struct PSI_statement_locker_state_v1
char m_schema_name[PSI_SCHEMA_NAME_LEN];
/** Length in bytes of @c m_schema_name. */
uint m_schema_name_length;
/** Statement character set number. */
uint m_cs_number;
};

/**
Expand Down
1 change: 1 addition & 0 deletions include/mysql/psi/psi_abi_v1.h.pp
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,7 @@
const struct sql_digest_storage *m_digest;
char m_schema_name[(64 * 3)];
uint m_schema_name_length;
uint m_cs_number;
};
struct PSI_socket_locker_state_v1
{
Expand Down
11 changes: 11 additions & 0 deletions mysql-test/suite/perfschema/r/misc.result
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,14 @@ select mysql_errno, returned_sqlstate, message_text, errors, warnings from
performance_schema.events_statements_history_long where errors > 0;
mysql_errno returned_sqlstate message_text errors warnings
1146 42S02 Table 'test.t1' doesn't exist 1 0
use performance_schema;
truncate performance_schema.events_statements_history;
select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' AS A;
A
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
select _utf8mb4 'васÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑ' as B;
B
вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�вас�
select count(*) from events_statements_history where sql_text like "%...";
count(*)
2
18 changes: 18 additions & 0 deletions mysql-test/suite/perfschema/t/misc.test
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
--source include/not_embedded.inc
--source include/have_perfschema.inc
--source include/have_innodb.inc
--source include/no_protocol.inc

#
# Bug#12790483 OBJECTS_SUMMARY_GLOBAL_BY_TYPE AND RENAME TABLE
Expand Down Expand Up @@ -189,3 +190,20 @@ select mysql_errno, returned_sqlstate, message_text, errors, warnings
--echo
select mysql_errno, returned_sqlstate, message_text, errors, warnings from
performance_schema.events_statements_history_long where errors > 0;

#
# Bug#20519832 - TRUNCATED SQL_TEXT values are not suffixed with '...'
#
# Verify that truncated SQL statements are suffixed with '...'

use performance_schema;
truncate performance_schema.events_statements_history;

# Should truncate at 1024 bytes (1024 characters)
select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' AS A;

# Should truncate at 1024 bytes (487 characters)

select _utf8mb4 'васÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑ' as B;

select count(*) from events_statements_history where sql_text like "%...";
9 changes: 9 additions & 0 deletions storage/perfschema/pfs.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4388,6 +4388,8 @@ get_thread_statement_locker_v1(PSI_statement_locker_state *state,
const void *charset)
{
DBUG_ASSERT(state != NULL);
DBUG_ASSERT(charset != NULL);

if (! flag_global_instrumentation)
return NULL;
PFS_statement_class *klass= find_statement_class(key);
Expand Down Expand Up @@ -4432,6 +4434,8 @@ get_thread_statement_locker_v1(PSI_statement_locker_state *state,
pfs->m_lock_time= 0;
pfs->m_current_schema_name_length= 0;
pfs->m_sqltext_length= 0;
pfs->m_sqltext_truncated= false;
pfs->m_sqltext_cs_number= system_charset_info->number; /* default */

pfs->m_message_text[0]= '\0';
pfs->m_sql_errno= 0;
Expand Down Expand Up @@ -4511,6 +4515,7 @@ get_thread_statement_locker_v1(PSI_statement_locker_state *state,
state->m_digest= NULL;

state->m_schema_name_length= 0;
state->m_cs_number= ((CHARSET_INFO *)charset)->number;

return reinterpret_cast<PSI_statement_locker*> (state);
}
Expand Down Expand Up @@ -4616,10 +4621,14 @@ static void set_statement_text_v1(PSI_statement_locker *locker,
PFS_events_statements *pfs= reinterpret_cast<PFS_events_statements*> (state->m_statement);
DBUG_ASSERT(pfs != NULL);
if (text_len > sizeof (pfs->m_sqltext))
{
text_len= sizeof(pfs->m_sqltext);
pfs->m_sqltext_truncated= true;
}
if (text_len)
memcpy(pfs->m_sqltext, text, text_len);
pfs->m_sqltext_length= text_len;
pfs->m_sqltext_cs_number= state->m_cs_number;
}

return;
Expand Down
6 changes: 6 additions & 0 deletions storage/perfschema/pfs_events_statements.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,12 @@ struct PFS_events_statements : public PFS_events
ulonglong m_no_index_used;
/** Optimizer metric, number of 'no good index used'. */
ulonglong m_no_good_index_used;

/** True if sqltext was truncated. */
bool m_sqltext_truncated;
/** Statement character set number. */
uint m_sqltext_cs_number;

/**
Statement digest.
This underlying token array storage pointer is immutable,
Expand Down
33 changes: 28 additions & 5 deletions storage/perfschema/table_events_statements.cc
Original file line number Diff line number Diff line change
Expand Up @@ -337,9 +337,32 @@ void table_events_statements_common::make_row_part_1(PFS_events_statements *stat
m_row.m_name= klass->m_name;
m_row.m_name_length= klass->m_name_length;

m_row.m_sqltext_length= statement->m_sqltext_length;
if (m_row.m_sqltext_length > 0)
memcpy(m_row.m_sqltext, statement->m_sqltext, m_row.m_sqltext_length);
CHARSET_INFO *cs= get_charset(statement->m_sqltext_cs_number, MYF(0));
size_t valid_length= statement->m_sqltext_length;

if (cs->mbmaxlen > 1)
{
int well_formed_error;
valid_length= cs->cset->well_formed_len(cs, statement->m_sqltext, statement->m_sqltext + valid_length,
valid_length, &well_formed_error);
}

m_row.m_sqltext.set_charset(cs);
m_row.m_sqltext.length(0);
m_row.m_sqltext.append(statement->m_sqltext, (uint32)valid_length, cs);

/* Indicate that sqltext is truncated or not well-formed. */
if (statement->m_sqltext_truncated || valid_length < statement->m_sqltext_length)
{
size_t chars= m_row.m_sqltext.numchars();
if (chars > 3)
{
chars-= 3;
size_t bytes_offset= m_row.m_sqltext.charpos(chars, 0);
m_row.m_sqltext.length(bytes_offset);
m_row.m_sqltext.append("...", 3);
}
}

m_row.m_current_schema_name_length= statement->m_current_schema_name_length;
if (m_row.m_current_schema_name_length > 0)
Expand Down Expand Up @@ -482,8 +505,8 @@ int table_events_statements_common::read_row_values(TABLE *table,
f->set_null();
break;
case 9: /* SQL_TEXT */
if (m_row.m_sqltext_length)
set_field_longtext_utf8(f, m_row.m_sqltext, m_row.m_sqltext_length);
if (m_row.m_sqltext.length())
set_field_longtext_utf8(f, m_row.m_sqltext.ptr(), m_row.m_sqltext.length());
else
f->set_null();
break;
Expand Down
4 changes: 1 addition & 3 deletions storage/perfschema/table_events_statements.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,9 @@ struct row_events_statements
/** Length in bytes of @c m_source. */
uint m_source_length;
/** Column SQL_TEXT. */
char m_sqltext[COL_INFO_SIZE];
String m_sqltext;
/** Column DIGEST and DIGEST_TEXT. */
PFS_digest_row m_digest;
/** Length in bytes of @c m_info. */
uint m_sqltext_length;
/** Column CURRENT_SCHEMA. */
char m_current_schema_name[NAME_LEN];
/** Length in bytes of @c m_current_schema_name. */
Expand Down
1 change: 1 addition & 0 deletions storage/perfschema/unittest/pfs_server_stubs.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ volatile bool ready_to_exit= false;

uint lower_case_table_names= 0;
CHARSET_INFO *files_charset_info= NULL;
CHARSET_INFO *system_charset_info= NULL;

void compute_digest_md5(const sql_digest_storage *, unsigned char *)
{
Expand Down

0 comments on commit b418e97

Please sign in to comment.