changed for AUTO_VALUE_ON_ZERO

parent 99aa453f
...@@ -150,28 +150,91 @@ select last_insert_id(); ...@@ -150,28 +150,91 @@ select last_insert_id();
last_insert_id() last_insert_id()
0 0
drop table t1; drop table t1;
drop table if exists t1;
Warnings:
Note 1051 Unknown table 't1'
create table t1(a int auto_increment,b int null,primary key(a)); create table t1(a int auto_increment,b int null,primary key(a));
SET SQL_MODE=NO_AUTO_VALUE_ON_ZERO; SET SQL_MODE=NO_AUTO_VALUE_ON_ZERO;
insert into t1(a,b)values(NULL,1); insert into t1(a,b)values(NULL,1);
insert into t1(a,b)values(200,2); insert into t1(a,b)values(200,2);
insert into t1(a,b)values(0,3); insert into t1(a,b)values(0,3);
insert into t1(b)values(4); insert into t1(b)values(4);
SET SQL_MODE=''; insert into t1(b)values(5);
insert into t1(a,b)values(NULL,5); insert into t1(b)values(6);
insert into t1(a,b)values(300,6); insert into t1(b)values(7);
insert into t1(a,b)values(0,7); select * from t1 order by b;
insert into t1(b)values(8);
select * from t1;
a b a b
1 1 1 1
200 2 200 2
0 3 0 3
201 4 201 4
202 5 202 5
300 6 203 6
301 7 204 7
302 8 delete from t1 where a=0;
update t1 set a=0 where b=5;
select * from t1 order by b;
a b
1 1
200 2
201 4
0 5
203 6
204 7
delete from t1 where a=0;
update t1 set a=NULL where b=6;
Warnings:
Warning 1261 Data truncated, NULL supplied to NOT NULL column 'a' at row 4
update t1 set a=300 where b=7;
SET SQL_MODE='';
insert into t1(a,b)values(NULL,8);
insert into t1(a,b)values(400,9);
insert into t1(a,b)values(0,10);
insert into t1(b)values(11);
insert into t1(b)values(12);
insert into t1(b)values(13);
insert into t1(b)values(14);
select * from t1 order by b;
a b
1 1
200 2
201 4
0 6
300 7
301 8
400 9
401 10
402 11
403 12
404 13
405 14
delete from t1 where a=0;
update t1 set a=0 where b=12;
select * from t1 order by b;
a b
1 1
200 2
201 4
300 7
301 8
400 9
401 10
402 11
0 12
404 13
405 14
delete from t1 where a=0;
update t1 set a=NULL where b=13;
Warnings:
Warning 1261 Data truncated, NULL supplied to NOT NULL column 'a' at row 9
update t1 set a=500 where b=14;
select * from t1 order by b;
a b
1 1
200 2
201 4
300 7
301 8
400 9
401 10
402 11
0 13
500 14
drop table t1; drop table t1;
...@@ -106,17 +106,36 @@ select last_insert_id(); ...@@ -106,17 +106,36 @@ select last_insert_id();
drop table t1; drop table t1;
drop table if exists t1;
create table t1(a int auto_increment,b int null,primary key(a)); create table t1(a int auto_increment,b int null,primary key(a));
SET SQL_MODE=NO_AUTO_VALUE_ON_ZERO; SET SQL_MODE=NO_AUTO_VALUE_ON_ZERO;
insert into t1(a,b)values(NULL,1); insert into t1(a,b)values(NULL,1);
insert into t1(a,b)values(200,2); insert into t1(a,b)values(200,2);
insert into t1(a,b)values(0,3); insert into t1(a,b)values(0,3);
insert into t1(b)values(4); insert into t1(b)values(4);
insert into t1(b)values(5);
insert into t1(b)values(6);
insert into t1(b)values(7);
select * from t1 order by b;
delete from t1 where a=0;
update t1 set a=0 where b=5;
select * from t1 order by b;
delete from t1 where a=0;
update t1 set a=NULL where b=6;
update t1 set a=300 where b=7;
SET SQL_MODE=''; SET SQL_MODE='';
insert into t1(a,b)values(NULL,5); insert into t1(a,b)values(NULL,8);
insert into t1(a,b)values(300,6); insert into t1(a,b)values(400,9);
insert into t1(a,b)values(0,7); insert into t1(a,b)values(0,10);
insert into t1(b)values(8); insert into t1(b)values(11);
select * from t1; insert into t1(b)values(12);
insert into t1(b)values(13);
insert into t1(b)values(14);
select * from t1 order by b;
delete from t1 where a=0;
update t1 set a=0 where b=12;
select * from t1 order by b;
delete from t1 where a=0;
update t1 set a=NULL where b=13;
update t1 set a=500 where b=14;
select * from t1 order by b;
drop table t1; drop table t1;
...@@ -173,7 +173,7 @@ set_field_to_null_with_conversions(Field *field, bool no_conversions) ...@@ -173,7 +173,7 @@ set_field_to_null_with_conversions(Field *field, bool no_conversions)
field->reset(); field->reset();
if (field == field->table->next_number_field) if (field == field->table->next_number_field)
{ {
field->table->auto_increment_field_is_null= true; field->table->auto_increment_field_not_null= false;
return 0; // field is set in handler.cc return 0; // field is set in handler.cc
} }
if (current_thd->count_cuted_fields) if (current_thd->count_cuted_fields)
......
...@@ -697,14 +697,15 @@ void handler::update_auto_increment() ...@@ -697,14 +697,15 @@ void handler::update_auto_increment()
longlong nr; longlong nr;
THD *thd; THD *thd;
DBUG_ENTER("update_auto_increment"); DBUG_ENTER("update_auto_increment");
if (table->auto_increment_field_is_null) if (table->next_number_field->val_int() != 0 ||
table->auto_increment_field_is_null= false; table->auto_increment_field_not_null &&
else if (table->next_number_field->val_int() != 0 ||
current_thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO) current_thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO)
{ {
table->auto_increment_field_not_null= false;
auto_increment_column_changed=0; auto_increment_column_changed=0;
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
table->auto_increment_field_not_null= false;
thd=current_thd; thd=current_thd;
if ((nr=thd->next_insert_id)) if ((nr=thd->next_insert_id))
thd->next_insert_id=0; // Clear after use thd->next_insert_id=0; // Clear after use
......
...@@ -2247,8 +2247,8 @@ fill_record(List<Item> &fields,List<Item> &values, bool ignore_errors) ...@@ -2247,8 +2247,8 @@ fill_record(List<Item> &fields,List<Item> &values, bool ignore_errors)
value=v++; value=v++;
Field *rfield= field->field; Field *rfield= field->field;
TABLE *table= rfield->table; TABLE *table= rfield->table;
if (rfield==table->next_number_field) if (rfield == table->next_number_field)
table->auto_increment_field_is_null= false; table->auto_increment_field_not_null= true;
if (value->save_in_field(rfield, 0) > 0 && !ignore_errors) if (value->save_in_field(rfield, 0) > 0 && !ignore_errors)
DBUG_RETURN(1); DBUG_RETURN(1);
} }
...@@ -2268,8 +2268,8 @@ fill_record(Field **ptr,List<Item> &values, bool ignore_errors) ...@@ -2268,8 +2268,8 @@ fill_record(Field **ptr,List<Item> &values, bool ignore_errors)
{ {
value=v++; value=v++;
TABLE *table= field->table; TABLE *table= field->table;
if (field==table->next_number_field) if (field == table->next_number_field)
table->auto_increment_field_is_null= false; table->auto_increment_field_not_null= true;
if (value->save_in_field(field, 0) == 1 && !ignore_errors) if (value->save_in_field(field, 0) == 1 && !ignore_errors)
DBUG_RETURN(1); DBUG_RETURN(1);
} }
......
...@@ -253,7 +253,6 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, ...@@ -253,7 +253,6 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
else else
bulk_insert=0; bulk_insert=0;
table->auto_increment_field_is_null= true;
while ((values= its++)) while ((values= its++))
{ {
if (fields.elements || !value_count) if (fields.elements || !value_count)
......
...@@ -116,7 +116,7 @@ struct st_table { ...@@ -116,7 +116,7 @@ struct st_table {
my_bool crashed; my_bool crashed;
my_bool is_view; my_bool is_view;
my_bool no_keyread; my_bool no_keyread;
my_bool auto_increment_field_is_null; my_bool auto_increment_field_not_null;
Field *next_number_field, /* Set if next_number is activated */ Field *next_number_field, /* Set if next_number is activated */
*found_next_number_field, /* Set on open */ *found_next_number_field, /* Set on open */
*rowid_field; *rowid_field;
......
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