diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d119c0..488af82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## [v0.5.0] - 2025-04-15 + +### Added + +- Feat: json path support recursive wildcard member accessor `.**` syntax (#81) +- Refactor: get object value by key name improve performance (#79) +- Refactor: Implements serde trait for RawJsonb (#77) +- Refactor JSONB functions: Improved API, Documentation, and Data Structures (#75) +- Feat: add arithmatic expression support (#71) +- Feat(expr): add filter expr `starts with` (#52) + ## [v0.4.4] - 2024-11-16 ### Fixed @@ -114,6 +125,7 @@ - Implement `JSONB` encodes and decodes. - Implemented a number of `JSONB` functions. +[v0.5.0]: https://github.com/databendlabs/jsonb/compare/v0.4.4...v0.5.0 [v0.4.4]: https://github.com/databendlabs/jsonb/compare/v0.4.3...v0.4.4 [v0.4.3]: https://github.com/databendlabs/jsonb/compare/v0.4.2...v0.4.3 [v0.4.2]: https://github.com/databendlabs/jsonb/compare/v0.4.1...v0.4.2 diff --git a/Cargo.toml b/Cargo.toml index bd6abbb..a600804 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,8 +22,8 @@ keywords = ["json", "jsonb", "jsonpath"] license = "Apache-2.0" name = "jsonb" repository = "https://github.com/databendlabs/jsonb" -version = "0.4.4" -rust-version = "1.77" +version = "0.5.0" +rust-version = "1.80" [dependencies] byteorder = "1.5.0" @@ -32,16 +32,16 @@ itoa = "1.0" nom = "7.1.3" num-traits = "0.2.19" ordered-float = { version = "5.0", default-features = false } -rand = { version = "0.8.5", features = ["small_rng"] } +rand = { version = "0.9.0", features = ["small_rng"] } ryu = "1.0" serde = "1.0" serde_json = { version = "1.0", default-features = false, features = ["std"] } [dev-dependencies] -goldenfile = "1.7" +goldenfile = "1.8" serde_json = "1.0" json-deserializer = "0.4.4" -simd-json = "0.13.10" +simd-json = "0.15.0" mockalloc = "0.1.2" criterion = "0.5.1" diff --git a/src/value.rs b/src/value.rs index 7ed8016..0e038ac 100644 --- a/src/value.rs +++ b/src/value.rs @@ -19,9 +19,9 @@ use std::fmt::Display; use std::fmt::Formatter; use std::mem::discriminant; -use rand::distributions::Alphanumeric; -use rand::distributions::DistString; -use rand::thread_rng; +use rand::distr::Alphanumeric; +use rand::distr::SampleString; +use rand::rng; use rand::Rng; use super::number::Number; @@ -269,10 +269,10 @@ impl<'a> Value<'a> { /// generate random JSONB value pub fn rand_value() -> Value<'static> { - let mut rng = thread_rng(); - let val = match rng.gen_range(0..=2) { + let mut rng = rng(); + let val = match rng.random_range(0..=2) { 0 => { - let len = rng.gen_range(0..=5); + let len = rng.random_range(0..=5); let mut values = Vec::with_capacity(len); for _ in 0..len { values.push(Self::rand_scalar_value()); @@ -280,7 +280,7 @@ impl<'a> Value<'a> { Value::Array(values) } 1 => { - let len = rng.gen_range(0..=5); + let len = rng.random_range(0..=5); let mut obj = Object::new(); for _ in 0..len { let k = Alphanumeric.sample_string(&mut rng, 5); @@ -295,27 +295,27 @@ impl<'a> Value<'a> { } fn rand_scalar_value() -> Value<'static> { - let mut rng = thread_rng(); - let val = match rng.gen_range(0..=3) { + let mut rng = rng(); + let val = match rng.random_range(0..=3) { 0 => { - let v = rng.gen_bool(0.5); + let v = rng.random_bool(0.5); Value::Bool(v) } 1 => { let s = Alphanumeric.sample_string(&mut rng, 5); Value::String(Cow::from(s)) } - 2 => match rng.gen_range(0..=2) { + 2 => match rng.random_range(0..=2) { 0 => { - let n: u64 = rng.gen_range(0..=100000); + let n: u64 = rng.random_range(0..=100000); Value::Number(Number::UInt64(n)) } 1 => { - let n: i64 = rng.gen_range(-100000..=100000); + let n: i64 = rng.random_range(-100000..=100000); Value::Number(Number::Int64(n)) } _ => { - let n: f64 = rng.gen_range(-4000.0..1.3e5); + let n: f64 = rng.random_range(-4000.0..1.3e5); Value::Number(Number::Float64(n)) } },