When a CSV file contained comma separated elements
that were not enclosed in quotes, it was causing the
mysql server to crash.
The old algorithm that parsed the content of a row in
mysql 5.0 was assuming that the values of the fields
in a .CSV file will be enclosed in quotes and will be
separated by commas.
This was causing the old algorithm to fail when the
content of the file resembled the following
3,"sans quotes"
The CSV engine that is part of mysql 5.0 was expecting
the above to be
"3","sans quotes"
The above is just one example of where the engine was
failing for what would be recognized as a valid .CSV
file content otherwise.
The proposed fix changes the old algorithm being used
to parse rows from the .CSV file to handle two separate
cases
1) When the current field of the row is enclosed in quotes
2) When the current field of the row is not enclosed in
quotes
mysql-test/r/csv.result:
Contains additional test output corresponding to the new
tests added.
mysql-test/t/csv.test:
Contains additional tests for testing the behaviour of the CSV
storage engine when the fields are not enclosed in quotes.
sql/examples/ha_tina.cc:
Changes the parsing logic of the rows in a CSV file to account for
fields that are not enclosed in quotes.
Problem: Temporary buffer which is used for quoting and escaping
was initialized to character set utf8, and thus didn't allow
to store data in other character sets.
Fix: changing character set of the buffer to be able to
store any arbitrary sequence of bytes.
mysql-test/r/csv.result:
Adding test case
mysql-test/t/csv.test:
Adding test case
sql/examples/ha_tina.cc:
Changing character set of the buffer to "binary".
mysql-test/r/csv.result:
Update after add of missing semicolon
mysql-test/r/drop.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/flush.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/flush_block_commit.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/flush_read_lock_kill.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/grant2.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/handler.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/innodb_notembedded.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/kill.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/lock_multi.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/multi_update.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/mysqltest.result:
Update result
mysql-test/r/query_cache.result:
Update after add of missing semicolon
mysql-test/r/query_cache_notembedded.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/sp-threads.result:
Update result file, no space before commands that has been "sent"
mysql-test/r/sp_notembedded.result:
Update after add of missing semicolon
mysql-test/r/type_blob.result:
Remove extra drop table
mysql-test/t/csv.test:
Add missing semicolon
mysql-test/t/query_cache.test:
Add missing semicolon
mysql-test/t/sp-error.test:
Remove "tab" from end of error declaration
mysql-test/t/sp.test:
Wrong delimiter, used ; instead of |
mysql-test/t/sp_notembedded.test:
Wrong delimiter, used ; instead of |
mysql-test/t/view_grant.test:
An incomplete error name specification was used.
mysql-test/r/csv.result:
update result file
mysql-test/t/csv.test:
add a test for the bug
sql/examples/ha_tina.cc:
move open() call before my_hash_insert, so that we don't insert invalid
share to the hash. To avoid other possible problems also add
hash_delete(), so that the share is removed from hash before it is freed.
Fallback to row-wise delete if number or rows in the table is unknown
mysql-test/r/csv.result:
BUG#13406 - incorrect amount of "records deleted"
mysql-test/t/csv.test:
BUG#13406 - incorrect amount of "records deleted"
sql/examples/ha_tina.cc:
BUG#13406 - incorrect amount of "records deleted".
Fallback to row-wise delete if number or rows in the table is unknown
sql/examples/ha_tina.h:
BUG#13406 - incorrect amount of "records deleted".
Fallback to row-wise delete if number or rows in the table is unknown
mysql-test/r/csv.result:
correct result file
mysql-test/t/csv.test:
Add test for a bug
sql/examples/ha_tina.cc:
Add O_APPEND flag to my_open. We should always add rows to the end of file
mysql-test/r/csv.result:
update result file
mysql-test/t/csv.test:
Add test for a bug
sql/examples/ha_tina.cc:
sort function should return reverted values for chains to be sorted in
the right orded. don't do a strange memmove
acconfig.h:
Adding HAVE CSV rule
acinclude.m4:
Build option of csv engine
configure.in:
Update for building CSV
sql/Makefile.am:
Added files for CSV build
sql/handler.cc:
Needed options for CSV to be created.
sql/handler.h:
CSV type engine enum.
sql/mysql_priv.h:
Addition of the have_csv_db variable.
sql/mysqld.cc:
Code to show csv option.
sql/set_var.cc:
Adding have show variables for both csv and example.