Below is the list of changes that have just been committed into a local
5.1 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
1.2378 06/05/01 12:09:05 cmiller@zippy.(none) +2 -0
Merge zippy.(none):/home/cmiller/work/mysql/mysql-5.0
into zippy.(none):/home/cmiller/work/mysql/mysql-5.1-new
sql/sql_table.cc
1.326 06/05/01 12:08:58 cmiller@zippy.(none) +0 -0
Auto merged
mysql-test/r/null.result
1.36 06/05/01 12:08:57 cmiller@zippy.(none) +0 -0
Auto merged
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: cmiller
# Host: zippy.(none)
# Root: /home/cmiller/work/mysql/mysql-5.1-new/RESYNC
--- 1.325/sql/sql_table.cc 2006-04-25 10:32:29 -04:00
+++ 1.326/sql/sql_table.cc 2006-05-01 12:08:58 -04:00
@@ -2184,7 +2184,7 @@
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 @@
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 @@
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);
--- 1.35/mysql-test/r/null.result 2006-02-22 04:09:50 -05:00
+++ 1.36/mysql-test/r/null.result 2006-05-01 12:08:57 -04:00
@@ -278,3 +278,45 @@
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;
| Thread |
|---|
| • bk commit into 5.1 tree (cmiller:1.2378) | Chad MILLER | 1 May |