|
| 1 | +# Changelog |
| 2 | +All notable changes to this project will be documented in this file. |
| 3 | + |
| 4 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project aims to adhere to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 5 | + |
| 6 | +Given that the parser produces a typed AST, any changes to the AST will technically be breaking and thus will result in a `0.(N+1)` version. We document changes that break via addition as "Added". |
| 7 | + |
| 8 | +## [Unreleased] |
| 9 | +Nothing here yet! Check https://github.com/andygrove/sqlparser-rs/commits/master for undocumented changes. |
| 10 | + |
| 11 | +## [0.4.0] - 2019-07-02 |
| 12 | +This release brings us closer to SQL-92 support, mainly thanks to the improvements contributed back from @MaterializeInc's fork and other work by @benesch. |
| 13 | + |
| 14 | +### Changed |
| 15 | +- Remove "SQL" from type and enum variant names, `SQLType` -> `DataType`, remove "sql" prefix from module names (#105, #122) |
| 16 | +- Rename `ASTNode` -> `Expr` (#119) |
| 17 | +- Improve consistency of binary/unary op nodes (#112): |
| 18 | + - `ASTNode::SQLBinaryExpr` is now `Expr::BinaryOp` and `ASTNode::SQLUnary` is `Expr::UnaryOp`; |
| 19 | + - The `op: SQLOperator` field is now either a `BinaryOperator` or an `UnaryOperator`. |
| 20 | +- Change the representation of JOINs to match the standard (#109): `SQLSelect`'s `relation` and `joins` are replaced with `from: Vec<TableWithJoins>`. Before this change `FROM foo NATURAL JOIN bar, baz` was represented as "foo" as the `relation` followed by two joins (`Inner(Natural)` and `Implicit`); now it's two `TableWithJoins` (`foo NATURAL JOIN bar` and `baz`). |
| 21 | +- Extract a `SQLFunction` struct (#89) |
| 22 | +- Replace `Option<Vec<T>>` with `Vec<T>` in the AST structs (#73) |
| 23 | +- Change `Value::Long()` to be unsigned, use u64 consistently (#65) |
| 24 | + |
| 25 | +### Added |
| 26 | +- Infra: |
| 27 | + - Implement `fmt::Display` on AST nodes (#124) - thanks @vemoo! |
| 28 | + - Implement `Hash` (#88) and `Eq` (#123) on all AST nodes |
| 29 | + - Implement `std::error::Error` for `ParserError` (#72) |
| 30 | + - Handle Windows line-breaks (#54) |
| 31 | +- Expressions: |
| 32 | + - Support `INTERVAL` literals (#103) |
| 33 | + - Support `DATE` / `TIME` / `TIMESTAMP` literals (#99) |
| 34 | + - Support `EXTRACT` (#96) |
| 35 | + - Support `X'hex value'` literals (#95) |
| 36 | + - Support `EXISTS` subqueries (#90) |
| 37 | + - Support nested expressions in `BETWEEN` (#80) |
| 38 | + - Support `COUNT(DISTINCT x)` and similar (#77) |
| 39 | + - Support `CASE operand WHEN expected_value THEN ..` and table-valued functions (#59) |
| 40 | + - Support analytic (window) functions (`OVER` clause) (#50) |
| 41 | +- Queries / DML: |
| 42 | + - Support nested joins (#100) and derived tables with set operations (#111) |
| 43 | + - Support `UPDATE` statements (#97) |
| 44 | + - Support `INSERT INTO foo SELECT * FROM bar` and `FROM VALUES (...)` (#91) |
| 45 | + - Support `SELECT ALL` (#76) |
| 46 | + - Add `FETCH` and `OFFSET` support, and `LATERAL` (#69) - thanks @thomas-jeepe! |
| 47 | + - Support `COLLATE`, optional column list in CTEs (#64) |
| 48 | +- DDL/TCL: |
| 49 | + - Support `START/SET/COMMIT/ROLLBACK TRANSACTION` (#106) - thanks @SamuelMarks! |
| 50 | + - Parse column constraints in any order (#93) |
| 51 | + - Parse `DECIMAL` and `DEC` aliases for `NUMERIC` type (#92) |
| 52 | + - Support `DROP [TABLE|VIEW]` (#75) |
| 53 | + - Support arbitrary `WITH` options for `CREATE [TABLE|VIEW]` (#74) |
| 54 | + - Support constraints in `CREATE TABLE` (#65) |
| 55 | +- Add basic MSSQL dialect (#61) and some MSSQL-specific features: |
| 56 | + - `CROSS`/`OUTER APPLY` (#120) |
| 57 | + - MSSQL identifier and alias parsing rules (#66) |
| 58 | + - `WITH` hints (#59) |
| 59 | + |
| 60 | +### Fixed |
| 61 | +- Report an error for `SELECT * FROM a OUTER JOIN b` instead of parsing `OUTER` as an alias (#118) |
| 62 | +- Fix the precedence of `NOT LIKE` (#82) and unary `NOT` (#107) |
| 63 | +- Do not panic when `NOT` is not followed by an expected keyword (#71) |
| 64 | +successfully instead of returning a parse error - thanks @ivanceras! (#67) - and similar fixes for queries with no `FROM` (#116) |
| 65 | +- Fix issues with `ALTER TABLE ADD CONSTRAINT` parsing (#65) |
| 66 | +- Serialize the "not equals" operator as `<>` instead of `!=` (#64) |
| 67 | +- Remove dependencies on `uuid` (#59) and `chrono` (#61) |
| 68 | +- Make `SELECT` query with `LIMIT` clause but no `WHERE` parse - Fix incorrect behavior of `ASTNode::SQLQualifiedWildcard::to_string()` (returned `foo*` instead of `foo.*`) - thanks @thomas-jeepe! (#52) |
| 69 | + |
| 70 | +## [0.3.1] - 2019-04-20 |
| 71 | +### Added |
| 72 | +- Extended `SQLStatement::SQLCreateTable` to support Hive's EXTERNAL TABLES (`CREATE EXTERNAL TABLE .. STORED AS .. LOCATION '..'`) - thanks @zhzy0077! (#46) |
| 73 | +- Parse `SELECT DISTINCT` to `SQLSelect::distinct` (#49) |
| 74 | + |
| 75 | +## [0.3.0] - 2019-04-03 |
| 76 | +### Changed |
| 77 | +This release includes major changes to the AST structs to add a number of features, as described in #37 and #43. In particular: |
| 78 | +- `ASTNode` variants that represent statements were extracted from `ASTNode` into a separate `SQLStatement` enum; |
| 79 | + - `Parser::parse_sql` now returns a `Vec` of parsed statements. |
| 80 | + - `ASTNode` now represents an expression (renamed to `Expr` in 0.4.0) |
| 81 | +- The query representation (formerly `ASTNode::SQLSelect`) became more complicated to support: |
| 82 | + - `WITH` and `UNION`/`EXCEPT`/`INTERSECT` (via `SQLQuery`, `Cte`, and `SQLSetExpr`), |
| 83 | + - aliases and qualified wildcards in `SELECT` (via `SQLSelectItem`), |
| 84 | + - and aliases in `FROM`/`JOIN` (via `TableFactor`). |
| 85 | +- A new `SQLObjectName` struct is used instead of `String` or `ASTNode::SQLCompoundIdentifier` - for objects like tables, custom types, etc. |
| 86 | +- Added support for "delimited identifiers" and made keywords context-specific (thus accepting them as valid identifiers in most contexts) - **this caused a regression in parsing `SELECT .. FROM .. LIMIT ..` (#67), fixed in 0.4.0** |
| 87 | + |
| 88 | +### Added |
| 89 | +Other than the changes listed above, some less intrusive additions include: |
| 90 | +- Support `CREATE [MATERIALIZED] VIEW` statement |
| 91 | +- Support `IN`, `BETWEEN`, unary +/- in epressions |
| 92 | +- Support `CHAR` data type and `NUMERIC` not followed by `(p,s)`. |
| 93 | +- Support national string literals (`N'...'`) |
| 94 | + |
| 95 | +## [0.2.4] - 2019-03-08 |
| 96 | +Same as 0.2.2. |
| 97 | + |
| 98 | +## [0.2.3] - 2019-03-08 [YANKED] |
| 99 | + |
| 100 | +## [0.2.2] - 2019-03-08 |
| 101 | +### Changed |
| 102 | +- Removed `Value::String`, `Value::DoubleQuotedString`, and `Token::String`, making |
| 103 | + - `'...'` parse as a string literal (`Value::SingleQuotedString`), and |
| 104 | + - `"..."` fail to parse until version 0.3.0 (#36) |
| 105 | + |
| 106 | +## [0.2.1] - 2019-01-13 |
| 107 | +We don't have a changelog for the changes made in 2018, but thanks to @crw5996, @cswinter, @fredrikroos, @ivanceras, @nickolay, @virattara for their contributions in the early stages of the project! |
| 108 | + |
| 109 | +## [0.1.0] - 2018-09-03 |
| 110 | +Initial release |
0 commit comments