Skip to content

Releases: rsonquery/rsonpath

v0.10.0

16 Feb 15:53
v0.10.0
7eca688

Choose a tag to compare

[0.10.0] - 2025-02-16 ([0.4.1] for rsonpath-syntax)

Features

  • Support for AVX512 SIMD.

    • available on x86-64
  • Support for Neon SIMD.

    • available on aarch64
  • MSRV bumped to 1.89.

    • stable AVX512 since 1.89
  • Removed the arbitrary feature and the Arbitrary implementations from rsonpath-syntax.

  • Revised the list of Tier 1 targets that are continuously built and released.

    • The following targets are now in CI and release:
      • aarch64-apple-darwin
      • aarch64-pc-windows-msvc
    • The following targets are no longer built or released:
      • i686-pc-windows-gnu
      • x86_64-apple-darwin
  • Added prebuilt binaries for a few MUSL-based Tier 2 targets. (#705)

    • Binaries now released for:
      • aarch64-unknown-linux-musl
      • i686-unknown-linux-musl
      • x86_64-unknown-linux-musl

Bug Fixes

  • Skipping inside arrays on comma-atomic (#757, #751)

    • Tail skipping was not triggered when the item matching the unitary transition was an atomic value inside a list. For example, selecting $[0] from a long list of integers would never skip, massively degrading performance.
    • Skipping was added to handle_comma in the same vein as it was in handle_colon to enable this.
  • Fix panic in specific cases of reclassification at end of file (#788)

    • A particular combination of reclassification after tail-skipping at the very end of the file could cause a panic if the file-ending closing occurred directly after the skipped-to character.
  • Error messages blowing up on long inputs. (#842, #749)

    • Previously, when displaying a ParseError every underlying SyntaxError would be printed with the full query input as context. If the density of errors in the input was high this would effectively cause a quadratic blowup during printing.
    • It's probably unlikely inputs like this would be given by a user, but they do happen during fuzzing (when we're throwing long strings of essentially random characters at the parser) and could potentially be used as a DoS attack vector (intentionally supplying nonsensical large queries and forcing error messages to be sent back).
    • Additionally fixed an invalid error message given when a side of a comparison operator was a non-singular query.

Reliability

  • Use github hosted ARM runners. (#718)

  • ARM SIMD is now tested in CI.

  • Fix serde proptests. (#742)

    • Proptests in automaton serde were not properly guarding for arbitrary generated queries being too complex and exceeding the automaton size limit.
  • Add CodeQl for Rust scanning.

    • We now require the analysis to pass before PR merges.
  • All fuzzers now correctly run on a nightly basis. (#749)

Dependencies

  • Update cfg-if from 1.0.0 to 1.0.4
  • Update clap from 4.5.23 to 4.5.58
  • Update color-eyre from 0.6.3 to 0.6.5
  • Update log from 0.4.22 to 0.4.29
  • Update memmap2 from 0.9.5 to 0.9.9
  • Update nom from 7.1.3 to 8.0.0
  • Update owo-colors from 4.1.0 to 4.2.3
  • Update rustflags from 0.1.6 to 0.1.7
  • Update serde from 1.0.217 to 1.0.228
  • Update simple_logger from 5.0.0 to 5.1.0
  • Update smallvec from 1.13.2 to 1.15.1
  • Update thiserror from 2.0.9 to 2.0.18
  • Update unicode-width from 0.2.0 to 0.2.2
  • Update vector-map from 1.0.1 to 1.0.2
  • Update vergen from 9.0.2 to 9.1.0
  • Update vergen-git2 from 1.0.2 to 9.1.0
  • Remove vergen-gitcl from build dependencies

Documentation

  • Fix old link to rsonbook in readme.
  • Add a strict no-LLM policy to CONTRIBUTING.

v0.9.4

31 Dec 04:25
v0.9.4
e0bce96

Choose a tag to compare

[0.9.4] - 2024-12-31 ([0.4.0] for rsonpath-syntax)

Library

  • Serde support for MainEngine and JsonPathQuery in rsonpath-syntax.
    • Implemented serde::Serialize and serde::Deserialize for MainEngine in rsonpath-lib,
      and for JsonPathQuery and its consituent types in rsonpath-syntax.
      The serde dependency is guarded behind the optional serde feature.
    • The serialization format for rsonpath-lib is not stable, as the Automaton
      is expected to evolve. Thus, serialization includes a version
      and deserialization will fail if the version disagrees.
    • The format in rsonpath-syntax is expected to be stable, but no guarantees before 1.0.0.
    • Also added snapshot tests for serialization based on insta.
  • Added the MainEngine::automaton function to retrieve a reference to the compiled query.
  • Removed the arbitrary feature from rsonpath-lib as it didn't actually do anything anymore.

Dependencies

  • serde (1.0.217) is now an optional dependency for rsonpath, rsonpath-lib, and rsonpath-syntax

v0.9.3

24 Dec 16:00
v0.9.3
1f2ebbe

Choose a tag to compare

[0.9.3] - 2024-12-24

Thanks to @azoyan for contributions 🎉

Library

  • Made MainEngine Send and Sync
    • Changed internal Rcs to Arcs in the automaton labels.
    • Added a static_assert to make sure MainEngine is Send+Sync forever.
  • Added a Debug impl for MainEngine.

v0.9.2

23 Dec 00:36
v0.9.2
cddc509

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

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

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

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

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

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

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.