- Breaking: [refactored](https://github.com/tobymao/sqlglot/commit/6b0da1e1a2b5d6bdf7b5b918400456422d30a1d4) the way SQL comments are handled. Before at most one comment could be attached to an expression, now multiple comments may be stored in a list.
- Breaking: [refactored](https://github.com/tobymao/sqlglot/commit/be332d10404f36b43ea6ece956a73bf451348641) the way properties are represented and parsed. The argument `this` now stores a property's attributes instead of its name.
- New: added structured ParseError properties.
- New: the executor now handles set operations.
- New: sqlglot can [now execute SQL queries](https://github.com/tobymao/sqlglot/commit/62d3496e761a4f38dfa61af793062690923dce74) using python objects.
- New: added support for the [Drill dialect](https://github.com/tobymao/sqlglot/commit/543eca314546e0bd42f97c354807b4e398ab36ec).
- New: added a `canonicalize` method which leverages existing type information for an expression to apply various transformations to it.
- New: TRIM function support for Snowflake and Bigquery.
- New: added support for SQLite primary key ordering constraints (ASC, DESC).
- New: added support for Redshift DISTKEY / SORTKEY / DISTSTYLE properties.
- New: added support for SET TRANSACTION MySQL statements.
- New: added `null`, `true`, `false` helper methods to avoid using singleton expressions.
- Improvement: allow multiple aggregations in an expression.
- Improvement: execution of left / right joins.
- Improvement: execution of aggregations without the GROUP BY clause.
- Breaking: replaced SQLGlot annotations with comments. Now comments can be preserved after transpilation, and they can appear in other places besides SELECT's expressions.
- Improvement: [refactored the schema](https://github.com/tobymao/sqlglot/pull/668) to be more lenient; before it needed to do an exact match of db.table, now it finds table if there are no ambiguities.
- Improvement: allow functions to [inherit](https://github.com/tobymao/sqlglot/pull/674) their arguments' types, so that annotating CASE, IF etc. is possible.
- Breaking : Changed AST hierarchy of exp.Table with exp.Alias. Before Tables were children's of their aliases, but in order to simplify the AST and fix some issues, Tables now have an alias property.
- New: SQLGlot now supports the [PySpark](https://github.com/tobymao/sqlglot/tree/main/sqlglot/dataframe) dataframe API. This is still relatively experimental.
- Breaking: Removed $ from tokenizer, added @ placeholders
- Improvement: Nodes can now be removed in transform and replace [8cd81c3](https://github.com/tobymao/sqlglot/commit/8cd81c36561463b9849a8e0c2d70248c5b1feb62)
- Improvement: Snowflake timestamp support
- Improvement: Property conversion for CTAS Builder
- Improvement: Tokenizers are now unique per dialect instance