Loading client/mysqlbinlog.cc +28 −16 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ static const char *load_default_groups[]= { "mysqlbinlog","client",0 }; void sql_print_error(const char *format, ...); static bool one_database=0, to_last_remote_log= 0, disable_log_bin= 0; static bool opt_hexdump= 0; static const char* database= 0; static my_bool force_opt= 0, short_form= 0, remote_opt= 0; static ulonglong offset = 0; Loading Loading @@ -489,12 +490,13 @@ static bool check_database(const char *log_dbname) int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, int process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, my_off_t pos) { char ll_buff[21]; Log_event_type ev_type= ev->get_type_code(); DBUG_ENTER("process_event"); print_event_info->short_form= short_form; /* Format events are not concerned by --offset and such, we always need to Loading Loading @@ -523,11 +525,16 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, if (!short_form) fprintf(result_file, "# at %s\n",llstr(pos,ll_buff)); if (!opt_hexdump) print_event_info->hexdump_from= 0; /* Disabled */ else print_event_info->hexdump_from= pos; switch (ev_type) { case QUERY_EVENT: if (check_database(((Query_log_event*)ev)->db)) goto end; ev->print(result_file, short_form, last_event_info); ev->print(result_file, print_event_info); break; case CREATE_FILE_EVENT: { Loading @@ -547,7 +554,8 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, filename and use LOCAL), prepared in the 'case EXEC_LOAD_EVENT' below. */ ce->print(result_file, short_form, last_event_info, TRUE); ce->print(result_file, print_event_info, TRUE); // If this binlog is not 3.23 ; why this test?? if (description_event->binlog_version >= 3) { Loading @@ -558,13 +566,13 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, break; } case APPEND_BLOCK_EVENT: ev->print(result_file, short_form, last_event_info); ev->print(result_file, print_event_info); if (load_processor.process((Append_block_log_event*) ev)) break; // Error break; case EXEC_LOAD_EVENT: { ev->print(result_file, short_form, last_event_info); ev->print(result_file, print_event_info); Execute_load_log_event *exv= (Execute_load_log_event*)ev; Create_file_log_event *ce= load_processor.grab_event(exv->file_id); /* Loading @@ -574,7 +582,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, */ if (ce) { ce->print(result_file, short_form, last_event_info, TRUE); ce->print(result_file, print_event_info, TRUE); my_free((char*)ce->fname,MYF(MY_WME)); delete ce; } Loading @@ -586,7 +594,8 @@ Create_file event for file_id: %u\n",exv->file_id); case FORMAT_DESCRIPTION_EVENT: delete description_event; description_event= (Format_description_log_event*) ev; ev->print(result_file, short_form, last_event_info); print_event_info->common_header_len= description_event->common_header_len; ev->print(result_file, print_event_info); /* We don't want this event to be deleted now, so let's hide it (I (Guilhem) should later see if this triggers a non-serious Valgrind Loading @@ -596,7 +605,7 @@ Create_file event for file_id: %u\n",exv->file_id); ev= 0; break; case BEGIN_LOAD_QUERY_EVENT: ev->print(result_file, short_form, last_event_info); ev->print(result_file, print_event_info); load_processor.process((Begin_load_query_log_event*) ev); break; case EXECUTE_LOAD_QUERY_EVENT: Loading @@ -613,7 +622,7 @@ Create_file event for file_id: %u\n",exv->file_id); if (fname) { exlq->print(result_file, short_form, last_event_info, fname); exlq->print(result_file, print_event_info, fname); my_free(fname, MYF(MY_WME)); } else Loading @@ -622,7 +631,7 @@ Begin_load_query event for file_id: %u\n", exlq->file_id); break; } default: ev->print(result_file, short_form, last_event_info); ev->print(result_file, print_event_info); } } Loading Loading @@ -669,6 +678,9 @@ static struct my_option my_long_options[] = 0, 0}, {"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"hexdump", 'H', "Augment output with hexadecimal and ASCII event dump.", (gptr*) &opt_hexdump, (gptr*) &opt_hexdump, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"host", 'h', "Get the binlog from server.", (gptr*) &host, (gptr*) &host, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"offset", 'o', "Skip the first N entries.", (gptr*) &offset, (gptr*) &offset, Loading Loading @@ -1002,7 +1014,7 @@ static int dump_remote_log_entries(const char* logname) { char buf[128]; LAST_EVENT_INFO last_event_info; PRINT_EVENT_INFO print_event_info; ulong len; uint logname_len; NET* net; Loading Loading @@ -1125,7 +1137,7 @@ could be out of memory"); len= 1; // fake Rotate, so don't increment old_off } } if ((error= process_event(&last_event_info,ev,old_off))) if ((error= process_event(&print_event_info, ev, old_off))) { error= ((error < 0) ? 0 : 1); goto err; Loading @@ -1144,7 +1156,7 @@ could be out of memory"); goto err; } if ((error= process_event(&last_event_info,ev,old_off))) if ((error= process_event(&print_event_info, ev, old_off))) { my_close(file,MYF(MY_WME)); error= ((error < 0) ? 0 : 1); Loading Loading @@ -1273,7 +1285,7 @@ static int dump_local_log_entries(const char* logname) { File fd = -1; IO_CACHE cache,*file= &cache; LAST_EVENT_INFO last_event_info; PRINT_EVENT_INFO print_event_info; byte tmp_buff[BIN_LOG_HEADER_SIZE]; int error= 0; Loading Loading @@ -1345,7 +1357,7 @@ static int dump_local_log_entries(const char* logname) // file->error == 0 means EOF, that's OK, we break in this case break; } if ((error= process_event(&last_event_info,ev,old_off))) if ((error= process_event(&print_event_info, ev, old_off))) { if (error < 0) error= 0; Loading ndb/include/util/Base64.hpp→include/base64.h +32 −9 Original line number Diff line number Diff line Loading @@ -14,15 +14,38 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __BASE64_HPP_INCLUDED__ #define __BASE64_HPP_INCLUDED__ #ifndef __BASE64_H_INCLUDED__ #define __BASE64_H_INCLUDED__ #include <UtilBuffer.hpp> #include <BaseString.hpp> #ifdef __cplusplus extern "C" { #endif int base64_encode(const UtilBuffer &src, BaseString &dst); int base64_encode(const void * s, size_t src_len, BaseString &dst); int base64_decode(const BaseString &src, UtilBuffer &dst); int base64_decode(const char * s, size_t len, UtilBuffer &dst); #endif /* !__BASE64_HPP_INCLUDED__ */ #include <mysys_priv.h> /* Calculate how much memory needed for dst of base64_encode() */ int base64_needed_encoded_length(int length_of_data); /* Calculate how much memory needed for dst of base64_decode() */ int base64_needed_decoded_length(int length_of_encoded_data); /* Encode data as a base64 string */ int base64_encode(const void *src, size_t src_len, char *dst); /* Decode a base64 string into data */ int base64_decode(const char *src, size_t src_len, void *dst); #ifdef __cplusplus } #endif #endif /* !__BASE64_H_INCLUDED__ */ mysql-test/r/select.result +12 −0 Original line number Diff line number Diff line Loading @@ -3181,3 +3181,15 @@ from t1 inner join (t2 right join t3 on t2.id = t3.b_id) on t1.id = t3.a_id; count(*) 6 drop table t1,t2,t3; create table t1 (a int); create table t2 (b int); create table t3 (c int); select * from t1 join t2 join t3 on (t1.a=t3.c); a b c select * from t1 join t2 left join t3 on (t1.a=t3.c); a b c select * from t1 join t2 right join t3 on (t1.a=t3.c); a b c select * from t1 join t2 straight_join t3 on (t1.a=t3.c); a b c drop table t1, t2 ,t3; mysql-test/r/show_check.result +7 −7 Original line number Diff line number Diff line Loading @@ -512,6 +512,13 @@ t1 CREATE TABLE `t1` ( KEY `c2` USING BTREE (`c2`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; flush tables; SHOW TABLE STATUS like 't1'; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 NULL NULL NULL NULL # # # # NULL NULL NULL NULL NULL NULL NULL NULL Incorrect information in file: './test/t1.frm' show create table t1; ERROR HY000: Incorrect information in file: './test/t1.frm' drop table t1; CREATE TABLE txt1(a int); CREATE TABLE tyt2(a int); CREATE TABLE urkunde(a int); Loading Loading @@ -557,10 +564,3 @@ DROP TABLE tyt2; DROP TABLE urkunde; SHOW TABLES FROM non_existing_database; ERROR 42000: Unknown database 'non_existing_database' flush tables; SHOW TABLE STATUS like 't1'; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 NULL NULL NULL NULL # # # # NULL NULL NULL NULL NULL NULL NULL NULL Incorrect information in file: './test/t1.frm' show create table t1; ERROR HY000: Incorrect information in file: './test/t1.frm' drop table t1; mysql-test/r/sp.result +43 −0 Original line number Diff line number Diff line Loading @@ -3532,4 +3532,47 @@ select @a| Local drop function bug13941| drop procedure bug13941| DROP PROCEDURE IF EXISTS bug13095; DROP TABLE IF EXISTS bug13095_t1; DROP VIEW IF EXISTS bug13095_v1; CREATE PROCEDURE bug13095(tbl_name varchar(32)) BEGIN SET @str = CONCAT("CREATE TABLE ", tbl_name, "(stuff char(15))"); SELECT @str; PREPARE stmt FROM @str; EXECUTE stmt; SET @str = CONCAT("INSERT INTO ", tbl_name, " VALUES('row1'),('row2'),('row3')" ); SELECT @str; PREPARE stmt FROM @str; EXECUTE stmt; SET @str = CONCAT("CREATE VIEW bug13095_v1(c1) AS SELECT stuff FROM ", tbl_name); SELECT @str; PREPARE stmt FROM @str; EXECUTE stmt; SELECT * FROM bug13095_v1; SET @str = "DROP VIEW bug13095_v1"; SELECT @str; PREPARE stmt FROM @str; EXECUTE stmt; END| CALL bug13095('bug13095_t1'); @str CREATE TABLE bug13095_t1(stuff char(15)) @str INSERT INTO bug13095_t1 VALUES('row1'),('row2'),('row3') @str CREATE VIEW bug13095_v1(c1) AS SELECT stuff FROM bug13095_t1 c1 row1 row2 row3 @str DROP VIEW bug13095_v1 DROP PROCEDURE IF EXISTS bug13095; DROP VIEW IF EXISTS bug13095_v1; DROP TABLE IF EXISTS bug13095_t1; drop table t1,t2; Loading
client/mysqlbinlog.cc +28 −16 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ static const char *load_default_groups[]= { "mysqlbinlog","client",0 }; void sql_print_error(const char *format, ...); static bool one_database=0, to_last_remote_log= 0, disable_log_bin= 0; static bool opt_hexdump= 0; static const char* database= 0; static my_bool force_opt= 0, short_form= 0, remote_opt= 0; static ulonglong offset = 0; Loading Loading @@ -489,12 +490,13 @@ static bool check_database(const char *log_dbname) int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, int process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, my_off_t pos) { char ll_buff[21]; Log_event_type ev_type= ev->get_type_code(); DBUG_ENTER("process_event"); print_event_info->short_form= short_form; /* Format events are not concerned by --offset and such, we always need to Loading Loading @@ -523,11 +525,16 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, if (!short_form) fprintf(result_file, "# at %s\n",llstr(pos,ll_buff)); if (!opt_hexdump) print_event_info->hexdump_from= 0; /* Disabled */ else print_event_info->hexdump_from= pos; switch (ev_type) { case QUERY_EVENT: if (check_database(((Query_log_event*)ev)->db)) goto end; ev->print(result_file, short_form, last_event_info); ev->print(result_file, print_event_info); break; case CREATE_FILE_EVENT: { Loading @@ -547,7 +554,8 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, filename and use LOCAL), prepared in the 'case EXEC_LOAD_EVENT' below. */ ce->print(result_file, short_form, last_event_info, TRUE); ce->print(result_file, print_event_info, TRUE); // If this binlog is not 3.23 ; why this test?? if (description_event->binlog_version >= 3) { Loading @@ -558,13 +566,13 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, break; } case APPEND_BLOCK_EVENT: ev->print(result_file, short_form, last_event_info); ev->print(result_file, print_event_info); if (load_processor.process((Append_block_log_event*) ev)) break; // Error break; case EXEC_LOAD_EVENT: { ev->print(result_file, short_form, last_event_info); ev->print(result_file, print_event_info); Execute_load_log_event *exv= (Execute_load_log_event*)ev; Create_file_log_event *ce= load_processor.grab_event(exv->file_id); /* Loading @@ -574,7 +582,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, */ if (ce) { ce->print(result_file, short_form, last_event_info, TRUE); ce->print(result_file, print_event_info, TRUE); my_free((char*)ce->fname,MYF(MY_WME)); delete ce; } Loading @@ -586,7 +594,8 @@ Create_file event for file_id: %u\n",exv->file_id); case FORMAT_DESCRIPTION_EVENT: delete description_event; description_event= (Format_description_log_event*) ev; ev->print(result_file, short_form, last_event_info); print_event_info->common_header_len= description_event->common_header_len; ev->print(result_file, print_event_info); /* We don't want this event to be deleted now, so let's hide it (I (Guilhem) should later see if this triggers a non-serious Valgrind Loading @@ -596,7 +605,7 @@ Create_file event for file_id: %u\n",exv->file_id); ev= 0; break; case BEGIN_LOAD_QUERY_EVENT: ev->print(result_file, short_form, last_event_info); ev->print(result_file, print_event_info); load_processor.process((Begin_load_query_log_event*) ev); break; case EXECUTE_LOAD_QUERY_EVENT: Loading @@ -613,7 +622,7 @@ Create_file event for file_id: %u\n",exv->file_id); if (fname) { exlq->print(result_file, short_form, last_event_info, fname); exlq->print(result_file, print_event_info, fname); my_free(fname, MYF(MY_WME)); } else Loading @@ -622,7 +631,7 @@ Begin_load_query event for file_id: %u\n", exlq->file_id); break; } default: ev->print(result_file, short_form, last_event_info); ev->print(result_file, print_event_info); } } Loading Loading @@ -669,6 +678,9 @@ static struct my_option my_long_options[] = 0, 0}, {"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"hexdump", 'H', "Augment output with hexadecimal and ASCII event dump.", (gptr*) &opt_hexdump, (gptr*) &opt_hexdump, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"host", 'h', "Get the binlog from server.", (gptr*) &host, (gptr*) &host, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"offset", 'o', "Skip the first N entries.", (gptr*) &offset, (gptr*) &offset, Loading Loading @@ -1002,7 +1014,7 @@ static int dump_remote_log_entries(const char* logname) { char buf[128]; LAST_EVENT_INFO last_event_info; PRINT_EVENT_INFO print_event_info; ulong len; uint logname_len; NET* net; Loading Loading @@ -1125,7 +1137,7 @@ could be out of memory"); len= 1; // fake Rotate, so don't increment old_off } } if ((error= process_event(&last_event_info,ev,old_off))) if ((error= process_event(&print_event_info, ev, old_off))) { error= ((error < 0) ? 0 : 1); goto err; Loading @@ -1144,7 +1156,7 @@ could be out of memory"); goto err; } if ((error= process_event(&last_event_info,ev,old_off))) if ((error= process_event(&print_event_info, ev, old_off))) { my_close(file,MYF(MY_WME)); error= ((error < 0) ? 0 : 1); Loading Loading @@ -1273,7 +1285,7 @@ static int dump_local_log_entries(const char* logname) { File fd = -1; IO_CACHE cache,*file= &cache; LAST_EVENT_INFO last_event_info; PRINT_EVENT_INFO print_event_info; byte tmp_buff[BIN_LOG_HEADER_SIZE]; int error= 0; Loading Loading @@ -1345,7 +1357,7 @@ static int dump_local_log_entries(const char* logname) // file->error == 0 means EOF, that's OK, we break in this case break; } if ((error= process_event(&last_event_info,ev,old_off))) if ((error= process_event(&print_event_info, ev, old_off))) { if (error < 0) error= 0; Loading
ndb/include/util/Base64.hpp→include/base64.h +32 −9 Original line number Diff line number Diff line Loading @@ -14,15 +14,38 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __BASE64_HPP_INCLUDED__ #define __BASE64_HPP_INCLUDED__ #ifndef __BASE64_H_INCLUDED__ #define __BASE64_H_INCLUDED__ #include <UtilBuffer.hpp> #include <BaseString.hpp> #ifdef __cplusplus extern "C" { #endif int base64_encode(const UtilBuffer &src, BaseString &dst); int base64_encode(const void * s, size_t src_len, BaseString &dst); int base64_decode(const BaseString &src, UtilBuffer &dst); int base64_decode(const char * s, size_t len, UtilBuffer &dst); #endif /* !__BASE64_HPP_INCLUDED__ */ #include <mysys_priv.h> /* Calculate how much memory needed for dst of base64_encode() */ int base64_needed_encoded_length(int length_of_data); /* Calculate how much memory needed for dst of base64_decode() */ int base64_needed_decoded_length(int length_of_encoded_data); /* Encode data as a base64 string */ int base64_encode(const void *src, size_t src_len, char *dst); /* Decode a base64 string into data */ int base64_decode(const char *src, size_t src_len, void *dst); #ifdef __cplusplus } #endif #endif /* !__BASE64_H_INCLUDED__ */
mysql-test/r/select.result +12 −0 Original line number Diff line number Diff line Loading @@ -3181,3 +3181,15 @@ from t1 inner join (t2 right join t3 on t2.id = t3.b_id) on t1.id = t3.a_id; count(*) 6 drop table t1,t2,t3; create table t1 (a int); create table t2 (b int); create table t3 (c int); select * from t1 join t2 join t3 on (t1.a=t3.c); a b c select * from t1 join t2 left join t3 on (t1.a=t3.c); a b c select * from t1 join t2 right join t3 on (t1.a=t3.c); a b c select * from t1 join t2 straight_join t3 on (t1.a=t3.c); a b c drop table t1, t2 ,t3;
mysql-test/r/show_check.result +7 −7 Original line number Diff line number Diff line Loading @@ -512,6 +512,13 @@ t1 CREATE TABLE `t1` ( KEY `c2` USING BTREE (`c2`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; flush tables; SHOW TABLE STATUS like 't1'; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 NULL NULL NULL NULL # # # # NULL NULL NULL NULL NULL NULL NULL NULL Incorrect information in file: './test/t1.frm' show create table t1; ERROR HY000: Incorrect information in file: './test/t1.frm' drop table t1; CREATE TABLE txt1(a int); CREATE TABLE tyt2(a int); CREATE TABLE urkunde(a int); Loading Loading @@ -557,10 +564,3 @@ DROP TABLE tyt2; DROP TABLE urkunde; SHOW TABLES FROM non_existing_database; ERROR 42000: Unknown database 'non_existing_database' flush tables; SHOW TABLE STATUS like 't1'; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 NULL NULL NULL NULL # # # # NULL NULL NULL NULL NULL NULL NULL NULL Incorrect information in file: './test/t1.frm' show create table t1; ERROR HY000: Incorrect information in file: './test/t1.frm' drop table t1;
mysql-test/r/sp.result +43 −0 Original line number Diff line number Diff line Loading @@ -3532,4 +3532,47 @@ select @a| Local drop function bug13941| drop procedure bug13941| DROP PROCEDURE IF EXISTS bug13095; DROP TABLE IF EXISTS bug13095_t1; DROP VIEW IF EXISTS bug13095_v1; CREATE PROCEDURE bug13095(tbl_name varchar(32)) BEGIN SET @str = CONCAT("CREATE TABLE ", tbl_name, "(stuff char(15))"); SELECT @str; PREPARE stmt FROM @str; EXECUTE stmt; SET @str = CONCAT("INSERT INTO ", tbl_name, " VALUES('row1'),('row2'),('row3')" ); SELECT @str; PREPARE stmt FROM @str; EXECUTE stmt; SET @str = CONCAT("CREATE VIEW bug13095_v1(c1) AS SELECT stuff FROM ", tbl_name); SELECT @str; PREPARE stmt FROM @str; EXECUTE stmt; SELECT * FROM bug13095_v1; SET @str = "DROP VIEW bug13095_v1"; SELECT @str; PREPARE stmt FROM @str; EXECUTE stmt; END| CALL bug13095('bug13095_t1'); @str CREATE TABLE bug13095_t1(stuff char(15)) @str INSERT INTO bug13095_t1 VALUES('row1'),('row2'),('row3') @str CREATE VIEW bug13095_v1(c1) AS SELECT stuff FROM bug13095_t1 c1 row1 row2 row3 @str DROP VIEW bug13095_v1 DROP PROCEDURE IF EXISTS bug13095; DROP VIEW IF EXISTS bug13095_v1; DROP TABLE IF EXISTS bug13095_t1; drop table t1,t2;