Commit 91ed9588 authored by unknown's avatar unknown
Browse files

Fix for bug#12053 LOAD DATA INFILE ignores NO_AUTO_VALUE_ON_ZERO setting

  set auto_increment_field_not_null to true to preserve zero values
  for autoincrement fields during LOAD DATA execution if 
  NO_AUTO_VALUE_ON_ZERO sql mode is set


mysql-test/r/loaddata.result:
  Fix for bug#12053 LOAD DATA INFILE ignores NO_AUTO_VALUE_ON_ZERO setting
    test case
mysql-test/t/loaddata.test:
  Fix for bug#12053 LOAD DATA INFILE ignores NO_AUTO_VALUE_ON_ZERO setting
    test case
parent d440d5ea
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -66,3 +66,13 @@ a b
3	row 3
0	
drop table t1;
SET @OLD_SQL_MODE=@@SQL_MODE, @@SQL_MODE=NO_AUTO_VALUE_ON_ZERO;
create table t1(id integer not null auto_increment primary key);
insert into t1 values(0);
select * from t1;
id
0
select * from t1;
id
0
SET @@SQL_MODE=@OLD_SQL_MODE;
+27 −0
Original line number Diff line number Diff line
@@ -31,4 +31,31 @@ load data infile '../../std_data/loaddata4.dat' into table t1 fields terminated
select * from t1;
drop table t1;


#
# Bug #12053 LOAD DATA INFILE ignores NO_AUTO_VALUE_ON_ZERO setting
#
SET @OLD_SQL_MODE=@@SQL_MODE, @@SQL_MODE=NO_AUTO_VALUE_ON_ZERO;
create table t1(id integer not null auto_increment primary key);
insert into t1 values(0);
disable_query_log;
eval SELECT * INTO OUTFILE '$MYSQL_TEST_DIR/var/tmp/t1' from t1;
delete from t1;
eval load data infile '$MYSQL_TEST_DIR/var/tmp/t1' into table t1;
enable_query_log;
select * from t1;
--exec rm $MYSQL_TEST_DIR/var/tmp/t1

disable_query_log;
eval SELECT * INTO OUTFILE '$MYSQL_TEST_DIR/var/tmp/t1'
FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n'
FROM t1;
delete from t1;
eval load data infile '$MYSQL_TEST_DIR/var/tmp/t1' into table t1
FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n';
enable_query_log;
select * from t1;
--exec rm $MYSQL_TEST_DIR/var/tmp/t1
SET @@SQL_MODE=@OLD_SQL_MODE;

# End of 4.1 tests
+4 −0
Original line number Diff line number Diff line
@@ -429,6 +429,8 @@ read_fixed_length(THD *thd,COPY_INFO &info,TABLE *table,List<Item> &fields,
    while ((sql_field= (Item_field*) it++))
    {
      Field *field= sql_field->field;                  
      if (field == table->next_number_field)
        table->auto_increment_field_not_null= TRUE;
      if (pos == read_info.row_end)
      {
        thd->cuted_fields++;			/* Not enough fields */
@@ -520,6 +522,8 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table,
      length=(uint) (read_info.row_end-pos);
      Field *field=sql_field->field;

      if (field == table->next_number_field)
        table->auto_increment_field_not_null= TRUE;
      if (!read_info.enclosed &&
	  (enclosed_length && length == 4 && !memcmp(pos,"NULL",4)) ||
	  (length == 1 && read_info.found_null))