mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
Merge zippy.(none):/home/cmiller/work/mysql/mysql-5.0
into zippy.(none):/home/cmiller/work/mysql/mysql-5.1-new
This commit is contained in:
commit
21bec19920
3 changed files with 122 additions and 10 deletions
|
@ -278,3 +278,45 @@ field('str1', null, 'STR1') as c05,
|
|||
c01 c02 c03 c04 c05 c08 c09
|
||||
str str 0 1 2 1 1
|
||||
set names latin1;
|
||||
create table bug19145a (e enum('a','b','c') default 'b' , s set('x', 'y', 'z') default 'y' ) engine=MyISAM;
|
||||
create table bug19145b (e enum('a','b','c') default null, s set('x', 'y', 'z') default null) engine=MyISAM;
|
||||
create table bug19145c (e enum('a','b','c') not null default 'b' , s set('x', 'y', 'z') not null default 'y' ) engine=MyISAM;
|
||||
create table bug19145setnotnulldefaultnull (e enum('a','b','c') default null, s set('x', 'y', 'z') not null default null) engine=MyISAM;
|
||||
ERROR 42000: Invalid default value for 's'
|
||||
create table bug19145enumnotnulldefaultnull (e enum('a','b','c') not null default null, s set('x', 'y', 'z') default null) engine=MyISAM;
|
||||
ERROR 42000: Invalid default value for 'e'
|
||||
alter table bug19145a alter column e set default null;
|
||||
alter table bug19145a alter column s set default null;
|
||||
alter table bug19145a add column (i int);
|
||||
alter table bug19145b alter column e set default null;
|
||||
alter table bug19145b alter column s set default null;
|
||||
alter table bug19145b add column (i int);
|
||||
alter table bug19145c alter column e set default null;
|
||||
ERROR 42000: Invalid default value for 'e'
|
||||
alter table bug19145c alter column s set default null;
|
||||
ERROR 42000: Invalid default value for 's'
|
||||
alter table bug19145c add column (i int);
|
||||
show create table bug19145a;
|
||||
Table Create Table
|
||||
bug19145a CREATE TABLE `bug19145a` (
|
||||
`e` enum('a','b','c') DEFAULT NULL,
|
||||
`s` set('x','y','z') DEFAULT NULL,
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show create table bug19145b;
|
||||
Table Create Table
|
||||
bug19145b CREATE TABLE `bug19145b` (
|
||||
`e` enum('a','b','c') DEFAULT NULL,
|
||||
`s` set('x','y','z') DEFAULT NULL,
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show create table bug19145c;
|
||||
Table Create Table
|
||||
bug19145c CREATE TABLE `bug19145c` (
|
||||
`e` enum('a','b','c') NOT NULL DEFAULT 'b',
|
||||
`s` set('x','y','z') NOT NULL DEFAULT 'y',
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table bug19145a;
|
||||
drop table bug19145b;
|
||||
drop table bug19145c;
|
||||
|
|
|
@ -190,4 +190,45 @@ select
|
|||
# Restore charset to the default value.
|
||||
set names latin1;
|
||||
|
||||
#
|
||||
# Bug#19145: mysqld crashes if you set the default value of an enum field to NULL
|
||||
#
|
||||
create table bug19145a (e enum('a','b','c') default 'b' , s set('x', 'y', 'z') default 'y' ) engine=MyISAM;
|
||||
create table bug19145b (e enum('a','b','c') default null, s set('x', 'y', 'z') default null) engine=MyISAM;
|
||||
|
||||
create table bug19145c (e enum('a','b','c') not null default 'b' , s set('x', 'y', 'z') not null default 'y' ) engine=MyISAM;
|
||||
|
||||
# Invalid default value for 's'
|
||||
--error 1067
|
||||
create table bug19145setnotnulldefaultnull (e enum('a','b','c') default null, s set('x', 'y', 'z') not null default null) engine=MyISAM;
|
||||
|
||||
# Invalid default value for 'e'
|
||||
--error 1067
|
||||
create table bug19145enumnotnulldefaultnull (e enum('a','b','c') not null default null, s set('x', 'y', 'z') default null) engine=MyISAM;
|
||||
|
||||
alter table bug19145a alter column e set default null;
|
||||
alter table bug19145a alter column s set default null;
|
||||
alter table bug19145a add column (i int);
|
||||
|
||||
alter table bug19145b alter column e set default null;
|
||||
alter table bug19145b alter column s set default null;
|
||||
alter table bug19145b add column (i int);
|
||||
|
||||
# Invalid default value for 'e'
|
||||
--error 1067
|
||||
alter table bug19145c alter column e set default null;
|
||||
|
||||
# Invalid default value for 's'
|
||||
--error 1067
|
||||
alter table bug19145c alter column s set default null;
|
||||
alter table bug19145c add column (i int);
|
||||
|
||||
show create table bug19145a;
|
||||
show create table bug19145b;
|
||||
show create table bug19145c;
|
||||
|
||||
drop table bug19145a;
|
||||
drop table bug19145b;
|
||||
drop table bug19145c;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
|
|
@ -2184,7 +2184,7 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||
if (need_to_change_arena)
|
||||
thd->restore_active_arena(thd->stmt_arena, &backup_arena);
|
||||
|
||||
if (! sql_field->def)
|
||||
if (sql_field->def == NULL)
|
||||
{
|
||||
/* Could not convert */
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
||||
|
@ -2195,15 +2195,30 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||
if (sql_field->sql_type == FIELD_TYPE_SET)
|
||||
{
|
||||
uint32 field_length;
|
||||
if (sql_field->def)
|
||||
if (sql_field->def != NULL)
|
||||
{
|
||||
char *not_used;
|
||||
uint not_used2;
|
||||
bool not_found= 0;
|
||||
String str, *def= sql_field->def->val_str(&str);
|
||||
def->length(cs->cset->lengthsp(cs, def->ptr(), def->length()));
|
||||
(void) find_set(interval, def->ptr(), def->length(),
|
||||
cs, ¬_used, ¬_used2, ¬_found);
|
||||
if (def == NULL) /* SQL "NULL" maps to NULL */
|
||||
{
|
||||
if ((sql_field->flags & NOT_NULL_FLAG) != 0)
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
/* else, NULL is an allowed value */
|
||||
(void) find_set(interval, NULL, 0,
|
||||
cs, ¬_used, ¬_used2, ¬_found);
|
||||
}
|
||||
else /* not NULL */
|
||||
{
|
||||
(void) find_set(interval, def->ptr(), def->length(),
|
||||
cs, ¬_used, ¬_used2, ¬_found);
|
||||
}
|
||||
|
||||
if (not_found)
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
||||
|
@ -2216,14 +2231,28 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||
else /* FIELD_TYPE_ENUM */
|
||||
{
|
||||
uint32 field_length;
|
||||
if (sql_field->def)
|
||||
DBUG_ASSERT(sql_field->sql_type == FIELD_TYPE_ENUM);
|
||||
if (sql_field->def != NULL)
|
||||
{
|
||||
String str, *def= sql_field->def->val_str(&str);
|
||||
def->length(cs->cset->lengthsp(cs, def->ptr(), def->length()));
|
||||
if (!find_type2(interval, def->ptr(), def->length(), cs))
|
||||
if (def == NULL) /* SQL "NULL" maps to NULL */
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
||||
DBUG_RETURN(-1);
|
||||
if ((sql_field->flags & NOT_NULL_FLAG) != 0)
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
/* else, the defaults yield the correct length for NULLs. */
|
||||
}
|
||||
else /* not NULL */
|
||||
{
|
||||
def->length(cs->cset->lengthsp(cs, def->ptr(), def->length()));
|
||||
if (find_type2(interval, def->ptr(), def->length(), cs) == 0) /* not found */
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
calculate_interval_lengths(cs, interval, &field_length, &dummy);
|
||||
|
|
Loading…
Add table
Reference in a new issue