v0.40.0 release

This commit is contained in:
neilotoole 2023-08-20 07:40:59 -06:00
parent 611ad30f60
commit ed24e4eec8

View File

@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
Breaking changes are annotated with ☢️. Breaking changes are annotated with ☢️.
## Upcoming ## [v0.42.0] - 2023-08-20
This release is heavily focused on improvements to Microsoft Excel support. This release is heavily focused on improvements to Microsoft Excel support.
The underlying Excel library has been changed from [`tealeg/xlsx`](https://github.com/tealeg/xlsx) The underlying Excel library has been changed from [`tealeg/xlsx`](https://github.com/tealeg/xlsx)
@ -35,33 +35,30 @@ discover anything strange, please [open an issue](https://github.com/neilotoole/
actor_id,first_name,actor_id_1 actor_id,first_name,actor_id_1
``` ```
The renaming behavior is controlled by a new option `ingest.column.rename` The renaming behavior is controlled by a new option [`ingest.column.rename`](https://sq.io/docs/config#ingestcolumnrename)
([docs](https://sq.io/docs/config/#ingestcolumnrename)). This new option is This new option is effectively the ingest counterpart of the existing output option
effectively the ingest counterpart of the existing output option [`result.column.rename`](https://sq.io/docs/config#resultcolumnrename).
[`result.column.rename`](https://sq.io/docs/config/#resultcolumnrename).
- [#191]: The [XLSX](https://sq.io/docs/drivers/xlsx) driver now [detects](https://sq.io/docs/drivers/xlsx/#header-row) header rows, like - [#191]: The [XLSX](https://sq.io/docs/drivers/xlsx) driver now [detects](https://sq.io/docs/drivers/xlsx#header-row) header rows, like
the CSV driver already does. Thus, you now typically don't need to specify the CSV driver already does. Thus, you now typically don't need to specify
the `--ingest.header` flag for Excel files. However, the option remains available the `--ingest.header` flag for Excel files. However, the option remains available
in case `sq` can't figure it out for a particular file. in case `sq` can't figure it out for a particular file.
- The Excel writer has three new config options for controlling date/time output. - The Excel writer has three new config options for controlling date/time output.
Note that these format strings are distinct from [`format.datetime`](https://sq.io/docs/config/#formatdatetime) Note that these format strings are distinct from [`format.datetime`](https://sq.io/docs/config#formatdatetime)
and friends, because Excel has its own format string mechanism. and friends, because Excel has its own format string mechanism.
- [`format.excel.datetime`](https://sq.io/docs/config/#formatexceldatetime): Controls datetime format, e.g. `2023-08-03 16:07:01`. - [`format.excel.datetime`](https://sq.io/docs/config#formatexceldatetime): Controls datetime format, e.g. `2023-08-03 16:07:01`.
- [`format.excel.date`](https://sq.io/docs/config/#formatexceldatetime): Controls date-only format, e.g. `2023-08-03`. - [`format.excel.date`](https://sq.io/docs/config#formatexceldatetime): Controls date-only format, e.g. `2023-08-03`.
- [`format.excel.time`](https://sq.io/docs/config/#formatexceldatetime): Controls time-only format, e.g. `4:07 pm`. - [`format.excel.time`](https://sq.io/docs/config#formatexceldatetime): Controls time-only format, e.g. `4:07 pm`.
- The ingest [kind detectors](https://sq.io/docs/detect/#kinds) (e.g. for `CSV` or `XLSX`) - The ingest [kind detectors](https://sq.io/docs/detect#kinds) (e.g. for `CSV` or `XLSX`)
now detect more [date & time formats](/docs/detect#datetime-formats) as `kind.Datetime`, `kind.Date`, and `kind.Time`. now detect more [date & time formats](https://sq.io/docs/detect#datetime-formats) as `kind.Datetime`, `kind.Date`, and `kind.Time`.
- If an error occurs when the output format is `text`, a stack trace is printed - If an error occurs when the output format is `text`, a stack trace is printed
to `stderr` when the command is executed with `--verbose` (`-v`). to `stderr` when the command is executed with `--verbose` (`-v`).
- There's a new option `error.format` that controls error output format independent - There's a new option [`error.format`](https://sq.io/docs/config#errorformat) that controls error output format independent
of the main [`format`](https://sq.io/docs/config/#format) option of the main [`format`](https://sq.io/docs/config#format) option . The `error.format` value must be one of `text` or `json`.
([docs](https://sq.io/docs/config/#errorformat)). The `error.format` value
must be one of `text` or `json`.
## Changed ## Changed
@ -70,17 +67,15 @@ discover anything strange, please [open an issue](https://github.com/neilotoole/
to datetimes, e.g. `11/9/1989 00:00:00` becomes `1989-11-09 00:00`. to datetimes, e.g. `11/9/1989 00:00:00` becomes `1989-11-09 00:00`.
This change is made to reduce ambiguity and confusion. This change is made to reduce ambiguity and confusion.
Apparently Microsoft Excel itself will pick up `sq` uses a [library](https://github.com/qax-os/excelize)
the date format from OS system settings? However, `sq` uses to interact with Excel files, and it seems that the library chooses a particular format
a [library](https://github.com/qax-os/excelize)
to interact with Excel files, and that library chooses a particular format
by default (`11/9/89`). There are several paths we could take here: by default (`11/9/89`). There are several paths we could take here:
1. Interrogate the OS, and use the OS locale date format. 1. Interrogate the OS, and use the OS locale date format.
2. Stick with the library default `11/9/89`. 2. Stick with the library default `11/9/89`.
3. Pick a default other than `11/9/89`. 3. Pick a default other than `11/9/89`.
We have chosen the third option. The first option (locale-dependent) We pick the third option. The first option (locale-dependent)
is excluded because, as a general rule, we want `sq` to produce the same is excluded because, as a general rule, we want `sq` to produce the same
output regardless of locale/system settings. We exclude the second option output regardless of locale/system settings. We exclude the second option
because month/day confuses most of the world. Thus, we're left with picking a because month/day confuses most of the world. Thus, we're left with picking a
@ -89,7 +84,7 @@ discover anything strange, please [open an issue](https://github.com/neilotoole/
Whether this is the correct (standard?) approach is still unclear, and Whether this is the correct (standard?) approach is still unclear, and
feedback is welcome. However, the user can make use of the new config options feedback is welcome. However, the user can make use of the new config options
([`format.excel.datetime`](https://sq.io/docs/config/#formatexceldatetime) etc.) ([`format.excel.datetime`](https://sq.io/docs/config#formatexceldatetime) etc.)
to customize the format as they see fit. to customize the format as they see fit.
- The XLSX writer now outputs header rows in **bold text**. - The XLSX writer now outputs header rows in **bold text**.
@ -104,7 +99,7 @@ discover anything strange, please [open an issue](https://github.com/neilotoole/
## [v0.40.0] - 2023-07-03 ## [v0.40.0] - 2023-07-03
This release features a complete overhaul of the [`join`](https://sq.io/docs/query/#joins) This release features a complete overhaul of the [`join`](https://sq.io/docs/query#joins)
mechanism. mechanism.
### Added ### Added
@ -119,17 +114,17 @@ mechanism.
- New option `result.column.rename` that exposes a template used to rename - New option `result.column.rename` that exposes a template used to rename
result set column names before display. The primary use case is to de-duplicate result set column names before display. The primary use case is to de-duplicate
columns names on a `SELECT * FROM tbl1 JOIN tbl2`, where `tbl1` and `tbl2` columns names on a `SELECT * FROM tbl1 JOIN tbl2`, where `tbl1` and `tbl2`
have clashing column names ([docs](https://sq.io/docs/config/#resultcolumnrename)). have clashing column names ([docs](https://sq.io/docs/config#resultcolumnrename)).
- [#157]: Previously only `join` (`INNER JOIN`) was available: now the rest of - [#157]: Previously only `join` (`INNER JOIN`) was available: now the rest of
the join types such as `left_outer_join`, `cross_join`, etc. are the join types such as `left_outer_join`, `cross_join`, etc. are
implemented ([docs](https://sq.io/docs/query/#join-types)). implemented ([docs](https://sq.io/docs/query#join-types)).
### Changed ### Changed
- ☢️ [#12]: The table [join](https://sq.io/docs/query/#joins) mechanism has been - ☢️ [#12]: The table [join](https://sq.io/docs/query#joins) mechanism has been
completely overhauled. Now there's support for multiple joins. See [docs](https://sq.io/docs/query/#joins). completely overhauled. Now there's support for multiple joins. See [docs](https://sq.io/docs/query#joins).
```shell ```shell
# Previously, only a single join was possible # Previously, only a single join was possible
@ -142,7 +137,7 @@ mechanism.
### Fixed ### Fixed
- Fixed bug where config options weren't being propagated correctly. - Config options weren't being propagated correctly to all parts of the code.
## [v0.39.1] - 2023-06-22 ## [v0.39.1] - 2023-06-22
@ -222,7 +217,7 @@ to SLQ (`sq`'s query language).
### Fixed ### Fixed
- Literals can now be selected ([docs](https://sq.io/docs/query/#select-literal)). - Literals can now be selected ([docs](https://sq.io/docs/query#select-literal)).
```shell ```shell
$ sq '.actor | .first_name, "X":middle_name, .last_name | .[0:2]' $ sq '.actor | .first_name, "X":middle_name, .last_name | .[0:2]'
@ -265,13 +260,13 @@ to SLQ (`sq`'s query language).
### Added ### Added
- [#244]: Shell completion for `sq add LOCATION`. See [docs](https://sq.io/docs/source/#location-completion). - [#244]: Shell completion for `sq add LOCATION`. See [docs](https://sq.io/docs/source#location-completion).
## [v0.36.2] - 2023-05-27 ## [v0.36.2] - 2023-05-27
### Changed ### Changed
- ☢️ [Proprietary database functions](https://sq.io/docs/query/#proprietary-functions) are now - ☢️ [Proprietary database functions](https://sq.io/docs/query#proprietary-functions) are now
invoked by prefixing the function name with an underscore. For example: invoked by prefixing the function name with an underscore. For example:
```shell ```shell
# mysql "date_format" func # mysql "date_format" func
@ -297,7 +292,7 @@ The major feature is the long-gestating [`sq diff`](https://sq.io/docs/diff).
- `sq inspect --dbprops` is a new mode that returns only the DB properties. - `sq inspect --dbprops` is a new mode that returns only the DB properties.
Relatedly, the properties mechanism is now implemented for all four supported Relatedly, the properties mechanism is now implemented for all four supported
DB types (previously, it was only implemented for Postgres and MySQL). DB types (previously, it was only implemented for Postgres and MySQL).
- [CSV](https://sq.io/docs/output/#csv-tsv) format now colorizes output. - [CSV](https://sq.io/docs/output#csv-tsv) format now colorizes output.
## Changed ## Changed
@ -497,7 +492,7 @@ make working with lots of sources much easier.
### Added ### Added
- [#173]: Predefined variables via `--arg` - [#173]: Predefined variables via `--arg`
flag ([docs](https://sq.io/docs/query/#predefined-variables)): flag ([docs](https://sq.io/docs/query#predefined-variables)):
```shell ```shell
$ sq --arg first TOM '.actor | .first_name == $first' $ sq --arg first TOM '.actor | .first_name == $first'
``` ```
@ -551,7 +546,7 @@ make working with lots of sources much easier.
### Added ### Added
- [#162]: `group_by` now accepts [function arguments](https://sq.io/docs/query/#group_by). - [#162]: `group_by` now accepts [function arguments](https://sq.io/docs/query#group_by).
### Changed ### Changed
@ -562,13 +557,13 @@ make working with lots of sources much easier.
### Added ### Added
- [#160]: Use `groupby()` to group results. See [query guide](https://sq.io/docs/query/#group_by). - [#160]: Use `groupby()` to group results. See [query guide](https://sq.io/docs/query#group_by).
## [v0.27.0] - 2023-03-25 ## [v0.27.0] - 2023-03-25
### Added ### Added
- [#158]: Use `orderby()` to order results. See [query guide](https://sq.io/docs/query/#order_by). - [#158]: Use `orderby()` to order results. See [query guide](https://sq.io/docs/query#order_by).
## [v0.26.0] - 2023-03-22 ## [v0.26.0] - 2023-03-22
@ -825,3 +820,4 @@ make working with lots of sources much easier.
[v0.39.0]: https://github.com/neilotoole/sq/compare/v0.38.1...v0.39.0 [v0.39.0]: https://github.com/neilotoole/sq/compare/v0.38.1...v0.39.0
[v0.39.1]: https://github.com/neilotoole/sq/compare/v0.39.0...v0.39.1 [v0.39.1]: https://github.com/neilotoole/sq/compare/v0.39.0...v0.39.1
[v0.40.0]: https://github.com/neilotoole/sq/compare/v0.39.1...v0.40.0 [v0.40.0]: https://github.com/neilotoole/sq/compare/v0.39.1...v0.40.0
[v0.41.0]: https://github.com/neilotoole/sq/compare/v0.40.0...v0.41.0