Commit 3148d6f2 authored by unknown's avatar unknown

Another bugfix for #615

Looks a bit nicer than previous one


mysql-test/r/insert.result:
  Test results added
mysql-test/t/insert.test:
  testcase for the bug added
sql/field.h:
  Field::set_default fixed
sql/field_conv.cc:
  Now we can just replace field->reset() with field->set_default() here
parent 83dc6b10
......@@ -58,6 +58,16 @@ skr 2
test 1
test 2
drop table t1;
create table t1 (id int NOT NULL DEFAULT 8);
insert into t1 values(NULL);
Column 'id' cannot be null
insert into t1 values (1), (NULL), (2);
select * from t1;
id
1
8
2
drop table t1;
drop database if exists foo;
create database foo;
use foo;
......
......@@ -50,6 +50,17 @@ insert into t1 values ('rts',NULL),('rts',NULL),('test',NULL);
select * from t1;
drop table t1;
#
#Test of behaviour with INSERT VALUES (NULL)
#
create table t1 (id int NOT NULL DEFAULT 8);
-- error 1048
insert into t1 values(NULL);
insert into t1 values (1), (NULL), (2);
select * from t1;
drop table t1;
#
# Test of mysqld crash with fully qualified column names
#
......@@ -60,3 +71,4 @@ use foo;
create table t1 (c int);
insert into foo.t1 set foo.t1.c = '1';
drop database foo;
......@@ -72,10 +72,12 @@ class Field {
virtual void reset_fields() {}
virtual void set_default()
{
memcpy(ptr, ptr + table->rec_buff_length, pack_length());
my_ptrdiff_t offset = (my_ptrdiff_t) (table->record[2] -
table->record[0]);
memcpy(ptr, ptr + offset, pack_length());
if (null_ptr)
*null_ptr= ((*null_ptr & (uchar) ~null_bit) |
null_ptr[table->rec_buff_length] & null_bit);
null_ptr[offset] & null_bit);
}
virtual bool binary() const { return 1; }
virtual bool zero_pack() const { return 1; }
......
......@@ -118,10 +118,9 @@ set_field_to_null(Field *field)
field->reset();
return 0;
}
field->reset();
field->set_default();
if (current_thd->count_cuted_fields)
{
field->set_default();
current_thd->cuted_fields++; // Increment error counter
return 0;
}
......@@ -171,12 +170,11 @@ set_field_to_null_with_conversions(Field *field, bool no_conversions)
((Field_timestamp*) field)->set_time();
return 0; // Ok to set time to NULL
}
field->reset();
field->set_default();
if (field == field->table->next_number_field)
return 0; // field is set in handler.cc
if (current_thd->count_cuted_fields)
{
field->set_default();
current_thd->cuted_fields++; // Increment error counter
return 0;
}
......
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