Skip to content

Releases: rsonquery/rsonpath

v0.9.2

23 Dec 00:36
v0.9.2
cddc509
Compare
Choose a tag to compare

[0.9.2] - 2024-12-22

Library

  • [breaking] Added StringPattern and made Automaton 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 the JsonString values for member transitions.
      In preparation for #117we remove the borrowed JsonString and replace it
      with StringPattern. For UTF-8 the StringPattern will be a more complex struct that precomputes some stuff for efficient matching later.
      For now, it's a thin wrapper over a JsonString.
    • 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 an Rc.
      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 the Compiler trait requires the
      returned engine to be lifetimeless.

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 of rsonpath-lib

v0.9.1

03 Apr 18:23
v0.9.1
73620f7
Compare
Choose a tag to compare

[0.9.1] - 2024-04-03

Bug Fixes

  • Child slice selectors only selecting first matching index (#499). (#499)
    • Fixed a bug where the compiler would erroneously mark states
      with a single slice transition as unitary, even though such
      transitions could match more than one index.

v0.9.0

28 Mar 18:34
v0.9.0
dbc6f84
Compare
Choose a tag to compare

[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.

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).

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

29 Feb 20:25
v0.8.7
e769ae1
Compare
Choose a tag to compare

[0.8.7] - 2024-02-29

Features

  • [breaking] Parsing filter expressions. (#154)
    • This is mainly an rsonpath-syntax change – the selectors are parsed,
      but rq will give you an unsupported error and a link to #154
      if you put them in a query.

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

15 Jan 15:06
v0.8.6
277d3fa
Compare
Choose a tag to compare

[0.8.6] - 2024-01-15

Features

  • [breaking] Parsing Slice selectors.
    • This is mainly an rsonpath-syntax change – the selectors are parsed,
      but rq will give you an unsupported error and a link to #152
      if you put them in a query.

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.

Dependencies

  • Bump clap from 4.4.14 to 4.4.16
  • Bump vergen from 8.2.6 to 8.2.7.

v0.8.5

10 Jan 16:39
v0.8.5
7af1dd2
Compare
Choose a tag to compare

[0.8.5] - 2024-01-10

Nice parsing errors 🪄

image

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 the crates/rsonpath-syntax subdirectory.
  • [breaking] Rework numeric types in the query parser.
    • renamed NonNegativeArrayIndex to JsonUInt
    • added the JsonInt and JsonNonZeroUInt types
  • 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.

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

30 Oct 20:27
ad66a2f
Compare
Choose a tag to compare

[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.

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.

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 of google_map::travel_modes/rsonpath_direct_count
      59 (fifty-nine) percent.

Reliability

  • Harden GitHub Actions.
    • We now use the StepSecurity harden-runner in audit mode
      to test a more secure approach to GitHub CI.
  • 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.

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

04 Oct 18:43
dd226b8
Compare
Choose a tag to compare

[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.
  • 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.

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

23 Sep 13:50
8301eda
Compare
Choose a tag to compare

[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 MatchSpans can potentially
      have their end indices farther than one would expect the input to logically end,
      due to internal padding.

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

20 Sep 16:14
221efe5
Compare
Choose a tag to compare

[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
      of count, especially for large result sets.
    • This is a library-only feature.
  • Library exposes a new optional feature, arbitrary.
    • When enabled, includes arbitrary
      as a dependency and provides an Arbitrary impl for JsonPathQuery,
      JsonString, and NonNegativeArrayIndex.

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.
  • 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.
  • 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.
  • Fixed erroneous match span end reporting. (#247)
    • Fixed a bug where MatchSpan values given by the engine were
      almost always invalid.

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.