Commit b0e1cd18 authored by unknown's avatar unknown

changed for AUTO_VALUE_ON_ZERO


mysql-test/r/auto_increment.result:
  added test for AUTO_VALUE_ON_ZERO
mysql-test/t/auto_increment.test:
  added test for AUTO_VALUE_ON_ZERO
parent c6ea7bab
......@@ -150,28 +150,91 @@ select last_insert_id();
last_insert_id()
0
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));
SET SQL_MODE=NO_AUTO_VALUE_ON_ZERO;
insert into t1(a,b)values(NULL,1);
insert into t1(a,b)values(200,2);
insert into t1(a,b)values(0,3);
insert into t1(b)values(4);
SET SQL_MODE='';
insert into t1(a,b)values(NULL,5);
insert into t1(a,b)values(300,6);
insert into t1(a,b)values(0,7);
insert into t1(b)values(8);
select * from t1;
insert into t1(b)values(5);
insert into t1(b)values(6);
insert into t1(b)values(7);
select * from t1 order by b;
a b
1 1
200 2
0 3
201 4
202 5
300 6
301 7
302 8
203 6
204 7
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;
......@@ -106,17 +106,36 @@ select last_insert_id();
drop table t1;
drop table if exists t1;
create table t1(a int auto_increment,b int null,primary key(a));
SET SQL_MODE=NO_AUTO_VALUE_ON_ZERO;
insert into t1(a,b)values(NULL,1);
insert into t1(a,b)values(200,2);
insert into t1(a,b)values(0,3);
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='';
insert into t1(a,b)values(NULL,5);
insert into t1(a,b)values(300,6);
insert into t1(a,b)values(0,7);
insert into t1(b)values(8);
select * from t1;
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;
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;
......@@ -173,7 +173,7 @@ set_field_to_null_with_conversions(Field *field, bool no_conversions)
field->reset();
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
}
if (current_thd->count_cuted_fields)
......
......@@ -697,14 +697,15 @@ void handler::update_auto_increment()
longlong nr;
THD *thd;
DBUG_ENTER("update_auto_increment");
if (table->auto_increment_field_is_null)
table->auto_increment_field_is_null= false;
else if (table->next_number_field->val_int() != 0 ||
current_thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO)
if (table->next_number_field->val_int() != 0 ||
table->auto_increment_field_not_null &&
current_thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO)
{
table->auto_increment_field_not_null= false;
auto_increment_column_changed=0;
DBUG_VOID_RETURN;
}
table->auto_increment_field_not_null= false;
thd=current_thd;
if ((nr=thd->next_insert_id))
thd->next_insert_id=0; // Clear after use
......
......@@ -2247,8 +2247,8 @@ fill_record(List<Item> &fields,List<Item> &values, bool ignore_errors)
value=v++;
Field *rfield= field->field;
TABLE *table= rfield->table;
if (rfield==table->next_number_field)
table->auto_increment_field_is_null= false;
if (rfield == table->next_number_field)
table->auto_increment_field_not_null= true;
if (value->save_in_field(rfield, 0) > 0 && !ignore_errors)
DBUG_RETURN(1);
}
......@@ -2268,8 +2268,8 @@ fill_record(Field **ptr,List<Item> &values, bool ignore_errors)
{
value=v++;
TABLE *table= field->table;
if (field==table->next_number_field)
table->auto_increment_field_is_null= false;
if (field == table->next_number_field)
table->auto_increment_field_not_null= true;
if (value->save_in_field(field, 0) == 1 && !ignore_errors)
DBUG_RETURN(1);
}
......
......@@ -253,7 +253,6 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
else
bulk_insert=0;
table->auto_increment_field_is_null= true;
while ((values= its++))
{
if (fields.elements || !value_count)
......
......@@ -116,7 +116,7 @@ struct st_table {
my_bool crashed;
my_bool is_view;
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 */
*found_next_number_field, /* Set on open */
*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