Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: RocksDB CI

on: [push, pull_request]
env:
RUST_VERSION: 1.71.1
RUST_VERSION: 1.88
CARGO_TERM_COLOR: always

jobs:
Expand Down
2 changes: 1 addition & 1 deletion librocksdb-sys/rocksdb
Submodule rocksdb updated 2 files
+29 −61 db/c.cc
+3 −5 include/rocksdb/c.h
41 changes: 24 additions & 17 deletions src/db_iterator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,17 @@
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Check warning on line 11 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Rustfmt

Diff in /home/runner/work/solid/solid/src/db_iterator.rs

Check warning on line 11 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Rustfmt

Diff in /home/runner/work/solid/solid/src/db_iterator.rs
// See the License for the specific language governing permissions and
// limitations under the License.

use crate::wide::db_wide_columns::WideColumns;
use crate::wide::db_wide_columns::WideColumn;
use crate::{
db,

Check failure on line 17 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / macOS

unused import: `db`

Check failure on line 17 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Doctests

unused import: `db`

Check failure on line 17 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Linux

unused import: `db`

Check failure on line 17 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Doctests

unused import: `db`
db::{DBAccess, DB},
column_family::AsColumnFamilyRef,
ffi, Error, ReadOptions, WriteBatch,

};
use libc::{c_char, c_uchar, size_t};
use std::{marker::PhantomData, slice};
Expand All @@ -28,7 +30,7 @@
inner: std::ptr::NonNull<ffi::rocksdb_iterator_atg_t>,
_readopts: ReadOptions,
db: PhantomData<&'a D>,
}

Check warning on line 33 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Rustfmt

Diff in /home/runner/work/solid/solid/src/db_iterator.rs

Check warning on line 33 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Rustfmt

Diff in /home/runner/work/solid/solid/src/db_iterator.rs

impl<'a, D: DBAccess> DBATGIteratorWithThreadMode<'a, D> {
pub(crate) fn new(db: &D,
Expand Down Expand Up @@ -112,36 +114,41 @@
let key_len_ptr: *mut size_t = &mut key_len;
let key_ptr = ffi::rocksdb_iter_atg_key(self.inner.as_ptr(), key_len_ptr);
slice::from_raw_parts(key_ptr as *const c_uchar, key_len)
}

Check warning on line 117 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Rustfmt

Diff in /home/runner/work/solid/solid/src/db_iterator.rs

Check warning on line 117 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Rustfmt

Diff in /home/runner/work/solid/solid/src/db_iterator.rs
}

pub fn attribute_groups(&self) -> Vec<Result<Option<Vec<u8>>, Error>> {
pub fn attribute_groups(&self) -> Vec<WideColumn> {
if self.valid() {
self.attribute_groups_impl()
} else {
vec![]
let mut result = Vec::new();

Check warning on line 124 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Rustfmt

Diff in /home/runner/work/solid/solid/src/db_iterator.rs

Check warning on line 124 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Rustfmt

Diff in /home/runner/work/solid/solid/src/db_iterator.rs
result.push(WideColumn { cf: String::new(), value: Vec::new()});
return result;
}
}

Check warning on line 129 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Rustfmt

Diff in /home/runner/work/solid/solid/src/db_iterator.rs

Check warning on line 129 in src/db_iterator.rs

View workflow job for this annotation

GitHub Actions / Rustfmt

Diff in /home/runner/work/solid/solid/src/db_iterator.rs
fn attribute_groups_impl(&self) -> Vec<Result<Option<Vec<u8>>, Error>> {
let mut len: size_t = 0;

let mut values: *mut *mut c_char = ptr::null_mut();
let mut values_sizes: *mut size_t = ptr::null_mut();
let mut errors: *mut *mut c_char = ptr::null_mut();
fn attribute_groups_impl(&self) -> Vec<WideColumn> {
let mut values: *mut *mut ffi::rocksdb_widecolumns_t = ptr::null_mut();
let mut values_sizes: usize = 0;

unsafe {
ffi::rocksdb_iter_attribute_groups(
self.inner.as_ptr(),
&mut values,
&mut values_sizes,
&mut errors,
&mut len);

let values = slice::from_raw_parts(values, len);
let values_sizes = slice::from_raw_parts(values_sizes, len);
let errors = slice::from_raw_parts(errors, len);
db::convert_values(values.to_vec(), values_sizes.to_vec(), errors.to_vec())
&mut values_sizes);


let list = slice::from_raw_parts(values, values_sizes);
let mut result = Vec::new();

for col in list {
let wc = WideColumns::from_c(col.clone());
let value = wc.value().to_vec();
let cf = String::from_utf8_lossy(wc.name()).into_owned();
result.push(WideColumn { cf, value: value });
}

result
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ mod db;
mod db_iterator;
mod db_options;
mod db_pinnable_slice;
mod wide;
pub mod wide;
mod env;
mod iter_range;
pub mod merge_operator;
Expand Down Expand Up @@ -131,6 +131,7 @@ pub use crate::{
UniversalCompactionStopStyle, WaitForCompactOptions, WriteBufferManager, WriteOptions,
},
wide::db_wide_columns::WideColumns,
wide::db_wide_columns::WideColumn,
db_pinnable_slice::DBPinnableSlice,
env::Env,
ffi_util::CStrLike,
Expand Down
7 changes: 4 additions & 3 deletions src/wide/db_wide_columns.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ use libc::size_t;
use std::marker::PhantomData;
use std::slice;

pub struct WideColumn <'a> {
name: &'a str,
value: &'a str,
#[derive(Debug, Clone)]
pub struct WideColumn{
pub cf: String,
pub value: Vec<u8>,
}

pub struct WideColumns<'a> {
Expand Down
17 changes: 8 additions & 9 deletions tests/test_iterator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ mod util;

use pretty_assertions::assert_eq;

use rocksdb::{Direction, IteratorMode, MemtableFactory, Options, DB, DBRawIteratorWithThreadMode, WideColumns};
use rocksdb::{Direction, IteratorMode, MemtableFactory, Options, DB, DBRawIteratorWithThreadMode};
use util::{assert_iter, assert_iter_reversed, pair, DBPath};
use rocksdb::ReadOptions;
use rocksdb::wide::db_wide_columns::WideColumn;


#[test]
#[allow(clippy::cognitive_complexity)]
Expand Down Expand Up @@ -359,14 +361,11 @@ fn test_atg_iterator() {

while it.valid() {
let key: Box<[u8]> = it.key().unwrap().into();
let atg: Vec<u8> = it.attribute_groups()
.into_iter()
.map(|ag| ag.unwrap())
.filter(|o| o.is_some())
.flat_map(|ag| ag.unwrap())
.collect();

println!("atg|{:?}=>{:?}", key, atg);
let atg: Vec<WideColumn> = it.attribute_groups();

for col in &atg {
println!("cf={:?}", col);
}
it.next();
}

Expand Down
Loading