mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge zippy.(none):/home/cmiller/work/mysql/merge/tmp_merge
into zippy.(none):/home/cmiller/work/mysql/merge/mysql-5.0
This commit is contained in:
@ -278,3 +278,45 @@ field('str1', null, 'STR1') as c05,
|
|||||||
c01 c02 c03 c04 c05 c08 c09
|
c01 c02 c03 c04 c05 c08 c09
|
||||||
str str 0 1 2 1 1
|
str str 0 1 2 1 1
|
||||||
set names latin1;
|
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.
|
# Restore charset to the default value.
|
||||||
set names latin1;
|
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
|
# End of 4.1 tests
|
||||||
|
@ -799,7 +799,7 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||||||
if (need_to_change_arena)
|
if (need_to_change_arena)
|
||||||
thd->restore_active_arena(thd->stmt_arena, &backup_arena);
|
thd->restore_active_arena(thd->stmt_arena, &backup_arena);
|
||||||
|
|
||||||
if (! sql_field->def)
|
if (sql_field->def == NULL)
|
||||||
{
|
{
|
||||||
/* Could not convert */
|
/* Could not convert */
|
||||||
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
||||||
@ -810,15 +810,30 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||||||
if (sql_field->sql_type == FIELD_TYPE_SET)
|
if (sql_field->sql_type == FIELD_TYPE_SET)
|
||||||
{
|
{
|
||||||
uint32 field_length;
|
uint32 field_length;
|
||||||
if (sql_field->def)
|
if (sql_field->def != NULL)
|
||||||
{
|
{
|
||||||
char *not_used;
|
char *not_used;
|
||||||
uint not_used2;
|
uint not_used2;
|
||||||
bool not_found= 0;
|
bool not_found= 0;
|
||||||
String str, *def= sql_field->def->val_str(&str);
|
String str, *def= sql_field->def->val_str(&str);
|
||||||
def->length(cs->cset->lengthsp(cs, def->ptr(), def->length()));
|
if (def == NULL) /* SQL "NULL" maps to NULL */
|
||||||
(void) find_set(interval, def->ptr(), def->length(),
|
{
|
||||||
cs, ¬_used, ¬_used2, ¬_found);
|
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)
|
if (not_found)
|
||||||
{
|
{
|
||||||
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
||||||
@ -831,14 +846,28 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||||||
else /* FIELD_TYPE_ENUM */
|
else /* FIELD_TYPE_ENUM */
|
||||||
{
|
{
|
||||||
uint32 field_length;
|
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);
|
String str, *def= sql_field->def->val_str(&str);
|
||||||
def->length(cs->cset->lengthsp(cs, def->ptr(), def->length()));
|
if (def == NULL) /* SQL "NULL" maps to NULL */
|
||||||
if (!find_type2(interval, def->ptr(), def->length(), cs))
|
|
||||||
{
|
{
|
||||||
my_error(ER_INVALID_DEFAULT, MYF(0), sql_field->field_name);
|
if ((sql_field->flags & NOT_NULL_FLAG) != 0)
|
||||||
DBUG_RETURN(-1);
|
{
|
||||||
|
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);
|
calculate_interval_lengths(cs, interval, &field_length, &dummy);
|
||||||
|
Reference in New Issue
Block a user