## [0.51.0] 2024-09-11 As always, huge props to @iffyio @jmhain and @lovasoa for their help reviewing and merging PRs 🙏. Without them this project would not be possible. Reminder: we are in the final phases of moving sqlparser-rs into the Apache DataFusion project: https://github.com/sqlparser-rs/sqlparser-rs/issues/1294 ### Fixed * Fix Hive table comment should be after table column definitions (#1413) - Thanks @git-hulk * Fix stack overflow in `parse_subexpr` (#1410) - Thanks @eejbyfeldt * Fix `INTERVAL` parsing to support expressions and units via dialect (#1398) - Thanks @samuelcolvin * Fix identifiers starting with `$` should be regarded as a placeholder in SQLite (#1402) - Thanks @git-hulk ### Added * Support for MSSQL table options (#1414) - Thanks @bombsimon * Test showing how negative constants are parsed (#1421) - Thanks @alamb * Support databricks dialect to dialect_from_str (#1416) - Thanks @milenkovicmalamb * Support `DROP|CLEAR|MATERIALIZE PROJECTION` syntax for ClickHouse (#1417) - Thanks @git-hulk * Support postgres `TRUNCATE` syntax (#1406) - Thanks @tobyhede * Support `CREATE INDEX` with clause (#1389) - Thanks @lewiszlw * Support parsing `CLUSTERED BY` clause for Hive (#1397) - Thanks @git-hulk * Support different `USE` statement syntaxes (#1387) - Thanks @kacpermuda * Support `ADD PROJECTION` syntax for ClickHouse (#1390) - Thanks @git-hulk ### Changed * Implement common traits for OneOrManyWithParens (#1368) - Thanks @gstvg * Cleanup parse_statement (#1407) - Thanks @samuelcolvin * Allow `DateTimeField::Custom` with `EXTRACT` in Postgres (#1394) - Thanks @samuelcolvin ## [0.50.0] 2024-08-15 Again, huge props to @iffyio @jmhain and @lovasoa for their help reviewing and merging PRs 🙏. Without them this project would not be possible. Reminder: are in the process of moving sqlparser to governed as part of the Apache DataFusion project: https://github.com/sqlparser-rs/sqlparser-rs/issues/1294 ### Fixed * Clippy 1.80 warnings (#1357) - Thanks @lovasoa ### Added * Support `STRUCT` and list of structs for DuckDB dialect (#1372) - Thanks @jayzhan211 * Support custom lexical precedence in PostgreSQL dialect (#1379) - Thanks @samuelcolvin * Support `FREEZE|UNFREEZE PARTITION` syntax for ClickHouse (#1380) - Thanks @git-hulk * Support scale in `CEIL` and `FLOOR` functions (#1377) - Thanks @seve-martinez * Support `CREATE TRIGGER` and `DROP TRIGGER` statements (#1352) - Thanks @LucaCappelletti94 * Support `EXTRACT` syntax for snowflake (#1374) - Thanks @seve-martinez * Support `ATTACH` / `DETACH PARTITION` for ClickHouse (#1362) - Thanks @git-hulk * Support Dialect level precedence, update Postgres Dialect to match Postgres (#1360) - Thanks @samuelcolvin * Support parsing empty map literal syntax for DuckDB and Generic dialects (#1361) - Thanks @goldmedal * Support `SETTINGS` clause for ClickHouse table-valued functions (#1358) - Thanks @Jesse-Bakker * Support `OPTIMIZE TABLE` statement for ClickHouse (#1359) - Thanks @git-hulk * Support `ON CLUSTER` in `ALTER TABLE` for ClickHouse (#1342) - Thanks @git-hulk * Support `GLOBAL` keyword before the join operator (#1353) - Thanks @git-hulk * Support postgres String Constants with Unicode Escapes (#1355) - Thanks @lovasoa * Support position with normal function call syntax for Snowflake (#1341) - Thanks @jmhain * Support `TABLE` keyword in `DESC|DESCRIBE|EXPLAIN TABLE` statement (#1351) - Thanks @git-hulk ### Changed * Only require `DESCRIBE TABLE` for Snowflake and ClickHouse dialect (#1386) - Thanks @ alamb * Rename (unreleased) `get_next_precedence_full` to `get_next_precedence_default` (#1378) - Thanks @samuelcolvin * Use local GitHub Action to replace setup-rust-action (#1371) - Thanks @git-hulk * Simplify arrow_cast tests (#1367) - Thanks @alamb * Update version of GitHub Actions (#1363) - Thanks @git-hulk * Make `Parser::maybe_parse` pub (#1364) - Thanks @Jesse-Bakker * Improve comments on 1Dialect` (#1366) - Thanks @alamb ## [0.49.0] 2024-07-23 As always, huge props to @iffyio @jmhain and @lovasoa for their help reviewing and merging PRs! We are in the process of moving sqlparser to governed as part of the Apache DataFusion project: https://github.com/sqlparser-rs/sqlparser-rs/issues/1294 ### Fixed * Fix quoted identifier regression edge-case with "from" in SELECT (#1346) - Thanks @alexander-beedie * Fix `AS` query clause should be after the create table options (#1339) - Thanks @git-hulk ### Added * Support `MATERIALIZED`/`ALIAS`/`EPHERMERAL` default column options for ClickHouse (#1348) - Thanks @git-hulk * Support `()` as the `GROUP BY` nothing (#1347) - Thanks @git-hulk * Support Map literal syntax for DuckDB and Generic (#1344) - Thanks @goldmedal * Support subquery expression in `SET` expressions (#1343) - Thanks @iffyio * Support `WITH FILL` for ClickHouse (#1330) - Thanks @nickpresta * Support `PARTITION BY` for PostgreSQL in `CREATE TABLE` statement (#1338) - Thanks @git-hulk * Support of table function `WITH ORDINALITY` modifier for Postgres (#1337) - Thanks @git-hulk ## [0.48.0] 2024-07-09 Huge shout out to @iffyio @jmhain and @lovasoa for their help reviewing and merging PRs! ### Fixed * Fix CI error message in CI (#1333) - Thanks @alamb * Fix typo in sqlparser-derive README (#1310) - Thanks @leoyvens * Re-enable trailing commas in DCL (#1318) - Thanks @MohamedAbdeen21 * Fix a few typos in comment lines (#1316) - Thanks @git-hulk * Fix Snowflake `SELECT * wildcard REPLACE ... RENAME` order (#1321) - Thanks @alexander-beedie * Allow semi-colon at the end of UNCACHE statement (#1320) - Thanks @LorrensP-2158466 * Return errors, not panic, when integers fail to parse in `AUTO_INCREMENT` and `TOP` (#1305) - Thanks @eejbyfeldt ### Added * Support `OWNER TO` clause in Postgres (#1314) - Thanks @gainings * Support `FORMAT` clause for ClickHouse (#1335) - Thanks @git-hulk * Support `DROP PROCEDURE` statement (#1324) - Thanks @LorrensP-2158466 * Support `PREWHERE` condition for ClickHouse dialect (#1328) - Thanks @git-hulk * Support `SETTINGS` pairs for ClickHouse dialect (#1327) - Thanks @git-hulk * Support `GROUP BY WITH MODIFIER` for ClickHouse dialect (#1323) - Thanks @git-hulk * Support DuckDB Union datatype (#1322) - Thanks @gstvg * Support parametric arguments to `FUNCTION` for ClickHouse dialect (#1315) - Thanks @git-hulk * Support `TO` in `CREATE VIEW` clause for Clickhouse (#1313) - Thanks @Bidaya0 * Support `UPDATE` statements that contain tuple assignments (#1317) - Thanks @lovasoa * Support `BY NAME quantifier across all set ops (#1309) - Thanks @alexander-beedie * Support SnowFlake exclusive `CREATE TABLE` options (#1233) - Thanks @balliegojr * Support ClickHouse `CREATE TABLE` with primary key and parametrised table engine (#1289) - Thanks @7phs * Support custom operators in Postgres (#1302) - Thanks @lovasoa * Support ClickHouse data types (#1285) - Thanks @7phs ### Changed * Add stale PR github workflow (#1331) - Thanks @alamb * Refine docs (#1326) - Thanks @emilsivervik * Improve error messages with additional colons (#1319) - Thanks @LorrensP-2158466 * Move Display fmt to struct for `CreateIndex` (#1307) - Thanks @philipcristiano * Enhancing Trailing Comma Option (#1212) - Thanks @MohamedAbdeen21 * Encapsulate `CreateTable`, `CreateIndex` into specific structs (#1291) - Thanks @philipcristiano ## [0.47.0] 2024-06-01 ### Fixed * Re-support Postgres array slice syntax (#1290) - Thanks @jmhain * Fix DoubleColon cast skipping AT TIME ZONE #1266 (#1267) - Thanks @dmitrybugakov * Fix for values as table name in Databricks and generic (#1278) - Thanks @jmhain ### Added * Support `ASOF` joins in Snowflake (#1288) - Thanks @jmhain * Support `CREATE VIEW` with fields and data types ClickHouse (#1292) - Thanks @7phs * Support view comments for Snowflake (#1287) - Thanks @bombsimon * Support dynamic pivot in Snowflake (#1280) - Thanks @jmhain * Support `CREATE FUNCTION` for BigQuery, generalize AST (#1253) - Thanks @iffyio * Support expression in `AT TIME ZONE` and fix precedence (#1272) - Thanks @jmhain * Support `IGNORE/RESPECT NULLS` inside function argument list for Databricks (#1263) - Thanks @jmhain * Support `SELECT * EXCEPT` Databricks (#1261) - Thanks @jmhain * Support triple quoted strings (#1262) - Thanks @iffyio * Support array indexing for duckdb (#1265) - Thanks @JichaoS * Support multiple SET variables (#1252) - Thanks @iffyio * Support `ANY_VALUE` `HAVING` clause (#1258) in BigQuery - Thanks @jmhain * Support keywords as field names in BigQuery struct syntax (#1254) - Thanks @iffyio * Support `GROUP_CONCAT()` in MySQL (#1256) - Thanks @jmhain * Support lambda functions in Databricks (#1257) - Thanks @jmhain * Add const generic peek_tokens method to parser (#1255) - Thanks @jmhain ## [0.46.0] 2024-05-03 ### Changed * Consolidate representation of function calls, remove `AggregateExpressionWithFilter`, `ArraySubquery`, `ListAgg` and `ArrayAgg` (#1247) - Thanks jmhain * Extended dialect trait to support numeric prefixed identifiers (#1188) - Thanks @groobyming * Update simple_logger requirement from 4.0 to 5.0 (#1246) - Thanks @dependabot * Improve parsing of JSON accesses on Postgres and Snowflake (#1215) - Thanks @jmhain * Encapsulate Insert and Delete into specific structs (#1224) - Thanks @tisonkun * Preserve double colon casts (and simplify cast representations) (#1221) - Thanks @jmhain ### Fixed * Fix redundant brackets in Hive/Snowflake/Redshift (#1229) - Thanks @yuval-illumex ### Added * Support values without parens in Snowflake and DataBricks (#1249) - Thanks @HiranmayaGundu * Support WINDOW clause after QUALIFY when parsing (#1248) - Thanks @iffyio * Support `DECLARE` parsing for mssql (#1235) - Thanks @devanbenz * Support `?`-based jsonb operators in Postgres (#1242) - THanks @ReppCodes * Support Struct datatype parsing for GenericDialect (#1241) - Thanks @duongcongtoai * Support BigQuery window function null treatment (#1239) - Thanks @iffyio * Support extend pivot operator - Thanks @iffyio * Support Databricks SQL dialect (#1220) - Thanks @jmhain * Support for MSSQL CONVERT styles (#1219) - Thanks @iffyio * Support window clause using named window in BigQuery (#1237) - Thanks @iffyio * Support for CONNECT BY (#1138) - Thanks @jmhain * Support object constants in Snowflake (#1223) - Thanks @jmhain * Support BigQuery MERGE syntax (#1217) - Thanks @iffyio * Support for MAX for NVARCHAR (#1232) - Thanks @ bombsimon * Support fixed size list types (#1231) - @@universalmind303 * Support Snowflake MATCH_RECOGNIZE syntax (#1222) - Thanks @jmhain * Support quoted string backslash escaping (#1177) - Thanks @iffyio * Support Modify Column for MySQL dialect (#1216) - Thanks @KKould * Support `select * ilike` for snowflake (#1228) - Thanks @HiranmayaGundu * Support wildcard replace in duckdb and snowflake syntax (#1226) - Thanks @HiranmayaGundu ## [0.45.0] 2024-04-12 ### Added * Support `DateTimeField` variants: `CUSTOM` and `WEEK(MONDAY)` (#1191) - Thanks @iffyio * Support for arbitrary expr in `MapAccessSyntax` (#1179) - Thanks @iffyio * Support unquoted hyphen in table/view declaration for BigQuery (#1178) - Thanks @iffyio * Support `CREATE/DROP SECRET` for duckdb dialect (#1208) - Thanks @JichaoS * Support MySQL `UNIQUE` table constraint (#1164) - Thanks @Nikita-str * Support tailing commas on Snowflake. (#1205) - Thanks @yassun7010 * Support `[FIRST | AFTER column_name]` in `ALTER TABLE` for MySQL (#1180) - Thanks @xring * Support inline comment with hash syntax for BigQuery (#1192) - Thanks @iffyio * Support named windows in OVER (window_definition) clause (#1166) - Thanks @Nikita-str * Support PARALLEL ... and for ..ON NULL INPUT ... to CREATE FUNCTION` (#1202) - Thanks @dimfeld * Support DuckDB functions named arguments with assignment operator (#1195) - Thanks @alamb * Support DuckDB struct literal syntax (#1194) - Thanks @gstvg * Support `$$` in generic dialect ... (#1185)- Thanks @milenkovicm * Support row_alias and col_aliases in `INSERT` statement for MySQL and Generic dialects (#1136) - Thanks @emin100 ### Fixed * Fix dollar quoted string tokenizer (#1193) - Thanks @ZacJW * Do not allocate in `impl Display` for `DateTimeField` (#1209) - Thanks @alamb * Fix parse `COPY INTO` stage names without parens for SnowFlake (#1187) - Thanks @mobuchowski * Solve stack overflow on RecursionLimitExceeded on debug builds (#1171) - Thanks @Nikita-str * Fix parsing of equality binary operator in function argument (#1182) - Thanks @jmhain * Fix some comments (#1184) - Thanks @sunxunle ### Changed * Cleanup `CREATE FUNCTION` tests (#1203) - Thanks @alamb * Parse `SUBSTRING FROM` syntax in all dialects, reflect change in the AST (#1173) - Thanks @lovasoa * Add identifier quote style to Dialect trait (#1170) - Thanks @backkem ## [0.44.0] 2024-03-02 ### Added * Support EXPLAIN / DESCR / DESCRIBE [FORMATTED | EXTENDED] (#1156) - Thanks @jonathanlehtoalamb * Support ALTER TABLE ... SET LOCATION (#1154) - Thanks @jonathanlehto * Support `ROW FORMAT DELIMITED` in Hive (#1155) - Thanks @jonathanlehto * Support `SERDEPROPERTIES` for `CREATE TABLE` with Hive (#1152) - Thanks @jonathanlehto * Support `EXECUTE ... USING` for Postgres (#1153) - Thanks @jonathanlehto * Support Postgres style `CREATE FUNCTION` in GenericDialect (#1159) - Thanks @alamb * Support `SET TBLPROPERTIES` (#1151) - Thanks @jonathanlehto * Support `UNLOAD` statement (#1150) - Thanks @jonathanlehto * Support `MATERIALIZED CTEs` (#1148) - Thanks @ReppCodes * Support `DECLARE` syntax for snowflake and bigquery (#1122) - Thanks @iffyio * Support `SELECT AS VALUE` and `SELECT AS STRUCT` for BigQuery (#1135) - Thanks @lustefaniak * Support `(+)` outer join syntax (#1145) - Thanks @jmhain * Support `INSERT INTO ... SELECT ... RETURNING`(#1132) - Thanks @lovasoa * Support DuckDB `INSTALL` and `LOAD` (#1127) - Thanks @universalmind303 * Support `=` operator in function args (#1128) - Thanks @universalmind303 * Support `CREATE VIEW IF NOT EXISTS` (#1118) - Thanks @7phs * Support `UPDATE FROM` for SQLite (further to #694) (#1117) - Thanks @ggaughan * Support optional `DELETE FROM` statement (#1120) - Thanks @iffyio * Support MySQL `SHOW STATUS` statement (#1119) - Thanks invm ### Fixed * Clean up nightly clippy lints (#1158) - Thanks @alamb * Handle escape, unicode, and hex in tokenize_escaped_single_quoted_string (#1146) - Thanks @JasonLi-cn * Fix panic while parsing `REPLACE` (#1140) - THanks @jjbayer * Fix clippy warning from rust 1.76 (#1130) - Thanks @alamb * Fix release instructions (#1115) - Thanks @alamb ### Changed * Add `parse_keyword_with_tokens` for paring keyword and tokens combination (#1141) - Thanks @viirya * Add ParadeDB to list of known users (#1142) - Thanks @philippemnoel * Accept JSON_TABLE both as an unquoted table name and a table-valued function (#1134) - Thanks @lovasoa ## [0.43.1] 2024-01-22 ### Changes * Fixed CHANGELOG ## [0.43.0] 2024-01-22 * NO CHANGES ## [0.42.0] 2024-01-22 ### Added * Support for constraint `CHARACTERISTICS` clause (#1099) - Thanks @dimfeld * Support for unquoted hyphenated identifiers on bigquery (#1109) - Thanks @jmhain * Support `BigQuery` table and view options (#1061) - Thanks @iffyio * Support Postgres operators for the LIKE expression variants (#1096) - Thanks @gruuya * Support "timezone_region" and "timezone_abbr" for `EXTRACT` (and `DATE_PART`) (#1090) - Thanks @alexander-beedie * Support `JSONB` datatype (#1089) - Thanks @alexander-beedie * Support PostgreSQL `^@` starts-with operator (#1091) - Thanks @alexander-beedie * Support PostgreSQL Insert table aliases (#1069) (#1084) - Thanks @boydjohnson * Support PostgreSQL `CREATE EXTENSION` (#1078) - Thanks @tobyhede * Support PostgreSQL `ADD GENERATED` in `ALTER COLUMN` statements (#1079) - Thanks @tobyhede * Support SQLite column definitions with no type (#1075) - Thanks @takluyver * Support PostgreSQL `ENABLE` and `DISABLE` on `ALTER TABLE` (#1077) - Thanks @tobyhede * Support MySQL `FLUSH` statement (#1076) - Thanks @emin100 * Support Mysql `REPLACE` statement and `PRIORITY` clause of `INSERT` (#1072) - Thanks @emin100 ### Fixed * Fix `:start` and `:end` json accesses on SnowFlake (#1110) - Thanks @jmhain * Fix array_agg wildcard behavior (#1093) - Thanks @ReppCodes * Error on dangling `NO` in `CREATE SEQUENCE` options (#1104) - Thanks @PartiallyTyped * Allow string values in `PRAGMA` commands (#1101) - Thanks @invm ### Changed * Use `Option` for Min and Max vals in Seq Opts, fix alter col seq display (#1106) - Thanks @PartiallyTyped * Replace `AtomicUsize` with Cell in the recursion counter (#1098) - Thanks @wzzzzd * Add Qrlew as a user in README.md (#1107) - Thanks @ngrislain * Add APIs to reuse token buffers in `Tokenizer` (#1094) - Thanks @0rphon * Bump version of `sqlparser-derive` to 0.2.2 (#1083) - Thanks @alamb ## [0.41.0] 2023-12-22 ### Added * Support `DEFERRED`, `IMMEDIATE`, and `EXCLUSIVE` in SQLite's `BEGIN TRANSACTION` command (#1067) - Thanks @takaebato * Support generated columns skipping `GENERATED ALWAYS` keywords (#1058) - Thanks @takluyver * Support `LOCK/UNLOCK TABLES` for MySQL (#1059) - Thanks @zzzdong * Support `JSON_TABLE` (#1062) - Thanks @lovasoa * Support `CALL` statements (#1063) - Thanks @lovasoa ### Fixed * fix rendering of SELECT TOP (#1070) for Snowflake - Thanks jmhain ### Changed * Improve documentation formatting (#1068) - Thanks @alamb * Replace type_id() by trait method to allow wrapping dialects (#1065) - Thanks @jjbayer * Document that comments aren't preserved for round trip (#1060) - Thanks @takluyver * Update sqlparser-derive to use `syn 2.0` (#1040) - Thanks @serprex ## [0.40.0] 2023-11-27 ### Added * Add `{pre,post}_visit_query` to `Visitor` (#1044) - Thanks @jmhain * Support generated virtual columns with expression (#1051) - Thanks @takluyver * Support PostgreSQL `END` (#1035) - Thanks @tobyhede * Support `INSERT INTO ... DEFAULT VALUES ...` (#1036) - Thanks @CDThomas * Support `RELEASE` and `ROLLBACK TO SAVEPOINT` (#1045) - Thanks @CDThomas * Support `CONVERT` expressions (#1048) - Thanks @lovasoa * Support `GLOBAL` and `SESSION` parts in `SHOW VARIABLES` for mysql and generic - Thanks @emin100 * Support snowflake `PIVOT` on derived table factors (#1027) - Thanks @lustefaniak * Support mssql json and xml extensions (#1043) - Thanks @lovasoa * Support for `MAX` as a character length (#1038) - Thanks @lovasoa * Support `IN ()` syntax of SQLite (#1028) - Thanks @alamb ### Fixed * Fix extra whitespace printed before `ON CONFLICT` (#1037) - Thanks @CDThomas ### Changed * Document round trip ability (#1052) - Thanks @alamb * Add PRQL to list of users (#1031) - Thanks @vanillajonathan ## [0.39.0] 2023-10-27 ### Added * Support for `LATERAL FLATTEN` and similar (#1026) - Thanks @lustefaniak * Support BigQuery struct, array and bytes , int64, `float64` datatypes (#1003) - Thanks @iffyio * Support numbers as placeholders in Snowflake (e.g. `:1)` (#1001) - Thanks @yuval-illumex * Support date 'key' when using semi structured data (#1023) @yuval-illumex * Support IGNORE|RESPECT NULLs clause in window functions (#998) - Thanks @yuval-illumex * Support for single-quoted identifiers (#1021) - Thanks @lovasoa * Support multiple PARTITION statements in ALTER TABLE ADD statement (#1011) - Thanks @bitemyapp * Support "with" identifiers surrounded by backticks in GenericDialect (#1010) - Thanks @bitemyapp * Support INSERT IGNORE in MySql and GenericDialect (#1004) - Thanks @emin100 * Support SQLite `pragma` statement (#969) - Thanks @marhoily * Support `position` as a column name (#1022) - Thanks @lustefaniak * Support `FILTER` in Functions (for `OVER`) clause (#1007) - Thanks @lovasoa * Support `SELECT * EXCEPT/REPLACE` syntax from ClickHouse (#1013) - Thanks @lustefaniak * Support subquery as function arg w/o parens in Snowflake dialect (#996) - Thanks @jmhain * Support `UNION DISTINCT BY NAME` syntax (#997) - Thanks @alexander-beedie * Support mysql `RLIKE` and `REGEXP` binary operators (#1017) - Thanks @lovasoa * Support bigquery `CAST AS x [STRING|DATE] FORMAT` syntax (#978) - Thanks @lustefaniak * Support Snowflake/BigQuery `TRIM`. (#975) - Thanks @zdenal * Support `CREATE [TEMPORARY|TEMP] VIEW [IF NOT EXISTS] `(#993) - Thanks @gabivlj * Support for `CREATE VIEW … WITH NO SCHEMA BINDING` Redshift (#979) - Thanks @lustefaniak * Support `UNPIVOT` and a fix for chained PIVOTs (#983) - @jmhain * Support for `LIMIT BY` (#977) - Thanks @lustefaniak * Support for mixed BigQuery table name quoting (#971) - Thanks @iffyio * Support `DELETE` with `ORDER BY` and `LIMIT` (MySQL) (#992) - Thanks @ulrichsg * Support `EXTRACT` for `DAYOFWEEK`, `DAYOFYEAR`, `ISOWEEK`, `TIME` (#980) - Thanks @lustefaniak * Support `ATTACH DATABASE` (#989) - Thanks @lovasoa ### Fixed * Fix handling of `/~%` in Snowflake stage name (#1009) - Thanks @lustefaniak * Fix column `COLLATE` not displayed (#1012) - Thanks @lustefaniak * Fix for clippy 1.73 (#995) - Thanks @alamb ### Changed * Test to ensure `+ - * / %` binary operators work the same in all dialects (#1025) - Thanks @lustefaniak * Improve documentation on Parser::consume_token and friends (#994) - Thanks @alamb * Test that regexp can be used as an identifier in postgres (#1018) - Thanks @lovasoa * Add docstrings for Dialects, update README (#1016) - Thanks @alamb * Add JumpWire to users in README (#990) - Thanks @hexedpackets * Add tests for clickhouse: `tokenize == as Token::DoubleEq` (#981)- Thanks @lustefaniak ## [0.38.0] 2023-09-21 ### Added * Support `==`operator for Sqlite (#970) - Thanks @marhoily * Support mysql `PARTITION` to table selection (#959) - Thanks @chunshao90 * Support `UNNEST` as a table factor for PostgreSQL (#968) @hexedpackets * Support MySQL `UNIQUE KEY` syntax (#962) - Thanks @artorias1024 * Support` `GROUP BY ALL` (#964) - @berkaysynnada * Support multiple actions in one ALTER TABLE statement (#960) - Thanks @ForbesLindesay * Add `--sqlite param` to CLI (#956) - Thanks @ddol ### Fixed * Fix Rust 1.72 clippy lints (#957) - Thanks @alamb ### Changed * Add missing token loc in parse err msg (#965) - Thanks @ding-young * Change how `ANY` and `ALL` expressions are represented in AST (#963) - Thanks @SeanTroyUWO * Show location info in parse errors (#958) - Thanks @MartinNowak * Update release documentation (#954) - Thanks @alamb * Break test and coverage test into separate jobs (#949) - Thanks @alamb ## [0.37.0] 2023-08-22 ### Added * Support `FOR SYSTEM_TIME AS OF` table time travel clause support, `visit_table_factor` to Visitor (#951) - Thanks @gruuya * Support MySQL `auto_increment` offset in table definition (#950) - Thanks @ehoeve * Test for mssql table name in square brackets (#952) - Thanks @lovasoa * Support additional Postgres `CREATE INDEX` syntax (#943) - Thanks @ForbesLindesay * Support `ALTER ROLE` syntax of PostgreSQL and MS SQL Server (#942) - Thanks @r4ntix * Support table-level comments (#946) - Thanks @ehoeve * Support `DROP TEMPORARY TABLE`, MySQL syntax (#916) - Thanks @liadgiladi * Support posgres type alias (#933) - Thanks @Kikkon ### Fixed * Clarify the value of the special flag (#948) - Thanks @alamb * Fix `SUBSTRING` from/to argument construction for mssql (#947) - Thanks @jmaness * Fix: use Rust idiomatic capitalization for newly added DataType enums (#939) - Thanks @Kikkon * Fix `BEGIN TRANSACTION` being serialized as `START TRANSACTION` (#935) - Thanks @lovasoa * Fix parsing of datetime functions without parenthesis (#930) - Thanks @lovasoa ## [0.36.1] 2023-07-19 ### Fixed * Fix parsing of identifiers after '%' symbol (#927) - Thanks @alamb ## [0.36.0] 2023-07-19 ### Added * Support toggling "unescape" mode to retain original escaping (#870) - Thanks @canalun * Support UNION (ALL) BY NAME syntax (#915) - Thanks @parkma99 * Add doc comment for all operators (#917) - Thanks @izveigor * Support `PGOverlap` operator (#912) - Thanks @izveigor * Support multi args for unnest (#909) - Thanks @jayzhan211 * Support `ALTER VIEW`, MySQL syntax (#907) - Thanks @liadgiladi * Add DeltaLake keywords (#906) - Thanks @roeap ### Fixed * Parse JsonOperators correctly (#913) - Thanks @izveigor * Fix dependabot by removing rust-toolchain toml (#922) - Thanks @alamb ### Changed * Clean up JSON operator tokenizing code (#923) - Thanks @alamb * Upgrade bigdecimal to 0.4.1 (#921) - Thanks @jinlee0 * Remove most instances of #[cfg(feature(bigdecimal))] in tests (#910) - Thanks @alamb ## [0.35.0] 2023-06-23 ### Added * Support `CREATE PROCEDURE` of MSSQL (#900) - Thanks @delsehi * Support DuckDB's `CREATE MACRO` statements (#897) - Thanks @MartinNowak * Support for `CREATE TYPE (AS)` statements (#888) - Thanks @srijs * Support `STRICT` tables of sqlite (#903) - Thanks @parkma99 ### Fixed * Fixed precedence of unary negation operator with operators: Mul, Div and Mod (#902) - Thanks @izveigor ### Changed * Add `support_group_by_expr` to `Dialect` trait (#896) - Thanks @jdye64 * Update criterion requirement from `0.4` to `0.5` in `/sqlparser_bench` (#890) - Thanks @dependabot (!!) ## [0.34.0] 2023-05-19 ### Added * Support named window frames (#881) - Thanks @berkaysynnada, @mustafasrepo, and @ozankabak * Support for `ORDER BY` clauses in aggregate functions (#882) - Thanks @mustafasrepo * Support `DuckDB` dialect (#878) - Thanks @eitsupi * Support optional `TABLE` keyword for `TRUNCATE TABLE` (#883) - Thanks @mobuchowski * Support MySQL's `DIV` operator (#876) - Thanks @eitsupi * Support Custom operators (#868) - Thanks @max-sixty * Add `Parser::parse_multipart_identifier` (#860) - Thanks @Jefffrey * Support for multiple expressions, order by in `ARRAY_AGG` (#879) - Thanks @mustafasrepo * Support for query source in `COPY .. TO` statement (#858) - Thanks @aprimadi * Support `DISTINCT ON (...)` (#852) - Thanks @aljazerzen * Support multiple-table `DELETE` syntax (#855) - Thanks @AviRaboah * Support `COPY INTO` in `SnowflakeDialect` (#841) - Thanks @pawel-big-lebowski * Support identifiers beginning with digits in MySQL (#856) - Thanks @AviRaboah ### Changed * Include license file in published crate (#871) - Thanks @ankane * Make `Expr::Interval` its own struct (#872) - Thanks @aprimadi * Add dialect_from_str and improve Dialect documentation (#848) - Thanks @alamb * Add clickhouse to example (#849) - Thanks @anglinb ### Fixed * Fix merge conflict (#885) - Thanks @alamb * Fix tiny typo in custom_sql_parser.md (#864) - Thanks @okue * Fix logical merge conflict (#865) - Thanks @alamb * Test trailing commas (#859) - Thanks @aljazerzen ## [0.33.0] 2023-04-10 ### Added * Support for Mysql Backslash escapes (enabled by default) (#844) - Thanks @cobyge * Support "UPDATE" statement in "WITH" subquery (#842) - Thanks @nicksrandall * Support PIVOT table syntax (#836) - Thanks @pawel-big-lebowski * Support CREATE/DROP STAGE for Snowflake (#833) - Thanks @pawel-big-lebowski * Support Non-Latin characters (#840) - Thanks @mskrzypkows * Support PostgreSQL: GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY and GENERATED - Thanks @sam-mmm * Support IF EXISTS in COMMENT statements (#831) - Thanks @pawel-big-lebowski * Support snowflake alter table swap with (#825) - Thanks @pawel-big-lebowski ### Changed * Move tests from parser.rs to appropriate parse_XX tests (#845) - Thanks @alamb * Correct typos in parser.rs (#838) - Thanks @felixonmars * Improve documentation on verified_* methods (#828) - Thanks @alamb ## [0.32.0] 2023-03-6 ### Added * Support ClickHouse `CREATE TABLE` with `ORDER BY` (#824) - Thanks @ankrgyl * Support PostgreSQL exponentiation `^` operator (#813) - Thanks @michael-2956 * Support `BIGNUMERIC` type in BigQuery (#811) - Thanks @togami2864 * Support for optional trailing commas (#810) - Thanks @ankrgyl ### Fixed * Fix table alias parsing regression by backing out redshift column definition list (#827) - Thanks @alamb * Fix typo in `ReplaceSelectElement` `colum_name` --> `column_name` (#822) - Thanks @togami2864 ## [0.31.0] 2023-03-1 ### Added * Support raw string literals for BigQuery dialect (#812) - Thanks @togami2864 * Support `SELECT * REPLACE AS ` in BigQuery dialect (#798) - Thanks @togami2864 * Support byte string literals for BigQuery dialect (#802) - Thanks @togami2864 * Support columns definition list for system information functions in RedShift dialect (#769) - Thanks @mskrzypkows * Support `TRANSIENT` keyword in Snowflake dialect (#807) - Thanks @mobuchowski * Support `JSON` keyword (#799) - Thanks @togami2864 * Support MySQL Character Set Introducers (#788) - Thanks @mskrzypkows ### Fixed * Fix clippy error in ci (#803) - Thanks @togami2864 * Handle offset in map key in BigQuery dialect (#797) - Thanks @Ziinc * Fix a typo (precendence -> precedence) (#794) - Thanks @SARDONYX-sard * use post_* visitors for mutable visits (#789) - Thanks @lovasoa ### Changed * Add another known user (#787) - Thanks @joocer ## [0.30.0] 2023-01-02 ### Added * Support `RENAME` for wildcard `SELECTs` (#784) - Thanks @Jefffrey * Add a mutable visitor (#782) - Thanks @lovasoa ### Changed * Allow parsing of mysql empty row inserts (#783) - Thanks @Jefffrey ### Fixed * Fix logical conflict (#785) - Thanks @alamb ## [0.29.0] 2022-12-29 ### Highlights * Partial source location tracking: see #710 * Recursion limit to prevent stack overflows: #764 * AST visitor: #765 ### Added feat: dollar-quoted strings support (#772) - Thanks @vasilev-alex * Add derive based AST visitor (#765) - Thanks @tustvold * Support `ALTER INDEX {INDEX_NAME} RENAME TO {NEW_INDEX_NAME}` (#767) - Thanks @devgony * Support `CREATE TABLE ON UPDATE ` Function (#685) - Thanks @CEOJINSUNG * Support `CREATE FUNCTION` definition with `$$` (#755)- Thanks @zidaye * Add location tracking in the tokenizer and parser (#710) - Thanks @ankrgyl * Add configurable recursion limit to parser, to protect against stackoverflows (#764) - Thanks @alamb * Support parsing scientific notation (such as `10e5`) (#768) - Thanks @Jefffrey * Support `DROP FUNCTION` syntax (#752) - Thanks @zidaye * Support json operators `@>` `<@`, `@?` and `@@` - Thanks @audunska * Support the type key (#750)- Thanks @yuval-illumex ### Changed * Improve docs and add examples for Visitor (#778) - Thanks @alamb * Add a backlink from sqlparse_derive to sqlparser and publishing instructions (#779) - Thanks @alamb * Document new features, update authors (#776) - Thanks @alamb * Improve Readme (#774) - Thanks @alamb * Standardize comments on parsing optional keywords (#773) - Thanks @alamb * Enable grouping sets parsing for `GenericDialect` (#771) - Thanks @Jefffrey * Generalize conflict target (#762) - Thanks @audunska * Generalize locking clause (#759) - Thanks @audunska * Add negative test for except clause on wildcards (#746)- Thanks @alamb * Add `NANOSECOND` keyword (#749)- Thanks @waitingkuo ### Fixed * ParserError if nested explain (#781) - Thanks @Jefffrey * Fix cargo docs / warnings and add CI check (#777) - Thanks @alamb * unnest join constraint with alias parsing for BigQuery dialect (#732)- Thanks @Ziinc ## [0.28.0] 2022-12-05 ### Added * Support for `EXCEPT` clause on wildcards (#745) - Thanks @AugustoFKL * Support `CREATE FUNCTION` Postgres options (#722) - Thanks @wangrunji0408 * Support `CREATE TABLE x AS TABLE y` (#704) - Thanks @sarahyurick * Support MySQL `ROWS` syntax for `VALUES` (#737) - Thanks @aljazerzen * Support `WHERE` condition for `UPDATE ON CONFLICT` (#735) - Thanks @zidaye * Support `CLUSTER BY` when creating Materialized View (#736) - Thanks @yuval-illumex * Support nested comments (#726) - Thanks @yang-han * Support `USING` method when creating indexes. (#731) - Thanks @step-baby and @yangjiaxin01 * Support `SEMI`/`ANTI` `JOIN` syntax (#723) - Thanks @mingmwang * Support `EXCLUDE` support for snowflake and generic dialect (#721) - Thanks @AugustoFKL * Support `MATCH AGAINST` (#708) - Thanks @AugustoFKL * Support `IF NOT EXISTS` in `ALTER TABLE ADD COLUMN` (#707) - Thanks @AugustoFKL * Support `SET TIME ZONE ` (#727) - Thanks @waitingkuo * Support `UPDATE ... FROM ( subquery )` (#694) - Thanks @unvalley ### Changed * Add `Parser::index()` method to get current parsing index (#728) - Thanks @neverchanje * Add `COMPRESSION` as keyword (#720)- Thanks @AugustoFKL * Derive `PartialOrd`, `Ord`, and `Copy` whenever possible (#717) - Thanks @AugustoFKL * Fixed `INTERVAL` parsing logic and precedence (#705) - Thanks @sarahyurick * Support updating multiple column names whose names are the same as(#725) - Thanks @step-baby ### Fixed * Clean up some redundant code in parser (#741) - Thanks @alamb * Fix logical conflict - Thanks @alamb * Cleanup to avoid is_ok() (#740) - Thanks @alamb * Cleanup to avoid using unreachable! when parsing semi/anti join (#738) - Thanks @alamb * Add an example to docs to clarify semantic analysis (#739) - Thanks @alamb * Add information about parting semantic logic to README.md (#724) - Thanks @AugustoFKL * Logical conflicts - Thanks @alamb * Tiny typo in docs (#709) - Thanks @pmcgee69 ## [0.27.0] 2022-11-11 ### Added * Support `ON CONFLICT` and `RETURNING` in `UPDATE` statement (#666) - Thanks @main and @gamife * Support `FULLTEXT` option on create table for MySQL and Generic dialects (#702) - Thanks @AugustoFKL * Support `ARRAY_AGG` for Bigquery and Snowflake (#662) - Thanks @SuperBo * Support DISTINCT for SetOperator (#689) - Thanks @unvalley * Support the ARRAY type of Snowflake (#699) - Thanks @yuval-illumex * Support create sequence with options INCREMENT, MINVALUE, MAXVALUE, START etc. (#681) - Thanks @sam-mmm * Support `:` operator for semi-structured data in Snowflake(#693) - Thanks @yuval-illumex * Support ALTER TABLE DROP PRIMARY KEY (#682) - Thanks @ding-young * Support `NUMERIC` and `DEC` ANSI data types (#695) - Thanks @AugustoFKL * Support modifiers for Custom Datatype (#680) - Thanks @sunng87 ### Changed * Add precision for TIME, DATETIME, and TIMESTAMP data types (#701) - Thanks @AugustoFKL * add Date keyword (#691) - Thanks @sarahyurick * Update simple_logger requirement from 2.1 to 4.0 - Thanks @dependabot ### Fixed * Fix broken DataFusion link (#703) - Thanks @jmg-duarte * Add MySql, BigQuery to all dialects tests, fixed bugs (#697) - Thanks @omer-shtivi ## [0.26.0] 2022-10-19 ### Added * Support MySQL table option `{INDEX | KEY}` in CREATE TABLE definiton (#665) - Thanks @AugustoFKL * Support `CREATE [ { TEMPORARY | TEMP } ] SEQUENCE [ IF NOT EXISTS ] ` (#678) - Thanks @sam-mmm * Support `DROP SEQUENCE` statement (#673) - Thanks @sam-mmm * Support for ANSI types `CHARACTER LARGE OBJECT[(p)]` and `CHAR LARGE OBJECT[(p)]` (#671) - Thanks @AugustoFKL * Support `[CACHE|UNCACHE] TABLE` (#670) - Thanks @francis-du * Support `CEIL(expr TO DateTimeField)` and `FLOOR(expr TO DateTimeField)` - Thanks @sarahyurick * Support all ansii character string types, (#648) - Thanks @AugustoFKL ### Changed * Support expressions inside window frames (#655) - Thanks @mustafasrepo and @ozankabak * Support unit on char length units for small character strings (#663) - Thanks @AugustoFKL * Replace booleans on `SET ROLE` with a single enum. (#664) - Thanks @AugustoFKL * Replace `Option`s with enum for `DECIMAL` precision (#654) - Thanks @AugustoFKL ## [0.25.0] 2022-10-03 ### Added * Support `AUTHORIZATION` clause in `CREATE SCHEMA` statements (#641) - Thanks @AugustoFKL * Support optional precision for `CLOB` and `BLOB` (#639) - Thanks @AugustoFKL * Support optional precision in `VARBINARY` and `BINARY` (#637) - Thanks @AugustoFKL ### Changed * `TIMESTAMP` and `TIME` parsing preserve zone information (#646) - Thanks @AugustoFKL ### Fixed * Correct order of arguments when parsing `LIMIT x,y` , restrict to `MySql` and `Generic` dialects - Thanks @AugustoFKL ## [0.24.0] 2022-09-29 ### Added * Support `MILLENNIUM` (2 Ns) (#633) - Thanks @sarahyurick * Support `MEDIUMINT` (#630) - Thanks @AugustoFKL * Support `DOUBLE PRECISION` (#629) - Thanks @AugustoFKL * Support precision in `CLOB`, `BINARY`, `VARBINARY`, `BLOB` data type (#618) - Thanks @ding-young * Support `CREATE ROLE` and `DROP ROLE` (#598) - Thanks @blx * Support full range of sqlite prepared statement placeholders (#604) - Thanks @lovasoa * Support National string literal with lower case `n` (#612) - Thanks @mskrzypkows * Support SHOW FUNCTIONS (#620) - Thanks @joocer * Support `set time zone to 'some-timezone'` (#617) - Thanks @waitingkuo ### Changed * Move `Value::Interval` to `Expr::Interval` (#609) - Thanks @ding-young * Update `criterion` dev-requirement from 0.3 to 0.4 in /sqlparser_bench (#611) - Thanks @dependabot * Box `Query` in `Cte` (#572) - Thanks @MazterQyou ### Other * Disambiguate CREATE ROLE ... USER and GROUP (#628) - Thanks @alamb * Add test for optional WITH in CREATE ROLE (#627) - Thanks @alamb ## [0.23.0] 2022-09-08 ### Added * Add support for aggregate expressions with filters (#585) - Thanks @andygrove * Support `LOCALTIME` and `LOCALTIMESTAMP` time functions (#592) - Thanks @MazterQyou ## [0.22.0] 2022-08-26 ### Added * Support `OVERLAY` expressions (#594) - Thanks @ayushg * Support `WITH TIMEZONE` and `WITHOUT TIMEZONE` when parsing `TIMESTAMP` expressions (#589) - Thanks @waitingkuo * Add ability for dialects to override prefix, infix, and statement parsing (#581) - Thanks @andygrove ## [0.21.0] 2022-08-18 ### Added * Support `IS [NOT] TRUE`, `IS [NOT] FALSE`, and `IS [NOT] UNKNOWN` - Thanks (#583) @sarahyurick * Support `SIMILAR TO` syntax (#569) - Thanks @ayushdg * Support `SHOW COLLATION` (#564) - Thanks @MazterQyou * Support `SHOW TABLES` (#563) - Thanks @MazterQyou * Support `SET NAMES literal [COLLATE literal]` (#558) - Thanks @ovr * Support trailing commas (#557) in `BigQuery` dialect - Thanks @komukomo * Support `USE ` (#565) - Thanks @MazterQyou * Support `SHOW COLUMNS FROM tbl FROM db` (#562) - Thanks @MazterQyou * Support `SHOW VARIABLES` for `MySQL` dialect (#559) - Thanks @ovr and @vasilev-alex ### Changed * Support arbitrary expression in `SET` statement (#574) - Thanks @ovr and @vasilev-alex * Parse LIKE patterns as Expr not Value (#579) - Thanks @andygrove * Update Ballista link in README (#576) - Thanks @sanxiyn * Parse `TRIM` from with optional expr and `FROM` expr (#573) - Thanks @ayushdg * Support PostgreSQL array subquery constructor (#566) - Thanks @MazterQyou * Clarify contribution licensing (#570) - Thanks @alamb * Update for new clippy ints (#571) - Thanks @alamb * Change `Like` and `ILike` to `Expr` variants, allow escape char (#569) - Thanks @ayushdg * Parse special keywords as functions (`current_user`, `user`, etc) (#561) - Thanks @ovr * Support expressions in `LIMIT`/`OFFSET` (#567) - Thanks @MazterQyou ## [0.20.0] 2022-08-05 ### Added * Support custom `OPERATOR` postgres syntax (#548) - Thanks @iskakaushik * Support `SAFE_CAST` for BigQuery (#552) - Thanks @togami2864 ### Changed * Added SECURITY.md (#546) - Thanks @JamieSlome * Allow `>>` and `<<` binary operators in Generic dialect (#553) - Thanks @ovr * Allow `NestedJoin` with an alias (#551) - Thanks @waitingkuo ## [0.19.0] 2022-07-28 ### Added * Support `ON CLUSTER` for `CREATE TABLE` statement (ClickHouse DDL) (#527) - Thanks @andyrichardson * Support empty `ARRAY` literals (#532) - Thanks @bitemyapp * Support `AT TIME ZONE` clause (#539) - Thanks @bitemyapp * Support `USING` clause and table aliases in `DELETE` (#541) - Thanks @mobuchowski * Support `SHOW CREATE VIEW` statement (#536) - Thanks @mrob95 * Support `CLONE` clause in `CREATE TABLE` statements (#542) - Thanks @mobuchowski * Support `WITH OFFSET Alias` in table references (#528) - Thanks @sivchari * Support double quoted (`"`) literal strings: (#530) - Thanks @komukomo * Support `ON UPDATE` clause on column definitions in `CREATE TABLE` statements (#522) - Thanks @frolovdev ### Changed: * `Box`ed `Query` body to save stack space (#540) - Thanks @5tan * Distinguish between `INT` and `INTEGER` types (#525) - Thanks @frolovdev * Parse `WHERE NOT EXISTS` as `Expr::Exists` rather than `Expr::UnaryOp` for consistency (#523) - Thanks @frolovdev * Support `Expr` instead of `String` for argument to `INTERVAL` (#517) - Thanks @togami2864 ### Fixed: * Report characters instead of bytes in error messages (#529) - Thanks @michael-2956 ## [0.18.0] 2022-06-06 ### Added * Support `CLOSE` (cursors) (#515) - Thanks @ovr * Support `DECLARE` (cursors) (#509) - Thanks @ovr * Support `FETCH` (cursors) (#510) - Thanks @ovr * Support `DATETIME` keyword (#512) - Thanks @komukomo * Support `UNNEST` as a table factor (#493) - Thanks @sivchari * Support `CREATE FUNCTION` (hive flavor) (#496) - Thanks @mobuchowski * Support placeholders (`$` or `?`) in `LIMIT` clause (#494) - Thanks @step-baby * Support escaped string literals (PostgreSQL) (#502) - Thanks @ovr * Support `IS TRUE` and `IS FALSE` (#499) - Thanks @ovr * Support `DISCARD [ALL | PLANS | SEQUENCES | TEMPORARY | TEMP]` (#500) - Thanks @gandronchik * Support `array<..>` HIVE data types (#491) - Thanks @mobuchowski * Support `SET` values that begin with `-` #495 - Thanks @mobuchowski * Support unicode whitespace (#482) - Thanks @alexsatori * Support `BigQuery` dialect (#490) - Thanks @komukomo ### Changed: * Add docs for MapAccess (#489) - Thanks @alamb * Rename `ArrayIndex::indexs` to `ArrayIndex::indexes` (#492) - Thanks @alamb ### Fixed: * Fix escaping of trailing quote in quoted identifiers (#505) - Thanks @razzolini-qpq * Fix parsing of `COLLATE` after parentheses in expressions (#507) - Thanks @razzolini-qpq * Distinguish tables and nullary functions in `FROM` (#506) - Thanks @razzolini-qpq * Fix `MERGE INTO` semicolon handling (#508) - Thanks @mskrzypkows ## [0.17.0] 2022-05-09 ### Added * Support `#` as first character in field name for `RedShift` dialect (#485) - Thanks @yuval-illumex * Support for postgres composite types (#466) - Thanks @poonai * Support `TABLE` keyword with SELECT INTO (#487) - Thanks @MazterQyou * Support `ANY`/`ALL` operators (#477) - Thanks @ovr * Support `ArrayIndex` in `GenericDialect` (#480) - Thanks @ovr * Support `Redshift` dialect, handle square brackets properly (#471) - Thanks @mskrzypkows * Support `KILL` statement (#479) - Thanks @ovr * Support `QUALIFY` clause on `SELECT` for `Snowflake` dialect (#465) - Thanks @mobuchowski * Support `POSITION(x IN y)` function syntax (#463) @yuval-illumex * Support `global`,`local`, `on commit` for `create temporary table` (#456) - Thanks @gandronchik * Support `NVARCHAR` data type (#462) - Thanks @yuval-illumex * Support for postgres json operators `->`, `->>`, `#>`, and `#>>` (#458) - Thanks @poonai * Support `SET ROLE` statement (#455) - Thanks @slhmy ### Changed: * Improve docstrings for `KILL` statement (#481) - Thanks @alamb * Add negative tests for `POSITION` (#469) - Thanks @alamb * Add negative tests for `IN` parsing (#468) - Thanks @alamb * Suppport table names (as well as subqueries) as source in `MERGE` statements (#483) - Thanks @mskrzypkows ### Fixed: * `INTO` keyword is optional for `INSERT`, `MERGE` (#473) - Thanks @mobuchowski * Support `IS TRUE` and `IS FALSE` expressions in boolean filter (#474) - Thanks @yuval-illumex * Support fully qualified object names in `SET VARIABLE` (#484) - Thanks mobuchowski ## [0.16.0] 2022-04-03 ### Added * Support `WEEK` keyword in `EXTRACT` (#436) - Thanks @Ted-Jiang * Support `MERGE` statement (#430) - Thanks @mobuchowski * Support `SAVEPOINT` statement (#438) - Thanks @poonai * Support `TO` clause in `COPY` (#441) - Thanks @matthewmturner * Support `CREATE DATABASE` statement (#451) - Thanks @matthewmturner * Support `FROM` clause in `UPDATE` statement (#450) - Thanks @slhmy * Support additional `COPY` options (#446) - Thanks @wangrunji0408 ### Fixed: * Bug in array / map access parsing (#433) - Thanks @monadbobo ## [0.15.0] 2022-03-07 ### Added * Support for ClickHouse array types (e.g. [1,2,3]) (#429) - Thanks @monadbobo * Support for `unsigned tinyint`, `unsigned int`, `unsigned smallint` and `unsigned bigint` datatypes (#428) - Thanks @watarukura * Support additional keywords for `EXTRACT` (#427) - Thanks @mobuchowski * Support IN UNNEST(expression) (#426) - Thanks @komukomo * Support COLLATION keywork on CREATE TABLE (#424) - Thanks @watarukura * Support FOR UPDATE/FOR SHARE clause (#418) - Thanks @gamife * Support prepared statement placeholder arg `?` and `$` (#420) - Thanks @gamife * Support array expressions such as `ARRAY[1,2]` , `foo[1]` and `INT[][]` (#419) - Thanks @gamife ### Changed: * remove Travis CI (#421) - Thanks @efx ### Fixed: * Allow `array` to be used as a function name again (#432) - @alamb * Update docstring reference to `Query` (#423) - Thanks @max-sixty ## [0.14.0] 2022-02-09 ### Added * Support `CURRENT_TIMESTAMP`, `CURRENT_TIME`, and `CURRENT_DATE` (#391) - Thanks @yuval-illumex * SUPPORT `SUPER` keyword (#387) - Thanks @flaneur2020 * Support differing orders of `OFFSET` `LIMIT` as well as `LIMIT` `OFFSET` (#413) - Thanks @yuval-illumex * Support for `FROM `, `DELIMITER`, and `CSV HEADER` options for `COPY` command (#409) - Thanks @poonai * Support `CHARSET` and `ENGINE` clauses on `CREATE TABLE` for mysql (#392) - Thanks @antialize * Support `DROP CONSTRAINT [ IF EXISTS ] [ CASCADE ]` (#396) - Thanks @tvallotton * Support parsing tuples and add `Expr::Tuple` (#414) - @alamb * Support MySQL style `LIMIT X, Y` (#415) - @alamb * Support `SESSION TRANSACTION` and `TRANSACTION SNAPSHOT`. (#379) - Thanks @poonai * Support `ALTER COLUMN` and `RENAME CONSTRAINT` (#381) - Thanks @zhamlin * Support for Map access, add ClickHouse dialect (#382) - Thanks @monadbobo ### Changed * Restrict where wildcard (`*`) can appear, add to `FunctionArgExpr` remove `Expr::[Qualified]Wildcard`, (#378) - Thanks @panarch * Update simple_logger requirement from 1.9 to 2.1 (#403) * export all methods of parser (#397) - Thanks @neverchanje! * Clarify maintenance status on README (#416) - @alamb ### Fixed * Fix new clippy errors (#412) - @alamb * Fix panic with `GRANT/REVOKE` in `CONNECT`, `CREATE`, `EXECUTE` or `TEMPORARY` - Thanks @evgenyx00 * Handle double quotes inside quoted identifiers correctly (#411) - Thanks @Marwes * Handle mysql backslash escaping (#373) - Thanks @vasilev-alex ## [0.13.0] 2021-12-10 ### Added * Add ALTER TABLE CHANGE COLUMN, extend the UPDATE statement with ON clause (#375) - Thanks @0xA537FD! * Add support for GROUPIING SETS, ROLLUP and CUBE - Thanks @Jimexist! * Add basic support for GRANT and REVOKE (#365) - Thanks @blx! ### Changed * Use Rust 2021 edition (#368) - Thanks @Jimexist! ### Fixed * Fix clippy errors (#367, #374) - Thanks @Jimexist! ## [0.12.0] 2021-10-14 ### Added * Add support for [NOT] IS DISTINCT FROM (#306) - @Dandandan ### Changed * Move the keywords module - Thanks @koushiro! ## [0.11.0] 2021-09-24 ### Added * Support minimum display width for integer data types (#337) Thanks @vasilev-alex! * Add logical XOR operator (#357) - Thanks @xzmrdltl! * Support DESCRIBE table_name (#340) - Thanks @ovr! * Support SHOW CREATE TABLE|EVENT|FUNCTION (#338) - Thanks @ovr! * Add referential actions to TableConstraint foreign key (#306) - Thanks @joshwd36! ### Changed * Enable map access for numbers, multiple nesting levels (#356) - Thanks @Igosuki! * Rename Token::Mult to Token::Mul (#353) - Thanks @koushiro! * Use derive(Default) for HiveFormat (#348) - Thanks @koushiro! * Improve tokenizer error (#347) - Thanks @koushiro! * Eliminate redundant string copy in Tokenizer (#343) - Thanks @koushiro! * Update bigdecimal requirement from 0.2 to 0.3 dependencies (#341) * Support parsing hexadecimal literals that start with `0x` (#324) - Thanks @TheSchemm! ## [0.10.0] 2021-08-23 ### Added * Support for `no_std` (#332) - Thanks @koushiro! * Postgres regular expression operators (`~`, `~*`, `!~`, `!~*`) (#328) - Thanks @b41sh! * tinyint (#320) - Thanks @sundy-li * ILIKE (#300) - Thanks @maxcountryman! * TRIM syntax (#331, #334) - Thanks ever0de ### Fixed * Return error instead of panic (#316) - Thanks @BohuTANG! ### Changed - Rename `Modulus` to `Modulo` (#335) - Thanks @RGRAVITY817! - Update links to reflect repository move to `sqlparser-rs` GitHub org (#333) - Thanks @andygrove - Add default value for `WindowFrame` (#313) - Thanks @Jimexist! ## [0.9.0] 2021-03-21 ### Added * Add support for `TRY_CAST` syntax (#299) - Thanks @seddonm1! ## [0.8.0] 2021-02-20 ### Added * Introduce Hive QL dialect `HiveDialect` and syntax (#235) - Thanks @hntd187! * Add `SUBSTRING(col [FROM ] [FOR ])` syntax (#293) * Support parsing floats without leading digits `.01` (#294) * Support parsing multiple show variables (#290) - Thanks @francis-du! * Support SQLite `INSERT OR [..]` syntax (#281) - Thanks @zhangli-pear! ## [0.7.0] 2020-12-28 ### Changed - Change the MySQL dialect to support `` `identifiers` `` quoted with backticks instead of the standard `"double-quoted"` identifiers (#247) - thanks @mashuai! - Update bigdecimal requirement from 0.1 to 0.2 (#268) ### Added - Enable dialect-specific behaviours in the parser (`dialect_of!()`) (#254) - thanks @eyalleshem! - Support named arguments in function invocations (`ARG_NAME => val`) (#250) - thanks @eyalleshem! - Support `TABLE()` functions in `FROM` (#253) - thanks @eyalleshem! - Support Snowflake's single-line comments starting with '#' or '//' (#264) - thanks @eyalleshem! - Support PostgreSQL `PREPARE`, `EXECUTE`, and `DEALLOCATE` (#243) - thanks @silathdiir! - Support PostgreSQL math operators (#267) - thanks @alex-dukhno! - Add SQLite dialect (#248) - thanks @mashuai! - Add Snowflake dialect (#259) - thanks @eyalleshem! - Support for Recursive CTEs - thanks @rhanqtl! - Support `FROM (table_name) alias` syntax - thanks @eyalleshem! - Support for `EXPLAIN [ANALYZE] VERBOSE` - thanks @ovr! - Support `ANALYZE TABLE` - DDL: - Support `OR REPLACE` in `CREATE VIEW`/`TABLE` (#239) - thanks @Dandandan! - Support specifying `ASC`/`DESC` in index columns (#249) - thanks @mashuai! - Support SQLite `AUTOINCREMENT` and MySQL `AUTO_INCREMENT` column option in `CREATE TABLE` (#234) - thanks @mashuai! - Support PostgreSQL `IF NOT EXISTS` for `CREATE SCHEMA` (#276) - thanks @alex-dukhno! ### Fixed - Fix a typo in `JSONFILE` serialization, introduced in 0.3.1 (#237) - Change `CREATE INDEX` serialization to not end with a semicolon, introduced in 0.5.1 (#245) - Don't fail parsing `ALTER TABLE ADD COLUMN` ending with a semicolon, introduced in 0.5.1 (#246) - thanks @mashuai ## [0.6.1] - 2020-07-20 ### Added - Support BigQuery `ASSERT` statement (#226) ## [0.6.0] - 2020-07-20 ### Added - Support SQLite's `CREATE TABLE (...) WITHOUT ROWID` (#208) - thanks @mashuai! - Support SQLite's `CREATE VIRTUAL TABLE` (#209) - thanks @mashuai! ## [0.5.1] - 2020-06-26 This release should have been called `0.6`, as it introduces multiple incompatible changes to the API. If you don't want to upgrade yet, you can revert to the previous version by changing your `Cargo.toml` to: sqlparser = "= 0.5.0" ### Changed - **`Parser::parse_sql` now accepts a `&str` instead of `String` (#182)** - thanks @Dandandan! - Change `Ident` (previously a simple `String`) to store the parsed (unquoted) `value` of the identifier and the `quote_style` separately (#143) - thanks @apparebit! - Support Snowflake's `FROM (table_name)` (#155) - thanks @eyalleshem! - Add line and column number to TokenizerError (#194) - thanks @Dandandan! - Use Token::EOF instead of Option (#195) - Make the units keyword following `INTERVAL '...'` optional (#184) - thanks @maxcountryman! - Generalize `DATE`/`TIME`/`TIMESTAMP` literals representation in the AST (`TypedString { data_type, value }`) and allow `DATE` and other keywords to be used as identifiers when not followed by a string (#187) - thanks @maxcountryman! - Output DataType capitalized (`fmt::Display`) (#202) - thanks @Dandandan! ### Added - Support MSSQL `TOP () [ PERCENT ] [ WITH TIES ]` (#150) - thanks @alexkyllo! - Support MySQL `LIMIT row_count OFFSET offset` (not followed by `ROW` or `ROWS`) and remember which variant was parsed (#158) - thanks @mjibson! - Support PostgreSQL `CREATE TABLE IF NOT EXISTS table_name` (#163) - thanks @alex-dukhno! - Support basic forms of `CREATE INDEX` and `DROP INDEX` (#167) - thanks @mashuai! - Support `ON { UPDATE | DELETE } { RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT }` in `FOREIGN KEY` constraints (#170) - thanks @c7hm4r! - Support basic forms of `CREATE SCHEMA` and `DROP SCHEMA` (#173) - thanks @alex-dukhno! - Support `NULLS FIRST`/`LAST` in `ORDER BY` expressions (#176) - thanks @houqp! - Support `LISTAGG()` (#174) - thanks @maxcountryman! - Support the string concatentation operator `||` (#178) - thanks @Dandandan! - Support bitwise AND (`&`), OR (`|`), XOR (`^`) (#181) - thanks @Dandandan! - Add serde support to AST structs and enums (#196) - thanks @panarch! - Support `ALTER TABLE ADD COLUMN`, `RENAME COLUMN`, and `RENAME TO` (#203) - thanks @mashuai! - Support `ALTER TABLE DROP COLUMN` (#148) - thanks @ivanceras! - Support `CREATE TABLE ... AS ...` (#206) - thanks @Dandandan! ### Fixed - Report an error for unterminated string literals (#165) - Make file format (`STORED AS`) case insensitive (#200) and don't allow quoting it (#201) - thanks @Dandandan! ## [0.5.0] - 2019-10-10 ### Changed - Replace the `Value::Long(u64)` and `Value::Double(f64)` variants with `Value::Number(String)` to avoid losing precision when parsing decimal literals (#130) - thanks @benesch! - `--features bigdecimal` can be enabled to work with `Value::Number(BigDecimal)` instead, at the cost of an additional dependency. ### Added - Support MySQL `SHOW COLUMNS`, `SET =`, and `SHOW ` statements (#135) - thanks @quodlibetor and @benesch! ### Fixed - Don't fail to parse `START TRANSACTION` followed by a semicolon (#139) - thanks @gaffneyk! ## [0.4.0] - 2019-07-02 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. ### Changed - Remove "SQL" from type and enum variant names, `SQLType` -> `DataType`, remove "sql" prefix from module names (#105, #122) - Rename `ASTNode` -> `Expr` (#119) - Improve consistency of binary/unary op nodes (#112): - `ASTNode::SQLBinaryExpr` is now `Expr::BinaryOp` and `ASTNode::SQLUnary` is `Expr::UnaryOp`; - The `op: SQLOperator` field is now either a `BinaryOperator` or an `UnaryOperator`. - Change the representation of JOINs to match the standard (#109): `SQLSelect`'s `relation` and `joins` are replaced with `from: Vec`. 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`). - Extract a `SQLFunction` struct (#89) - Replace `Option>` with `Vec` in the AST structs (#73) - Change `Value::Long()` to be unsigned, use u64 consistently (#65) ### Added - Infra: - Implement `fmt::Display` on AST nodes (#124) - thanks @vemoo! - Implement `Hash` (#88) and `Eq` (#123) on all AST nodes - Implement `std::error::Error` for `ParserError` (#72) - Handle Windows line-breaks (#54) - Expressions: - Support `INTERVAL` literals (#103) - Support `DATE` / `TIME` / `TIMESTAMP` literals (#99) - Support `EXTRACT` (#96) - Support `X'hex value'` literals (#95) - Support `EXISTS` subqueries (#90) - Support nested expressions in `BETWEEN` (#80) - Support `COUNT(DISTINCT x)` and similar (#77) - Support `CASE operand WHEN expected_value THEN ..` and table-valued functions (#59) - Support analytic (window) functions (`OVER` clause) (#50) - Queries / DML: - Support nested joins (#100) and derived tables with set operations (#111) - Support `UPDATE` statements (#97) - Support `INSERT INTO foo SELECT * FROM bar` and `FROM VALUES (...)` (#91) - Support `SELECT ALL` (#76) - Add `FETCH` and `OFFSET` support, and `LATERAL` (#69) - thanks @thomas-jeepe! - Support `COLLATE`, optional column list in CTEs (#64) - DDL/TCL: - Support `START/SET/COMMIT/ROLLBACK TRANSACTION` (#106) - thanks @SamuelMarks! - Parse column constraints in any order (#93) - Parse `DECIMAL` and `DEC` aliases for `NUMERIC` type (#92) - Support `DROP [TABLE|VIEW]` (#75) - Support arbitrary `WITH` options for `CREATE [TABLE|VIEW]` (#74) - Support constraints in `CREATE TABLE` (#65) - Add basic MSSQL dialect (#61) and some MSSQL-specific features: - `CROSS`/`OUTER APPLY` (#120) - MSSQL identifier and alias parsing rules (#66) - `WITH` hints (#59) ### Fixed - Report an error for `SELECT * FROM a OUTER JOIN b` instead of parsing `OUTER` as an alias (#118) - Fix the precedence of `NOT LIKE` (#82) and unary `NOT` (#107) - Do not panic when `NOT` is not followed by an expected keyword (#71) successfully instead of returning a parse error - thanks @ivanceras! (#67) - and similar fixes for queries with no `FROM` (#116) - Fix issues with `ALTER TABLE ADD CONSTRAINT` parsing (#65) - Serialize the "not equals" operator as `<>` instead of `!=` (#64) - Remove dependencies on `uuid` (#59) and `chrono` (#61) - 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) ## [0.3.1] - 2019-04-20 ### Added - Extended `SQLStatement::SQLCreateTable` to support Hive's EXTERNAL TABLES (`CREATE EXTERNAL TABLE .. STORED AS .. LOCATION '..'`) - thanks @zhzy0077! (#46) - Parse `SELECT DISTINCT` to `SQLSelect::distinct` (#49) ## [0.3.0] - 2019-04-03 ### Changed This release includes major changes to the AST structs to add a number of features, as described in #37 and #43. In particular: - `ASTNode` variants that represent statements were extracted from `ASTNode` into a separate `SQLStatement` enum; - `Parser::parse_sql` now returns a `Vec` of parsed statements. - `ASTNode` now represents an expression (renamed to `Expr` in 0.4.0) - The query representation (formerly `ASTNode::SQLSelect`) became more complicated to support: - `WITH` and `UNION`/`EXCEPT`/`INTERSECT` (via `SQLQuery`, `Cte`, and `SQLSetExpr`), - aliases and qualified wildcards in `SELECT` (via `SQLSelectItem`), - and aliases in `FROM`/`JOIN` (via `TableFactor`). - A new `SQLObjectName` struct is used instead of `String` or `ASTNode::SQLCompoundIdentifier` - for objects like tables, custom types, etc. - 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** ### Added Other than the changes listed above, some less intrusive additions include: - Support `CREATE [MATERIALIZED] VIEW` statement - Support `IN`, `BETWEEN`, unary +/- in epressions - Support `CHAR` data type and `NUMERIC` not followed by `(p,s)`. - Support national string literals (`N'...'`) ## [0.2.4] - 2019-03-08 Same as 0.2.2. ## [0.2.3] - 2019-03-08 [YANKED] ## [0.2.2] - 2019-03-08 ### Changed - Removed `Value::String`, `Value::DoubleQuotedString`, and `Token::String`, making - `'...'` parse as a string literal (`Value::SingleQuotedString`), and - `"..."` fail to parse until version 0.3.0 (#36) ## [0.2.1] - 2019-01-13 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! ## [0.1.0] - 2018-09-03 Initial release