Skip to content

Latest commit

 

History

History
1516 lines (947 loc) · 41.7 KB

CHANGELOG.md

File metadata and controls

1516 lines (947 loc) · 41.7 KB

Changelog

All Notable changes to Csv will be documented in this file

9.16.0 - 2024-05-24

Added

  • Bom enum
  • Stream::ftell
  • Statement::orderByAsc
  • Statement::orderByDesc
  • Statement::andWhere
  • Statement::whereNot
  • Statement::orWhere
  • Statement::xorWhere
  • Statement::andWhereColumn
  • Statement::whereNotColumn
  • Statement::orWhereColumn
  • Statement::xorWhereColumn
  • Statement::andWhereOffset
  • Statement::whereNotOffset
  • Statement::orWhereOffset
  • Statement::xorWhereOffset
  • Query feature to allow easier filtering, ordering and querying tabular data

Deprecated

  • ByteSequence Interface use the Bom enum instead
  • Info::fetchBOMSequence use Bom::tryFromSequence instead
  • League\Csv\Doctrine use the new League\Csv\Constraint feature instead
  • League\Csv\Statement::create arguments; The method should be used without any argument at all. All arguments will be removed in the next major version.

Fixed

  • Reader and ResultSet docblocks
  • internal code uses Bom enum instead of Info::fetchBOMSequence
  • the AbstractCsv BOM related properties are moved to being Bom instances instead of nullable string.
  • setOutpuBOM will only accept valid BOM sequences all other values except the empty string will throw a ValueError exception;
  • The package no longer requires the ext-mbstring extension to work. But you should have it install in your system in order to use the mbstring related stream filters.
  • Issue #524 fix issue with ResultSet::chunkBy not working as documented.

Removed

  • None

9.15.0 - 2023-02-20

Added

  • Statement::select
  • TabularDataReader::getRecordsAsObject
  • TabularDataReader::chunkBy
  • TabularDataReader::mapHeader

Deprecated

  • TabularDataReader::getObjects use TabularDataReader::getRecordsAsObject instead

Fixed

  • Reader::select and ResultSet::select now internally use Statement::select
  • Statement should not throw when LimitIterator is used in combinaison with ArrayIterator.
  • Statement internal codebase improvement.
  • Using the $header argument on Statement::process is no longer deprecated. E_USER_DEPRECATED is no longer triggered.
  • BOM stripping no longer depends on the mbstring extension
  • TabularDataReader::fetchColumn is no longer deprecated

Removed

  • None

9.14.0 - 2023-12-29

Added

  • League\Csv\TabularDataReader::nthAsObject equivalent to nth but returns an object or null
  • League\Csv\TabularDataReader::firstAsObject equivalent to first but returns an object or null
  • League\Csv\Serializer\Denormalizer::types list all the registered types

Deprecated

  • None

Fixed

  • None

Removed

  • None

9.13.0 - 2023-12-16

Added

  • League\Csv\SwapDelimiter stream filter to allow working with multibyte CSV delimiter
  • League\Csv\Serializer\AfterMapping to work around the limitation of not using the class constructor during denormalization.
  • League\Csv\Serializer\Denormalizer to allow registering type alias to improve callback usage.
  • League\Csv\Serializer\MapCell has a new property ignore to allow ignoring a property or a method during denormalization.

Deprecated

  • None

Fixed

  • None

Removed

  • None

9.12.0 - 2023-12-02

Added

  • TabulatDataReader::value
  • TabulatDataReader::select
  • TabulatDataReader::getObjects
  • TabulatDataReader::matching
  • TabulatDataReader::matchingFirst
  • TabulatDataReader::matchingFirstOrFail
  • ResultSet::fromRecords
  • Stream::setMaxLineLen
  • Stream::getMaxLineLen
  • League\Csv\Serializer\Denormalizer to allow denormalizing records into objects #508
  • League\Csv\FragmentFinder to implement RFC7111

Deprecated

  • Using the $header argument on Statement::process is deprecated and will be removed in the next version. Use TabularDataReader::getRecords on the returned value instead. It's usage will trigger a E_USER_DEPRECATED call.

Fixed

  • The optional $header argument for TabularDataReader::getRecords becomes a full mapper between the records column offset and the column names #498
  • ResultSet constructor now allows the records to be an array.
  • The internal Stream object will throw a RuntimeException if the rewind action fails
  • if calls to fseek fails (returns -1 ) a RuntimeException will be thrown.
  • Stream can iterate and return the full line respecting SplFielObject flags. Previously it only returned the CSV records.
  • MapIterator::fromIterable to instantiate a MapIterator object from any iterable structure.

Removed

  • None

9.11.0 - 2023-09-23

Added

  • EscapeFormula::unescapeRecord does the opposite of EscapeFormula::escapeRecord
  • TabularReader::each (implemented on the Reader and the ResultSet object)
  • TabularReader::exists (implemented on the Reader and the ResultSet object)
  • TabularReader::reduce (implemented on the Reader and the ResultSet object)
  • TabularReader::filter (implemented on the Reader and the ResultSet object)
  • TabularReader::slice (implemented on the Reader and the ResultSet object)
  • TabularReader::sorted (implemented on the Reader and the ResultSet object)
  • Reader::addFormatter (implemented on the Reader and the ResultSet object)

Deprecated

  • EscapeFormula::__invoke use EscapeFormula::escapeRecord instead

Fixed

  • None

Removed

  • None

9.10.0 - 2023-08-04

Added

  • Writer::forceEnclosure and Writer::relaxEnclosure to control the presence of enclosure in the generated CSV
  • Writer::getEndOfLine and Writer::setEndOfLine

Deprecated

  • EncloseField stream filter in favor of the new Writer::forceEnclosure method.
  • Writer::getNewline and Writer::setNewline in favor of Writer::getEndOfLine and Writer::setEndOfLine

Fixed

  • Stream::fwrite to allow writing to a file in a normalized way. Internal use.
  • Documentation Fixed removing unreleased documented feature by @nclavaud

Removed

  • None

9.9.0 - 2023-03-11

Added

  • TabularDataWriter interface to represent how to write to a tabular data document.
  • TabularDataReader::first to replace TabularDataReader::fetchOne
  • TabularDataReader::nth to replace TabularDataReader::fetchOne
  • CharsetConverter::addBOMSkippingTo to improve BOM skipping see bug #483

Deprecated

  • TabularDataReader::fetchOne

Fixed

  • Stream::createFromResource

  • Stream::__construct is made private. The class is already marked as internal so BC break does not apply on it.

  • Using PHP8 feature to rewrite internal codebase

  • Replaced simple comparisons with strict comparison operator where types are obvious in internal codebase by @astepin

  • Marked class constants explicitly as public by @astepin

  • Minimal support version PHP8.1.2

  • Fix Docblock and method signature using PHP8 feature (Union Type)

  • Fix Internal codebase around seek usage and `#75917 requires PHP8.1.2

  • Remove internal usage of deprecated methods

Removed

  • Stream::fwrite The class is already marked as internal so BC break does not apply on it.
  • Stream::fgets The class is already marked as internal so BC break does not apply on it.
  • Drop support for PHP7 and PHP8.0
  • Polyfill to enable using fputcsv $eol argument

9.8.0 - 2022-01-04

Added

  • Added PHP7.4 typed properties where applicable
  • TabularDataReader::fetchColumnByName to replace TabularDataReader::fetchColumn
  • TabularDataReader::fetchColumnByOffset to replace TabularDataReader::fetchColumn

Deprecated

  • TabularDataReader::fetchColumn use TabularDataReader::fetchColumnByOffset or TabularDataReader::fetchColumnByName instead

Fixed

  • AbstractCsv constructor is marked final via docblock.
    The method should never be extended or changed in child classes to avoid unexpected behaviour

Removed

  • PHP7.3 support
  • Remove internal EmptyEscapeParser Polyfill used in Reader class
  • Remove PHP7.4 polyfill features in Writer class

9.7.4 - 2021-11-30

Added

  • None

Deprecated

  • None

Fixed

Removed

  • None

9.7.3 - 2021-11-21

Added

  • None

Deprecated

  • None

Fixed

  • Update PHPStan requirement for development
  • Improve Documentation generation thanks to pdelre
  • PHP8.1 compliance: using ReturnTypeWillChange to avoid emitting a unnecessary deprecation notice. thanks to cedric-anne

Removed

  • None

9.7.2 - 2021-10-05

Added

  • None

Deprecated

  • None

Fixed

  • Update dependencies requirement for development
  • PHP8.1 compliance: replace FILTER_SANITIZE_STRING by FILTER_UNSAFE_RAW
  • PHP8.1 compliance: remove duplicated public properties declaration
  • PHP8.1 compliance: add support for fputcsv $eol argument

Removed

  • None

9.7.1 - 2021-04-17

Added

  • None

Deprecated

  • None

Fixed

Removed

  • None

9.7.0 - 2021-03-26

Added

  • League\Csv\SyntaxError::duplicateColumnNames to expose column name duplicates during header usage
  • League\Csv\UnableToProcessCsv as the new Exception Marker Interface
  • League\Csv\UnavailableStream as the new Exception
  • League\Csv\Info::getDelimiterStats to replace the namespace function delimiter_detect
  • League\Csv\Info::fetchBOMSequence to replace the namespace function bom_match
  • League\Csv\AbstractCsv::toString to replace League\Csv\AbstractCsv::getContent and League\Csv\AbstractCsv::__toString
  • League\Csv\XMLConverter::create to replace League\Csv\XMLConverter::__construct
  • League\Csv\HTMLConverter::create to replace League\Csv\HTMLConverter::__construct
  • League\Csv\AbstractCsv::supportsStreamFilterOnRead and League\Csv\AbstractCsv::supportsStreamFilterOnWrite to replace League\Csv\AbstractCsv::supportsStreamFilter and League\Csv\AbstractCsv::getStreamFilterMode

Deprecated

  • League\Csv\delimiter_detect use League\Csv\Info::getDelimiterStats
  • League\Csv\bom_match use League\Csv\Info::fetchBOMSequence
  • League\Csv\AbstractCsv::getContent use League\Csv\AbstractCsv::toString
  • League\Csv\AbstractCsv::getStreamFilterMode use League\Csv\AbstractCsv::supportsStreamFilterOnRead or League\Csv\AbstractCsv::supportsStreamFilterOnWrite
  • League\Csv\AbstractCsv::supportsStreamFilter use League\Csv\AbstractCsv::supportsStreamFilterOnRead or League\Csv\AbstractCsv::supportsStreamFilterOnWrite
  • Calling exceptions constructor, use named constructors instead.
  • League\Csv\XMLConverter::__construct use League\Csv\XMLConverter::create
  • League\Csv\HTMLConverter::__construct use League\Csv\HTMLConverter::create

Fixed

  • Move tests into the src directory
  • Fixed encoder method resolver implementation
  • all classes marked as @internal are now final
  • League\Csv\AbstractCsv::STREAM_FILTER_MODE constant replaces League\Csv\AbstractCsv::$stream_filter_mode

Removed

  • PHP7.2 support
  • League\Csv\AbstractCsv::$stream_filter_mode

9.6.2 - 2020-12-10

Added

  • Using Github actions as development tools.

Deprecated

  • None

Fixed

Removed

  • Removing Travis and Scrutinizr as development tools

9.6.1 - 2020-09-05

Added

  • None

Deprecated

  • None

Fixed

  • BOM sequence processing fix #394

Removed

  • None

9.6.0 - 2020-03-17

Added

  • More return types and type parameters as supported in PHP7.2+
  • League\Csv\Statement::create named constructor to ease constraint builder instantiation
  • League\Csv\Statement can now also process League\Csv\ResultSet instances.
  • League\Csv\TabularDataReader interface to represent how to read tabular data
  • League\Csv\ResultSet::getRecords has an optional $header second argument to make the method works like League\Csv\Reader::getRecords
  • League\Csv\ResultSet::createFromTabularDataReader create a new instance from League\Csv\TabularDataReader implementing class.

Deprecated

  • Nothing

Fixed

  • League\Csv\Reader no longer uses __call to implement fetchOne, fetchPairs and fetchColumn methods.

Removed

  • Internal polyfill for is_iterable
  • Internal polyfill for is_nullable_int
  • Support for PHP7.0 and PHP7.1

9.5.0 - 2019-12-15

Added

  • Improve package exception throwing by adding new exceptions classes that extends the League\Csv\Exception exception marker class #360, #361 feature proposed and developed by Darren Miller
    • League\Csv\UnavailableFeature
    • League\Csv\InvalidArgument
    • League\Csv\SyntaxError

Deprecated

  • Nothing

Fixed

  • bug fix bom_match function see issue #363 resolved based on PR from Jerry Martinez
  • bug fix delemiter_detect function see issue #366

Removed

  • Nothing

9.4.1 - 2019-10-17

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • bug fix the escape mechanism polyfill #358 fix provided by on2

Removed

  • Nothing

9.4.0 - 2019-10-02

Added

  • Adding support for controlling empty record presence in Reader::getRecords return value.

    • Reader::includeEmptyRecords
    • Reader::skipEmptyRecords
    • Reader::isEmptyRecordsIncluded
  • Adding support for controlling Input BOM usage in the library:

    • AbstractCsv::skipInputBOM
    • AbstractCsv::includeInputBOM
    • AbstractCsv::isInputBOMIncluded

Deprecated

  • Nothing

Fixed

  • EmptyEscapeParser::parse no longer auto skip empty records

Removed

  • Nothing

9.3.0 - 2019-07-30

Added

  • XMLConverter::import see #348 thanks @kusabi
  • Support for thead, tfoot and tbody in HTMLConverter::convert via the addition of protected methods HTMLConverter::addHTMLAttributes and HTMLConverter::appendHeaderSection #348 thanks @kusabi

Deprecated

  • Nothing

Fixed

  • Internal improvement in Reader dockblock thanks @ghobaty.
  • Improve strict comparison when using preg_match.
  • Improve CSV control in Stream.

Removed

  • Nothing

9.2.1 - 2019-06-08

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • AbstractCSV::chunk see #325 remove CSV flags from the Stream class to avoid infinite loop.
  • Internal improve HTMLConverter.

Removed

  • Nothing

9.2.0 - 2019-03-08

Added

  • Supports for PHP7.4 empty string for the escape character
  • Supports for empty string for the escape character with a polyfill for PHP7.4- versions.
  • AbstractCSV::getPathname see #321 thanks @tomkyle

Deprecated

  • League\Csv\RFC4180Field use AbstractCSV::setEscape method with an empty string instead.

Fixed

  • AbstractCSV::__construct correctly initializes properties

  • AbstractCSV::createFromString named constructor default argument is now an empty string

  • AbstractCSV::setEscape now accepts an empty string like fputcsv and fgetcsv

  • Writer::insertOne fixes throwing exception when record can not be inserted

  • XMLConverter convert to string the record value to avoid PHP warning on null value

  • Internal Stream::createFromString named constructor default argument is now an empty string

  • Internal Stream::fwrite improved

  • Internal Stream::__destruct no longer emit warning on invalid stream filter removal.

  • Internal Stream::seek returns 0 if the seeked position 0 is valid see #321 thanks @HaozhouChen

  • Reader:getHeader when the record is an empty line.

Removed

  • Nothing

9.1.4 - 2018-05-01

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • Writer::setFlushThreshold should accept 1 as an argument #289
  • CharsetConverter::convert should not try to convert numeric value #287

Removed

  • Nothing

9.1.3 - 2018-03-12

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • Writer::insertOne allow empty array to be added to the CSV (allow inserting empty row)
  • Removed all return type from named constructor see #285
  • Added PHPStan for static code analysis

Removed

  • Nothing

8.2.3 - 2018-02-06

Added

  • None

Deprecated

  • None

Fixed

  • Reader::fetchAssoc no longer throws exception because of a bug in PHP7.2+ issue #279

Removed

  • None

9.1.2 - 2018-02-05

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • is_iterable polyfill for PHP7.0
  • Reader::getHeader no longer throws exception because of a bug in PHP7.2+ issue #279

Removed

  • Nothing

9.1.1 - 2017-11-28

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • issue with error_get_last usage when using a modified PHP error handler see #254 - fixed by @csiszarattila

  • Removed seekable word from Stream exception messages.

Removed

  • Nothing

9.1.0 - 2017-10-20

Added

  • Support for non-seekable stream. When seekable feature are required an exceptions will be thrown.
  • League\Csv\EncloseField to force enclosure insertion on every field. #269
  • League\Csv\EscapeFormula a League CSV formatter to prevent CSV Formula Injection in Spreadsheet programs.
  • League\Csv\RFC4180Field::addTo accept an option $replace_whitespace argument to improve RFC4180 compliance.
  • League\Csv\Abstract::getContent to replace League\Csv\Abstract::__toString. The __toString method may trigger a Fatal Error with non-seekable stream, instead you are recommended to used the new getContent method which will trigger an exception instead.

Deprecated

  • League\Csv\Abstract::__toString use League\Csv\Abstract::getContent instead. the __toString triggers a Fatal Error when used on a non-seekable CSV document. use the getContent method instead which will trigger an exception instead.

Fixed

  • Bug fixes headers from AbstractCsv::output according to RFC6266 #250
  • Make sure the internal source still exists before closing it #251
  • Make sure the Reader::createFromPath default open mode is r see #258 and #266

Removed

  • Nothing

9.0.1 - 2017-08-21

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • CSV controls not applied when calling Writer::insertOne

Removed

  • Nothing

9.0.0 - 2017-08-18

Added

  • Improved CSV Records selection
    • League\Csv\Reader::getRecords to access all CSV records
    • League\Csv\Statement provides a constraint builder to select CSV records.
    • League\Csv\ResultSet represents the result set of the selected CSV records.
    • League\Csv\delimiter_detect function to detect CSV delimiter character
  • Improved CSV document header selection.
    • League\Csv\Reader::getHeader
    • League\Csv\Reader::getHeaderOffset
    • League\Csv\Reader::setHeaderOffset
  • Improved CSV Records conversion
    • League\Csv\CharsetConverter converts CSV records charset.
    • League\Csv\XMLConverter converts CSV records into DOMDocument
    • League\Csv\HTMLConverter converts CSV records into HTML table.
  • Improved Exception handling
    • League\Csv\Exception the default exception
    • League\Csv\CannotInsertRecord
  • Improved CSV document output
    • League\Csv\AbstractCsv::chunk method to output the CSV document in chunk
    • League\Csv\bom_match function to detect BOM sequence in a given string
    • League\Csv\ByteSequence interface to decoupled BOM sequence from CSV documents
  • Improved CSV records column count consistency on insertion
    • League\Csv\ColumnConsistency
  • Improved CSV document flush mechanism on insertion
    • League\Csv\Writer::setFlushThreshold
    • League\Csv\Writer::getFlushThreshold
  • Improve RFC4180 compliance
    • League\Csv\RFC4180Field to format field according to RFC4180 rules

Deprecated

  • Nothing

Fixed

  • Improved CSV record insertion

    • League\Csv\Writer::insertOne only accepts an array and returns a integer
    • League\Csv\Writer::insertAll only accepts an iterable of array and returns an integer
  • Normalized CSV offset returned value

    • League\Csv\Reader::fetchColumn always returns the CSV document original offset.

Removed

  • examples directory
  • PHP5 support
  • The following method is removed because The BOM API is simplified:
    • League\Csv\AbstractCsv::stripBOM
  • All conversion methods are removed in favor of the conversion classes:
    • League\Csv\Writer::jsonSerialize
    • League\Csv\AbstractCsv::toHTML
    • League\Csv\AbstractCsv::toXML
    • League\Csv\AbstractCsv::setInputEncoding
    • League\Csv\AbstractCsv::getInputEncoding
  • The following methods are removed because the PHP stream filter API is simplified:
    • League\Csv\AbstractCsv::isActiveStreamFilter
    • League\Csv\AbstractCsv::setStreamFilterMode
    • League\Csv\AbstractCsv::appendStreamFilter
    • League\Csv\AbstractCsv::prependStreamFilter
    • League\Csv\AbstractCsv::removeStreamFilter
    • League\Csv\AbstractCsv::clearStreamFilters
  • The following methods are removed because switching between connections is no longer possible:
    • League\Csv\AbstractCsv::newReader
    • League\Csv\AbstractCsv::newWriter
    • League\Csv\Reader::getNewline
    • League\Csv\Reader::setNewline
  • The Exception mechanism is improved thus the following class is removed:
    • League\Csv\Exception\InvalidRowException;
  • The CSV records filtering methods are removed in favor of the League\Csv\Statement class:
    • League\Csv\AbstractCsv::addFilter,
    • League\Csv\AbstractCsv::addSortBy,
    • League\Csv\AbstractCsv::setOffset,
    • League\Csv\AbstractCsv::setLimit;
  • CSV records selecting API methods is simplified:
    • League\Csv\Reader::each
    • League\Csv\Reader::fetch
    • League\Csv\Reader::fetchAll
    • League\Csv\Reader::fetchAssoc
    • League\Csv\Reader::fetchPairsWithoutDuplicates
  • Formatting and validating CSV records on insertion is simplified, the following methods are removed:
    • League\Csv\Writer::hasFormatter
    • League\Csv\Writer::removeFormatter
    • League\Csv\Writer::clearFormatters
    • League\Csv\Writer::hasValidator
    • League\Csv\Writer::removeValidator
    • League\Csv\Writer::clearValidators
    • League\Csv\Writer::getIterator
  • The following Formatters and Validators classes are removed from the package:
    • League\Csv\Plugin\SkipNullValuesFormatter
    • League\Csv\Plugin\ForbiddenNullValuesValidator
    • League\Csv\Plugin\ColumnConsistencyValidator replace by League\Csv\ColumnConsistency
  • League\Csv\Writer no longers implements the IteratorAggregate interface
  • League\Csv\AbstractCsv::fetchDelimitersOccurrence is removed replace by League\Csv\delimiter_detect function

8.2.2 - 2017-07-12

Added

  • None

Deprecated

  • None

Fixed

  • Writer::insertOne was silently failing when inserting record in a CSV document in non-writing mode.
  • bug fix docblock

Removed

  • None

8.2.1 - 2017-02-22

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • internal Reader::getRow when using a StreamIterator issue #213
  • Removed @deprecated from selected methods issue #208

Removed

  • Nothing

8.2.0 - 2017-01-25

Added

  • AbstractCsv::createFromStream to enable working with resource stream issue #202

Deprecated

  • League\Csv\AbstractCsv::stripBom
  • League\Csv\Reader::getOffset
  • League\Csv\Reader::getLimit
  • League\Csv\Reader::getSortBy
  • League\Csv\Reader::getFilter
  • League\Csv\Reader::setOffset
  • League\Csv\Reader::setLimit
  • League\Csv\Reader::addSortBy
  • League\Csv\Reader::addFilter
  • League\Csv\Reader::fetch
  • League\Csv\Reader::each
  • League\Csv\Reader::fetchPairsWithoutDuplicates
  • League\Csv\Reader::fetchAssoc
  • League\Csv\Writer::removeFormatter
  • League\Csv\Writer::hasFormatter
  • League\Csv\Writer::clearFormatters
  • League\Csv\Writer::removeValidator
  • League\Csv\Writer::hasValidator
  • League\Csv\Writer::clearValidators
  • League\Csv\Writer::jsonSerialize
  • League\Csv\Writer::toHTML
  • League\Csv\Writer::toXML

Fixed

  • Nothing

Removed

  • Nothing

8.1.2 - 2016-10-27

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • BOM filtering fix issue #184
  • AbstractCsv::BOM_UTF32_LE value fixed

Removed

  • Nothing

8.1.1 - 2016-09-05

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • getInputBOM method name is now consistent everywhere in the API PR #171
  • preserve fileObject CSV controls commit #8a20c56
  • Change output method header content-type value to text/csv PR #175

Removed

  • Nothing

8.1.0 - 2016-05-31

Added

  • The package now includes its own autoloader.
  • Ouput::getInputEncoding
  • Ouput::setInputEncoding

Deprecated

  • Ouput::getEncodingFrom replaced by Ouput::getInputEncoding
  • Ouput::setEncodingFrom replaced by Ouput::setInputEncoding

Fixed

  • Stream Filters are now url encoded before usage issue #72
  • All internal parameters are now using the snake case format

Removed

  • Nothing

8.0.0 - 2015-12-11

Added

  • Reader::fetchPairs
  • Reader::fetchPairsWithoutDuplicates

Deprecated

  • Nothing

Fixed

  • Reader::fetchColumn and Reader::fetchAssoc now return Iterator
  • Reader::fetchAssoc callable argument expects an indexed row using the submitted keys as its first argument
  • Reader::fetchColumn callable argument expects the selected column value as its first argument
  • Default value on setOutputBOM is removed
  • AbstractCsv::getOutputBOM always return a string
  • AbstractCsv::getInputBOM always return a string

Removed

  • Controls::setFlags
  • Controls::getFlags
  • Controls::detectDelimiterList
  • QueryFilter::removeFilter
  • QueryFilter::removeSortBy
  • QueryFilter::hasFilter
  • QueryFilter::hasSortBy
  • QueryFilter::clearFilter
  • QueryFilter::clearSortBy
  • Reader::query
  • The $newline argument from AbstractCsv::createFromString

7.2.0 - 2015-11-02

Added

  • Reader::fetch replaces League\Csv\Reader::query for naming consistency
  • Controls::fetchDelimitersOccurrence to replace Controls::detectDelimiterList the latter gives erronous results

Deprecated

  • Controls::detectDelimiterList
  • Reader::query
  • The $newline argument from AbstractCsv::createFromString

Fixed

  • Streamming feature no longer trim filter name argument issue #122
  • Fix default SplFileObject flags usage PR #130
  • AbstractCsv::createFromString no longer trim the submitted string issue #132

Removed

  • Nothing

7.1.2 - 2015-06-10

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • Enclosures should be removed when a BOM sequence is stripped issue #102

Removed

  • Nothing

7.1.1 - 2015-05-20

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • SplFileObject flags were not always applied using query filter issue #99

Removed

  • Nothing

7.1.0 - 2015-05-06

Added

  • stripBOM query filtering method to ease removing the BOM sequence when querying the CSV document.
  • All query filters are now accessible in the Writer class for conversion methods.

Deprecated

  • Nothing

Fixed

  • Internal code has been updated to take into account issue #68479
  • setFlags on conversion methods SplFileObject default flags are SplFileObject::READ_AHEAD|SplFileObject::SKIP_EMPTY
  • insertOne now takes into account the escape character when modified after the first insert.

Removed

  • Nothing

7.0.1 - 2015-03-23

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • setFlags: SplFileObject::DROP_NEW_LINE can be remove using setFlags method.

Removed

  • Nothing

7.0.0 - 2015-02-19

Added

  • A new flexible mechanism to format and validate a row before its insertion by adding
    • Writer::addFormatter to add a formatter to the Writer object
    • Writer::removeFormatter to remove an already registered formatter
    • Writer::hasFormatter to detect the presence of a formatter
    • Writer::clearFormatters to clear all registered formatter
    • Writer::addValidator to add a validator to the Writer object
    • Writer::removeValidator to remove an already registered validator
    • Writer::hasValidator to detect the presence of a validator
    • Writer::clearValidators to clear all registered validator
    • League\Csv\Exception\InvalidRowException exception thrown when row validation failed
  • Classes to maintain removed features from the Writer class
    • League\Csv\Plugin\ColumnConsistencyValidator to validate column consistency on insertion
    • League\Csv\Plugin\ForbiddenNullValuesValidator to validate null value on insertion
    • League\Csv\Plugin\SkipNullValuesFormatter to format null value on insertion

Deprecated

  • Nothing

Fixed

  • jsonSerialize, toXML and toHTML output can be modified using Reader query options methods.
  • AbstractCSV::detectDelimiterList index keys now represents the occurrence of the found delimiter.
  • getNewline and setNewline are accessible on the Reader class too.
  • the named constructor createFromString now accepts the $newline sequence as a second argument to specify the last added new line character to better work with interoperability.
  • Default value on CSV controls setter methods setDelimiter, setEnclosure and setEscape are removed
  • Default SplFileObject flags value is now SplFileObject::READ_CSV|SplFileObject::DROP_NEW_LINE
  • All CSV properties are now copied when using newReader and newWriter methods
  • BOM addition on output improved by removing if found the existing BOM character
  • the AbstractCSV::output method now returns the number of bytes send to the output buffer
  • Reader::fetchColumn will automatically filter out non existing values from the return array

Removed

  • Setting ini_set("auto_detect_line_endings", true); is no longer set in the class constructor. Mac OS X users must explicitly set this ini options in their script.
  • Writer and Reader default constructor are removed from public API in favor of the named constructors.
  • All Writer methods and constant related to CSV data validation and formatting before insertion
    • Writer::getNullHandlingMode
    • Writer::setNullHandlingMode
    • Writer::setColumnsCount
    • Writer::getColumnsCount
    • Writer::autodetectColumnsCount
    • Writer::NULL_AS_EXCEPTION
    • Writer::NULL_AS_EMPTY
    • Writer::NULL_AS_SKIP_CELL

6.3.0 - 2015-01-21

Added

  • AbstractCSV::setOutputBOM
  • AbstractCSV::getOutputBOM
  • AbstractCSV::getInputBOM

to manage BOM character with CSV.

Deprecated

  • Nothing

Fixed

  • Nothing

Removed

  • Nothing

6.2.0 - 2014-12-12

Added

  • Writer::setNewline , Writer::getNewline to control the newline sequence character added at the end of each CSV row.

Deprecated

  • Nothing

Fixed

  • Nothing

Removed

  • Nothing

6.1.0 - 2014-12-08

Added

  • Reader::fetchAssoc now also accepts an integer as first argument representing a row index.

Deprecated

  • Nothing

Fixed

  • Nothing

Removed

  • Nothing

6.0.1 - 2014-11-12

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • Bug Fixed detectDelimiterList

Removed

  • Nothing

6.0.0 - 2014-08-28

Added

  • Stream Filter API in League\Csv\AbstractCsv
  • named constructors createFromPath and createFromFileObject in League\Csv\AbstractCsv to ease CSV object instantiation
  • detectDelimiterList in League\Csv\AbstractCsv to replace and remove the use of RuntimeException in detectDelimiter
  • setEncodingFrom and setDecodingFrom in League\Csv\AbstractCsv to replace setEncoding and getEncoding for naming consistency
  • newWriter and newReader methods in League\Csv\AbstractCsv to replace Writer::getReader and Reader::getWriter

Deprecated

  • Nothing

Fixed

  • League\Csv\Reader::each more strict $callable MUST returns true

Remove

  • League\Csv\AbstractCsv::detectDelimiter
  • League\Csv\AbstractCsv::setEncoding and League\Csv\AbstractCsv::getEncoding
  • League\Csv\Reader::setSortBy
  • League\Csv\Reader::setFilter
  • League\Csv\Reader::getWriter
  • League\Csv\Writer::getReader
  • League\Csv\Reader::fetchCol

5.4.0 - 2014-04-17

Added

  • League\Csv\Writer::setColumnsCount, League\Csv\Writer::getColumnsCount, League\Csv\Writer::autodetectColumnsCount to enable column consistency in writer mode
  • League\Csv\Reader::fetchColumn replaces League\Csv\Reader::fetchCol for naming consistency

Deprecated

  • League\Csv\Reader::fetchCol

Fixed

  • Nothing

Removed

  • Nothing

5.3.1 - 2014-04-09

Added

  • Nothing

Deprecated

  • Nothing

Fixed

  • $open_mode defaults to r+ in League\Csv\AbstractCsv constructors

Removed

  • Nothing

5.3.0 - 2014-03-24

Added

  • League\Csv\Writer::setNullHandlingMode and League\Csv\Writer::getNullHandlingMode to handle null value

Deprecated

  • Nothing

Fixed

  • setting ini_set("auto_detect_line_endings", true); no longer needed for Mac OS

Removed

  • Nothing

5.2.0 - 2014-03-13

Added

  • League\Csv\Reader::addSortBy, League\Csv\Reader::removeSortBy, League\Csv\Reader::hasSortBy, League\Csv\Reader::clearSortBy to improve sorting
  • League\Csv\Reader::clearFilter to align extract filter capabilities to sorting capabilities

Deprecated

  • League\Csv\Reader::setSortBy replaced by a better implementation

Fixed

  • League\Csv\Reader::setOffset now defaults to 0;
  • League\Csv\Reader::setLimit now defaults to -1;
  • detectDelimiter bug fixes

Removed

  • Nothing

5.1.0 - 2014-03-11

Added

  • League\Csv\Reader::each to ease CSV import data
  • League\Csv\Reader::addFilter, League\Csv\Reader::removeFilter, League\Csv\Reader::hasFilter to improve extract filter capabilities
  • detectDelimiter method to League\Csv\AbstractCsv to sniff CSV delimiter character.

Deprecated

  • League\Csv\Reader::setFilter replaced by a better implementation

Fixed

  • Nothing

Removed

  • Nothing

5.0.0 - 2014-02-28

Added

  • Change namespace from Bakame\Csv to League\Csv

Deprecated

  • Nothing

Fixed

  • Nothing

Removed

  • Nothing

4.2.1 - 2014-02-22

Fixed

  • $open_mode validation is done by PHP internals directly

Removed

  • Nothing

4.2.0 - 2014-02-17

Added

  • toXML method to transcode the CSV into a XML in Bakame\Csv\AbstractCsv

Fixed

  • toHTML method bug in Bakame\Csv\AbstractCsv
  • output method accepts an optional $filename argument
  • Bakame\Csv\Reader::fetchCol defaults to $columnIndex = 0
  • Bakame\Csv\Reader::fetchOne defaults to $offset = 0

4.1.2 - 2014-02-14

Added

  • Move from PSR-0 to PSR-4 to autoload the library

4.1.1 - 2014-02-14

Fixed

  • Bakame\Csv\Reader methods fixed
  • jsonSerialize bug fixed

4.1.0 - 2014-02-07

Added

  • getEncoding and setEncoding methods to Bakame\Csv\AbstractCsv

Fixed

  • Bakame\Csv\Writer::insertOne takes into account CSV controls
  • toHTML method takes into account encoding

4.0.0 - 2014-02-05

Added

  • Bakame\Csv\Writer
  • Bakame\Csv\Writer and Bakame\Csv\Reader extend Bakame\Csv\AbstractCsv

Deprecated

  • Nothing

Fixed

  • Bakame\Csv\Reader::fetchOne is no longer deprecated
  • Bakame\Csv\Reader::fetchCol no longer accepts a third parameter $strict

Removed

  • Bakame\Csv\Codec now the library is composer of 2 main classes
  • Bakame\Csv\Reader::getFile
  • Bakame\Csv\Reader::fetchValue
  • Bakame\Csv\Reader no longer implements the ArrayAccess interface

3.3.0 - 2014-01-28

Added

  • Bakame\Csv\Reader implements IteratorAggregate Interface
  • Bakame\Csv\Reader::createFromString to create a CSV object from a raw string
  • Bakame\Csv\Reader::query accept an optional $callable parameter

Deprecated

  • Bakame\Csv\Reader::getFile in favor of Bakame\Csv\Reader::getIterator

Removed

  • Bakame\Csv\ReaderInterface useless interface

Fixed

  • Bakame\Csv\Reader::fetch* $callable parameter is normalized to accept an array
  • Bakame\Csv\Reader::fetchCol accepts a third parameter $strict

3.2.0 - 2014-01-16

Added

  • Bakame\Csv\Reader implements the following interfaces JsonSerializable and ArrayAccess
  • Bakame\Csv\Reader::toHTML to output the CSV as a HTML table
  • Bakame\Csv\Reader::setFilter, Bakame\Csv\Reader::setSortBy, Bakame\Csv\Reader::setOffset, Bakame\Csv\Reader::setLimit, Bakame\Csv\Reader::query to perform SQL like queries on the CSV content.
  • Bakame\Csv\Codec::setFlags, Bakame\Csv\Codec::getFlags, Bakame\Csv\Codec::__construct : add an optional $flags parameter to enable the use of SplFileObject constants flags

Deprecated

  • Bakame\Csv\Reader::fetchOne replaced by Bakame\Csv\Reader::offsetGet
  • Bakame\Csv\Reader::fetchValue useless method

3.1.0 - 2014-01-13

Added

  • Bakame\Csv\Reader::output output the CSV data directly in the output buffer
  • Bakame\Csv\Reader::__toString can be use to echo the raw CSV

3.0.1 - 2014-01-10

Fixed

  • Bakame\Csv\Reader::fetchAssoc when users keys and CSV row data don't have the same length

3.0.0 - 2014-01-10

Added

  • Bakame\Csv\ReaderInterface
  • Bakame\Csv\Reader class

Fixed

  • Bakame\Csv\Codec::loadStringreturns a Bakame\Csv\Reader object
  • Bakame\Csv\Codec::loadFile returns a Bakame\Csv\Reader object
  • Bakame\Csv\Codec::save returns a Bakame\Csv\Reader object

2.0.0 - 2014-01-09

Added

  • Bakame\Csv\CsvCodec class renamed Bakame\Csv\Codec

Deprecated

  • Nothing

Fixed

  • Nothing

Removed

  • Bakame\Csv\Codec::create from public API

1.0.0 - 2013-12-03

Initial Release of Bakame\Csv