Ziyang Hu 1 year ago
parent 9e9e271bb3
commit 5a64821eca

@ -104,8 +104,10 @@ impl<'a> SessionTx<'a> {
})?;
to_clear.extend(cleanups);
}
to_clear.push(self.destroy_relation(&meta.name)?);
let destroy_res = self.destroy_relation(&meta.name)?;
if !meta.name.is_temp_store_name() {
to_clear.push(destroy_res);
}
}
}
let mut relation_store = if op == RelationOp::Replace || op == RelationOp::Create {

@ -1129,8 +1129,10 @@ impl<'s, S: Storage<'s>> Db<S> {
let mut tx = self.transact_write()?;
for rs in rel_names {
let bound = tx.destroy_relation(&rs)?;
if !rs.is_temp_store_name() {
bounds.push(bound);
}
}
tx.commit_tx()?;
}
for (lower, upper) in bounds {

@ -580,9 +580,11 @@ impl<'a> SessionTx<'a> {
Ok(metadata)
}
pub(crate) fn destroy_relation(&mut self, name: &str) -> Result<(Vec<u8>, Vec<u8>)> {
if name.starts_with('_') {
bail!("Cannot destroy temp relation");
}
let is_temp = name.starts_with('_');
// if name.starts_with('_') {
// bail!("Cannot destroy temp relation");
// }
let store = self.get_relation(name, true)?;
if !store.indices.is_empty() {
bail!("Cannot remove stored relation `{}` with indices attached.", name);
@ -596,12 +598,17 @@ impl<'a> SessionTx<'a> {
}
for k in store.indices.keys() {
// TODO leak
self.destroy_relation(&format!("{name}:{k}"))?;
}
let key = DataValue::from(name);
let encoded = vec![key].encode_as_key(RelationId::SYSTEM);
if is_temp {
self.temp_store_tx.del(&encoded)?;
} else {
self.store_tx.del(&encoded)?;
}
let lower_bound = Tuple::default().encode_as_key(store.id);
let upper_bound = Tuple::default().encode_as_key(store.id.next());
Ok((lower_bound, upper_bound))
@ -764,6 +771,7 @@ impl<'a> SessionTx<'a> {
bail!(IndexNotFound(idx_name.to_string(), rel_name.to_string()));
}
// TODO leak
self.destroy_relation(&format!("{}:{}", rel_name.name, idx_name.name))?;
let new_encoded =

Loading…
Cancel
Save