From: Date: December 9 2008 10:54am Subject: bzr commit into mysql-5.0-bugteam branch (Sergey.Glukhov:2737) Bug#35796 List-Archive: http://lists.mysql.com/commits/61016 X-Bug: 35796 Message-Id: <0KBL003DCSU69LA0@fe-emea-10.sun.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7BIT #At file:///home/gluh/MySQL/mysql-5.0-bugteam/ based on revid:alexeyk@stripped 2737 Sergey Glukhov 2008-12-09 Bug#35796 SHOW CREATE TABLE and default value for BIT field show default value for BIT field in printable format modified: mysql-test/r/type_bit.result mysql-test/t/type_bit.test sql/item.cc sql/sql_show.cc per-file messages: mysql-test/r/type_bit.result Bug#35796 SHOW CREATE TABLE and default value for BIT field test result mysql-test/t/type_bit.test Bug#35796 SHOW CREATE TABLE and default value for BIT field test case sql/item.cc Bug#35796 SHOW CREATE TABLE and default value for BIT field issue an error if BIN|HEX deafult value is empty value (behaviour like for INT fields) sql/sql_show.cc Bug#35796 SHOW CREATE TABLE and default value for BIT field show default value for BIT field in printable format === modified file 'mysql-test/r/type_bit.result' --- a/mysql-test/r/type_bit.result 2008-08-27 21:10:37 +0000 +++ b/mysql-test/r/type_bit.result 2008-12-09 09:53:23 +0000 @@ -708,4 +708,19 @@ HEX(b1) HEX(b2) i2 1 0 100 1 0 200 DROP TABLE t1, t2; +CREATE TABLE IF NOT EXISTS t1 ( +f1 bit(2) NOT NULL default b'10', +f2 bit(14) NOT NULL default b'11110000111100' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` bit(2) NOT NULL default b'10', + `f2` bit(14) NOT NULL default b'11110000111100' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci +DROP TABLE t1; +CREATE TABLE IF NOT EXISTS t1 ( +f1 bit(2) NOT NULL default b'' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +ERROR 42000: Invalid default value for 'f1' End of 5.0 tests === modified file 'mysql-test/t/type_bit.test' --- a/mysql-test/t/type_bit.test 2008-08-27 21:10:37 +0000 +++ b/mysql-test/t/type_bit.test 2008-12-09 09:53:23 +0000 @@ -352,4 +352,19 @@ SELECT HEX(b1), HEX(b2), i2 FROM t2 DROP TABLE t1, t2; +# +# Bug #35796 SHOW CREATE TABLE and default value for BIT field +# +CREATE TABLE IF NOT EXISTS t1 ( +f1 bit(2) NOT NULL default b'10', +f2 bit(14) NOT NULL default b'11110000111100' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +SHOW CREATE TABLE t1; +DROP TABLE t1; + +--error ER_INVALID_DEFAULT +CREATE TABLE IF NOT EXISTS t1 ( +f1 bit(2) NOT NULL default b'' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + --echo End of 5.0 tests === modified file 'sql/item.cc' --- a/sql/item.cc 2008-10-14 14:04:36 +0000 +++ b/sql/item.cc 2008-12-09 09:53:23 +0000 @@ -4950,6 +4950,9 @@ int Item_hex_string::save_in_field(Field ulonglong nr; uint32 length= str_value.length(); + if (!length) + return 1; + if (length > 8) { nr= field->flags & UNSIGNED_FLAG ? ULONGLONG_MAX : LONGLONG_MAX; === modified file 'sql/sql_show.cc' --- a/sql/sql_show.cc 2008-11-28 14:25:16 +0000 +++ b/sql/sql_show.cc 2008-12-09 09:53:23 +0000 @@ -798,7 +798,7 @@ static bool get_field_default_value(THD { bool has_default; bool has_now_default; - + enum enum_field_types field_type= field->type(); /* We are using CURRENT_TIMESTAMP instead of NOW because it is more standard @@ -806,7 +806,7 @@ static bool get_field_default_value(THD has_now_default= table->timestamp_field == field && field->unireg_check != Field::TIMESTAMP_UN_FIELD; - has_default= (field->type() != FIELD_TYPE_BLOB && + has_default= (field_type != FIELD_TYPE_BLOB && !(field->flags & NO_DEFAULT_VALUE_FLAG) && field->unireg_check != Field::NEXT_NUMBER && !((thd->variables.sql_mode & (MODE_MYSQL323 | MODE_MYSQL40)) @@ -821,7 +821,19 @@ static bool get_field_default_value(THD { // Not null by default char tmp[MAX_FIELD_WIDTH]; String type(tmp, sizeof(tmp), field->charset()); - field->val_str(&type); + if (field_type == MYSQL_TYPE_BIT) + { + longlong dec= field->val_int(); + char *ptr= longlong2str(dec, tmp + 2, 2); + uint32 length= (uint32) (ptr - tmp); + tmp[0]= 'b'; + tmp[1]= '\''; + tmp[length]= '\''; + type.length(length + 1); + quoted= 0; + } + else + field->val_str(&type); if (type.length()) { String def_val;