                        Apache Commons CSV
                        Version 1.7
                        Release Notes


INTRODUCTION:

This document contains the release notes for the 1.7 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.

The Apache Commons CSV library provides a simple interface for reading and writing
CSV files of various types.

Feature and bug fix release (Java 8)

Changes in this version include:

NEW FEATURES
==============

o CSV-233:  Add predefined CSVFormats for printing MongoDB CSV and TSV. Thanks to Gary Gregory.
o CSV-234:  Add support for java.sql.Clob. Thanks to Roberto Benedetti, Gary Gregory.
o CSV-239:  Cannot get headers in column order from CSVRecord. Thanks to Gary Gregory, Dave Moten.

FIXED BUGS
============

o CSV-208:  Fix escape character for POSTGRESQL_TEXT and POSTGRESQL_CSV formats. Thanks to Jurrie Overgoor.
o CSV-232:  Site link "Source Repository" does not work. Thanks to Jurrie Overgoor, Gary Gregory.
o CSV-238:  Escape quotes in CLOBs #39. Thanks to Stephen Olander-Waters.

CHANGES
=========

o CSV-237:  Update to Java 8. Thanks to Gary Gregory.
o           Update tests from H2 1.4.198 to 1.4.199. Thanks to Gary Gregory.


Historical list of changes: http://commons.apache.org/proper/commons-csv/changes-report.html

For complete information on Apache Commons CSV, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons CSV website:

http://commons.apache.org/proper/commons-csv/

Download it from http://commons.apache.org/proper/commons-csv/download_csv.cgi

Have fun!
-Apache Commons CSV team

------------------------------------------------------------------------------


                        Apache Commons CSV
                        Version 1.6
                        Release Notes


INTRODUCTION:

This document contains the release notes for the 1.6 version of
Apache Commons CSV. Commons CSV reads and writes files in variations of the
Comma Separated Value (CSV) format.

CSV requires at least Java 7.

The Apache Commons CSV library provides a simple interface for reading and
writing CSV files of various types.

Feature and bug fix release.

Changes in this version include:

NEW FEATURES
==============

o CSV-217:  Add autoFlush option for CsvPrinter. PR #24.
            Thanks to Korolyov Alexei.
o CSV-220:  Add API org.apache.commons.csv.CSVFormat.withSystemRecordSeparator().
            Thanks to Gary Gregory.

FIXED BUGS
============

o CSV-219:  The behavior of quote char using is not similar as Excel does when
            the first string contains CJK char(s). Thanks to Zhang Hongda.
o CSV-172:  Don't quote cells just because they have UTF-8 encoded characters.
            Thanks to Andrew Pennebaker.
o CSV-223:  Inconsistency between Javadoc of CSVFormat DEFAULT EXCEL.
            Thanks to Samuel Martin.
o CSV-209:  Create CSVFormat.ORACLE preset. Thanks to Gary Gregory.
o CSV-224:  Some multi-iterator parsing peek sequences incorrectly consume
            elements. Thanks to David Warshaw.
o CSV-225:  Parse method should avoid creating a redundant BufferedReader.
            Thanks to Anson Schwabecher.

CHANGES
=========

o CSV-231:  Add more documentation to CSVPrinter.


Have fun!
-Apache Commons CSV team

------------------------------------------------------------------------------

                        Apache Commons CSV
                        Version 1.5
                        Release Notes


INTRODUCTION:

This document contains the release notes for the 1.5 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.

CSV requires at least Java 7.

The Apache Commons CSV library provides a simple interface for reading and writing
CSV files of various types.

Feature and bug fix release

Changes in this version include:

NEW FEATURES
==============

o CSV-189:  CSVParser: Add factory method accepting InputStream. Thanks to Peter Holzwarth, Gary Gregory.
o CSV-190:  Add convenience API CSVFormat.print(File, Charset). Thanks to Gary Gregory.
o CSV-191:  Add convenience API CSVFormat.print(Path, Charset). Thanks to Gary Gregory.
o CSV-192:  Add convenience API CSVParser.parse(Path, Charset, CSVFormat). Thanks to Gary Gregory.
o CSV-205:  Add convenience API CSVFormat#printer() to print to System.out. Thanks to Gary Gregory.
o CSV-207:  Provide a CSV Format for printing PostgreSQL CSV and Text formats. Thanks to Gary Gregory.
o CSV-214:  Adding a placeholder in the Lexer and CSV parser to store the end-of-line string. Thanks to Nitin Mahendru, Gary Gregory.

FIXED BUGS
============

o CSV-203:  withNullString value is printed without quotes when QuoteMode.ALL is specified; add QuoteMode.ALL_NON_NULL. PR #17. Thanks to Richard Wheeldon, Kai Paroth.
o CSV-194:  Fix outdated comments about FileReader in CSVParser #13. Thanks to Marc Prud'hommeaux.
o CSV-193:  Fix incorrect method name 'withFirstRowAsHeader' in user guide. Thanks to Matthias Wiehl.
o CSV-171:  Negative numeric values in the first column are always quoted in minimal mode. Thanks to Gary Gregory, Michael Graessle, Adrian Bridgett.

CHANGES
=========

o CSV-187: Update platform requirement from Java 6 to 7. Thanks to Gary Gregory.
o CSV-201: Do not use RuntimeException in CSVParser.iterator().new Iterator() {...}.getNextRecord(). Thanks to Benedikt Ritter, Gary Gregory.


Historical list of changes: http://commons.apache.org/proper/commons-csv/changes-report.html

For complete information on Apache Commons CSV, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons CSV website:

http://commons.apache.org/proper/commons-csv/

Have fun!
-Apache Commons CSV team

------------------------------------------------------------------------------

                        Apache Commons CSV
                        Version 1.4
                        Release Notes


INTRODUCTION:

This document contains the release notes for the 1.4 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.

CSV requires at least Java 6.

The Apache Commons CSV library provides a simple interface for reading and writing
CSV files of various types.

Feature and bug fix release

Changes in this version include:

NEW FEATURES
==============

o CSV-182:  Allow some printing operations directly from CSVFormat. Thanks to Gary Gregory.


CHANGES
=========

o CSV-181:  Make CSVPrinter.print(Object) GC-free. Thanks to Gary Gregory.
o CSV-183:  Drop ferc.gov tests.  


Historical list of changes: http://commons.apache.org/proper/commons-csv/changes-report.html

For complete information on Apache Commons CSV, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons CSV website:

http://commons.apache.org/proper/commons-csv/

Have fun!
-Apache Commons CSV team

------------------------------------------------------------------------------

                        Apache Commons CSV
                        Version 1.3
                        Release Notes


INTRODUCTION:

This document contains the release notes for the 1.3 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.

CSV requires at least Java 6.

The Apache Commons CSV library provides a simple interface for reading and writing
CSV files of various types.

Feature and bug fix release.

Changes in this version include:

NEW FEATURES
==============

o CSV-179:  Add shortcut method for using first record as header to CSVFormat.
o CSV-180:  Add withHeader(Class? extends Enum>) to CSVFormat.
o CSV-159:  Add IgnoreCase option for accessing header names. Thanks to Yamil Medina.
o CSV-169:  The null string should be case-sensitive when reading records. Thanks to Gary Gregory.
o CSV-175:  Support for ignoring trailing delimiter. Thanks to Gary Gregory, Chris Jones.
o CSV-177:  Support trimming leading and trailing blanks. Thanks to Gary Gregory.
o CSV-178:  Create default formats for Informix UNLOAD and UNLOAD CSV. Thanks to Gary Gregory.

FIXED BUGS
============

o CSV-168:  CSVFormat.nullString should not be escaped. Thanks to Gary Gregory, cornel creanga.
o CSV-170:  CSVFormat.MYSQL nullString should be "\N". Thanks to Gary Gregory, cornel creanga.
o CSV-161:  Fix Javadoc to say CSVFormat with() methods return a new CSVFormat. Thanks to Gary Gregory, Kristof Meixner, Emmanuel Bourg.

CHANGES
============

o CSV-167:  Comment line hides next record; update Javadoc to make behavior clear. Thanks to Rene.
o CSV-153:  CSVPrinter doesn't skip creation of header record if skipHeaderRecord is set to true. Thanks to Wren.


Have fun!
-Apache Commons CSV team

------------------------------------------------------------------------------

                        Apache Commons CSV
                        Version 1.2
                        Release Notes


INTRODUCTION:

This document contains the release notes for the 1.2 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.

CSV requires at least Java 6.

The Apache Commons CSV library provides a simple interface for reading and writing
CSV files of various types.

Feature and bug fix release

Changes in this version include:

NEW FEATURES
==============

o CSV-157:  Add enum CSVFormat.Predefined that contains the default CSVFormat values.

FIXED BUGS
============

o CSV-145:  CSVFormat.with* methods clear the header comments. Thanks to Frank Ulbricht.
o CSV-156:  Incorrect Javadoc on QuoteMode.NONE. Thanks to Jason Steenstra-Pickens.


Historical list of changes: http://commons.apache.org/proper/commons-csv/changes-report.html

For complete information on Apache Commons CSV, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons CSV website:

http://commons.apache.org/proper/commons-csv/

Have fun!
-Apache Commons CSV team

------------------------------------------------------------------------------

                        Apache Commons CSV
                        Version 1.1
                        Release Notes


INTRODUCTION:

This document contains the release notes for the 1.1 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.

CSV requires at least Java 6.

The Apache Commons CSV library provides a simple interface for reading and writing
CSV files of various types.

This is our second release.

Changes in this version include:

New features:
o [CSV-129] Add CSVFormat#with 0-arg methods matching boolean arg methods. 
o [CSV-131] Save positions of records to enable random access. Thanks to Holger Stratmann. 
o [CSV-139] CSVPrinter.printRecord(ResultSet) with metadata. 

Fixed Bugs:
o [CSV-140] QuoteMode.NON_NUMERIC doesn't work with CSVPrinter.printRecords(ResultSet). Thanks to Damjan Jovanovic. 
o [CSV-130] CSVFormat#withHeader doesn't work well with #printComment, add withHeaderComments(String...). Thanks to Sergei Lebedev. 
o [CSV-128] CSVFormat.EXCEL should ignore empty header names. 
o [CSV-132] Incorrect Javadoc referencing org.apache.commons.csv.CSVFormat withQuote(). Thanks to Sascha Szott. 

Changes:
o [CSV-124] Improve toString() implementation of CSVRecord. Thanks to Kalyan. 
o [CSV-134] Unified parameter validation. Thanks to wu wen. 

Historical list of changes: http://commons.apache.org/proper/commons-csv/changes-report.html

For complete information on Apache Commons CSV, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons CSV website:

http://commons.apache.org/proper/commons-csv/

Have fun!
-Apache Commons CSV team

-------------------------------------------------------------------------------

                        Apache Commons CSV
                        Version 1.0
                        Release Notes


INTRODUCTION:

This document contains the release notes for the 1.0 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.

CSV requires at least Java 6.0.

The Apache Commons CSV library provides a simple interface for reading and writing
CSV files of various types.

First release

Changes in this version include:

NEW FEATURES
============

o CSV-121:  IllegalArgumentException thrown when the header contains duplicate names when the column names are empty.
            Thanks to Sebastian Hardt.
o CSV-120:  CSVFormat#withHeader doesn't work with CSVPrinter Thanks to Sergei Lebedev.
o CSV-119:  CSVFormat is missing a print(...) method Thanks to Sergei Lebedev.
o CSV-105:  Add Map conversion API to CSVRecord
o CSV-52:   Keep track of record number
o CSV-92:   Need a way to extract parsed headers, e.g. for use in formatting
            output
o CSV-65:   Header support
o CSV-48:   Predefined format for MYSQL

FIXED BUGS
==========

o CSV-125:  No longer works with Java 6
o CSV-122:  NullPointerException when empty header string and and null string of "".
            Thanks to Mike Lewis.
o CSV-118:  CSVRecord.toMap() throws NPE on formats with no
            headers. Thanks to Enrique Lara.
o CSV-113:  Check whether ISE/IAE are being used appropriately
o CSV-114:  CSVFormat constructor should reject a header array with duplicate
            entries
o CSV-112:  HeaderMap is inconsistent when it is parsed from an input with
            duplicate columns names
o CSV-111:  CSVRecord.toMap() fails if row length shorter than header length
o CSV-106:  CSVFormat.format allways append null
o CSV-100:  CSVParser: getHeaderMap throws NPE
o CSV-53:   CSVRecord does not verify that the length of the header mapping
            matches the number of values
o CSV-54:   Confusing semantic of the ignore leading/trailing spaces parameters
o CSV-34:   CSVFormat describes itself as immutable, but it is not - in
            particular it is not thread-safe
o CSV-36:   Endless loops in CSV parser
o CSV-13:   NullPointerException in CSVPrinter.print()/println()
o CSV-23:   Excel strategy uses wrong separator

CHANGES
=======

o CSV-117:  Validate format parameters in constructor
o CSV-42:   Lots of possible changes Thanks to Bob Smith.
o CSV-78:   Use Character instead of char for char fields except delimiter
o CSV-99:   Revert Builder implementation in CSVFormat
o CSV-93:   Allow the handling of NULL values
o CSV-68:   Use the Builder pattern for CSVFormat
o CSV-84:   Clarify comment handling
o CSV-25:   CSVParser.nextValue() seems pointless
o CSV-97:   Allow the String value for null to be customized for the CSV
            printer
o CSV-88:   Not possible to create a CSVFormat from scratch
o CSV-94:   Lexer should only use char fields
o CSV-71:   Add convenience methods to CSVLexer
o CSV-59:   Is CharBuffer really needed, now that StringBuilder is available?
o CSV-55:   Replace while(true)-loop in CSVParser.getRecord with do-while-loop
o CSV-45:   CSVPrinter overhaul
o CSV-49:   CSVStrategy has modifiable public static variables Thanks to Bob Smith.
o CSV-46:   Reduce visibility of methods in internal classes
o CSV-26:   ExtendedBufferedReader does too much
o CSV-27:   Decide whether to keep the csv.writer subpackage


Historical list of changes: http://commons.apache.org/proper/commons-csv/changes-report.html

For complete information on Apache Commons CSV, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons CSV website:

http://commons.apache.org/proper/commons-csv/

Have fun!
-Apache Commons CSV team

