List:Commits« Previous MessageNext Message »
From:Sergey Glukhov Date:December 9 2008 10:54am
Subject:bzr commit into mysql-5.0-bugteam branch (Sergey.Glukhov:2737)
Bug#35796
View as plain text  
#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;

Thread
bzr commit into mysql-5.0-bugteam branch (Sergey.Glukhov:2737)Bug#35796Sergey Glukhov9 Dec