Merge zippy.cornsilk.net:/home/cmiller/work/mysql/bug15776/my50-bug15776
into zippy.cornsilk.net:/home/cmiller/work/mysql/bug15776/my51-bug15776
This commit is contained in:
commit
cc2f6266c3
@ -807,6 +807,7 @@ set @@sql_mode='TRADITIONAL';
|
|||||||
create table t1 (a text default '');
|
create table t1 (a text default '');
|
||||||
ERROR 42000: BLOB/TEXT column 'a' can't have a default value
|
ERROR 42000: BLOB/TEXT column 'a' can't have a default value
|
||||||
set @@sql_mode='';
|
set @@sql_mode='';
|
||||||
|
drop table if exists b15776;
|
||||||
create table b15776 (data blob(2147483647));
|
create table b15776 (data blob(2147483647));
|
||||||
drop table b15776;
|
drop table b15776;
|
||||||
create table b15776 (data blob(-1));
|
create table b15776 (data blob(-1));
|
||||||
@ -879,9 +880,13 @@ Warnings:
|
|||||||
Warning 1287 'TIMESTAMP(4294967294)' is deprecated; use 'TIMESTAMP' instead
|
Warning 1287 'TIMESTAMP(4294967294)' is deprecated; use 'TIMESTAMP' instead
|
||||||
DROP TABLE b15776;
|
DROP TABLE b15776;
|
||||||
CREATE TABLE b15776 (a timestamp(4294967295));
|
CREATE TABLE b15776 (a timestamp(4294967295));
|
||||||
ERROR 42000: Display width out of range for column 'a' (max = 255)
|
Warnings:
|
||||||
|
Warning 1287 'TIMESTAMP(4294967295)' is deprecated; use 'TIMESTAMP' instead
|
||||||
|
DROP TABLE b15776;
|
||||||
CREATE TABLE b15776 (a timestamp(4294967296));
|
CREATE TABLE b15776 (a timestamp(4294967296));
|
||||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||||
|
CREATE TABLE b15776 (a timestamp(-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 (a timestamp(-2));
|
CREATE TABLE b15776 (a timestamp(-2));
|
||||||
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 '-2))' at line 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 '-2))' at line 1
|
||||||
CREATE TABLE b15776 (a int(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
CREATE TABLE b15776 (a int(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
||||||
|
@ -528,11 +528,13 @@ CREATE TABLE b15776 (a year(-2));
|
|||||||
## For timestamp, we silently rewrite widths to 14 or 19.
|
## For timestamp, we silently rewrite widths to 14 or 19.
|
||||||
CREATE TABLE b15776 (a timestamp(4294967294));
|
CREATE TABLE b15776 (a timestamp(4294967294));
|
||||||
DROP TABLE b15776;
|
DROP TABLE b15776;
|
||||||
--error ER_TOO_BIG_DISPLAYWIDTH
|
|
||||||
CREATE TABLE b15776 (a timestamp(4294967295));
|
CREATE TABLE b15776 (a timestamp(4294967295));
|
||||||
|
DROP TABLE b15776;
|
||||||
--error ER_TOO_BIG_DISPLAYWIDTH
|
--error ER_TOO_BIG_DISPLAYWIDTH
|
||||||
CREATE TABLE b15776 (a timestamp(4294967296));
|
CREATE TABLE b15776 (a timestamp(4294967296));
|
||||||
--error ER_PARSE_ERROR
|
--error ER_PARSE_ERROR
|
||||||
|
CREATE TABLE b15776 (a timestamp(-1));
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
CREATE TABLE b15776 (a timestamp(-2));
|
CREATE TABLE b15776 (a timestamp(-2));
|
||||||
|
|
||||||
|
|
||||||
|
24
sql/field.cc
24
sql/field.cc
@ -7082,6 +7082,7 @@ uint32 Field_blob::get_length(const uchar *pos)
|
|||||||
return (uint32) tmp;
|
return (uint32) tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* When expanding this, see also MAX_FIELD_BLOBLENGTH. */
|
||||||
return 0; // Impossible
|
return 0; // Impossible
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8772,11 +8773,11 @@ bool Create_field::init(THD *thd, char *fld_name, enum_field_types fld_type,
|
|||||||
(fld_type_modifier & NOT_NULL_FLAG) && fld_type != MYSQL_TYPE_TIMESTAMP)
|
(fld_type_modifier & NOT_NULL_FLAG) && fld_type != MYSQL_TYPE_TIMESTAMP)
|
||||||
flags|= NO_DEFAULT_VALUE_FLAG;
|
flags|= NO_DEFAULT_VALUE_FLAG;
|
||||||
|
|
||||||
if (fld_length != 0)
|
if (fld_length != NULL)
|
||||||
{
|
{
|
||||||
errno= 0;
|
errno= 0;
|
||||||
length= strtoul(fld_length, NULL, 10);
|
length= strtoul(fld_length, NULL, 10);
|
||||||
if (errno != 0)
|
if ((errno != 0) || (length > MAX_FIELD_BLOBLENGTH))
|
||||||
{
|
{
|
||||||
my_error(ER_TOO_BIG_DISPLAYWIDTH, MYF(0), fld_name, MAX_FIELD_BLOBLENGTH);
|
my_error(ER_TOO_BIG_DISPLAYWIDTH, MYF(0), fld_name, MAX_FIELD_BLOBLENGTH);
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
@ -8933,7 +8934,7 @@ bool Create_field::init(THD *thd, char *fld_name, enum_field_types fld_type,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MYSQL_TYPE_TIMESTAMP:
|
case MYSQL_TYPE_TIMESTAMP:
|
||||||
if (!fld_length)
|
if (fld_length == NULL)
|
||||||
{
|
{
|
||||||
/* Compressed date YYYYMMDDHHMMSS */
|
/* Compressed date YYYYMMDDHHMMSS */
|
||||||
length= MAX_DATETIME_COMPRESSED_WIDTH;
|
length= MAX_DATETIME_COMPRESSED_WIDTH;
|
||||||
@ -8942,12 +8943,21 @@ bool Create_field::init(THD *thd, char *fld_name, enum_field_types fld_type,
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
We support only even TIMESTAMP lengths less or equal than 14
|
We support only even TIMESTAMP lengths less or equal than 14
|
||||||
and 19 as length of 4.1 compatible representation.
|
and 19 as length of 4.1 compatible representation. Silently
|
||||||
|
shrink it to MAX_DATETIME_COMPRESSED_WIDTH.
|
||||||
*/
|
*/
|
||||||
length= ((length+1)/2)*2; /* purecov: inspected */
|
DBUG_ASSERT(MAX_DATETIME_COMPRESSED_WIDTH < UINT_MAX);
|
||||||
length= min(length, MAX_DATETIME_COMPRESSED_WIDTH); /* purecov: inspected */
|
if (length != UINT_MAX) /* avoid overflow; is safe because of min() */
|
||||||
|
length= ((length+1)/2)*2;
|
||||||
|
length= min(length, MAX_DATETIME_COMPRESSED_WIDTH);
|
||||||
}
|
}
|
||||||
flags|= ZEROFILL_FLAG | UNSIGNED_FLAG;
|
flags|= ZEROFILL_FLAG | UNSIGNED_FLAG;
|
||||||
|
/*
|
||||||
|
Since we silently rewrite down to MAX_DATETIME_COMPRESSED_WIDTH bytes,
|
||||||
|
the parser should not raise errors unless bizzarely large.
|
||||||
|
*/
|
||||||
|
max_field_charlength= UINT_MAX;
|
||||||
|
|
||||||
if (fld_default_value)
|
if (fld_default_value)
|
||||||
{
|
{
|
||||||
/* Grammar allows only NOW() value for ON UPDATE clause */
|
/* Grammar allows only NOW() value for ON UPDATE clause */
|
||||||
@ -9054,7 +9064,7 @@ bool Create_field::init(THD *thd, char *fld_name, enum_field_types fld_type,
|
|||||||
((length > max_field_charlength && fld_type != MYSQL_TYPE_SET &&
|
((length > max_field_charlength && fld_type != MYSQL_TYPE_SET &&
|
||||||
fld_type != MYSQL_TYPE_ENUM &&
|
fld_type != MYSQL_TYPE_ENUM &&
|
||||||
(fld_type != MYSQL_TYPE_VARCHAR || fld_default_value)) ||
|
(fld_type != MYSQL_TYPE_VARCHAR || fld_default_value)) ||
|
||||||
(!length &&
|
((length == 0) &&
|
||||||
fld_type != MYSQL_TYPE_STRING &&
|
fld_type != MYSQL_TYPE_STRING &&
|
||||||
fld_type != MYSQL_TYPE_VARCHAR && fld_type != MYSQL_TYPE_GEOMETRY)))
|
fld_type != MYSQL_TYPE_VARCHAR && fld_type != MYSQL_TYPE_GEOMETRY)))
|
||||||
{
|
{
|
||||||
|
@ -63,7 +63,7 @@
|
|||||||
#define MAX_MBWIDTH 3 /* Max multibyte sequence */
|
#define MAX_MBWIDTH 3 /* Max multibyte sequence */
|
||||||
#define MAX_FIELD_CHARLENGTH 255
|
#define MAX_FIELD_CHARLENGTH 255
|
||||||
#define MAX_FIELD_VARCHARLENGTH 65535
|
#define MAX_FIELD_VARCHARLENGTH 65535
|
||||||
#define MAX_FIELD_BLOBLENGTH UINT_MAX
|
#define MAX_FIELD_BLOBLENGTH UINT_MAX32 /* cf field_blob::get_length() */
|
||||||
#define CONVERT_IF_BIGGER_TO_BLOB 512 /* Used for CREATE ... SELECT */
|
#define CONVERT_IF_BIGGER_TO_BLOB 512 /* Used for CREATE ... SELECT */
|
||||||
|
|
||||||
/* Max column width +1 */
|
/* Max column width +1 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user