Commit c56c14f5 authored by unknown's avatar unknown
Browse files

Merge baker@bk-internal.mysql.com:/home/bk/mysql-5.1-arch

into  zim.(none):/home/brian/mysql/merge-5.1

parents 967b38a4 8bd11441
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -5210,16 +5210,32 @@ create table bug22080_3 (id int,string varchar(64)) Engine=CSV;
insert into bug22080_1 values(1,'string');
insert into bug22080_1 values(2,'string');
insert into bug22080_1 values(3,'string');
"1","string"
1,"string"
2","string"
"3","string"
3,"string"
check table bug22080_2;
Table	Op	Msg_type	Msg_text
test.bug22080_2	check	error	Corrupt
"1","string"
"2",string"
"3","string"
1,"string"
2,"string"
3,"string"
check table bug22080_3;
Table	Op	Msg_type	Msg_text
test.bug22080_3	check	error	Corrupt
drop tables bug22080_1,bug22080_2,bug22080_3;
create table float_test (id float,string varchar(64)) Engine=CSV;
insert into float_test values(1.0,'string');
insert into float_test values(2.23,'serg.g');
insert into float_test values(0.03,'string');
insert into float_test values(0.19,'string');
insert into float_test values(.67,'string');
insert into float_test values(9.67,'string');
select * from float_test;
id	string
1	string
2.23	serg.g
0.03	string
0.19	string
0.67	string
9.67	string
drop table float_test;
+15 −1
Original line number Diff line number Diff line
@@ -1595,7 +1595,7 @@ insert into bug22080_1 values(2,'string');
insert into bug22080_1 values(3,'string');

# Currupt the file as described in the bug report
--exec sed -e 's/"2"/2"/' $MYSQLTEST_VARDIR/master-data/test/bug22080_1.CSV > $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV
--exec sed -e 's/2/2"/' $MYSQLTEST_VARDIR/master-data/test/bug22080_1.CSV > $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV
--exec sed -e 's/2","/2",/' $MYSQLTEST_VARDIR/master-data/test/bug22080_1.CSV > $MYSQLTEST_VARDIR/master-data/test/bug22080_3.CSV

--exec cat $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV
@@ -1605,3 +1605,17 @@ check table bug22080_2;
check table bug22080_3;

drop tables bug22080_1,bug22080_2,bug22080_3;

#
# Testing float type
#
create table float_test (id float,string varchar(64)) Engine=CSV;
insert into float_test values(1.0,'string');
insert into float_test values(2.23,'serg.g');
insert into float_test values(0.03,'string');
insert into float_test values(0.19,'string');
insert into float_test values(.67,'string');
insert into float_test values(9.67,'string');
select * from float_test;

drop table float_test;
+96 −62
Original line number Diff line number Diff line
@@ -462,6 +462,7 @@ int ha_tina::encode_quote(byte *buf)

  my_bitmap_map *org_bitmap= dbug_tmp_use_all_columns(table, table->read_set);
  buffer.length(0);

  for (Field **field=table->field ; *field ; field++)
  {
    const char *ptr;
@@ -478,12 +479,13 @@ int ha_tina::encode_quote(byte *buf)
      buffer.append(STRING_WITH_LEN("\"\","));
      continue;
    }
    else
    {

    (*field)->val_str(&attribute,&attribute);

    if ((*field)->str_needs_quotes())
    {
      ptr= attribute.ptr();
      end_ptr= attribute.length() + ptr;
    }

      buffer.append('"');

@@ -517,11 +519,18 @@ int ha_tina::encode_quote(byte *buf)
          buffer.append(*ptr++);
      }
      buffer.append('"');
    }
    else
    {
      buffer.append(attribute);
    }

    buffer.append(',');
  }
  // Remove the comma, add a line feed
  buffer.length(buffer.length() - 1);
  buffer.append('\n');

  //buffer.replace(buffer.length(), 0, "\n", 1);

  dbug_tmp_restore_column_map(table->read_set, org_bitmap);
@@ -601,9 +610,9 @@ int ha_tina::find_current_row(byte *buf)
    buffer.length(0);
    if (curr_offset < end_offset &&
        file_buff->get_value(curr_offset) == '"')
    {
      curr_offset++; // Incrementpast the first quote
    else
      goto err;

      for(;curr_offset < end_offset; curr_offset++)
      {
        // Need to convert line feeds!
@@ -642,6 +651,31 @@ int ha_tina::find_current_row(byte *buf)
          buffer.append(file_buff->get_value(curr_offset));
        }
      }
    }
    else if (my_isdigit(system_charset_info, 
                        file_buff->get_value(curr_offset))) 
    {
      for(;curr_offset < end_offset; curr_offset++)
      {
        if (file_buff->get_value(curr_offset) == ',')
        {
          curr_offset+= 1; // Move past the ,
          break;
        }

        if (my_isdigit(system_charset_info, file_buff->get_value(curr_offset))) 
          buffer.append(file_buff->get_value(curr_offset));
        else if (file_buff->get_value(curr_offset) == '.')
          buffer.append(file_buff->get_value(curr_offset));
        else
          goto err;
      }
    }
    else
    {
      goto err;
    }

    if (bitmap_is_set(table->read_set, (*field)->field_index))
      (*field)->store(buffer.ptr(), buffer.length(), system_charset_info);
  }