All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project aims to adhere to Semantic Versioning.
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".
Check https://github.com/sqlparser-rs/sqlparser-rs/commits/main for undocumented changes.
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: apache#1294
- Clippy 1.80 warnings (#1357) - Thanks @lovasoa
- Support
STRUCTand list of structs for DuckDB dialect (#1372) - Thanks @jayzhan211 - Support custom lexical precedence in PostgreSQL dialect (#1379) - Thanks @samuelcolvin
- Support
FREEZE|UNFREEZE PARTITIONsyntax for ClickHouse (#1380) - Thanks @git-hulk - Support scale in
CEILandFLOORfunctions (#1377) - Thanks @seve-martinez - Support
CREATE TRIGGERandDROP TRIGGERstatements (#1352) - Thanks @LucaCappelletti94 - Support
EXTRACTsyntax for snowflake (#1374) - Thanks @seve-martinez - Support
ATTACH/DETACH PARTITIONfor 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
SETTINGSclause for ClickHouse table-valued functions (#1358) - Thanks @Jesse-Bakker - Support
OPTIMIZE TABLEstatement for ClickHouse (#1359) - Thanks @git-hulk - Support
ON CLUSTERinALTER TABLEfor ClickHouse (#1342) - Thanks @git-hulk - Support
GLOBALkeyword 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
TABLEkeyword inDESC|DESCRIBE|EXPLAIN TABLEstatement (#1351) - Thanks @git-hulk
- Only require
DESCRIBE TABLEfor Snowflake and ClickHouse dialect (#1386) - Thanks @ alamb - Rename (unreleased)
get_next_precedence_fulltoget_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_parsepub (#1364) - Thanks @Jesse-Bakker - Improve comments on 1Dialect` (#1366) - Thanks @alamb
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: apache#1294
- Fix quoted identifier regression edge-case with "from" in SELECT (#1346) - Thanks @alexander-beedie
- Fix
ASquery clause should be after the create table options (#1339) - Thanks @git-hulk
- Support
MATERIALIZED/ALIAS/EPHERMERALdefault column options for ClickHouse (#1348) - Thanks @git-hulk - Support
()as theGROUP BYnothing (#1347) - Thanks @git-hulk - Support Map literal syntax for DuckDB and Generic (#1344) - Thanks @goldmedal
- Support subquery expression in
SETexpressions (#1343) - Thanks @iffyio - Support
WITH FILLfor ClickHouse (#1330) - Thanks @nickpresta - Support
PARTITION BYfor PostgreSQL inCREATE TABLEstatement (#1338) - Thanks @git-hulk - Support of table function
WITH ORDINALITYmodifier for Postgres (#1337) - Thanks @git-hulk
Huge shout out to @iffyio @jmhain and @lovasoa for their help reviewing and merging PRs!
- 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 ... RENAMEorder (#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_INCREMENTandTOP(#1305) - Thanks @eejbyfeldt
- Support
OWNER TOclause in Postgres (#1314) - Thanks @gainings - Support
FORMATclause for ClickHouse (#1335) - Thanks @git-hulk - Support
DROP PROCEDUREstatement (#1324) - Thanks @LorrensP-2158466 - Support
PREWHEREcondition for ClickHouse dialect (#1328) - Thanks @git-hulk - Support
SETTINGSpairs for ClickHouse dialect (#1327) - Thanks @git-hulk - Support
GROUP BY WITH MODIFIERfor ClickHouse dialect (#1323) - Thanks @git-hulk - Support DuckDB Union datatype (#1322) - Thanks @gstvg
- Support parametric arguments to
FUNCTIONfor ClickHouse dialect (#1315) - Thanks @git-hulk - Support
TOinCREATE VIEWclause for Clickhouse (#1313) - Thanks @Bidaya0 - Support
UPDATEstatements that contain tuple assignments (#1317) - Thanks @lovasoa - Support `BY NAME quantifier across all set ops (#1309) - Thanks @alexander-beedie
- Support SnowFlake exclusive
CREATE TABLEoptions (#1233) - Thanks @balliegojr - Support ClickHouse
CREATE TABLEwith primary key and parametrised table engine (#1289) - Thanks @7phs - Support custom operators in Postgres (#1302) - Thanks @lovasoa
- Support ClickHouse data types (#1285) - Thanks @7phs
- 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,CreateIndexinto specific structs (#1291) - Thanks @philipcristiano
- 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
- Support
ASOFjoins in Snowflake (#1288) - Thanks @jmhain - Support
CREATE VIEWwith 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 FUNCTIONfor BigQuery, generalize AST (#1253) - Thanks @iffyio - Support expression in
AT TIME ZONEand fix precedence (#1272) - Thanks @jmhain - Support
IGNORE/RESPECT NULLSinside function argument list for Databricks (#1263) - Thanks @jmhain - Support
SELECT * EXCEPTDatabricks (#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_VALUEHAVINGclause (#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
- Consolidate representation of function calls, remove
AggregateExpressionWithFilter,ArraySubquery,ListAggandArrayAgg(#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
- Fix redundant brackets in Hive/Snowflake/Redshift (#1229) - Thanks @yuval-illumex
- Support values without parens in Snowflake and DataBricks (#1249) - Thanks @HiranmayaGundu
- Support WINDOW clause after QUALIFY when parsing (#1248) - Thanks @iffyio
- Support
DECLAREparsing 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 * ilikefor snowflake (#1228) - Thanks @HiranmayaGundu - Support wildcard replace in duckdb and snowflake syntax (#1226) - Thanks @HiranmayaGundu
- Support
DateTimeFieldvariants:CUSTOMandWEEK(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 SECRETfor duckdb dialect (#1208) - Thanks @JichaoS - Support MySQL
UNIQUEtable constraint (#1164) - Thanks @Nikita-str - Support tailing commas on Snowflake. (#1205) - Thanks @yassun7010
- Support
[FIRST | AFTER column_name]inALTER TABLEfor 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
INSERTstatement for MySQL and Generic dialects (#1136) - Thanks @emin100
- Fix dollar quoted string tokenizer (#1193) - Thanks @ZacJW
- Do not allocate in
impl DisplayforDateTimeField(#1209) - Thanks @alamb - Fix parse
COPY INTOstage 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
- Cleanup
CREATE FUNCTIONtests (#1203) - Thanks @alamb - Parse
SUBSTRING FROMsyntax in all dialects, reflect change in the AST (#1173) - Thanks @lovasoa - Add identifier quote style to Dialect trait (#1170) - Thanks @backkem
- Support EXPLAIN / DESCR / DESCRIBE [FORMATTED | EXTENDED] (#1156) - Thanks @jonathanlehtoalamb
- Support ALTER TABLE ... SET LOCATION (#1154) - Thanks @jonathanlehto
- Support
ROW FORMAT DELIMITEDin Hive (#1155) - Thanks @jonathanlehto - Support
SERDEPROPERTIESforCREATE TABLEwith Hive (#1152) - Thanks @jonathanlehto - Support
EXECUTE ... USINGfor Postgres (#1153) - Thanks @jonathanlehto - Support Postgres style
CREATE FUNCTIONin GenericDialect (#1159) - Thanks @alamb - Support
SET TBLPROPERTIES(#1151) - Thanks @jonathanlehto - Support
UNLOADstatement (#1150) - Thanks @jonathanlehto - Support
MATERIALIZED CTEs(#1148) - Thanks @ReppCodes - Support
DECLAREsyntax for snowflake and bigquery (#1122) - Thanks @iffyio - Support
SELECT AS VALUEandSELECT AS STRUCTfor BigQuery (#1135) - Thanks @lustefaniak - Support
(+)outer join syntax (#1145) - Thanks @jmhain - Support
INSERT INTO ... SELECT ... RETURNING(#1132) - Thanks @lovasoa - Support DuckDB
INSTALLandLOAD(#1127) - Thanks @universalmind303 - Support
=operator in function args (#1128) - Thanks @universalmind303 - Support
CREATE VIEW IF NOT EXISTS(#1118) - Thanks @7phs - Support
UPDATE FROMfor SQLite (further to #694) (#1117) - Thanks @ggaughan - Support optional
DELETE FROMstatement (#1120) - Thanks @iffyio - Support MySQL
SHOW STATUSstatement (#1119) - Thanks invm
- 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
- Add
parse_keyword_with_tokensfor 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
- Fixed CHANGELOG
- NO CHANGES
- Support for constraint
CHARACTERISTICSclause (#1099) - Thanks @dimfeld - Support for unquoted hyphenated identifiers on bigquery (#1109) - Thanks @jmhain
- Support
BigQuerytable 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(andDATE_PART) (#1090) - Thanks @alexander-beedie - Support
JSONBdatatype (#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 GENERATEDinALTER COLUMNstatements (#1079) - Thanks @tobyhede - Support SQLite column definitions with no type (#1075) - Thanks @takluyver
- Support PostgreSQL
ENABLEandDISABLEonALTER TABLE(#1077) - Thanks @tobyhede - Support MySQL
FLUSHstatement (#1076) - Thanks @emin100 - Support Mysql
REPLACEstatement andPRIORITYclause ofINSERT(#1072) - Thanks @emin100
- Fix
:startand:endjson accesses on SnowFlake (#1110) - Thanks @jmhain - Fix array_agg wildcard behavior (#1093) - Thanks @ReppCodes
- Error on dangling
NOinCREATE SEQUENCEoptions (#1104) - Thanks @PartiallyTyped - Allow string values in
PRAGMAcommands (#1101) - Thanks @invm
- Use
Option<Expr>for Min and Max vals in Seq Opts, fix alter col seq display (#1106) - Thanks @PartiallyTyped - Replace
AtomicUsizewith 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-deriveto 0.2.2 (#1083) - Thanks @alamb
- Support
DEFERRED,IMMEDIATE, andEXCLUSIVEin SQLite'sBEGIN TRANSACTIONcommand (#1067) - Thanks @takaebato - Support generated columns skipping
GENERATED ALWAYSkeywords (#1058) - Thanks @takluyver - Support
LOCK/UNLOCK TABLESfor MySQL (#1059) - Thanks @zzzdong - Support
JSON_TABLE(#1062) - Thanks @lovasoa - Support
CALLstatements (#1063) - Thanks @lovasoa
- fix rendering of SELECT TOP (#1070) for Snowflake - Thanks jmhain
- 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
- Add
{pre,post}_visit_querytoVisitor(#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
RELEASEandROLLBACK TO SAVEPOINT(#1045) - Thanks @CDThomas - Support
CONVERTexpressions (#1048) - Thanks @lovasoa - Support
GLOBALandSESSIONparts inSHOW VARIABLESfor mysql and generic - Thanks @emin100 - Support snowflake
PIVOTon derived table factors (#1027) - Thanks @lustefaniak - Support mssql json and xml extensions (#1043) - Thanks @lovasoa
- Support for
MAXas a character length (#1038) - Thanks @lovasoa - Support
IN ()syntax of SQLite (#1028) - Thanks @alamb
- Fix extra whitespace printed before
ON CONFLICT(#1037) - Thanks @CDThomas
- Document round trip ability (#1052) - Thanks @alamb
- Add PRQL to list of users (#1031) - Thanks @vanillajonathan
- Support for
LATERAL FLATTENand similar (#1026) - Thanks @lustefaniak - Support BigQuery struct, array and bytes , int64,
float64datatypes (#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
pragmastatement (#969) - Thanks @marhoily - Support
positionas a column name (#1022) - Thanks @lustefaniak - Support
FILTERin Functions (forOVER) clause (#1007) - Thanks @lovasoa - Support
SELECT * EXCEPT/REPLACEsyntax from ClickHouse (#1013) - Thanks @lustefaniak - Support subquery as function arg w/o parens in Snowflake dialect (#996) - Thanks @jmhain
- Support
UNION DISTINCT BY NAMEsyntax (#997) - Thanks @alexander-beedie - Support mysql
RLIKEandREGEXPbinary operators (#1017) - Thanks @lovasoa - Support bigquery
CAST AS x [STRING|DATE] FORMATsyntax (#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 BINDINGRedshift (#979) - Thanks @lustefaniak - Support
UNPIVOTand 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
DELETEwithORDER BYandLIMIT(MySQL) (#992) - Thanks @ulrichsg - Support
EXTRACTforDAYOFWEEK,DAYOFYEAR,ISOWEEK,TIME(#980) - Thanks @lustefaniak - Support
ATTACH DATABASE(#989) - Thanks @lovasoa
- Fix handling of
/~%in Snowflake stage name (#1009) - Thanks @lustefaniak - Fix column
COLLATEnot displayed (#1012) - Thanks @lustefaniak - Fix for clippy 1.73 (#995) - Thanks @alamb
- 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
- Support
==operator for Sqlite (#970) - Thanks @marhoily - Support mysql
PARTITIONto table selection (#959) - Thanks @chunshao90 - Support
UNNESTas a table factor for PostgreSQL (#968) @hexedpackets - Support MySQL
UNIQUE KEYsyntax (#962) - Thanks @artorias1024 - Support
GROUP BY ALL` (#964) - @berkaysynnada - Support multiple actions in one ALTER TABLE statement (#960) - Thanks @ForbesLindesay
- Add
--sqlite paramto CLI (#956) - Thanks @ddol
- Fix Rust 1.72 clippy lints (#957) - Thanks @alamb
- Add missing token loc in parse err msg (#965) - Thanks @ding-young
- Change how
ANYandALLexpressions 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
- Support
FOR SYSTEM_TIME AS OFtable time travel clause support,visit_table_factorto Visitor (#951) - Thanks @gruuya - Support MySQL
auto_incrementoffset in table definition (#950) - Thanks @ehoeve - Test for mssql table name in square brackets (#952) - Thanks @lovasoa
- Support additional Postgres
CREATE INDEXsyntax (#943) - Thanks @ForbesLindesay - Support
ALTER ROLEsyntax 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
- Clarify the value of the special flag (#948) - Thanks @alamb
- Fix
SUBSTRINGfrom/to argument construction for mssql (#947) - Thanks @jmaness - Fix: use Rust idiomatic capitalization for newly added DataType enums (#939) - Thanks @Kikkon
- Fix
BEGIN TRANSACTIONbeing serialized asSTART TRANSACTION(#935) - Thanks @lovasoa - Fix parsing of datetime functions without parenthesis (#930) - Thanks @lovasoa
- Fix parsing of identifiers after '%' symbol (#927) - Thanks @alamb
- 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
PGOverlapoperator (#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
- Parse JsonOperators correctly (#913) - Thanks @izveigor
- Fix dependabot by removing rust-toolchain toml (#922) - Thanks @alamb
- 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
- Support
CREATE PROCEDUREof MSSQL (#900) - Thanks @delsehi - Support DuckDB's
CREATE MACROstatements (#897) - Thanks @MartinNowak - Support for
CREATE TYPE (AS)statements (#888) - Thanks @srijs - Support
STRICTtables of sqlite (#903) - Thanks @parkma99
- Fixed precedence of unary negation operator with operators: Mul, Div and Mod (#902) - Thanks @izveigor
- Add
support_group_by_exprtoDialecttrait (#896) - Thanks @jdye64 - Update criterion requirement from
0.4to0.5in/sqlparser_bench(#890) - Thanks @dependabot (!!)
- Support named window frames (#881) - Thanks @berkaysynnada, @mustafasrepo, and @ozankabak
- Support for
ORDER BYclauses in aggregate functions (#882) - Thanks @mustafasrepo - Support
DuckDBdialect (#878) - Thanks @eitsupi - Support optional
TABLEkeyword forTRUNCATE TABLE(#883) - Thanks @mobuchowski - Support MySQL's
DIVoperator (#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 .. TOstatement (#858) - Thanks @aprimadi - Support
DISTINCT ON (...)(#852) - Thanks @aljazerzen - Support multiple-table
DELETEsyntax (#855) - Thanks @AviRaboah - Support
COPY INTOinSnowflakeDialect(#841) - Thanks @pawel-big-lebowski - Support identifiers beginning with digits in MySQL (#856) - Thanks @AviRaboah
- Include license file in published crate (#871) - Thanks @ankane
- Make
Expr::Intervalits own struct (#872) - Thanks @aprimadi - Add dialect_from_str and improve Dialect documentation (#848) - Thanks @alamb
- Add clickhouse to example (#849) - Thanks @anglinb
- 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
- 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
- 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
- Support ClickHouse
CREATE TABLEwithORDER BY(#824) - Thanks @ankrgyl - Support PostgreSQL exponentiation
^operator (#813) - Thanks @michael-2956 - Support
BIGNUMERICtype in BigQuery (#811) - Thanks @togami2864 - Support for optional trailing commas (#810) - Thanks @ankrgyl
- Fix table alias parsing regression by backing out redshift column definition list (#827) - Thanks @alamb
- Fix typo in
ReplaceSelectElementcolum_name-->column_name(#822) - Thanks @togami2864
- Support raw string literals for BigQuery dialect (#812) - Thanks @togami2864
- Support
SELECT * REPLACE <Expr> AS <Identifier>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
TRANSIENTkeyword in Snowflake dialect (#807) - Thanks @mobuchowski - Support
JSONkeyword (#799) - Thanks @togami2864 - Support MySQL Character Set Introducers (#788) - Thanks @mskrzypkows
- 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
- Add another known user (#787) - Thanks @joocer
- Support
RENAMEfor wildcardSELECTs(#784) - Thanks @Jefffrey - Add a mutable visitor (#782) - Thanks @lovasoa
- Allow parsing of mysql empty row inserts (#783) - Thanks @Jefffrey
- Fix logical conflict (#785) - Thanks @alamb
- Partial source location tracking: see #710
- Recursion limit to prevent stack overflows: #764
- AST visitor: #765
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 <expr>Function (#685) - Thanks @CEOJINSUNG - Support
CREATE FUNCTIONdefinition 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 FUNCTIONsyntax (#752) - Thanks @zidaye - Support json operators
@><@,@?and@@- Thanks @audunska - Support the type key (#750)- Thanks @yuval-illumex
- 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
NANOSECONDkeyword (#749)- Thanks @waitingkuo
- 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
- Support for
EXCEPTclause on wildcards (#745) - Thanks @AugustoFKL - Support
CREATE FUNCTIONPostgres options (#722) - Thanks @wangrunji0408 - Support
CREATE TABLE x AS TABLE y(#704) - Thanks @sarahyurick - Support MySQL
ROWSsyntax forVALUES(#737) - Thanks @aljazerzen - Support
WHEREcondition forUPDATE ON CONFLICT(#735) - Thanks @zidaye - Support
CLUSTER BYwhen creating Materialized View (#736) - Thanks @yuval-illumex - Support nested comments (#726) - Thanks @yang-han
- Support
USINGmethod when creating indexes. (#731) - Thanks @step-baby and @yangjiaxin01 - Support
SEMI/ANTIJOINsyntax (#723) - Thanks @mingmwang - Support
EXCLUDEsupport for snowflake and generic dialect (#721) - Thanks @AugustoFKL - Support
MATCH AGAINST(#708) - Thanks @AugustoFKL - Support
IF NOT EXISTSinALTER TABLE ADD COLUMN(#707) - Thanks @AugustoFKL - Support
SET TIME ZONE <value>(#727) - Thanks @waitingkuo - Support
UPDATE ... FROM ( subquery )(#694) - Thanks @unvalley
- Add
Parser::index()method to get current parsing index (#728) - Thanks @neverchanje - Add
COMPRESSIONas keyword (#720)- Thanks @AugustoFKL - Derive
PartialOrd,Ord, andCopywhenever possible (#717) - Thanks @AugustoFKL - Fixed
INTERVALparsing logic and precedence (#705) - Thanks @sarahyurick - Support updating multiple column names whose names are the same as(#725) - Thanks @step-baby
- 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
- Support
ON CONFLICTandRETURNINGinUPDATEstatement (#666) - Thanks @main and @gamife - Support
FULLTEXToption on create table for MySQL and Generic dialects (#702) - Thanks @AugustoFKL - Support
ARRAY_AGGfor 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
NUMERICandDECANSI data types (#695) - Thanks @AugustoFKL - Support modifiers for Custom Datatype (#680) - Thanks @sunng87
- 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
- Fix broken DataFusion link (#703) - Thanks @jmg-duarte
- Add MySql, BigQuery to all dialects tests, fixed bugs (#697) - Thanks @omer-shtivi
- Support MySQL table option
{INDEX | KEY}in CREATE TABLE definiton (#665) - Thanks @AugustoFKL - Support
CREATE [ { TEMPORARY | TEMP } ] SEQUENCE [ IF NOT EXISTS ] <sequence_name>(#678) - Thanks @sam-mmm - Support
DROP SEQUENCEstatement (#673) - Thanks @sam-mmm - Support for ANSI types
CHARACTER LARGE OBJECT[(p)]andCHAR LARGE OBJECT[(p)](#671) - Thanks @AugustoFKL - Support
[CACHE|UNCACHE] TABLE(#670) - Thanks @francis-du - Support
CEIL(expr TO DateTimeField)andFLOOR(expr TO DateTimeField)- Thanks @sarahyurick - Support all ansii character string types, (#648) - Thanks @AugustoFKL
- 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 ROLEwith a single enum. (#664) - Thanks @AugustoFKL - Replace
Options with enum forDECIMALprecision (#654) - Thanks @AugustoFKL
- Support
AUTHORIZATIONclause inCREATE SCHEMAstatements (#641) - Thanks @AugustoFKL - Support optional precision for
CLOBandBLOB(#639) - Thanks @AugustoFKL - Support optional precision in
VARBINARYandBINARY(#637) - Thanks @AugustoFKL
TIMESTAMPandTIMEparsing preserve zone information (#646) - Thanks @AugustoFKL
- Correct order of arguments when parsing
LIMIT x,y, restrict toMySqlandGenericdialects - Thanks @AugustoFKL
- Support
MILLENNIUM(2 Ns) (#633) - Thanks @sarahyurick - Support
MEDIUMINT(#630) - Thanks @AugustoFKL - Support
DOUBLE PRECISION(#629) - Thanks @AugustoFKL - Support precision in
CLOB,BINARY,VARBINARY,BLOBdata type (#618) - Thanks @ding-young - Support
CREATE ROLEandDROP 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
- Move
Value::IntervaltoExpr::Interval(#609) - Thanks @ding-young - Update
criteriondev-requirement from 0.3 to 0.4 in /sqlparser_bench (#611) - Thanks @dependabot - Box
QueryinCte(#572) - Thanks @MazterQyou
- Disambiguate CREATE ROLE ... USER and GROUP (#628) - Thanks @alamb
- Add test for optional WITH in CREATE ROLE (#627) - Thanks @alamb
- Add support for aggregate expressions with filters (#585) - Thanks @andygrove
- Support
LOCALTIMEandLOCALTIMESTAMPtime functions (#592) - Thanks @MazterQyou
- Support
OVERLAYexpressions (#594) - Thanks @ayushg - Support
WITH TIMEZONEandWITHOUT TIMEZONEwhen parsingTIMESTAMPexpressions (#589) - Thanks @waitingkuo - Add ability for dialects to override prefix, infix, and statement parsing (#581) - Thanks @andygrove
- Support
IS [NOT] TRUE,IS [NOT] FALSE, andIS [NOT] UNKNOWN- Thanks (#583) @sarahyurick - Support
SIMILAR TOsyntax (#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
BigQuerydialect - Thanks @komukomo - Support
USE <DB>(#565) - Thanks @MazterQyou - Support
SHOW COLUMNS FROM tbl FROM db(#562) - Thanks @MazterQyou - Support
SHOW VARIABLESforMySQLdialect (#559) - Thanks @ovr and @vasilev-alex
- Support arbitrary expression in
SETstatement (#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
TRIMfrom with optional expr andFROMexpr (#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
LikeandILiketoExprvariants, 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
- Support custom
OPERATORpostgres syntax (#548) - Thanks @iskakaushik - Support
SAFE_CASTfor BigQuery (#552) - Thanks @togami2864
- Added SECURITY.md (#546) - Thanks @JamieSlome
- Allow
>>and<<binary operators in Generic dialect (#553) - Thanks @ovr - Allow
NestedJoinwith an alias (#551) - Thanks @waitingkuo
- Support
ON CLUSTERforCREATE TABLEstatement (ClickHouse DDL) (#527) - Thanks @andyrichardson - Support empty
ARRAYliterals (#532) - Thanks @bitemyapp - Support
AT TIME ZONEclause (#539) - Thanks @bitemyapp - Support
USINGclause and table aliases inDELETE(#541) - Thanks @mobuchowski - Support
SHOW CREATE VIEWstatement (#536) - Thanks @mrob95 - Support
CLONEclause inCREATE TABLEstatements (#542) - Thanks @mobuchowski - Support
WITH OFFSET Aliasin table references (#528) - Thanks @sivchari - Support double quoted (
") literal strings: (#530) - Thanks @komukomo - Support
ON UPDATEclause on column definitions inCREATE TABLEstatements (#522) - Thanks @frolovdev
BoxedQuerybody to save stack space (#540) - Thanks @5tan- Distinguish between
INTandINTEGERtypes (#525) - Thanks @frolovdev - Parse
WHERE NOT EXISTSasExpr::Existsrather thanExpr::UnaryOpfor consistency (#523) - Thanks @frolovdev - Support
Exprinstead ofStringfor argument toINTERVAL(#517) - Thanks @togami2864
- Report characters instead of bytes in error messages (#529) - Thanks @michael-2956
- Support
CLOSE(cursors) (#515) - Thanks @ovr - Support
DECLARE(cursors) (#509) - Thanks @ovr - Support
FETCH(cursors) (#510) - Thanks @ovr - Support
DATETIMEkeyword (#512) - Thanks @komukomo - Support
UNNESTas a table factor (#493) - Thanks @sivchari - Support
CREATE FUNCTION(hive flavor) (#496) - Thanks @mobuchowski - Support placeholders (
$or?) inLIMITclause (#494) - Thanks @step-baby - Support escaped string literals (PostgreSQL) (#502) - Thanks @ovr
- Support
IS TRUEandIS FALSE(#499) - Thanks @ovr - Support
DISCARD [ALL | PLANS | SEQUENCES | TEMPORARY | TEMP](#500) - Thanks @gandronchik - Support
array<..>HIVE data types (#491) - Thanks @mobuchowski - Support
SETvalues that begin with-#495 - Thanks @mobuchowski - Support unicode whitespace (#482) - Thanks @alexsatori
- Support
BigQuerydialect (#490) - Thanks @komukomo
- Add docs for MapAccess (#489) - Thanks @alamb
- Rename
ArrayIndex::indexstoArrayIndex::indexes(#492) - Thanks @alamb
- Fix escaping of trailing quote in quoted identifiers (#505) - Thanks @razzolini-qpq
- Fix parsing of
COLLATEafter parentheses in expressions (#507) - Thanks @razzolini-qpq - Distinguish tables and nullary functions in
FROM(#506) - Thanks @razzolini-qpq - Fix
MERGE INTOsemicolon handling (#508) - Thanks @mskrzypkows
- Support
#as first character in field name forRedShiftdialect (#485) - Thanks @yuval-illumex - Support for postgres composite types (#466) - Thanks @poonai
- Support
TABLEkeyword with SELECT INTO (#487) - Thanks @MazterQyou - Support
ANY/ALLoperators (#477) - Thanks @ovr - Support
ArrayIndexinGenericDialect(#480) - Thanks @ovr - Support
Redshiftdialect, handle square brackets properly (#471) - Thanks @mskrzypkows - Support
KILLstatement (#479) - Thanks @ovr - Support
QUALIFYclause onSELECTforSnowflakedialect (#465) - Thanks @mobuchowski - Support
POSITION(x IN y)function syntax (#463) @yuval-illumex - Support
global,local,on commitforcreate temporary table(#456) - Thanks @gandronchik - Support
NVARCHARdata type (#462) - Thanks @yuval-illumex - Support for postgres json operators
->,->>,#>, and#>>(#458) - Thanks @poonai - Support
SET ROLEstatement (#455) - Thanks @slhmy
- Improve docstrings for
KILLstatement (#481) - Thanks @alamb - Add negative tests for
POSITION(#469) - Thanks @alamb - Add negative tests for
INparsing (#468) - Thanks @alamb - Suppport table names (as well as subqueries) as source in
MERGEstatements (#483) - Thanks @mskrzypkows
INTOkeyword is optional forINSERT,MERGE(#473) - Thanks @mobuchowski- Support
IS TRUEandIS FALSEexpressions in boolean filter (#474) - Thanks @yuval-illumex - Support fully qualified object names in
SET VARIABLE(#484) - Thanks mobuchowski
- Support
WEEKkeyword inEXTRACT(#436) - Thanks @Ted-Jiang - Support
MERGEstatement (#430) - Thanks @mobuchowski - Support
SAVEPOINTstatement (#438) - Thanks @poonai - Support
TOclause inCOPY(#441) - Thanks @matthewmturner - Support
CREATE DATABASEstatement (#451) - Thanks @matthewmturner - Support
FROMclause inUPDATEstatement (#450) - Thanks @slhmy - Support additional
COPYoptions (#446) - Thanks @wangrunji0408
- Bug in array / map access parsing (#433) - Thanks @monadbobo
- Support for ClickHouse array types (e.g. [1,2,3]) (#429) - Thanks @monadbobo
- Support for
unsigned tinyint,unsigned int,unsigned smallintandunsigned bigintdatatypes (#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]andINT[][](#419) - Thanks @gamife
- remove Travis CI (#421) - Thanks @efx
- Allow
arrayto be used as a function name again (#432) - @alamb - Update docstring reference to
Query(#423) - Thanks @max-sixty
- Support
CURRENT_TIMESTAMP,CURRENT_TIME, andCURRENT_DATE(#391) - Thanks @yuval-illumex - SUPPORT
SUPERkeyword (#387) - Thanks @flaneur2020 - Support differing orders of
OFFSETLIMITas well asLIMITOFFSET(#413) - Thanks @yuval-illumex - Support for
FROM <filename>,DELIMITER, andCSV HEADERoptions forCOPYcommand (#409) - Thanks @poonai - Support
CHARSETandENGINEclauses onCREATE TABLEfor mysql (#392) - Thanks @antialize - Support
DROP CONSTRAINT [ IF EXISTS ] <name> [ CASCADE ](#396) - Thanks @tvallotton - Support parsing tuples and add
Expr::Tuple(#414) - @alamb - Support MySQL style
LIMIT X, Y(#415) - @alamb - Support
SESSION TRANSACTIONandTRANSACTION SNAPSHOT. (#379) - Thanks @poonai - Support
ALTER COLUMNandRENAME CONSTRAINT(#381) - Thanks @zhamlin - Support for Map access, add ClickHouse dialect (#382) - Thanks @monadbobo
- Restrict where wildcard (
*) can appear, add toFunctionArgExprremoveExpr::[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
- Fix new clippy errors (#412) - @alamb
- Fix panic with
GRANT/REVOKEinCONNECT,CREATE,EXECUTEorTEMPORARY- Thanks @evgenyx00 - Handle double quotes inside quoted identifiers correctly (#411) - Thanks @Marwes
- Handle mysql backslash escaping (#373) - Thanks @vasilev-alex
- 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!
- Use Rust 2021 edition (#368) - Thanks @Jimexist!
- Fix clippy errors (#367, #374) - Thanks @Jimexist!
- Add support for [NOT] IS DISTINCT FROM (#306) - @Dandandan
- Move the keywords module - Thanks @koushiro!
- 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!
- 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!
- 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
- Return error instead of panic (#316) - Thanks @BohuTANG!
- Rename
ModulustoModulo(#335) - Thanks @RGRAVITY817! - Update links to reflect repository move to
sqlparser-rsGitHub org (#333) - Thanks @andygrove - Add default value for
WindowFrame(#313) - Thanks @Jimexist!
- Add support for
TRY_CASTsyntax (#299) - Thanks @seddonm1!
- Introduce Hive QL dialect
HiveDialectand syntax (#235) - Thanks @hntd187! - Add
SUBSTRING(col [FROM <expr>] [FOR <expr>])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!
- 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)
- 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 inFROM(#253) - thanks @eyalleshem! - Support Snowflake's single-line comments starting with '#' or '//' (#264) - thanks @eyalleshem!
- Support PostgreSQL
PREPARE,EXECUTE, andDEALLOCATE(#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) aliassyntax - thanks @eyalleshem! - Support for
EXPLAIN [ANALYZE] VERBOSE- thanks @ovr! - Support
ANALYZE TABLE - DDL:
- Support
OR REPLACEinCREATE VIEW/TABLE(#239) - thanks @Dandandan! - Support specifying
ASC/DESCin index columns (#249) - thanks @mashuai! - Support SQLite
AUTOINCREMENTand MySQLAUTO_INCREMENTcolumn option inCREATE TABLE(#234) - thanks @mashuai! - Support PostgreSQL
IF NOT EXISTSforCREATE SCHEMA(#276) - thanks @alex-dukhno!
- Support
- Fix a typo in
JSONFILEserialization, introduced in 0.3.1 (#237) - Change
CREATE INDEXserialization to not end with a semicolon, introduced in 0.5.1 (#245) - Don't fail parsing
ALTER TABLE ADD COLUMNending with a semicolon, introduced in 0.5.1 (#246) - thanks @mashuai
- Support BigQuery
ASSERTstatement (#226)
- Support SQLite's
CREATE TABLE (...) WITHOUT ROWID(#208) - thanks @mashuai! - Support SQLite's
CREATE VIRTUAL TABLE(#209) - thanks @mashuai!
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"
Parser::parse_sqlnow accepts a&strinstead ofString(#182) - thanks @Dandandan!- Change
Ident(previously a simpleString) to store the parsed (unquoted)valueof the identifier and thequote_styleseparately (#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/TIMESTAMPliterals representation in the AST (TypedString { data_type, value }) and allowDATEand other keywords to be used as identifiers when not followed by a string (#187) - thanks @maxcountryman! - Output DataType capitalized (
fmt::Display) (#202) - thanks @Dandandan!
- Support MSSQL
TOP (<N>) [ PERCENT ] [ WITH TIES ](#150) - thanks @alexkyllo! - Support MySQL
LIMIT row_count OFFSET offset(not followed byROWorROWS) 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 INDEXandDROP INDEX(#167) - thanks @mashuai! - Support
ON { UPDATE | DELETE } { RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT }inFOREIGN KEYconstraints (#170) - thanks @c7hm4r! - Support basic forms of
CREATE SCHEMAandDROP SCHEMA(#173) - thanks @alex-dukhno! - Support
NULLS FIRST/LASTinORDER BYexpressions (#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, andRENAME TO(#203) - thanks @mashuai! - Support
ALTER TABLE DROP COLUMN(#148) - thanks @ivanceras! - Support
CREATE TABLE ... AS ...(#206) - thanks @Dandandan!
- 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!
- Replace the
Value::Long(u64)andValue::Double(f64)variants withValue::Number(String)to avoid losing precision when parsing decimal literals (#130) - thanks @benesch! --features bigdecimalcan be enabled to work withValue::Number(BigDecimal)instead, at the cost of an additional dependency.
- Support MySQL
SHOW COLUMNS,SET <variable>=<value>, andSHOW <variable>statements (#135) - thanks @quodlibetor and @benesch!
- Don't fail to parse
START TRANSACTIONfollowed by a semicolon (#139) - thanks @gaffneyk!
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.
- 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::SQLBinaryExpris nowExpr::BinaryOpandASTNode::SQLUnaryisExpr::UnaryOp;- The
op: SQLOperatorfield is now either aBinaryOperatoror anUnaryOperator.
- Change the representation of JOINs to match the standard (#109):
SQLSelect'srelationandjoinsare replaced withfrom: Vec<TableWithJoins>. Before this changeFROM foo NATURAL JOIN bar, bazwas represented as "foo" as therelationfollowed by two joins (Inner(Natural)andImplicit); now it's twoTableWithJoins(foo NATURAL JOIN barandbaz). - Extract a
SQLFunctionstruct (#89) - Replace
Option<Vec<T>>withVec<T>in the AST structs (#73) - Change
Value::Long()to be unsigned, use u64 consistently (#65)
- Infra:
- Implement
fmt::Displayon AST nodes (#124) - thanks @vemoo! - Implement
Hash(#88) andEq(#123) on all AST nodes - Implement
std::error::ErrorforParserError(#72) - Handle Windows line-breaks (#54)
- Implement
- Expressions:
- Support
INTERVALliterals (#103) - Support
DATE/TIME/TIMESTAMPliterals (#99) - Support
EXTRACT(#96) - Support
X'hex value'literals (#95) - Support
EXISTSsubqueries (#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 (
OVERclause) (#50)
- Support
- Queries / DML:
- Support nested joins (#100) and derived tables with set operations (#111)
- Support
UPDATEstatements (#97) - Support
INSERT INTO foo SELECT * FROM barandFROM VALUES (...)(#91) - Support
SELECT ALL(#76) - Add
FETCHandOFFSETsupport, andLATERAL(#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
DECIMALandDECaliases forNUMERICtype (#92) - Support
DROP [TABLE|VIEW](#75) - Support arbitrary
WITHoptions forCREATE [TABLE|VIEW](#74) - Support constraints in
CREATE TABLE(#65)
- Support
- Add basic MSSQL dialect (#61) and some MSSQL-specific features:
CROSS/OUTER APPLY(#120)- MSSQL identifier and alias parsing rules (#66)
WITHhints (#59)
- Report an error for
SELECT * FROM a OUTER JOIN binstead of parsingOUTERas an alias (#118) - Fix the precedence of
NOT LIKE(#82) and unaryNOT(#107) - Do not panic when
NOTis not followed by an expected keyword (#71) successfully instead of returning a parse error - thanks @ivanceras! (#67) - and similar fixes for queries with noFROM(#116) - Fix issues with
ALTER TABLE ADD CONSTRAINTparsing (#65) - Serialize the "not equals" operator as
<>instead of!=(#64) - Remove dependencies on
uuid(#59) andchrono(#61) - Make
SELECTquery withLIMITclause but noWHEREparse - Fix incorrect behavior ofASTNode::SQLQualifiedWildcard::to_string()(returnedfoo*instead offoo.*) - thanks @thomas-jeepe! (#52)
- Extended
SQLStatement::SQLCreateTableto support Hive's EXTERNAL TABLES (CREATE EXTERNAL TABLE .. STORED AS .. LOCATION '..') - thanks @zhzy0077! (#46) - Parse
SELECT DISTINCTtoSQLSelect::distinct(#49)
This release includes major changes to the AST structs to add a number of features, as described in #37 and #43. In particular:
ASTNodevariants that represent statements were extracted fromASTNodeinto a separateSQLStatementenum;Parser::parse_sqlnow returns aVecof parsed statements.ASTNodenow represents an expression (renamed toExprin 0.4.0)
- The query representation (formerly
ASTNode::SQLSelect) became more complicated to support:WITHandUNION/EXCEPT/INTERSECT(viaSQLQuery,Cte, andSQLSetExpr),- aliases and qualified wildcards in
SELECT(viaSQLSelectItem), - and aliases in
FROM/JOIN(viaTableFactor).
- A new
SQLObjectNamestruct is used instead ofStringorASTNode::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
Other than the changes listed above, some less intrusive additions include:
- Support
CREATE [MATERIALIZED] VIEWstatement - Support
IN,BETWEEN, unary +/- in epressions - Support
CHARdata type andNUMERICnot followed by(p,s). - Support national string literals (
N'...')
Same as 0.2.2.
- Removed
Value::String,Value::DoubleQuotedString, andToken::String, making'...'parse as a string literal (Value::SingleQuotedString), and"..."fail to parse until version 0.3.0 (#36)
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!
Initial release