prqlc 0.13.11

PRQL is a modern language for transforming data — a simple, powerful, pipelined SQL replacement.
Documentation
# PRQL test-databases

Test PRQL queries against various SQL RDBMS.

## In-process DBs

To run tests against DuckDB & SQLite, no additional setup is required; simply
run:

```sh
cargo test --features=test-dbs
```

## External DBs

To run tests against external databases — currently Postgres, MySQL, SQL Server,
ClickHouse and GlareDB are tested using `docker compose` to create the
databases.

The steps are all covered by `task test-rust-external-dbs`; to run them
manually:

1. Run `docker compose up` (may take a while on the first time):

   ```sh
   cd prqlc/prqlc/tests/integration/dbs && docker compose up -d
   ```

2. Run the tests:

   ```sh
   cargo test --features=test-dbs-external -- --nocapture
   ```

   (The `--no-capture` option isn't required, but shows all the dialects tested
   per query.)

3. After it's done, remove the containers:

   ```sh
   cd prqlc/prqlc/tests/integration/dbs && docker compose down
   ```

Note: on an M1, if the MSSQL docker container doesn't run, refer to
[this comment](https://github.com/microsoft/mssql-docker/issues/668#issuecomment-1436802153)

## Tested databases

Tests are by default run on all the DBs with `SupportLevel::Supported`.

To test on a DB that is not yet at this support level like `MSSQL`, simply add
`# mssql:test` on top of the query. To ignore one of the supported DBs like
`sqlite`, simply add `# sqlite:skip` on top of the query.

## Data

Columns are renamed to `snake_case`, so Postgres and DuckDb don't struggle with
them.

For optimal accessibility, portability between databases and file size, all
tables are stored as CSV files. Their current size is 432kB, it could be gzip-ed
to 112kB, but that would require a preprocessing step before running
`cargo test`.

## Queries

For databases like ClickHouse, where the order of results is ambiguous, please
use `sort` for test queries to to guarantee the order of rows across DBs.

For example, instead of the following query:

```elm
from albums
```

Use a query including `sort`:

```elm
from albums
sort album_id
```

## Test organization

We follow the advice in
<https://matklad.github.io/2021/02/27/delete-cargo-integration-tests.html>.