Release 0.1.19 (Mar 07, 2015)
-----------------------------

Bug Fixes
* Fix IndexError when statement contains WITH clauses (issue205).


Release 0.1.18 (Oct 25, 2015)
-----------------------------

Bug Fixes
* Remove universal wheel support, added in 0.1.17 by mistake.


Release 0.1.17 (Oct 24, 2015)
-----------------------------

Enhancements
* Speed up parsing of large SQL statements (pull request: issue201, fixes the
  following issues: issue199, issue135, issue62, issue41, by Ryan Wooden).

Bug Fixes
* Fix another splitter bug regarding DECLARE (issue194).

Misc
* Packages on PyPI are signed from now on.


Release 0.1.16 (Jul 26, 2015)
-----------------------------

Bug Fixes
* Fix a regression in get_alias() introduced in 0.1.15 (issue185).
* Fix a bug in the splitter regarding DECLARE (issue193).
* sqlformat command line tool doesn't duplicat newlines anymore (issue191).
* Don't mix up MySQL comments starting with hash and MSSQL
  temp tables (issue192).
* Statement.get_type() now ignores comments at the beginning of
  a statement (issue186).


Release 0.1.15 (Apr 15, 2015)
-----------------------------

Bug Fixes
* Fix a regression for identifiers with square bracktes
  notation (issue153, by darikg).
* Add missing SQL types (issue154, issue155, issue156, by jukebox).
* Fix parsing of multi-line comments (issue172, by JacekPliszka).
* Fix parsing of escaped backslashes (issue174, by caseyching).
* Fix parsing of identifiers starting with underscore (issue175).
* Fix misinterpretation of IN keyword (issue183).

Enhancements
* Improve formatting of HAVING statements.
* Improve parsing of inline comments (issue163).
* Group comments to parent object (issue128, issue160).
* Add double precision builtin (issue169, by darikg).
* Add support for square bracket array indexing (issue170, issue176,
  issue177 by darikg).
* Improve grouping of aliased elements (issue167, by darikg).
* Support comments starting with '#' character (issue178).


Release 0.1.14 (Nov 30, 2014)
-----------------------------

Bug Fixes
* Floats in UPDATE statements are now handled correctly (issue145).
* Properly handle string literals in comparisons (issue148, change proposed
  by aadis).
* Fix indentation when using tabs (issue146).

Enhancements
* Improved formatting in list when newlines precede commas (issue140).


Release 0.1.13 (Oct 09, 2014)
-----------------------------

Bug Fixes
* Fix a regression in handling of NULL keywords introduced in 0.1.12.


Release 0.1.12 (Sep 20, 2014)
-----------------------------

Bug Fixes
* Fix handling of NULL keywords in aliased identifiers.
* Fix SerializerUnicode to split unquoted newlines (issue131, by Michael Schuller).
* Fix handling of modulo operators without spaces (by gavinwahl).

Enhancements
* Improve parsing of identifier lists containing placeholders.
* Speed up query parsing of unquoted lines (by Michael Schuller).


Release 0.1.11 (Feb 07, 2014)
-----------------------------

Bug Fixes
* Fix incorrect parsing of string literals containing line breaks (issue118).
* Fix typo in keywords, add MERGE, COLLECT keywords (issue122/124,
  by Cristian Orellana).
* Improve parsing of string literals in columns.
* Fix parsing and formatting of statements containing EXCEPT keyword.
* Fix Function.get_parameters() (issue126/127, by spigwitmer).

Enhancements
* Classify DML keywords (issue116, by Victor Hahn).
* Add missing FOREACH keyword.
* Grouping of BEGIN/END blocks.

Other
* Python 2.5 isn't automatically tested anymore, neither Travis nor Tox
  still support it out of the box.


Release 0.1.10 (Nov 02, 2013)
-----------------------------

Bug Fixes
* Removed buffered reading again, it obviously causes wrong parsing in some rare
  cases (issue114).
* Fix regression in setup.py introduced 10 months ago (issue115).

Enhancements
* Improved support for JOINs, by Alexander Beedie.


Release 0.1.9 (Sep 28, 2013)
----------------------------

Bug Fixes
* Fix an regression introduced in 0.1.5 where sqlparse didn't properly
  distinguished between single and double quoted strings when tagging
  identifier (issue111).

Enhancements
* New option to truncate long string literals when formatting.
* Scientific numbers are pares correctly (issue107).
* Support for arithmetic expressions (issue109, issue106; by prudhvi).


Release 0.1.8 (Jun 29, 2013)
----------------------------

Bug Fixes
* Whitespaces within certain keywords are now allowed (issue97, patch proposed
  by xcombelle).

Enhancements
* Improve parsing of assignments in UPDATE statements (issue90).
* Add STRAIGHT_JOIN statement (by Yago Riveiro).
* Function.get_parameters() now returns the parameter if only one parameter is
  given (issue94, by wayne.wuw).
* sqlparse.split() now removes leading and trailing whitespaces from splitted
  statements.
* Add USE as keyword token (by mulos).
* Improve parsing of PEP249-style placeholders (issue103).


Release 0.1.7 (Apr 06, 2013)
----------------------------

Bug Fixes
 * Fix Python 3 compatibility of sqlformat script (by Piet Delport).
 * Fix parsing of SQL statements that contain binary data (by Alexey
   Malyshev).
 * Fix a bug where keywords were identified as aliased identifiers in
   invalid SQL statements.
 * Fix parsing of identifier lists where identifiers are keywords too
   (issue10).

Enhancements
 * Top-level API functions now accept encoding keyword to parse
   statements in certain encodings more reliable (issue20).
 * Improve parsing speed when SQL contains CLOBs or BLOBs (issue86).
 * Improve formatting of ORDER BY clauses (issue89).
 * Formatter now tries to detect runaway indentations caused by
   parsing errors or invalid SQL statements. When re-indenting such
   statements the formatter flips back to column 0 before going crazy.

Other
 * Documentation updates.


Release 0.1.6 (Jan 01, 2013)
----------------------------

sqlparse is now compatible with Python 3 without any patches. The
Python 3 version is generated during install by 2to3. You'll need
distribute to install sqlparse for Python 3.

Bug Fixes
 * Fix parsing error with dollar-quoted procedure bodies (issue83).

Other
 * Documentation updates.
 * Test suite now uses tox and py.test.
 * py3k fixes (by vthriller).
 * py3k fixes in setup.py (by Florian Bauer).
 * setup.py now requires distribute (by Florian Bauer).


Release 0.1.5 (Nov 13, 2012)
----------------------------

Bug Fixes
 * Improve handling of quoted identifiers (issue78).
 * Improve grouping and formatting of identifiers with operators (issue53).
 * Improve grouping and formatting of concatenated strings (issue53).
 * Improve handling of varchar() (by Mike Amy).
 * Clean up handling of various SQL elements.
 * Switch to py.test and clean up tests.
 * Several minor fixes.

Other
 * Deprecate sqlparse.SQLParseError. Please use
   sqlparse.exceptions.SQLParseError instead.
 * Add caching to speed up processing.
 * Add experimental filters for token processing.
 * Add sqlformat.parsestream (by quest).


Release 0.1.4 (Apr 20, 2012)
----------------------------

Bug Fixes
 * Avoid "stair case" effects when identifiers, functions,
   placeholders or keywords are mixed in identifier lists (issue45,
   issue49, issue52) and when asterisks are used as operators
   (issue58).
 * Make keyword detection more restrict (issue47).
 * Improve handling of CASE statements (issue46).
 * Fix statement splitting when parsing recursive statements (issue57,
   thanks to piranna).
 * Fix for negative numbers (issue56, thanks to kevinjqiu).
 * Pretty format comments in identifier lists (issue59).
 * Several minor bug fixes and improvements.


Release 0.1.3 (Jul 29, 2011)
----------------------------

Bug Fixes
 * Improve parsing of floats (thanks to Kris).
 * When formatting a statement a space before LIMIT was removed (issue35).
 * Fix strip_comments flag (issue38, reported by ooberm...@gmail.com).
 * Avoid parsing names as keywords (issue39, reported by djo...@taket.org).
 * Make sure identifier lists in subselects are grouped (issue40,
   reported by djo...@taket.org).
 * Split statements with IF as functions correctly (issue33 and
   issue29, reported by charles....@unige.ch).
 * Relax detection of keywords, esp. when used as function names
   (issue36, nyuhu...@gmail.com).
 * Don't treat single characters as keywords (issue32).
 * Improve parsing of stand-alone comments (issue26).
 * Detection of placeholders in paramterized queries (issue22,
   reported by Glyph Lefkowitz).
 * Add parsing of MS Access column names with braces (issue27,
   reported by frankz...@gmail.com).

Other
 * Replace Django by Flask in App Engine frontend (issue11).


Release 0.1.2 (Nov 23, 2010)
----------------------------

Bug Fixes
 * Fixed incorrect detection of keyword fragments embed in names (issue7,
   reported and initial patch by andyboyko).
 * Stricter detection of identfier aliases (issue8, reported by estama).
 * WHERE grouping consumed closing parenthesis (issue9, reported by estama).
 * Fixed an issue with trailing whitespaces (reported by Kris).
 * Better detection of escaped single quotes (issue13, reported by
   Martin Brochhaus, patch by bluemaro with test case by Dan Carley).
 * Ignore identifier in double-quotes when changing cases (issue 21).
 * Lots of minor fixes targeting encoding, indentation, statement
   parsing and more (issues 12, 14, 15, 16, 18, 19).
 * Code cleanup with a pinch of refactoring.


Release 0.1.1 (May 6, 2009)
---------------------------

Bug Fixes
 * Lexers preserves original line breaks (issue1).
 * Improved identifier parsing: backtick quotes, wildcards, T-SQL variables
   prefixed with @.
 * Improved parsing of identifier lists (issue2).
 * Recursive recognition of AS (issue4) and CASE.
 * Improved support for UPDATE statements.

Other
 * Code cleanup and better test coverage.


Release 0.1.0 (Apr 8, 2009)
---------------------------
 * Initial release.
