NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #326 most downloaded on PyPI
An easily customizable SQL parser and transpiler
Last release 4 days ago
30 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 54 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
6 years old
784 releases · first in 2021
One column per quarter.
`6393979` - oracle: connect_by_root closes #3050 *(commit by @tobymao)*
`e2fc6e8` - optimizer: fix parent mutation of new_projections in column qualifier *(PR #3030 by @georgesittas)*
e2fc6e8 - optimizer: fix parent mutation of new_projections in column qualifier (PR #3030 by @georgesittas)due to `2507aa2` - consolidate Subqueryable and Unionable into Query expression *(PR #2992 by @georgesittas)*:
due to 2507aa2 - consolidate Subqueryable and Unionable into Query expression (PR #2992 by @georgesittas):
consolidate Subqueryable and Unionable into Query expression (#2992)
due to d5eb2b1 - make implicit unnest syntax explicit by using UNNEST calls (PR #3005 by @georgesittas):
make implicit unnest syntax explicit by using UNNEST calls (#3005)
due to 238f9aa - refactor structs to always be aliases (PR #3017 by @tobymao):
refactor structs to always be aliases (#3017)
due to 06bcfcd - select expressions not statements closes #3022, statements can be parsed without into (commit by @tobymao):
select expressions not statements closes #3022, statements can be parsed without into
due to 1612e62 - Add reference to lineage node (PR #3018 by @vchan):
Add reference to lineage node (#3018)
e50609b - Supporting RANGE <-> GENERATE_SERIES between DuckDB & SQLite (PR #3010 by @VaggelisD)1709ec2 - bigquery e6s format (commit by @tobymao)17e34e7 - add unnest type annotations (PR #3019 by @tobymao)efdbc12 - clickhouse prewhere closes #3024 (commit by @tobymao)1612e62 - Add reference to lineage node (PR #3018 by @vchan)5c3bd10 - test: add more passing tests of tpc-ds (PR #3016 by @fool1280)7f547e6 - it's actually seconds + fraction (commit by @tobymao)238f9aa - refactor structs to always be aliases (PR #3017 by @tobymao)
06bcfcd - select expressions not statements closes #3022, statements can be parsed without into (commit by @tobymao)2507aa2 - consolidate Subqueryable and Unionable into Query expression (PR #2992 by @georgesittas)d5eb2b1 - make implicit unnest syntax explicit by using UNNEST calls (PR #3005 by @georgesittas)
8943179 - move limit method to Query, get rid of Subquery.subquery override (PR #3013 by @georgesittas)`2a88e40` - bigquery: support ELSE and ELSEIF procedural statements *(PR #3011 by @georgesittas)*
2a88e40 - bigquery: support ELSE and ELSEIF procedural statements (PR #3011 by @georgesittas)
d2e15ed - improve transpilation of Doris' MONTHS_ADD (PR #3012 by @georgesittas)due to `2940417` - simplify ADD CONSTRAINT handling *(PR #2990 by @georgesittas)*:
due to 2940417 - simplify ADD CONSTRAINT handling (PR #2990 by @georgesittas):
simplify ADD CONSTRAINT handling (#2990)
7c48079 - support parameters in BigQuery / DuckDB (PR #2991 by @r1b)b7c2744 - tests: update test_executor with tpc-ds (PR #2983 by @fool1280)c433cad - allow more leniant bigquery wildcard parsing (PR #2998 by @tobymao)8607247 - support LEFT JOIN UNNEST in duckdb (PR #2999 by @r1b)64e38ed - add support for more Snowflake SHOW commands (PR #3002 by @DanCardin)bc18f56 - optimizer: don't coerce nested arg types in annotate_by_args (PR #2997 by @georgesittas)
ccd8cc0 - doris to_char closes #3001 (commit by @tobymao)2940417 - simplify ADD CONSTRAINT handling (PR #2990 by @georgesittas)d2711f7 - clean up duplicative placeholder_sql implementations (PR #2993 by @georgesittas)`b8cbf66` - bigquery: parse procedural EXCEPTION WHEN statement into a Command closes #2981 *(commit by @georgesittas)*
b8cbf66 - bigquery: parse procedural EXCEPTION WHEN statement into a Command closes #2981 (commit by @georgesittas)906ceee - duckdb: implement generation logic for exp.ArrayAny (PR #2984 by @georgesittas)92455e4 - snowflake: create storage integration (PR #2985 by @tekumara)bedf6e9 - improve transpilation support for ArrayAny (PR #2986 by @georgesittas)
cc67ab2 - tsql: map StrPosition back to CHARINDEX fixes #2968 (commit by @georgesittas)46f15ce - postgres: ensure json extraction can roundtrip unaltered (PR #2974 by @georgesittas)
7ee4fe7 - expand using with star except (commit by @tobymao)5a34f3d - clean up tech debt in dialect implementations (PR #2977 by @georgesittas)`1d0b3d3` - add support for multi-part interval addition syntax *(PR #2970 by @georgesittas)*
1d0b3d3 - add support for multi-part interval addition syntax (PR #2970 by @georgesittas)
1c67f03 - parser: enable parsing of values into Identifier for some dialects (PR #2962 by @georgesittas)
d8b0d4f - don't treat VALUES as a keyword in BigQuery, Redshift (PR #2965 by @georgesittas)
5b7fd10 - optimizer: more optimizations for qualifying wide tables (PR #2972 by @barakalon)6cb985a - pass dialect in to_table call inside replace_tables (PR #2973 by @georgesittas)`e71d489` - add array and tuple helpers *(commit by @tobymao)*
e71d489 - add array and tuple helpers (commit by @tobymao)876e075 - postgres: root operator closes #2940 (commit by @tobymao)e731276 - snowflake: add support for SHOW USERS (PR #2948 by @DanCardin)b9d4468 - tableau: identifier and quotes closes #2950 (commit by @tobymao)f8d9dbf - sqlite: add support for IIF (PR #2951 by @georgesittas)b755551 - clickhouse: add basic support for system statement (PR #2953 by @GaliFFun)844018b - explode_outer to unnest closes #2941 (commit by @tobymao)159da45 - posexplode_outer to unnest (PR #2942 by @chelsea-lin)76d6634 - spark: CREATE TABLE ... PARTITIONED BY fixes (PR #2937 by @barakalon)d07ddf9 - optimizer: remove redundant casts (PR #2945 by @barakalon)b70a394 - if doesn't support different types (commit by @tobymao)6a988e0 - bigquery: fix annotation of timestamp(x) (PR #2946 by @georgesittas)78e6d0d - optimizer: qualify_columns optimizations for wide tables (PR #2955 by @barakalon)c20cc70 - redshift: don't assume Table is an unnested Column if Join has a predicate (PR #2956 by @georgesittas)
Nothing published for this version
`1842c96` - clickhouse: add support for LIMIT BY clause *(PR #2926 by @georgesittas)*
1842c96 - clickhouse: add support for LIMIT BY clause (PR #2926 by @georgesittas)9241858 - add typing for explode closes #2927 (commit by @tobymao)85073d1 - transpile multi-arg DISTINCT expression (PR #2936 by @georgesittas)
b827626 - remove find method from Schema (PR #2934 by @georgesittas)08cd117 - postgres: fallback to parameter parser if heredoc is untokenizable (PR #2935 by @georgesittas)
e4b5edb - bump sqlglotrs to 0.1.1 (commit by @georgesittas)`3a20eac` - clickhouse: add support for JSONExtractString, clean up some helpers *(PR #2925 by @georgesittas)*
3a20eac - clickhouse: add support for JSONExtractString, clean up some helpers (PR #2925 by @georgesittas)
due to `326aa31` - deprecate case where transforms can be plain strs *(PR #2919 by @georgesittas)*:
due to b4e8868 - improve transpilation of JSON paths across dialects (PR #2883 by @georgesittas):
improve transpilation of JSON paths across dialects (#2883)
due to aa388ea - ignore nulls closes #2896 (PR #2898 by @tobymao):
ignore nulls closes #2896 (#2898)
due to 617a8c0 - timestamp diff for mysql and databricks (commit by @tobymao):
timestamp diff for mysql and databricks
due to b00b393 - use raise instead of assert for assert_is (commit by @tobymao):
use raise instead of assert for assert_is
due to 326aa31 - deprecate case where transforms can be plain strs (PR #2919 by @georgesittas):
deprecate case where transforms can be plain strs (#2919)
fb450f0 - add tsql right left auto casting closes #2899 (commit by @tobymao)617a8c0 - timestamp diff for mysql and databricks (commit by @tobymao)3fa92ca - redshift: parse GETDATE (PR #2904 by @erickpeirson)d262139 - snowflake: implement parsing logic for SHOW TABLES (PR #2913 by @tekumara)838e780 - improve transpilation of CREATE TABLE LIKE statement (PR #2923 by @georgesittas)
cbbad1f - improve transpilation of JSON path wildcards (PR #2924 by @georgesittas)aa388ea - ignore nulls closes #2896 (PR #2898 by @tobymao)b00b393 - use raise instead of assert for assert_is (commit by @tobymao)ab97246 - array overlaps closes #2903 (commit by @tobymao)f3bdcb0 - duckdb: fix JSON pointer path parsing, reduce warning noise (PR #2911 by @georgesittas)072264f - mysql: SHOW SCHEMAS (PR #2916 by @barakalon)15fdff2 - optimizer: don't remove NOT parenthesis (PR #2917 by @barakalon)d20d826 - have table exclude this if schema target (PR #2921 by @eakmanrq)b4e8868 - improve transpilation of JSON paths across dialects (PR #2883 by @georgesittas)
9481f94 - several JSON path improvements (PR #2914 by @georgesittas)326aa31 - deprecate case where transforms can be plain strs (PR #2919 by @georgesittas)15582f4 - move JSON path generation logic in Generator (PR #2920 by @georgesittas)due to `eb8b40a` - deprecate NULL, TRUE, FALSE constant expressions *(PR #2884 by @georgesittas)*:
due to eb8b40a - deprecate NULL, TRUE, FALSE constant expressions (PR #2884 by @georgesittas):
deprecate NULL, TRUE, FALSE constant expressions (#2884)
dc2d7d7 - tsql: len text transpilation closes #2885 (commit by @tobymao)ad50f47 - type imports (PR #2886 by @tobymao)e4fb7f6 - union should return union (commit by @tobymao)8f795ea - don't expand star except/replace refs (commit by @tobymao)218121c - alter table cluster by closes #2887 (commit by @tobymao)5cec283 - bigquery script if statement closes #2888 (commit by @tobymao)5fc7791 - all view column options without types closes #2891 (commit by @tobymao)102304e - postgres: generate CurrentUser without parentheses closes #2893 (commit by @georgesittas)43902db - error level ignore comments closes #2895 (commit by @tobymao)due to `1f5fc39` - jsonpath parsing *(PR #2867 by @tobymao)*:
89b439e - postgres: support the INCLUDE clause in INDEX creation (PR #2857 by @georgesittas)
90ffff8 - clickhouse: AggregateFunction data type (PR #2832 by @pkit)326d3ae - improve transpilation of Spark's TO_UTC_TIMESTAMP (PR #2861 by @georgesittas)
6d03587 - snowflake: SHOW SCHEMAS/OBJECTS (PR #2845 by @tekumara)
d5a08b8 - optimizer: improve struct type annotation support for EQ-delimited kv pairs (PR #2863 by @fool1280)1f5fc39 - jsonpath parsing (PR #2867 by @tobymao)7fd9045 - add support for rename column (PR #2866 by @gableh)89b781b - postgres: add support for the INHERITS property closes #2871 (commit by @georgesittas)970c202 - postgres: add support for the SET property (PR #2873 by @georgesittas)
6845c37 - make the CREATE parser more lenient (PR #2875 by @georgesittas)bf03a45 - snowflake: extend _parse_range to gracefully handle colon operator (PR #2856 by @georgesittas)ad14f4e - qualify alter table table refs in optimizer qualify (PR #2862 by @z3z1ma)8599903 - optimizer: compute external columns for union sopes correctly (PR #2864 by @georgesittas)
3e065f9 - optimizer: don't copy projection in qualify_outputs when attaching alias (PR #2868 by @georgesittas)a642758 - avoid dag cycle with unnesting subqueries closes #2876 (commit by @tobymao)0648453 - set div type on multiplication closes #2878 (commit by @tobymao)b7fb800 - oracle: generate with time zone for timestamptz fixes #2879 (commit by @georgesittas)8770e3b - optimizer: don't qualify CTEs for DDL/DML statements (PR #2880 by @georgesittas)
d55cfba - move postgres tests (commit by @tobymao)0e43c58 - parser: warn when parsing (>1 tokens) SQL into exp.Command (PR #2874 by @georgesittas)due to `1be93e4` - properly support all unix time scales *(commit by @tobymao)*:
due to 1be93e4 - properly support all unix time scales (commit by @tobymao):
properly support all unix time scales
816976f - extend submodule annotate_types to handle STRUCT (PR #2783 by @fool1280)7bce2f6 - oracle: add support for ORDER SIBLINGS BY clause (PR #2821 by @georgesittas)
ce8d254 - snowflake: parse RM/REMOVE as commands (PR #2825 by @georgesittas)
1902778 - add support for multi-unit intervals (PR #2822 by @georgesittas)
a537898 - add support for DESCRIBE EXTENDED (PR #2828 by @georgesittas)6e50759 - clickhouse: support Date32 type (PR #2830 by @pkit)9560e8f - add support for Heredocs in Databricks Python UDFs (PR #2801 by @viethungle-vt1401)52ed590 - transpile SELECT .. INTO to dialects that do not support it (PR #2820 by @giorgosnikolaou)ea536c4 - remove target alias in trino merge (PR #2852 by @eakmanrq)6ddbefc - snowflake: apply range parser after colon, if any (PR #2800 by @georgesittas)
0c4f44e - oracle: regexp_replace replacement is optional closes #2803 (commit by @tobymao)5072d5a - oracle: improve parsing of JSON_OBJECT[AGG] functions (PR #2807 by @georgesittas)
ea39f10 - optimizer: pushdown predicates more conservatively to avoid DAG cycles (PR #2808 by @georgesittas)
ea58003 - snowflake: insert overwrite into closes #2815 (commit by @tobymao)d5fa5be - optimizer: handle table alias columns for (UN)PIVOTs (PR #2816 by @georgesittas)
24177f3 - unnest star expansion closes #2811 (PR #2818 by @tobymao)3dba6c1 - add parentheses to no_safe_divide args (PR #2826 by @j1ah0ng)ed68d6b - clickhouse: add ipv4/6 data type parser (PR #2829 by @pkit)70b280f - allow insert columns to have spaces (commit by @tobymao)57917b8 - oracle: TO_TIMESTAMP not parsed as StrToTime (PR #2833 by @pkit)
9960e11 - optimizer: annotate struct value without alias correctly (PR #2812 by @fool1280)a6d396b - doris: add transformation of aggregation function and last_day function (PR #2835 by @echo-hhj)8cc252b - interval without unit alias closes #2838 (commit by @tobymao)607817f - schema with period name closes #2842 (commit by @tobymao)1be93e4 - properly support all unix time scales (commit by @tobymao)a657fc0 - clickhouse,doris: fix the transformation of ArraySum (PR #2843 by @echo-hhj)c92888c - parser: fix order of query modifier parsing for nested subqueries (PR #2851 by @georgesittas)7949a4f - clickhouse: ensure arraySum generation is preserved, add tests (commit by @georgesittas)17a6ac6 - move comment in expr as alias next to the alias (PR #2853 by @georgesittas)9e5ae50 - use flag instead of regex (commit by @tobymao)5c13a1e - simplify merge without target transformation (PR #2854 by @georgesittas)5996a69 - presto: get rid of assert in ELEMENT_AT parser (commit by @georgesittas)f9a02ec - fix table, column instantiation in schema normalization tests (PR #2817 by @georgesittas)due to `68e1214` - column field typing *(commit by @tobymao)*:
2d822f3 - improve support for Doris' TO_DATE, Oracle's SYSDATE (PR #2775 by @georgesittas)7187215 - desc builder (commit by @tobymao)ba62639 - add support for CREATE FUNCTION (SQL) characteristics for MySQL and Databricks (PR #2777 by @viethungle-vt1401)
963e2dc - snowflake: add support for SHOW COLUMNS (PR #2778 by @andrew-sha)46c9733 - tsql: round func closes #2790 (commit by @tobymao)2dfb7e8 - optimizer: add support for the UNPIVOT operator (PR #2771 by @georgesittas)68e1214 - column field typing (commit by @tobymao)3f31706 - tsql exec command #2772 (commit by @tobymao)f6cbadb - snowflake: add a couple of special fn types (PR #2774 by @georgesittas)0634f73 - optimizer: replace star with outer column list (PR #2776 by @georgesittas)d31ae0d - allow string aliases closes #2788 (commit by @tobymao)8f8f00e - don't transform null ordering with positional orders closes #2779 (commit by @tobymao)f85ce3b - tsql: gracefully handle complex formats in FORMAT (PR #2794 by @georgesittas)
a2499f5 - tsql: generate correct TRIM syntax closes #2786 (commit by @georgesittas)59ecd2f - clickhouse: allow transpilation of countIf, fix 2 arg variant parsing (PR #2795 by @georgesittas)
3f7748b - don't transpile nulls last in window specs (commit by @tobymao)`9d94b9c` - don't normalize schema if normalize is set to false *(PR #2767 by @tobymao)*
Nothing published for this version
due to `4648c6a` - set sample clause keyword(s) as class constant to enable transpilation *(PR #2750 by @georgesittas)*:
due to 4648c6a - set sample clause keyword(s) as class constant to enable transpilation (PR #2750 by @georgesittas):
set sample clause keyword(s) as class constant to enable transpilation (#2750)
due to 0b6bdc4 - improve transpilation of JSON value extraction (PR #2744 by @georgesittas):
improve transpilation of JSON value extraction (#2744)
due to 862b305 - improve table sampling transpilation (PR #2761 by @georgesittas):
improve table sampling transpilation (#2761)
202f035 - clickhouse: add aggregate parsing (PR #2734 by @pkit)e772e26 - guess the correct dialect in case we get an unknown one (PR #2753 by @georgesittas)7a07862 - implement to_s method in Expression for verbose repr mode (PR #2756 by @georgesittas)4072184 - improve transpilation of TIME/TIMESTAMP_FROM_PARTS (PR #2755 by @georgesittas)3bd811d - optimizer: allow star expansion to be turned off (PR #2762 by @georgesittas)c246285 - bigquery unix_date closes #2758 (commit by @tobymao)a2abbc7 - improve transpilation of LAST_DAY (PR #2766 by @georgesittas)7e7ac65 - snowflake: add support for OBJECT_CONSTRUCT_KEEP_NULL (PR #2769 by @georgesittas)
ed972f9 - alter table rename should not qualify with db in postgres (PR #2736 by @z3z1ma)1ebfb36 - else interval (commit by @tobymao)a43174f - generate CROSS JOIN instead of comma in explode_to_unnest transformation (PR #2739 by @cpcloud)
e543c55 - interval is null (commit by @tobymao)fb3188f - lineage closes #2742 (commit by @tobymao)b608b2d - duckdb: percentile_cont closes #2741 (commit by @tobymao)0b6bdc4 - improve transpilation of JSON value extraction (PR #2744 by @georgesittas)
33d6e5f - bigquery: enable transpilation of single-argument TIME func (PR #2752 by @georgesittas)
72f8cfa - snowflake: parse two argument version of TIMESTAMP_FROM_PARTS (PR #2754 by @georgesittas)
2a94f2b - bigquery: fix parsing of COUNTIF (PR #2765 by @giovannipcarvalho)
862b305 - improve table sampling transpilation (PR #2761 by @georgesittas)
4648c6a - set sample clause keyword(s) as class constant to enable transpilation (PR #2750 by @georgesittas)
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →