Skip to content

7.0.0

Compare
Choose a tag to compare
@nene nene released this 14 Jun 09:40
· 1587 commits to master since this release

This release contains a major rewrite of how strings, identifiers, variables and parameters are handled internally. What is and isn't supported regarding these things in various dialects was also re-evaluated, resulting in removal of support for various bits of syntax that shouldn't have been there in the first place, along with addition of missing bits of syntax.

Breaking changes

  • The params option is no more supported for Hive and Spark. These dialects don't actually have prepared statements - the values of which params option was meant to provide. Instead the params there was used to replace substitution variables ${var_name}, which however did not work correctly either (e.g. inside strings).
  • Dropped @".." parameter placeholder support from SQLite
  • Dropped :name parameter placeholders from PostgreSQL
  • No more allowing # and $ chars in PL/SQL parameter placeholder names.
  • No more allowing . inside parameter placeholder names.
  • No more allowing # and @ in DB2 identifiers.
  • No more allowing $ and @ in BigQuery identifiers.
  • Dropped `backtick quoted identifiers` from PL/SQL, DB2, PostgreSQL, Redshift, Transact-SQL.
  • Dropped "double quoted identifiers" from Spark.
  • Dropped [bracket quoted identifiers] from DB2.
  • Removed lots of incorrect reserved keywords from SQLite (this mainly affects keywordCase option).
  • Dropped the sql-formatter.js bundle from dist/ dir. Now only sql-formatter.min.js and sql-formatter.min.js.map are left there.

New features and improvements

  • Added names of Oracle SQL functions (which are now also effected by keywordCase option).
  • Added names of SQLite functions (which are now also effected by keywordCase option).
  • Added support for Array literals in BigQuery
  • Added support for @, #, $ characters in DB2 parameters
  • Added support for $ char in PostgreSQL, MariaDB, MySQL and Transact-SQL identifiers
  • Added support for Oracle &name substitution variables
  • Added ${name} variable support for Hive and Spark
  • Added support for @name named and quoted parameter placeholders to BigQuery
  • Added support for :1, :2 parameter placeholders to PL/SQL
  • Added support for $1, $2 parameter placeholders to N1QL
  • Implemented proper dashes support for BigQuery identifiers (e.g. my-little-ident is valid identifier, but my--little--ident is treated as my followed by comment).
  • Added triple-quoted strings support for BigQuery (e.g. """some string""" and '''some string''')
  • Added hex-strings support to standard SQL, SQLite, Spark, PostgreSQL, MariaDB and MySQL
  • Added support for PostgreSQL bit-strings.
  • Added several prefixed string types for DB2 (N'...', G'...', GX'...', UX'...', U&'...')
  • Added several prefixed strings to BigQuery (R"...", B"...", RB"...")

Bugfixes

  • Fixed incorrectly inserted spaces inside map keys #230
  • Fixed incorrect string token regexes #211
  • All MySQL function names are now properly uppercased with keywordCase:upper option.

Performance improvements

  • Formatting long SQL strings is now much faster, fixing a long-time performance problem. #70
  • Calling the format() function repeatedly is now also much faster as we're caching the construction of tokenizer.