List:Commits« Previous MessageNext Message »
From:Chad MILLER Date:August 10 2007 10:14pm
Subject:bk commit into 5.0 tree (cmiller:1.2500) BUG#15776
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of cmiller. When cmiller does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-08-10 18:14:54-04:00, cmiller@stripped +8 -0
  Bug#15776: 32-bit signed int used for length of blob
  
  Contributed patch from Martin Friebe, CLA from 2007-02-24.
  
  The parser lacked support for field sizes after signed long,
  when it should extend to 2**32-1.
  
  Now, we correct that limitation, and also make the error handling
  consistent for casts.

  mysql-test/r/type_blob.result@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +93 -0
    Verify that blobs may be created with the size that is already
    documented.

  mysql-test/t/type_blob.test@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +89 -0
    Verify that blobs may be created with the size that is already
    documented.

  sql/field.cc@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +14 -2
    atoi() insufficient to gauge the length of some fields.  Change
    it to strtoul().
    
    Add a new status variable to track whether a field is too long.

  sql/item_create.cc@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +9 -2
    atoi() insufficient to gauge the length of some fields.  Change
    it to strtoul().
    
    If a casted length is too long, raise an error.

  sql/item_timefunc.h@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +3 -2
    Make casts accept lengths greater than mere int -- longlong.

  sql/share/errmsg.txt@stripped, 2007-08-10 18:14:51-04:00, cmiller@stripped +24 -24
    Change ER_TOO_BIG_FIELDLENGTH so that it can accept sizes larger
    than 2**15 -- instead, 2**32.

  sql/sql_yacc.yy@stripped, 2007-08-10 18:14:50-04:00, cmiller@stripped +5 -2
    Make lengths take, in addition to NUM, LONG_NUM, ULONGLONG_NUM,
    and DECIMAL_NUM.

  sql/unireg.h@stripped, 2007-08-10 18:14:51-04:00, cmiller@stripped +1 -0
    Define new constant.

diff -Nrup a/mysql-test/r/type_blob.result b/mysql-test/r/type_blob.result
--- a/mysql-test/r/type_blob.result	2007-03-01 11:59:52 -05:00
+++ b/mysql-test/r/type_blob.result	2007-08-10 18:14:50 -04:00
@@ -807,4 +807,97 @@ set @@sql_mode='TRADITIONAL';
 create table t1 (a text default '');
 ERROR 42000: BLOB/TEXT column 'a' can't have a default value
 set @@sql_mode='';
+create table b15776 (data blob(2147483647));
+drop table b15776;
+create table b15776 (data blob(-1));
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1))' at line 1
+create table b15776 (data blob(2147483648));
+drop table b15776;
+create table b15776 (data blob(4294967294));
+drop table b15776;
+create table b15776 (data blob(4294967295));
+create table b15776 (data blob(4294967296));
+ERROR 42000: Column length too big for column 'data' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a blob(2147483647), b blob(2147483648), c blob(4294967295), a1 text(2147483647), b1 text(2147483648), c1 text(4294967295) );
+show columns from t1;
+Field	Type	Null	Key	Default	Extra
+a	longblob	YES		NULL	
+b	longblob	YES		NULL	
+c	longblob	YES		NULL	
+a1	longtext	YES		NULL	
+b1	longtext	YES		NULL	
+c1	longtext	YES		NULL	
+drop table t1;
+CREATE TABLE t1 (a blob(4294967296));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a text(4294967296));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a blob(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a text(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a int(4294967296));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a char(4294967296));
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '4294967296))' at line 1
+CREATE TABLE t1 (a year(4294967296));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a timestamp(4294967296));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a int(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '99999999999999999999999999999999999999999999999999999999999999999999999999999999' at line 1
+CREATE TABLE t1 (a year(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 (a timestamp(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'a' (max = 4294967295); use BLOB or TEXT instead
+CREATE TABLE t1 select cast(null as char(4294967295));
+show columns from t1;
+Field	Type	Null	Key	Default	Extra
+cast(null as char(4294967295))	longtext	YES		NULL	
+drop table t1;
+CREATE TABLE t1 select cast(null as nchar(4294967295));
+show columns from t1;
+Field	Type	Null	Key	Default	Extra
+cast(null as nchar(4294967295))	longtext	YES		NULL	
+drop table t1;
+CREATE TABLE t1 select cast(null as binary(4294967295));
+show columns from t1;
+Field	Type	Null	Key	Default	Extra
+cast(null as binary(4294967295))	longblob	YES		NULL	
+drop table t1;
+explain select cast(1 as char(4294967295));
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	No tables used
+explain select cast(1 as nchar(4294967295));
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	No tables used
+explain select cast(1 as binary(4294967295));
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	No tables used
+explain select cast(1 as char(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select cast(1 as char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select cast(1 as nchar(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select cast(1 as nchar(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select cast(1 as binary(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select cast(1 as binary(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, char(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, nchar(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, nchar(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, binary(4294967296));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
+explain select convert(1, binary(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+ERROR 42000: Column length too big for column 'cast as char' (max = 4294967295); use BLOB or TEXT instead
 End of 5.0 tests
diff -Nrup a/mysql-test/t/type_blob.test b/mysql-test/t/type_blob.test
--- a/mysql-test/t/type_blob.test	2007-02-14 08:44:31 -05:00
+++ b/mysql-test/t/type_blob.test	2007-08-10 18:14:50 -04:00
@@ -436,4 +436,93 @@ set @@sql_mode='TRADITIONAL';
 create table t1 (a text default '');
 set @@sql_mode='';
 
+#
+# Bug#15776: 32-bit signed int used for length of blob
+# """LONGBLOB:  A BLOB column with a maximum length of 4,294,967,295 or 4GB."""
+#
+create table b15776 (data blob(2147483647));
+drop table b15776;
+--error ER_PARSE_ERROR
+create table b15776 (data blob(-1));
+create table b15776 (data blob(2147483648));
+drop table b15776;
+create table b15776 (data blob(4294967294));
+drop table b15776;
+create table b15776 (data blob(4294967295));
+--error ER_TOO_BIG_FIELDLENGTH
+create table b15776 (data blob(4294967296));
+
+CREATE TABLE t1 (a blob(2147483647), b blob(2147483648), c blob(4294967295), a1 text(2147483647), b1 text(2147483648), c1 text(4294967295) );
+show columns from t1;
+drop table t1;
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a blob(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a text(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a blob(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a text(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+
+# Bug#15776: additional test, affecting other functions
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a int(4294967296));
+--error ER_PARSE_ERROR
+CREATE TABLE t1 (a char(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+# It's probably okay if this fails for other than 2**31 overflow.
+CREATE TABLE t1 (a year(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a timestamp(4294967296));
+
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a int(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_PARSE_ERROR
+CREATE TABLE t1 (a char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a year(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+CREATE TABLE t1 (a timestamp(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+
+# do not select, too much memory needed
+CREATE TABLE t1 select cast(null as char(4294967295));
+show columns from t1;
+drop table t1;
+CREATE TABLE t1 select cast(null as nchar(4294967295));
+show columns from t1;
+drop table t1;
+CREATE TABLE t1 select cast(null as binary(4294967295));
+show columns from t1;
+drop table t1;
+
+explain select cast(1 as char(4294967295));
+explain select cast(1 as nchar(4294967295));
+explain select cast(1 as binary(4294967295));
+
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as char(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as nchar(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as nchar(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as binary(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select cast(1 as binary(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, char(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, nchar(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, nchar(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, binary(4294967296));
+--error ER_TOO_BIG_FIELDLENGTH
+explain select convert(1, binary(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
+
 --echo End of 5.0 tests
diff -Nrup a/sql/field.cc b/sql/field.cc
--- a/sql/field.cc	2007-07-25 18:28:50 -04:00
+++ b/sql/field.cc	2007-08-10 18:14:50 -04:00
@@ -8395,8 +8395,20 @@ bool create_field::init(THD *thd, char *
       (fld_type_modifier & NOT_NULL_FLAG) && fld_type != FIELD_TYPE_TIMESTAMP)
     flags|= NO_DEFAULT_VALUE_FLAG;
 
-  if (fld_length && !(length= (uint) atoi(fld_length)))
-    fld_length= 0; /* purecov: inspected */
+  if (fld_length != 0)
+  {
+    errno= 0;
+    length= strtoul(fld_length, NULL, 10);
+    if (errno != 0)
+    {
+      my_error(ER_TOO_BIG_FIELDLENGTH, MYF(0), fld_name, MAX_FIELD_BLOBLENGTH);
+      DBUG_RETURN(TRUE);
+    }
+
+    if (length == 0)
+      fld_length= 0; /* purecov: inspected */
+  }
+
   sign_len= fld_type_modifier & UNSIGNED_FLAG ? 0 : 1;
 
   switch (fld_type) {
diff -Nrup a/sql/item_create.cc b/sql/item_create.cc
--- a/sql/item_create.cc	2007-08-02 05:51:00 -04:00
+++ b/sql/item_create.cc	2007-08-10 18:14:50 -04:00
@@ -487,9 +487,16 @@ Item *create_func_cast(Item *a, Cast_tar
     res= new Item_decimal_typecast(a, len, dec);
     break;
   case ITEM_CAST_CHAR:
-    len= c_len ? atoi(c_len) : -1;
+    errno= 0;
+    longlong len= c_len ? strtoul(c_len, NULL, 10) : LL(-1);
+    if (errno != 0)
+    {
+      my_error(ER_TOO_BIG_FIELDLENGTH, MYF(0), "cast as char", MAX_FIELD_BLOBLENGTH);
+      return 0;
+    }
+
     res= new Item_char_typecast(a, len, cs ? cs : 
-				current_thd->variables.collation_connection);
+                                current_thd->variables.collation_connection);
     break;
   }
   return res;
diff -Nrup a/sql/item_timefunc.h b/sql/item_timefunc.h
--- a/sql/item_timefunc.h	2007-05-16 04:44:40 -04:00
+++ b/sql/item_timefunc.h	2007-08-10 18:14:50 -04:00
@@ -755,12 +755,13 @@ public:
 
 class Item_char_typecast :public Item_typecast
 {
-  int cast_length;
+  // cast_length supports up to 4294967295, but also -1 
+  longlong cast_length;
   CHARSET_INFO *cast_cs, *from_cs;
   bool charset_conversion;
   String tmp_value;
 public:
-  Item_char_typecast(Item *a, int length_arg, CHARSET_INFO *cs_arg)
+  Item_char_typecast(Item *a, longlong length_arg, CHARSET_INFO *cs_arg)
     :Item_typecast(a), cast_length(length_arg), cast_cs(cs_arg) {}
   enum Functype functype() const { return CHAR_TYPECAST_FUNC; }
   bool eq(const Item *item, bool binary_cmp) const;
diff -Nrup a/sql/share/errmsg.txt b/sql/share/errmsg.txt
--- a/sql/share/errmsg.txt	2007-06-05 19:42:39 -04:00
+++ b/sql/share/errmsg.txt	2007-08-10 18:14:51 -04:00
@@ -1771,30 +1771,30 @@ ER_BLOB_USED_AS_KEY 42000 S1009
 ER_TOO_BIG_FIELDLENGTH 42000 S1009
-	nla "Te grote kolomlengte voor '%-.64s' (max = %d). Maak hiervoor gebruik van het type BLOB"
-	eng "Column length too big for column '%-.64s' (max = %d); use BLOB or TEXT instead"
-	fre "Champ '%-.64s' trop long (max = %d). Utilisez un BLOB"
-	hun "A(z) '%-.64s' oszlop tul hosszu. (maximum = %d). Hasznaljon BLOB tipust inkabb."
-	ita "La colonna '%-.64s' e` troppo grande (max=%d). Utilizza un BLOB."
-	norwegian-ny "For stor nykkellengde for felt '%-.64s' (maks = %d). Bruk BLOB istadenfor"
-	por "Comprimento da coluna '%-.64s' grande demais (max = %d); use BLOB em seu lugar"
-	rum "Lungimea coloanei '%-.64s' este prea lunga (maximum = %d). Foloseste BLOB mai bine"
-	spa "Longitud de columna demasiado grande para la columna '%-.64s' (maximo = %d).Usar BLOB en su lugar"
+	nla "Te grote kolomlengte voor '%-.64s' (max = %lu). Maak hiervoor gebruik van het type BLOB"
+	eng "Column length too big for column '%-.64s' (max = %lu); use BLOB or TEXT instead"
+	fre "Champ '%-.64s' trop long (max = %lu). Utilisez un BLOB"
+	hun "A(z) '%-.64s' oszlop tul hosszu. (maximum = %lu). Hasznaljon BLOB tipust inkabb."
+	ita "La colonna '%-.64s' e` troppo grande (max=%lu). Utilizza un BLOB."
+	norwegian-ny "For stor nykkellengde for felt '%-.64s' (maks = %lu). Bruk BLOB istadenfor"
+	por "Comprimento da coluna '%-.64s' grande demais (max = %lu); use BLOB em seu lugar"
+	rum "Lungimea coloanei '%-.64s' este prea lunga (maximum = %lu). Foloseste BLOB mai bine"
+	spa "Longitud de columna demasiado grande para la columna '%-.64s' (maximo = %lu).Usar BLOB en su lugar"
 ER_WRONG_AUTO_KEY 42000 S1009
diff -Nrup a/sql/sql_yacc.yy b/sql/sql_yacc.yy
--- a/sql/sql_yacc.yy	2007-08-01 20:39:11 -04:00
+++ b/sql/sql_yacc.yy	2007-08-10 18:14:50 -04:00
@@ -3284,8 +3284,11 @@ field_option:
 	| ZEROFILL	{ Lex->type|= UNSIGNED_FLAG | ZEROFILL_FLAG; };
 
 opt_len:
-	/* empty */	{ Lex->length=(char*) 0; } /* use default length */
-	| '(' NUM ')'	{ Lex->length= $2.str; };
+        /* empty */             { Lex->length=(char*) 0; } /* use default length */
+        | '(' NUM ')'           { Lex->length= $2.str; }
+        | '(' LONG_NUM ')'      { Lex->length= $2.str; }
+        | '(' ULONGLONG_NUM ')' { Lex->length= $2.str; }
+        | '(' DECIMAL_NUM ')'   { Lex->length= $2.str; };
 
 opt_precision:
 	/* empty */	{}
diff -Nrup a/sql/unireg.h b/sql/unireg.h
--- a/sql/unireg.h	2007-07-05 06:34:11 -04:00
+++ b/sql/unireg.h	2007-08-10 18:14:51 -04:00
@@ -60,6 +60,7 @@
 #define MAX_MBWIDTH		3		/* Max multibyte sequence */
 #define MAX_FIELD_CHARLENGTH	255
 #define MAX_FIELD_VARCHARLENGTH	65535
+#define MAX_FIELD_BLOBLENGTH    UINT_MAX
 #define CONVERT_IF_BIGGER_TO_BLOB 512		/* Used for CREATE ... SELECT */
 
 /* Max column width +1 */
Thread
bk commit into 5.0 tree (cmiller:1.2500) BUG#15776Chad MILLER11 Aug
Re: bk commit into 5.0 tree (cmiller:1.2500) BUG#15776Timothy Smith11 Aug