Skip to content

Commit 054d0fe

Browse files
authored
Add commit_changes_bytes() method to Db (#248)
* Don't expose RcValue's Vec<u8> Also, make RcKey a distinct type. * Add commit_changes_bytes() Only when "bytes" feature is enabled. Also make commit_changes_shared() only available when "arc" feature is enabled.
1 parent 8babda8 commit 054d0fe

File tree

6 files changed

+101
-57
lines changed

6 files changed

+101
-57
lines changed

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@ repository = "https://github.com/paritytech/parity-db/"
99
description = "Key-value database for the blockchain"
1010

1111
[features]
12+
default = ["arc"]
1213
instrumentation = []
1314
bench = []
15+
arc = []
1416

1517
[dependencies]
1618
blake2 = "0.10.6"
19+
bytes = { version = "1.7.1", optional = true }
1720
crc32fast = "1.4.2"
1821
fs2 = "0.4.3"
1922
hex = "0.4.3"

src/btree/iter.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -147,38 +147,38 @@ impl<'a> BTreeIterator<'a> {
147147
};
148148
let result = match (next_commit_overlay, next_backend) {
149149
(Some((commit_key, commit_value)), Some((backend_key, backend_value))) => {
150-
match (direction, commit_key.value().cmp(&backend_key)) {
150+
match (direction, commit_key.as_ref().cmp(&backend_key)) {
151151
(IterDirection::Backward, std::cmp::Ordering::Greater) |
152152
(IterDirection::Forward, std::cmp::Ordering::Less) => {
153153
self.pending_backend = Some(PendingBackend {
154154
next_item: Some((backend_key, backend_value)),
155155
direction,
156156
});
157157
if let Some(value) = commit_value {
158-
Some((commit_key.value().clone(), value.value().clone()))
158+
Some((commit_key.as_ref().to_vec(), value.as_ref().to_vec()))
159159
} else {
160-
self.last_key = LastKey::At(commit_key.value().clone());
160+
self.last_key = LastKey::At(commit_key.as_ref().to_vec());
161161
continue
162162
}
163163
},
164164
(IterDirection::Backward, std::cmp::Ordering::Less) |
165165
(IterDirection::Forward, std::cmp::Ordering::Greater) => Some((backend_key, backend_value)),
166166
(_, std::cmp::Ordering::Equal) =>
167167
if let Some(value) = commit_value {
168-
Some((backend_key, value.value().clone()))
168+
Some((backend_key, value.as_ref().to_vec()))
169169
} else {
170-
self.last_key = LastKey::At(commit_key.value().clone());
170+
self.last_key = LastKey::At(commit_key.as_ref().to_vec());
171171
continue
172172
},
173173
}
174174
},
175175
(Some((commit_key, Some(commit_value))), None) => {
176176
self.pending_backend = Some(PendingBackend { next_item: None, direction });
177-
Some((commit_key.value().clone(), commit_value.value().clone()))
177+
Some((commit_key.as_ref().to_vec(), commit_value.as_ref().to_vec()))
178178
},
179179
(Some((k, None)), None) => {
180180
self.pending_backend = Some(PendingBackend { next_item: None, direction });
181-
self.last_key = LastKey::At(k.value().clone());
181+
self.last_key = LastKey::At(k.as_ref().to_vec());
182182
continue
183183
},
184184
(None, Some((backend_key, backend_value))) => Some((backend_key, backend_value)),

src/btree/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -414,16 +414,16 @@ pub mod commit_overlay {
414414
for change in self.changes.iter() {
415415
match change {
416416
Operation::Set(key, value) => {
417-
*bytes += key.value().len();
418-
*bytes += value.value().len();
417+
*bytes += key.as_ref().len();
418+
*bytes += value.as_ref().len();
419419
overlay.insert(key.clone(), (record_id, Some(value.clone())));
420420
},
421421
Operation::Dereference(key) => {
422422
// Don't add removed ref-counted values to overlay.
423423
// (current ref_counted implementation does not
424424
// make much sense for btree indexed content).
425425
if !ref_counted {
426-
*bytes += key.value().len();
426+
*bytes += key.as_ref().len();
427427
overlay.insert(key.clone(), (record_id, None));
428428
}
429429
},

src/btree/node.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ impl Node {
7171
}
7272
let r = match &changes[0] {
7373
Operation::Set(key, value) =>
74-
self.insert(depth, key.value(), value.value(), changes, btree, log)?,
74+
self.insert(depth, key.as_ref(), value.as_ref(), changes, btree, log)?,
7575
_ => self.on_existing(depth, changes, btree, log)?,
7676
};
7777
if r.0.is_some() || r.1 {
@@ -82,12 +82,12 @@ impl Node {
8282
}
8383
if let Some((parent, p)) = &parent {
8484
let key = &changes[1].key();
85-
let (at, i) = self.position(key.value())?; // TODO could start position from current
85+
let (at, i) = self.position(key.as_ref())?; // TODO could start position from current
8686
if at || i < self.number_separator() {
8787
*changes = &changes[1..];
8888
continue
8989
}
90-
let (at, i) = parent.position(key.value())?;
90+
let (at, i) = parent.position(key.as_ref())?;
9191
if !at && &i == p && i < parent.number_separator() {
9292
*changes = &changes[1..];
9393
continue
@@ -243,7 +243,7 @@ impl Node {
243243
let change = &changes[0];
244244
let key = change.key();
245245
let has_child = depth != 0;
246-
let (at, i) = self.position(key.value())?;
246+
let (at, i) = self.position(key.as_ref())?;
247247
if at {
248248
let existing = self.separator_address(i);
249249
if let Some(existing) = existing {

src/column.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ pub fn unpack_node_data(data: Vec<u8>) -> Result<(Vec<u8>, Children)> {
426426
Ok((data, children))
427427
}
428428

429-
pub fn unpack_node_children(data: &Vec<u8>) -> Result<Children> {
429+
pub fn unpack_node_children(data: &[u8]) -> Result<Children> {
430430
if data.len() == 0 {
431431
return Err(Error::InvalidValueData)
432432
}
@@ -1203,7 +1203,7 @@ impl HashColumn {
12031203

12041204
let stats = self.collect_stats.then_some(&self.stats);
12051205
if let Some(stats) = stats {
1206-
stats.insert_val(val_len, cval.value().len() as u32);
1206+
stats.insert_val(val_len, cval.as_ref().len() as u32);
12071207
}
12081208

12091209
Ok(PlanOutcome::Written)

0 commit comments

Comments
 (0)