Commit fb7a6143 authored by unknown's avatar unknown

Merge kboortz@bk-internal.mysql.com:/home/bk/mysql-4.1

into mysql.com:/Users/kent/mysql/bk/mysql-4.1-new

parents a59807d8 dd68976a
...@@ -311,8 +311,9 @@ case $SYSTEM_TYPE in ...@@ -311,8 +311,9 @@ case $SYSTEM_TYPE in
;; ;;
*) *)
# Just to be safe, we test for ".so" anyway # Just to be safe, we test for ".so" anyway
eval shrexts=\"$shrext_cmds\"
if test \( -f "$mysql_zlib_dir/lib/libz.a" -o -f "$mysql_zlib_dir/lib/libz.so" -o \ if test \( -f "$mysql_zlib_dir/lib/libz.a" -o -f "$mysql_zlib_dir/lib/libz.so" -o \
-f "$mysql_zlib_dir/lib/libz$shrext_cmds" \) \ -f "$mysql_zlib_dir/lib/libz$shrexts" \) \
-a -f "$mysql_zlib_dir/include/zlib.h"; then -a -f "$mysql_zlib_dir/include/zlib.h"; then
ZLIB_INCLUDES="-I$mysql_zlib_dir/include" ZLIB_INCLUDES="-I$mysql_zlib_dir/include"
ZLIB_LIBS="-L$mysql_zlib_dir/lib -lz" ZLIB_LIBS="-L$mysql_zlib_dir/lib -lz"
...@@ -967,6 +968,7 @@ AC_DEFUN([MYSQL_CHECK_VIO], [ ...@@ -967,6 +968,7 @@ AC_DEFUN([MYSQL_CHECK_VIO], [
AC_DEFUN([MYSQL_FIND_OPENSSL], [ AC_DEFUN([MYSQL_FIND_OPENSSL], [
incs="$1" incs="$1"
libs="$2" libs="$2"
eval shrexts=\"$shrext_cmds\"
case "$incs---$libs" in case "$incs---$libs" in
---) ---)
for d in /usr/ssl/include /usr/local/ssl/include /usr/include \ for d in /usr/ssl/include /usr/local/ssl/include /usr/include \
...@@ -981,7 +983,7 @@ AC_DEFUN([MYSQL_FIND_OPENSSL], [ ...@@ -981,7 +983,7 @@ AC_DEFUN([MYSQL_FIND_OPENSSL], [
/usr/lib /usr/lib64 /opt/ssl/lib /opt/openssl/lib \ /usr/lib /usr/lib64 /opt/ssl/lib /opt/openssl/lib \
/usr/freeware/lib32 /usr/local/lib/ ; do /usr/freeware/lib32 /usr/local/lib/ ; do
# Just to be safe, we test for ".so" anyway # Just to be safe, we test for ".so" anyway
if test -f $d/libssl.a || test -f $d/libssl.so || test -f $d/libssl$shrext_cmds ; then if test -f $d/libssl.a || test -f $d/libssl.so || test -f $d/libssl$shrexts ; then
OPENSSL_LIB=$d OPENSSL_LIB=$d
fi fi
done done
...@@ -994,7 +996,7 @@ AC_DEFUN([MYSQL_FIND_OPENSSL], [ ...@@ -994,7 +996,7 @@ AC_DEFUN([MYSQL_FIND_OPENSSL], [
OPENSSL_INCLUDE=-I$incs OPENSSL_INCLUDE=-I$incs
fi fi
# Just to be safe, we test for ".so" anyway # Just to be safe, we test for ".so" anyway
if test -f $libs/libssl.a || test -f $libs/libssl.so || test -f $libs/libssl$shrext_cmds ; then if test -f $libs/libssl.a || test -f $libs/libssl.so || test -f "$libs/libssl$shrexts" ; then
OPENSSL_LIB=$libs OPENSSL_LIB=$libs
fi fi
;; ;;
......
...@@ -269,3 +269,45 @@ field('str1', null, 'STR1') as c05, ...@@ -269,3 +269,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;
...@@ -187,4 +187,45 @@ select ...@@ -187,4 +187,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
...@@ -601,7 +601,7 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, ...@@ -601,7 +601,7 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
if (need_to_change_arena) if (need_to_change_arena)
thd->restore_backup_item_arena(thd->current_arena, &backup_arena); thd->restore_backup_item_arena(thd->current_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);
...@@ -611,15 +611,30 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, ...@@ -611,15 +611,30 @@ 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)
{ {
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, &not_used, &not_used2, &not_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, &not_used, &not_used2, &not_found);
}
else /* not NULL */
{
(void) find_set(interval, def->ptr(), def->length(),
cs, &not_used, &not_used2, &not_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);
...@@ -631,14 +646,28 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, ...@@ -631,14 +646,28 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
} }
else /* FIELD_TYPE_ENUM */ else /* FIELD_TYPE_ENUM */
{ {
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, &sql_field->length, &dummy); calculate_interval_lengths(cs, interval, &sql_field->length, &dummy);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment