Releases: PRQL/prql
0.5.2
0.5.1
0.5.1 contains a few fixes, and another change to how bindings handle default target / dialects.
This release has 53 commits from 7 contributors. Selected changes:
Fixes:
- Delegate dividing literal integers to the DB. Previously integer division was executed during PRQL compilation, which could be confusing given that behavior is different across DBs. Other arithmetic operations are still executed during compilation. (@max-sixty, #1747)
Documentation:
- Add docs on the
from_texttransform (@max-sixty, #1756)
Integrations:
- [prql-js] Default compile target changed from
Sql(Generic)toSql(None). (@eitsupi, #1856) - [prql-python] Compilation options can now be specified from Python. (@eitsupi, #1807)
- [prql-python] Default compile target changed from
Sql(Generic)toSql(None). (@eitsupi, #1861)
New Contributors:
- @vanillajonathan, with #1766
0.5.0
0.5.0 contains a few fixes, some improvements to bindings, lots of docs improvements, and some work on forthcoming features. It contains one breaking change in the compiler's Options interface.
This release has 74 commits from 12 contributors. Selected changes:
Features:
- Change public API to use target instead of dialect in preparation for future work (@aljazerzen, #1684)
prqlc watchcommand which watches filesystem for changes and compiles .prql files to .sql (@aljazerzen, #1708)
Fixes:
- Support double brackets in s-strings which aren't symmetric (@max-sixty, #1650)
- Support Postgres's Interval syntax (@max-sixty, #1649)
- Fixed tests for
prql-elixirwith MacOS (@kasvith, #1707)
Documentation:
- Add a documentation test for prql-compiler, update prql-compiler README, and include the README in the prql book section for Rust bindings. The code examples in the README are included and tested as doctests in the prql-compiler (@nkicg6, #1679)
Internal changes:
- Add tests for all PRQL website examples to prql-python to ensure compiled results match expected SQL (@nkicg6, #1719)
New Contributors:
- @ruslandoga, with #1628
- @RalfNorthman, with #1632
- @nicot, with #1662
0.4.2
0.4.2 has 38 commits from 12 contributors.
Features:
-
New
from_text format-arg string-argfunction that supports JSON and CSV formats. format-arg can beformat:csvor format:json`. string-arg can be a string in any format. (@aljazerzen & @snth, #1514)from_text format:csv """ a,b,c 1,2,3 4,5,6 """ from_text format:json ''' [{"a": 1, "b": "x", "c": false }, {"a": 4, "b": "y", "c": null }] ''' from_text format:json ''' { "columns": ["a", "b", "c"], "data": [ [1, "x", false], [4, "y", null] ] } '''For now, the argument is limited to string constants.
Fixes
- Export constructor for SQLCompileOptions (@bcho, #1621)
- Remove backticks in count_distinct (@aljazerzen, #1611)
New Contributors
0.4.1
0.4.1 comes a few days after 0.4.0, with a couple of features and the release of prqlc, the CLI crate.
0.4.1 has 35 commits from 6 contributors.
Features:
-
Inferred column names include the relation name (@aljazerzen, #1550):
from albums select title # name used to be inferred as title only select albums.title # so using albums was not possible here -
Quoted identifiers such as
dir/*.parquetare passed through to SQL. (@max-sixty, #1516). -
The CLI is installed with
cargo install prqlc. The binary was renamed in 0.4.0 but required an additional--featuresflag, which has been removed in favor of this new crate (@max-sixty & @aljazerzen, #1549).
New Contributors:
0.4.0
0.4.0 brings lots of new features including switch, select ![] and numbers with underscores. We have initial (unpublished) bindings to Elixir. And there's the usual improvements to fixes & documentation (only a minority are listed below in this release).
0.4.0 also has some breaking changes: table is let, dialect is renamed to target, and the compiler's API has changed. Full details below.
Features:
-
Defining a temporary table is now expressed as
letrather thantable(@aljazerzen, #1315). See the tables docs for details. -
Experimental: The
switchfunction sets a variable to a value based on one of several expressions (@aljazerzen, #1278).derive var = switch [ score <= 10 -> "low", score <= 30 -> "medium", score <= 70 -> "high", true -> "very high", ]...compiles to:
SELECT *, CASE WHEN score <= 10 THEN 'low' WHEN score <= 30 THEN 'medium' WHEN score <= 70 THEN 'high' ELSE 'very high' END AS var FROM bar
Check out the
switchdocs for more details. -
Experimental: Columns can be excluded by name with
select(@aljazerzen, #1329)from albums select ![title, composer] -
Experimental:
appendtransform, equivalent toUNION ALLin SQL. (@aljazerzen, #894)from employees append managersCheck out the
appenddocs for more details. -
Numbers can contain underscores, which can make reading long numbers easier (@max-sixty, #1467):
from numbers select [ small = 1.000_000_1, big = 5_000_000, ] -
The SQL output contains a comment with the PRQL compiler version (@aljazerzen, #1322)
-
dialectis renamed totarget, and its values are prefixed withsql.(@max-sixty, #1388); for example:prql target:sql.bigquery # previously was `dialect:bigquery` from employeesThis gives us the flexibility to target other languages than SQL in the long term.
-
Tables definitions can contain a bare s-string (@max-sixty, #1422), which enables us to include a full CTE of SQL, for example:
let grouping = s""" SELECT SUM(a) FROM tbl GROUP BY GROUPING SETS ((b, c, d), (d), (b, d)) """ -
Ranges supplied to
incan be half-open (@aljazerzen, #1330). -
The crate's external API has changed to allow for compiling to intermediate representation. This also affects bindings. See
prql_compilerdocs for more details.
Fixes:
[This release, the changelog only contains a subset of fixes]
- Allow interpolations in table s-strings (@aljazerzen, #1337)
Documentation:
[This release, the changelog only contains a subset of documentation improvements]
- Add docs on aliases in
Select - Add JS template literal and multiline example (@BCsabaEngine, #1432)
- JS template literal and multiline example (@BCsabaEngine, #1432)
- Improve prql-compiler docs & examples (@aljazerzen, #1515)
- Fix string highlighting in book (@max-sixty, #1264)
Web:
- The playground allows querying some sample data. As before, the result updates
on every keystroke. (@aljazerzen, #1305)
Integrations:
[This release, the changelog only contains a subset of integration improvements]
- Added Elixir integration exposing PRQL functions as NIFs (#1500, @kasvith)
- Exposed Elixir flavor with exceptions (#1513, @kasvith)
- Rename
prql-compilerbinary toprqlc(@aljazerzen #1515)
Internal changes:
[This release, the changelog only contains a subset of internal changes]
- Add parsing for negative select (@max-sixty, #1317)
- Allow for additional builtin functions (@aljazerzen, #1325)
- Add an automated check for typos (@max-sixty, #1421)
- Add tasks for running playground & book (@max-sixty, #1265)
- Add tasks for running tests on every file change (@max-sixty, #1380)
New contributors:
- @EArazli, with #1359
- @boramalper, with #1362
- @allurefx, with #1377
- @bcho, with #1375
- @JettChenT, with #1385
- @BlurrechDev, with #1411
- @BCsabaEngine, with #1432
- @kasvith, with #1500
0.3.1
0.3.1 brings a couple of small improvements and fixes.
Features:
- Support for using s-strings for
from(#1197, @aljazerzen)from s"SELECT * FROM employees WHERE foo > 5"
- Helpful error message when referencing a table in an s-string (#1203, @aljazerzen)
Fixes:
- Multiple columns with same name created (#1211, @aljazerzen)
- Renaming via select breaks preceding sorting (#1204, @aljazerzen)
- Same column gets selected multiple times (#1186, @mklopets)
Internal:
- Update Github Actions and Workflows to current version numbers (and avoid using Node 12) (#1201)
0.3.0
🎉 0.3.0 is the biggest ever change in PRQL's compiler 🎉. It rewrites much of the internals: the compiler now has a semantic understanding of expressions, including resolving names & building a DAG of column lineage.
While the immediate changes to the language are modest — some long-running bugs are fixed — this unlocks beginning development of many of the broad features we've had ambitions for, such as type-checking & auto-complete. And it simplifies building our next language features, such as match-case expressions, unions & table expressions.
@aljazerzen has (mostly single-handedly) done this work over the past few months. The project owes him immense appreciation.
Breaking changes:
We've had to make some modest breaking changes for 0.3:
-
Pipelines must start with
from. For example, a pipeline with onlyderive foo = 5, with nofromtransform, is no longer valid. Depending on demand for this feature, it would be possible to add this back. -
Shared column names now require
==in a join. For example:from employees -join positions [id] +join positions [==id]
The existing approach is ambiguous to the compiler —
idcould be a boolean column. -
Table references containing periods must be surrounded by backticks. For example, when referencing a schema name:
-from public.sometable +from `public.sometable`
Features:
- Change self equality op to
==(#1176, @aljazerzen) - Add logging (@aljazerzen)
- Add clickhouse dialect (#1090, @max-sixty)
- Allow namespaces & tables to contain
.(#1079, @aljazerzen)
Fixes:
- Deduplicate column appearing in
SELECTmultiple times (#1186, @aljazerzen) - Fix uppercase table names (#1184, @aljazerzen)
- Omit table name when only one ident in SELECT (#1094, @aljazerzen)
Documentation:
- Add chapter on semantics' internals (@aljazerzen, #1028)
- Add note about nesting variables in s-strings (@max-sixty, #1163)
Internal changes:
- Flatten group and window (#1120, @aljazerzen)
- Split ast into expr and stmt (@aljazerzen)
- Refactor associativity (#1156, @aljazerzen)
- Rename Ident constructor to
from_name(#1084, @aljazerzen) - Refactor rq folding (#1177, @aljazerzen)
- Add tests for reported bugs fixes in semantic (#1174, @aljazerzen)
- Bump duckdb from 0.5.0 to 0.6.0 (#1132)
- Bump once_cell from 1.15.0 to 1.16.0 (#1101)
- Bump pest from 2.4.0 to 2.5.0 (#1161)
- Bump pest_derive from 2.4.0 to 2.5.0 (#1179)
- Bump sqlparser from 0.25.0 to 0.27.0 (#1131)
- Bump trash from 2.1.5 to 3.0.0 (#1178)
0.2.11
0.2.11 contains a few helpful fixes.
Work continues on our semantic refactor — look out for 0.3.0 soon! Many thanks to @aljazerzen for his continued contributions to this.
Note: 0.2.10 was skipped due to this maintainer's inability to read his own docs on bumping versions...
Features:
- Detect when compiler version is behind query version (@MarinPostma, #1058)
- Add
__version__to prql-python package (@max-sixty, #1034)
Fixes:
- Fix nesting of expressions with equal binding strength and left associativity,
such asa - (b - c)(@max-sixty, #1136) - Retain floats without significant digits as floats (@max-sixty, #1141)
Documentation:
- Add documentation of
prqlrbindings (@eitsupi, #1091) - Add a 'Why PRQL' section to the website (@max-sixty, #1098)
- Add @snth to core-devs (@max-sixty, #1050)
Internal changes:
- Use workspace versioning (@max-sixty, #1065)