Loading .bzrignore +1 −0 Original line number Diff line number Diff line Loading @@ -545,3 +545,4 @@ vio/test-sslserver vio/viotest-ssl scripts/make_win_binary_distribution EXCEPTIONS-CLIENT support-files/my-innodb-heavy-4G.cnf client/mysql.cc +27 −2 Original line number Diff line number Diff line Loading @@ -2200,8 +2200,9 @@ static int com_source(String *buffer, char *line) static int com_use(String *buffer __attribute__((unused)), char *line) { char *tmp; char buff[256]; char *tmp, buff[FN_REFLEN + 1]; MYSQL_RES *res; MYSQL_ROW row; while (isspace(*line)) line++; Loading @@ -2214,6 +2215,30 @@ com_use(String *buffer __attribute__((unused)), char *line) put_info("USE must be followed by a database name",INFO_ERROR); return 0; } /* We need to recheck the current database, because it may change under our feet, for example if DROP DATABASE or RENAME DATABASE (latter one not yet available by the time the comment was written) */ /* Let's reset current_db, assume it's gone */ my_free(current_db, MYF(MY_ALLOW_ZERO_PTR)); current_db= 0; /* We don't care about in case of an error below because current_db was just set to 0. */ if (!mysql_query(&mysql, "SELECT DATABASE()") && (res= mysql_use_result(&mysql))) { row= mysql_fetch_row(res); if (row[0]) { current_db= my_strdup(row[0], MYF(MY_WME)); } (void) mysql_fetch_row(res); // Read eof mysql_free_result(res); } if (!current_db || cmp_database(current_db,tmp)) { if (one_database) Loading client/mysqlcheck.c +4 −4 Original line number Diff line number Diff line Loading @@ -413,8 +413,8 @@ static int process_all_tables_in_db(char *database) LINT_INIT(res); if (use_db(database)) return 1; if (!(mysql_query(sock, "SHOW TABLES") || (res = mysql_store_result(sock)))) if (mysql_query(sock, "SHOW TABLES") || !((res= mysql_store_result(sock)))) return 1; if (opt_all_in_1) Loading myisammrg/myrg_open.c +14 −14 Original line number Diff line number Diff line Loading @@ -34,14 +34,17 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) { int save_errno,errpos=0; uint files=0,i,dir_length,length,key_parts; ulonglong file_offset; ulonglong file_offset=0; char name_buff[FN_REFLEN*2],buff[FN_REFLEN],*end; MYRG_INFO *m_info=0; File fd; IO_CACHE file; MI_INFO *isam=0; uint found_merge_insert_method= 0; DBUG_ENTER("myrg_open"); LINT_INIT(key_parts); bzero((char*) &file,sizeof(file)); if ((fd=my_open(fn_format(name_buff,name,"",MYRG_NAME_EXT,4), O_RDONLY | O_SHARE,MYF(0))) < 0) Loading Loading @@ -72,7 +75,7 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) if (!strncmp(buff+1,"INSERT_METHOD=",14)) { /* Lookup insert method */ int tmp=find_type(buff+15,&merge_insert_method,2); m_info->merge_insert_method = (uint) (tmp >= 0 ? tmp : 0); found_merge_insert_method = (uint) (tmp >= 0 ? tmp : 0); } continue; /* Skip comments */ } Loading @@ -85,7 +88,7 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) } if (!(isam=mi_open(buff,mode,(handle_locking?HA_OPEN_WAIT_IF_LOCKED:0)))) goto err; if (!m_info) if (!m_info) /* First file */ { key_parts=isam->s->base.key_parts; if (!(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO) + Loading @@ -97,15 +100,10 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) { m_info->open_tables=(MYRG_TABLE *) (m_info+1); m_info->rec_per_key_part=(ulong *) (m_info->open_tables+files); } else { m_info->open_tables=0; m_info->rec_per_key_part=0; } m_info->tables= files; files= 0; } m_info->reclength=isam->s->base.reclength; file_offset=files=0; errpos=3; } m_info->open_tables[files].table= isam; Loading @@ -122,7 +120,8 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) m_info->del+= isam->state->del; m_info->data_file_length+= isam->state->data_file_length; for (i=0; i < key_parts; i++) m_info->rec_per_key_part[i]+=isam->s->state.rec_per_key_part[i] / m_info->tables; m_info->rec_per_key_part[i]+= (isam->s->state.rec_per_key_part[i] / m_info->tables); } if (!m_info && !(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO), Loading @@ -130,6 +129,7 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) goto err; /* Don't mark table readonly, for ALTER TABLE ... UNION=(...) to work */ m_info->options&= ~(HA_OPTION_COMPRESS_RECORD | HA_OPTION_READ_ONLY_DATA); m_info->merge_insert_method= found_merge_insert_method; if (sizeof(my_off_t) == 4 && file_offset > (ulonglong) (ulong) ~0L) { Loading mysql-test/r/rpl_set_charset.result 0 → 100644 +51 −0 Original line number Diff line number Diff line slave stop; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; slave start; drop database if exists mysqltest1; create database mysqltest1 /*!40100 character set latin2 */; use mysqltest1; drop table if exists t1; create table t1 (a varchar(255) character set latin2, b varchar(4)); SET CHARACTER SET cp1250_latin2; INSERT INTO t1 VALUES ('','80'); INSERT INTO t1 VALUES ('','90'); INSERT INTO t1 VALUES ('','A0'); INSERT INTO t1 VALUES ('','B0'); INSERT INTO t1 VALUES ('','C0'); INSERT INTO t1 VALUES ('','D0'); INSERT INTO t1 VALUES ('','E0'); INSERT INTO t1 VALUES ('','F0'); select "--- on master ---"; --- on master --- --- on master --- select hex(a),b from t1 order by b; hex(a) b A9A6ABAEAC 80 B9B6BBBEBC 90 A3A1AAAF A0 B3B1BAA5B5BF B0 C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF C0 D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF D0 E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF E0 F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF F0 show binlog events from 1979; Log_name Pos Event_type Server_id Orig_log_pos Info master-bin.001 1979 Query 1 1979 use `mysqltest1`; SET CHARACTER SET DEFAULT use mysqltest1; select "--- on slave ---"; --- on slave --- --- on slave --- select hex(a),b from t1 order by b; hex(a) b A9A6ABAEAC 80 B9B6BBBEBC 90 A3A1AAAF A0 B3B1BAA5B5BF B0 C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF C0 D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF D0 E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF E0 F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF F0 drop database mysqltest1; Loading
.bzrignore +1 −0 Original line number Diff line number Diff line Loading @@ -545,3 +545,4 @@ vio/test-sslserver vio/viotest-ssl scripts/make_win_binary_distribution EXCEPTIONS-CLIENT support-files/my-innodb-heavy-4G.cnf
client/mysql.cc +27 −2 Original line number Diff line number Diff line Loading @@ -2200,8 +2200,9 @@ static int com_source(String *buffer, char *line) static int com_use(String *buffer __attribute__((unused)), char *line) { char *tmp; char buff[256]; char *tmp, buff[FN_REFLEN + 1]; MYSQL_RES *res; MYSQL_ROW row; while (isspace(*line)) line++; Loading @@ -2214,6 +2215,30 @@ com_use(String *buffer __attribute__((unused)), char *line) put_info("USE must be followed by a database name",INFO_ERROR); return 0; } /* We need to recheck the current database, because it may change under our feet, for example if DROP DATABASE or RENAME DATABASE (latter one not yet available by the time the comment was written) */ /* Let's reset current_db, assume it's gone */ my_free(current_db, MYF(MY_ALLOW_ZERO_PTR)); current_db= 0; /* We don't care about in case of an error below because current_db was just set to 0. */ if (!mysql_query(&mysql, "SELECT DATABASE()") && (res= mysql_use_result(&mysql))) { row= mysql_fetch_row(res); if (row[0]) { current_db= my_strdup(row[0], MYF(MY_WME)); } (void) mysql_fetch_row(res); // Read eof mysql_free_result(res); } if (!current_db || cmp_database(current_db,tmp)) { if (one_database) Loading
client/mysqlcheck.c +4 −4 Original line number Diff line number Diff line Loading @@ -413,8 +413,8 @@ static int process_all_tables_in_db(char *database) LINT_INIT(res); if (use_db(database)) return 1; if (!(mysql_query(sock, "SHOW TABLES") || (res = mysql_store_result(sock)))) if (mysql_query(sock, "SHOW TABLES") || !((res= mysql_store_result(sock)))) return 1; if (opt_all_in_1) Loading
myisammrg/myrg_open.c +14 −14 Original line number Diff line number Diff line Loading @@ -34,14 +34,17 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) { int save_errno,errpos=0; uint files=0,i,dir_length,length,key_parts; ulonglong file_offset; ulonglong file_offset=0; char name_buff[FN_REFLEN*2],buff[FN_REFLEN],*end; MYRG_INFO *m_info=0; File fd; IO_CACHE file; MI_INFO *isam=0; uint found_merge_insert_method= 0; DBUG_ENTER("myrg_open"); LINT_INIT(key_parts); bzero((char*) &file,sizeof(file)); if ((fd=my_open(fn_format(name_buff,name,"",MYRG_NAME_EXT,4), O_RDONLY | O_SHARE,MYF(0))) < 0) Loading Loading @@ -72,7 +75,7 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) if (!strncmp(buff+1,"INSERT_METHOD=",14)) { /* Lookup insert method */ int tmp=find_type(buff+15,&merge_insert_method,2); m_info->merge_insert_method = (uint) (tmp >= 0 ? tmp : 0); found_merge_insert_method = (uint) (tmp >= 0 ? tmp : 0); } continue; /* Skip comments */ } Loading @@ -85,7 +88,7 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) } if (!(isam=mi_open(buff,mode,(handle_locking?HA_OPEN_WAIT_IF_LOCKED:0)))) goto err; if (!m_info) if (!m_info) /* First file */ { key_parts=isam->s->base.key_parts; if (!(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO) + Loading @@ -97,15 +100,10 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) { m_info->open_tables=(MYRG_TABLE *) (m_info+1); m_info->rec_per_key_part=(ulong *) (m_info->open_tables+files); } else { m_info->open_tables=0; m_info->rec_per_key_part=0; } m_info->tables= files; files= 0; } m_info->reclength=isam->s->base.reclength; file_offset=files=0; errpos=3; } m_info->open_tables[files].table= isam; Loading @@ -122,7 +120,8 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) m_info->del+= isam->state->del; m_info->data_file_length+= isam->state->data_file_length; for (i=0; i < key_parts; i++) m_info->rec_per_key_part[i]+=isam->s->state.rec_per_key_part[i] / m_info->tables; m_info->rec_per_key_part[i]+= (isam->s->state.rec_per_key_part[i] / m_info->tables); } if (!m_info && !(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO), Loading @@ -130,6 +129,7 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) goto err; /* Don't mark table readonly, for ALTER TABLE ... UNION=(...) to work */ m_info->options&= ~(HA_OPTION_COMPRESS_RECORD | HA_OPTION_READ_ONLY_DATA); m_info->merge_insert_method= found_merge_insert_method; if (sizeof(my_off_t) == 4 && file_offset > (ulonglong) (ulong) ~0L) { Loading
mysql-test/r/rpl_set_charset.result 0 → 100644 +51 −0 Original line number Diff line number Diff line slave stop; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; slave start; drop database if exists mysqltest1; create database mysqltest1 /*!40100 character set latin2 */; use mysqltest1; drop table if exists t1; create table t1 (a varchar(255) character set latin2, b varchar(4)); SET CHARACTER SET cp1250_latin2; INSERT INTO t1 VALUES ('','80'); INSERT INTO t1 VALUES ('','90'); INSERT INTO t1 VALUES ('','A0'); INSERT INTO t1 VALUES ('','B0'); INSERT INTO t1 VALUES ('','C0'); INSERT INTO t1 VALUES ('','D0'); INSERT INTO t1 VALUES ('','E0'); INSERT INTO t1 VALUES ('','F0'); select "--- on master ---"; --- on master --- --- on master --- select hex(a),b from t1 order by b; hex(a) b A9A6ABAEAC 80 B9B6BBBEBC 90 A3A1AAAF A0 B3B1BAA5B5BF B0 C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF C0 D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF D0 E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF E0 F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF F0 show binlog events from 1979; Log_name Pos Event_type Server_id Orig_log_pos Info master-bin.001 1979 Query 1 1979 use `mysqltest1`; SET CHARACTER SET DEFAULT use mysqltest1; select "--- on slave ---"; --- on slave --- --- on slave --- select hex(a),b from t1 order by b; hex(a) b A9A6ABAEAC 80 B9B6BBBEBC 90 A3A1AAAF A0 B3B1BAA5B5BF B0 C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF C0 D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF D0 E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF E0 F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF F0 drop database mysqltest1;