Loading mysql-test/r/type_bit.result +30 −0 Original line number Diff line number Diff line Loading @@ -572,4 +572,34 @@ def test t1 t1 a a 16 7 1 Y 0 0 63 a ` drop table t1; create table bug15583(b BIT(8), n INT); insert into bug15583 values(128, 128); insert into bug15583 values(null, null); insert into bug15583 values(0, 0); insert into bug15583 values(255, 255); select hex(b), bin(b), oct(b), hex(n), bin(n), oct(n) from bug15583; hex(b) bin(b) oct(b) hex(n) bin(n) oct(n) 80 10000000 200 80 10000000 200 NULL NULL NULL NULL NULL NULL 0 0 0 0 0 0 FF 11111111 377 FF 11111111 377 select hex(b)=hex(n) as should_be_onetrue, bin(b)=bin(n) as should_be_onetrue, oct(b)=oct(n) as should_be_onetrue from bug15583; should_be_onetrue should_be_onetrue should_be_onetrue 1 1 1 NULL NULL NULL 1 1 1 1 1 1 select hex(b + 0), bin(b + 0), oct(b + 0), hex(n), bin(n), oct(n) from bug15583; hex(b + 0) bin(b + 0) oct(b + 0) hex(n) bin(n) oct(n) 80 10000000 200 80 10000000 200 NULL NULL NULL NULL NULL NULL 0 0 0 0 0 0 FF 11111111 377 FF 11111111 377 select conv(b, 10, 2), conv(b + 0, 10, 2) from bug15583; conv(b, 10, 2) conv(b + 0, 10, 2) 10000000 10000000 NULL NULL 0 0 11111111 11111111 drop table bug15583; End of 5.0 tests mysql-test/t/type_bit.test +15 −0 Original line number Diff line number Diff line Loading @@ -238,4 +238,19 @@ select * from t1; --disable_metadata drop table t1; # # Bug#15583: BIN()/OCT()/CONV() do not work with BIT values # create table bug15583(b BIT(8), n INT); insert into bug15583 values(128, 128); insert into bug15583 values(null, null); insert into bug15583 values(0, 0); insert into bug15583 values(255, 255); select hex(b), bin(b), oct(b), hex(n), bin(n), oct(n) from bug15583; select hex(b)=hex(n) as should_be_onetrue, bin(b)=bin(n) as should_be_onetrue, oct(b)=oct(n) as should_be_onetrue from bug15583; select hex(b + 0), bin(b + 0), oct(b + 0), hex(n), bin(n), oct(n) from bug15583; select conv(b, 10, 2), conv(b + 0, 10, 2) from bug15583; drop table bug15583; --echo End of 5.0 tests sql/item_strfunc.cc +24 −8 Original line number Diff line number Diff line Loading @@ -2382,14 +2382,30 @@ String *Item_func_conv::val_str(String *str) abs(from_base) > 36 || abs(from_base) < 2 || !(res->length())) { null_value= 1; return 0; return NULL; } null_value= 0; unsigned_flag= !(from_base < 0); if (args[0]->field_type() == MYSQL_TYPE_BIT) { /* Special case: The string representation of BIT doesn't resemble the decimal representation, so we shouldn't change it to string and then to decimal. */ dec= args[0]->val_int(); } else { if (from_base < 0) dec= my_strntoll(res->charset(),res->ptr(),res->length(),-from_base,&endptr,&err); dec= my_strntoll(res->charset(), res->ptr(), res->length(), -from_base, &endptr, &err); else dec= (longlong) my_strntoull(res->charset(),res->ptr(),res->length(),from_base,&endptr,&err); dec= (longlong) my_strntoull(res->charset(), res->ptr(), res->length(), from_base, &endptr, &err); } ptr= longlong2str(dec, ans, to_base); if (str->copy(ans, (uint32) (ptr-ans), default_charset())) return &my_empty_string; Loading vio/viosocket.c +27 −2 Original line number Diff line number Diff line Loading @@ -559,9 +559,13 @@ int vio_write_shared_memory(Vio * vio, const gptr buf, int size) } /** Close shared memory and DBUG_PRINT any errors that happen on closing. @return Zero if all closing functions succeed, and nonzero otherwise. */ int vio_close_shared_memory(Vio * vio) { int r; int error_count= 0; DBUG_ENTER("vio_close_shared_memory"); if (vio->type != VIO_CLOSED) { Loading @@ -575,23 +579,44 @@ int vio_close_shared_memory(Vio * vio) result if they are success. */ if (UnmapViewOfFile(vio->handle_map) == 0) { error_count++; DBUG_PRINT("vio_error", ("UnmapViewOfFile() failed")); } if (CloseHandle(vio->event_server_wrote) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->esw) failed")); } if (CloseHandle(vio->event_server_read) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->esr) failed")); } if (CloseHandle(vio->event_client_wrote) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->ecw) failed")); } if (CloseHandle(vio->event_client_read) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->ecr) failed")); } if (CloseHandle(vio->handle_file_map) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->hfm) failed")); } if (CloseHandle(vio->event_conn_closed) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->ecc) failed")); } } vio->type= VIO_CLOSED; vio->sd= -1; DBUG_RETURN(!r); DBUG_RETURN(error_count); } #endif /* HAVE_SMEM */ #endif /* __WIN__ */ Loading
mysql-test/r/type_bit.result +30 −0 Original line number Diff line number Diff line Loading @@ -572,4 +572,34 @@ def test t1 t1 a a 16 7 1 Y 0 0 63 a ` drop table t1; create table bug15583(b BIT(8), n INT); insert into bug15583 values(128, 128); insert into bug15583 values(null, null); insert into bug15583 values(0, 0); insert into bug15583 values(255, 255); select hex(b), bin(b), oct(b), hex(n), bin(n), oct(n) from bug15583; hex(b) bin(b) oct(b) hex(n) bin(n) oct(n) 80 10000000 200 80 10000000 200 NULL NULL NULL NULL NULL NULL 0 0 0 0 0 0 FF 11111111 377 FF 11111111 377 select hex(b)=hex(n) as should_be_onetrue, bin(b)=bin(n) as should_be_onetrue, oct(b)=oct(n) as should_be_onetrue from bug15583; should_be_onetrue should_be_onetrue should_be_onetrue 1 1 1 NULL NULL NULL 1 1 1 1 1 1 select hex(b + 0), bin(b + 0), oct(b + 0), hex(n), bin(n), oct(n) from bug15583; hex(b + 0) bin(b + 0) oct(b + 0) hex(n) bin(n) oct(n) 80 10000000 200 80 10000000 200 NULL NULL NULL NULL NULL NULL 0 0 0 0 0 0 FF 11111111 377 FF 11111111 377 select conv(b, 10, 2), conv(b + 0, 10, 2) from bug15583; conv(b, 10, 2) conv(b + 0, 10, 2) 10000000 10000000 NULL NULL 0 0 11111111 11111111 drop table bug15583; End of 5.0 tests
mysql-test/t/type_bit.test +15 −0 Original line number Diff line number Diff line Loading @@ -238,4 +238,19 @@ select * from t1; --disable_metadata drop table t1; # # Bug#15583: BIN()/OCT()/CONV() do not work with BIT values # create table bug15583(b BIT(8), n INT); insert into bug15583 values(128, 128); insert into bug15583 values(null, null); insert into bug15583 values(0, 0); insert into bug15583 values(255, 255); select hex(b), bin(b), oct(b), hex(n), bin(n), oct(n) from bug15583; select hex(b)=hex(n) as should_be_onetrue, bin(b)=bin(n) as should_be_onetrue, oct(b)=oct(n) as should_be_onetrue from bug15583; select hex(b + 0), bin(b + 0), oct(b + 0), hex(n), bin(n), oct(n) from bug15583; select conv(b, 10, 2), conv(b + 0, 10, 2) from bug15583; drop table bug15583; --echo End of 5.0 tests
sql/item_strfunc.cc +24 −8 Original line number Diff line number Diff line Loading @@ -2382,14 +2382,30 @@ String *Item_func_conv::val_str(String *str) abs(from_base) > 36 || abs(from_base) < 2 || !(res->length())) { null_value= 1; return 0; return NULL; } null_value= 0; unsigned_flag= !(from_base < 0); if (args[0]->field_type() == MYSQL_TYPE_BIT) { /* Special case: The string representation of BIT doesn't resemble the decimal representation, so we shouldn't change it to string and then to decimal. */ dec= args[0]->val_int(); } else { if (from_base < 0) dec= my_strntoll(res->charset(),res->ptr(),res->length(),-from_base,&endptr,&err); dec= my_strntoll(res->charset(), res->ptr(), res->length(), -from_base, &endptr, &err); else dec= (longlong) my_strntoull(res->charset(),res->ptr(),res->length(),from_base,&endptr,&err); dec= (longlong) my_strntoull(res->charset(), res->ptr(), res->length(), from_base, &endptr, &err); } ptr= longlong2str(dec, ans, to_base); if (str->copy(ans, (uint32) (ptr-ans), default_charset())) return &my_empty_string; Loading
vio/viosocket.c +27 −2 Original line number Diff line number Diff line Loading @@ -559,9 +559,13 @@ int vio_write_shared_memory(Vio * vio, const gptr buf, int size) } /** Close shared memory and DBUG_PRINT any errors that happen on closing. @return Zero if all closing functions succeed, and nonzero otherwise. */ int vio_close_shared_memory(Vio * vio) { int r; int error_count= 0; DBUG_ENTER("vio_close_shared_memory"); if (vio->type != VIO_CLOSED) { Loading @@ -575,23 +579,44 @@ int vio_close_shared_memory(Vio * vio) result if they are success. */ if (UnmapViewOfFile(vio->handle_map) == 0) { error_count++; DBUG_PRINT("vio_error", ("UnmapViewOfFile() failed")); } if (CloseHandle(vio->event_server_wrote) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->esw) failed")); } if (CloseHandle(vio->event_server_read) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->esr) failed")); } if (CloseHandle(vio->event_client_wrote) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->ecw) failed")); } if (CloseHandle(vio->event_client_read) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->ecr) failed")); } if (CloseHandle(vio->handle_file_map) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->hfm) failed")); } if (CloseHandle(vio->event_conn_closed) == 0) { error_count++; DBUG_PRINT("vio_error", ("CloseHandle(vio->ecc) failed")); } } vio->type= VIO_CLOSED; vio->sd= -1; DBUG_RETURN(!r); DBUG_RETURN(error_count); } #endif /* HAVE_SMEM */ #endif /* __WIN__ */