Releases: rsonquery/rsonpath
Releases · rsonquery/rsonpath
v0.9.2
[0.9.2] - 2024-12-22
Library
- [breaking] Added
StringPattern
and madeAutomaton
no longer borrow the query. (#117#613)- The
Automaton
struct borrowed the source query, which also caused the Engine to carry the query's lifetime with it.
The actual data being borrowed were theJsonString
values for member transitions.
In preparation for #117we remove the borrowedJsonString
and replace it
withStringPattern
. For UTF-8 theStringPattern
will be a more complex struct that precomputes some stuff for efficient matching later.
For now, it's a thin wrapper over aJsonString
. - During construction we may create many transitions over the same pattern.
To reduce the size of the automaton we cache the patterns and put them into anRc
.
This may get optimised later to instead use some kind of inline storage, but it's unlike to actually matter.
I ran the benchmarks and saw no measurable difference between the previous version and this one. - This is a breaking API change -- the
MainEngine
is now lifetimeless and theCompiler
trait requires the
returned engine to be lifetimeless.
- The
Dependencies
- Bump arbitrary from 1.3.1 to 1.4.1
- Bump clap from 4.5.2 to 4.5.23
- Bump color-eyre from 0.6.2 to 0.6.3
- Bump log from 0.4.21 to 0.4.22
- Bump memmap2 from 0.9.4 to 0.9.5
- Bump simple_logger from 4.3.3 to 5.0.0
- Bump smallvec from 1.13.1 to 1.13.2
- Bump thiserror from 1.0.58 to 2.0.9 (#617). (#617)
- Remove
nom
as a direct dependency ofrsonpath-lib
v0.9.1
v0.9.0
[0.9.0] - 2024-03-28
Features
- Array slice selector. (#152)
- Simple slicing: forward step and positive bounds.
Includes an overhaul to how array transitions are compiled.
- Simple slicing: forward step and positive bounds.
Performance
- Improve performance of the index selector. (#138)
- Added more structure and metadata to the automaton,
improving perf of all queries in general (~6% thpt) and
array-index queries in particular (~12% thpt).
- Added more structure and metadata to the automaton,
Reliability
- Run JSONPath Compliance Test Suite on basic queries.
- CTS is now run in CI on queries that the engine supports.
Dependencies
- Bump clap from 4.5.1 to 4.5.2
- Bump thiserror from 1.0.57 to 1.0.58
v0.8.7
[0.8.7] - 2024-02-29
Features
- [breaking] Parsing filter expressions. (#154)
- This is mainly an
rsonpath-syntax
change – the selectors are parsed,
butrq
will give you an unsupported error and a link to #154
if you put them in a query.
- This is mainly an
Reliability
- Add msrv verify as ci check. (#480)
- The MSRV got unknowingly bumped before, with this CI check we will avoid it in the future.
Dependencies
- Bump clap from 4.4.16 to 4.5.1
- Bump eyre from 0.6.11 to 0.6.12
- Bump log from 0.4.20 to 0.4.21
- Bump memmap2 from 0.9.3 to 0.9.4
- Bump smallvec from 1.12.0 to 1.13.1
- Bump thiserror from 1.0.56 to 1.0.57
- Bump vergen from 8.2.7 to 8.3.1
v0.8.6
[0.8.6] - 2024-01-15
Features
- [breaking] Parsing
Slice
selectors.- This is mainly an
rsonpath-syntax
change – the selectors are parsed,
butrq
will give you an unsupported error and a link to #152
if you put them in a query.
- This is mainly an
Bug Fixes
-
Bug in
-c
graph display.- dot format was temporarily broken by doubling double quotes in labels
-
U+001A-U+001F in name selectors.
- Characters U+001A through U+001F were erroneously accepted unescaped.
This is now a hard error.
- Characters U+001A through U+001F were erroneously accepted unescaped.
Dependencies
- Bump clap from 4.4.14 to 4.4.16
- Bump vergen from 8.2.6 to 8.2.7.
v0.8.5
[0.8.5] - 2024-01-10
Nice parsing errors 🪄
Features
- [breaking] Separate
rsonpath-syntax
.- The parsing logic and query AST are now moved to a separately published subcrate.
- The crate is versioned separately. Changes to it that do not affect
rq
will be documented
in its separate changelog. See thecrates/rsonpath-syntax
subdirectory.
- [breaking] Rework numeric types in the query parser.
- renamed
NonNegativeArrayIndex
toJsonUInt
- added the
JsonInt
andJsonNonZeroUInt
types
- renamed
- Fancy error handling in the parser.
Reliability
- Use self-hosted runner for ARM.
- We now have a self-hosted runner to continuously test rsonpath on ARM64!
- Set restrictive egress rules on runners.
- Following up on StepSecurity upgrades, runners now block egress
traffic by default and allow only specific trusted endpoints.
- Following up on StepSecurity upgrades, runners now block egress
Dependencies
- Bump arbitrary from 1.3.0 to 1.3.2.
- Bump clap from 4.4.7 to 4.4.14.
- Bump eyre from 0.6.8 to 0.6.11.
- Bump memmap2 from 0.9.0 to 0..3.
- Bump simple_logger from 4.2.0 to 4.3.3.
- Bump smallvec from 1.11.1 to 1.11.2.
- Bump thiserror from 1.0.49 to 1.0.56.
- Bump vergen from 8.2.5 to 8.2.6.
v0.8.4
[0.8.4] - 2023-10-30
Features
- [breaking] Refactor the
Input
implementors with automatic padding (#276).- Padding and alignment is now handled automatically by the input types,
allowing them to work safely without copying the entire input. The overhead is now
limited to the padding, which is at most 256 bytes in total. BorrowedBytes
is now safe to construct.OwnedBytes
no longer copies
the entire source on construction.
- Padding and alignment is now handled automatically by the input types,
Bug Fixes
- Atomic values getting invalid spans (#327). (#327)
- Fixed an issue where atomic values would be matched with all
trailing characters up until the next closing.
- Fixed an issue where atomic values would be matched with all
Performance
- Improve SIMD codegen.
- Improved the way we dispatch to SIMD-intensive functions.
This results in slightly larger binaries, but massive speedups –
throughput increase of 5, 10, 20, or in case ofgoogle_map::travel_modes/rsonpath_direct_count
59 (fifty-nine) percent.
- Improved the way we dispatch to SIMD-intensive functions.
Reliability
- Harden GitHub Actions.
- We now use the StepSecurity harden-runner in audit mode
to test a more secure approach to GitHub CI.
- We now use the StepSecurity harden-runner in audit mode
- End to end test refactor.
- tests are now generated into many separate files instead of one gigantic file.
This improves compilation times, responsiveness of rust-analyzer,
and in general makes the tooling happier.
- tests are now generated into many separate files instead of one gigantic file.
Dependencies
- Bump arbitrary from 1.3.0 to 1.3.2.
- Bump clap from 4.4.6 to 4.4.7.
- Bump thiserror from 1.0.49 to 1.0.50.
v0.8.3
[0.8.3] - 2023-10-04
Bug Fixes
-
Missing openings from node results. (#297)
- Fixed an issue where the opening
characters of matched nodes would not be
included in the result when head-skipping
and the opening happened on a block boundary.
- Fixed an issue where the opening
-
Lib MSRV.
- In v0.8.0 we inadvertently broke the MSRV,
and the project only built with 1.71.1
It was restored to 1.70.0 for the binary
and 1.67.1 for the lib.
- In v0.8.0 we inadvertently broke the MSRV,
Dependencies
- Bump clap from 4.4.4 to 4.4.6.
- Bump memmap2 from 0.7.1 to 0.9.0.
- Bump thiserror from 1.0.48 to 1.0.49.
v0.8.2
[0.8.2] - 2023-09-23
Performance
- Improved handling of the root-only query
$
. (#160)- Full nodes result when asking for root: 2 times throughput increase.
- Indices/count result when asking for root: basically unboundedly faster,
no longer looks at the entire document.
Documentation
- Clarified the
approximate_spans
guarantees.- Now documentation mentions that the returned
MatchSpan
s can potentially
have their end indices farther than one would expect the input to logically end,
due to internal padding.
- Now documentation mentions that the returned
Bug fixes
- Fixed handling of the root-only query
$
on atomic documents. (#160)- Previously only object and array roots were supported.
- Fixed a bug when head-skipping to a single-byte key would panic. (#281)
- This was detected by fuzzing!
- The queries
$..["{"]
and$..["["]
would panic
on inputs starting with the bytes{"
or["
, respectively.
- Fixed a bug where disabling the
simd
feature would not actually
disable SIMD acceleration.
Reliability
- Made the ClusterFuzzLite batch workflow automatically create an issue
on failure to make sure the maintainers are notified.
v0.8.1
[0.8.1] - 2023-09-20
Features
- [breaking] Refactored the [
Match
]/[MatchSpan
] types.- [
Match
] now takes 32 bytes, down from 40. - All fields are now private, accessible via associated functions.
- Added the
len
function to [MatchSpan
].
- [
- Added
approximate_spans
result mode. (#242)- Engine can return an approximate span of the match,
where "approximate" means the start index is correct,
but the end index might include trailing whitespace after the match. - This mode is much faster that full
matches
, close to the performance
ofcount
, especially for large result sets. - This is a library-only feature.
- Engine can return an approximate span of the match,
- Library exposes a new optional feature,
arbitrary
.- When enabled, includes
arbitrary
as a dependency and provides anArbitrary
impl forJsonPathQuery
,
JsonString
, andNonNegativeArrayIndex
.
- When enabled, includes
Bug fixes
- Fixed a bug when memmem acceleration would fail for empty keys.
- This was detected by fuzzing! The query
$..[""]
would panic
on certain inputs due to invalid indexing.
- This was detected by fuzzing! The query
- Fixed a panic when parsing invalid queries with wide UTF8 characters.
- This was detected by fuzzing! Parsing a query with invalid syntax
caused by a longer-than-byte UTF-8 character would panic when
the error handler tried to resume parsing from the next byte
instead of respecting char boundaries.
- This was detected by fuzzing! Parsing a query with invalid syntax
- Fixed a panic caused by node results in invalid JSON documents.
- This was detected by fuzzing! Invalid JSON documents could
cause the NodeRecorder to panic if the apparent match span
was of length 1.
- This was detected by fuzzing! Invalid JSON documents could
- Fixed erroneous match span end reporting. (#247)
- Fixed a bug where
MatchSpan
values given by the engine were
almost always invalid.
- Fixed a bug where
Reliability
- Fuzzing integration with libfuzzer and ClusterFuzzLite.
cargo-fuzz
can be used
to fuzz the project with libfuzzer. Currently we have three fuzzing targets,
one for stressing the query parser, one for stressing the engine with arbitrary
bytes, and one stressing the engine with structure-aware queries and JSONs.- Fuzzing is now enabled on every PR. Using ClusterFuzzLite
we will fuzz the project every day on a cron schedule
to establish a corpus.
- Added correctness tests for match spans reporting (#247)
Dependencies
- Bump clap from 4.4.2 to 4.4.4.
- Bump vergen from 8.2.4 to 8.2.5.