mirror of
https://github.com/salsa-rs/salsa.git
synced 2024-12-25 05:29:43 +00:00
modify public API to set_foo_with_durability
This commit is contained in:
parent
09c9bd9761
commit
a0a6bac5af
5 changed files with 45 additions and 26 deletions
|
@ -223,8 +223,8 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream
|
||||||
// For input queries, we need `set_foo` etc
|
// For input queries, we need `set_foo` etc
|
||||||
if let QueryStorage::Input = query.storage {
|
if let QueryStorage::Input = query.storage {
|
||||||
let set_fn_name = Ident::new(&format!("set_{}", fn_name), fn_name.span());
|
let set_fn_name = Ident::new(&format!("set_{}", fn_name), fn_name.span());
|
||||||
let set_constant_fn_name =
|
let set_with_durability_fn_name =
|
||||||
Ident::new(&format!("set_constant_{}", fn_name), fn_name.span());
|
Ident::new(&format!("set_{}_with_durability", fn_name), fn_name.span());
|
||||||
|
|
||||||
let set_fn_docs = format!(
|
let set_fn_docs = format!(
|
||||||
"
|
"
|
||||||
|
@ -259,7 +259,7 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream
|
||||||
|
|
||||||
|
|
||||||
# [doc = #set_constant_fn_docs]
|
# [doc = #set_constant_fn_docs]
|
||||||
fn #set_constant_fn_name(&mut self, #(#key_names: #keys,)* value__: #value);
|
fn #set_with_durability_fn_name(&mut self, #(#key_names: #keys,)* value__: #value, durability__: salsa::Durability);
|
||||||
});
|
});
|
||||||
|
|
||||||
query_fn_definitions.extend(quote! {
|
query_fn_definitions.extend(quote! {
|
||||||
|
@ -267,8 +267,8 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream
|
||||||
<Self as salsa::plumbing::GetQueryTable<#qt>>::get_query_table_mut(self).set((#(#key_names),*), value__)
|
<Self as salsa::plumbing::GetQueryTable<#qt>>::get_query_table_mut(self).set((#(#key_names),*), value__)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn #set_constant_fn_name(&mut self, #(#key_names: #keys,)* value__: #value) {
|
fn #set_with_durability_fn_name(&mut self, #(#key_names: #keys,)* value__: #value, durability__: salsa::Durability) {
|
||||||
<Self as salsa::plumbing::GetQueryTable<#qt>>::get_query_table_mut(self).set_constant((#(#key_names),*), value__)
|
<Self as salsa::plumbing::GetQueryTable<#qt>>::get_query_table_mut(self).set_with_durability((#(#key_names),*), value__, durability__)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
10
src/input.rs
10
src/input.rs
|
@ -187,10 +187,16 @@ where
|
||||||
self.set_common(db, key, database_key, value, Durability::LOW);
|
self.set_common(db, key, database_key, value, Durability::LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_constant(&self, db: &DB, key: &Q::Key, database_key: &DB::DatabaseKey, value: Q::Value) {
|
fn set_with_durability(
|
||||||
|
&self,
|
||||||
|
db: &DB,
|
||||||
|
key: &Q::Key,
|
||||||
|
database_key: &DB::DatabaseKey,
|
||||||
|
value: Q::Value,
|
||||||
|
durability: Durability,
|
||||||
|
) {
|
||||||
log::debug!("{:?}({:?}) = {:?}", Q::default(), key, value);
|
log::debug!("{:?}({:?}) = {:?}", Q::default(), key, value);
|
||||||
|
|
||||||
let durability = db.salsa_runtime().max_durability();
|
|
||||||
self.set_common(db, key, database_key, value, durability);
|
self.set_common(db, key, database_key, value, durability);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
11
src/lib.rs
11
src/lib.rs
|
@ -540,12 +540,17 @@ where
|
||||||
/// and cancellation on [the `query_mut` method].
|
/// and cancellation on [the `query_mut` method].
|
||||||
///
|
///
|
||||||
/// [the `query_mut` method]: trait.Database#method.query_mut
|
/// [the `query_mut` method]: trait.Database#method.query_mut
|
||||||
pub fn set_constant(&self, key: Q::Key, value: Q::Value)
|
pub fn set_with_durability(&self, key: Q::Key, value: Q::Value, durability: Durability)
|
||||||
where
|
where
|
||||||
Q::Storage: plumbing::InputQueryStorageOps<DB, Q>,
|
Q::Storage: plumbing::InputQueryStorageOps<DB, Q>,
|
||||||
{
|
{
|
||||||
self.storage
|
self.storage.set_with_durability(
|
||||||
.set_constant(self.db, &key, &self.database_key(&key), value);
|
self.db,
|
||||||
|
&key,
|
||||||
|
&self.database_key(&key),
|
||||||
|
value,
|
||||||
|
durability,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the size of LRU cache of values for this query table.
|
/// Sets the size of LRU cache of values for this query table.
|
||||||
|
|
|
@ -167,12 +167,13 @@ where
|
||||||
{
|
{
|
||||||
fn set(&self, db: &DB, key: &Q::Key, database_key: &DB::DatabaseKey, new_value: Q::Value);
|
fn set(&self, db: &DB, key: &Q::Key, database_key: &DB::DatabaseKey, new_value: Q::Value);
|
||||||
|
|
||||||
fn set_constant(
|
fn set_with_durability(
|
||||||
&self,
|
&self,
|
||||||
db: &DB,
|
db: &DB,
|
||||||
key: &Q::Key,
|
key: &Q::Key,
|
||||||
database_key: &DB::DatabaseKey,
|
database_key: &DB::DatabaseKey,
|
||||||
new_value: Q::Value,
|
new_value: Q::Value,
|
||||||
|
durability: Durability,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,11 +27,11 @@ fn add3(db: &impl ConstantsDatabase, key1: char, key2: char, key3: char) -> usiz
|
||||||
#[test]
|
#[test]
|
||||||
fn invalidate_constant() {
|
fn invalidate_constant() {
|
||||||
let db = &mut TestContextImpl::default();
|
let db = &mut TestContextImpl::default();
|
||||||
db.set_constant_input('a', 44);
|
db.set_input_with_durability('a', 44, Durability::HIGH);
|
||||||
db.set_constant_input('b', 22);
|
db.set_input_with_durability('b', 22, Durability::HIGH);
|
||||||
assert_eq!(db.add('a', 'b'), 66);
|
assert_eq!(db.add('a', 'b'), 66);
|
||||||
|
|
||||||
db.set_constant_input('a', 66);
|
db.set_input_with_durability('a', 66, Durability::HIGH);
|
||||||
assert_eq!(db.add('a', 'b'), 88);
|
assert_eq!(db.add('a', 'b'), 88);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,11 +44,11 @@ fn invalidate_constant_1() {
|
||||||
assert_eq!(db.add('a', 'a'), 88);
|
assert_eq!(db.add('a', 'a'), 88);
|
||||||
|
|
||||||
// Becomes constant:
|
// Becomes constant:
|
||||||
db.set_constant_input('a', 44);
|
db.set_input_with_durability('a', 44, Durability::HIGH);
|
||||||
assert_eq!(db.add('a', 'a'), 88);
|
assert_eq!(db.add('a', 'a'), 88);
|
||||||
|
|
||||||
// Invalidates:
|
// Invalidates:
|
||||||
db.set_constant_input('a', 33);
|
db.set_input_with_durability('a', 33, Durability::HIGH);
|
||||||
assert_eq!(db.add('a', 'a'), 66);
|
assert_eq!(db.add('a', 'a'), 66);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,8 +57,8 @@ fn invalidate_constant_1() {
|
||||||
#[test]
|
#[test]
|
||||||
fn set_after_constant_same_value() {
|
fn set_after_constant_same_value() {
|
||||||
let db = &mut TestContextImpl::default();
|
let db = &mut TestContextImpl::default();
|
||||||
db.set_constant_input('a', 44);
|
db.set_input_with_durability('a', 44, Durability::HIGH);
|
||||||
db.set_constant_input('a', 44);
|
db.set_input_with_durability('a', 44, Durability::HIGH);
|
||||||
db.set_input('a', 44);
|
db.set_input('a', 44);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,8 +76,8 @@ fn not_constant() {
|
||||||
fn durability() {
|
fn durability() {
|
||||||
let db = &mut TestContextImpl::default();
|
let db = &mut TestContextImpl::default();
|
||||||
|
|
||||||
db.set_constant_input('a', 22);
|
db.set_input_with_durability('a', 22, Durability::HIGH);
|
||||||
db.set_constant_input('b', 44);
|
db.set_input_with_durability('b', 44, Durability::HIGH);
|
||||||
assert_eq!(db.add('a', 'b'), 66);
|
assert_eq!(db.add('a', 'b'), 66);
|
||||||
assert_eq!(Durability::HIGH, db.query(AddQuery).durability(('a', 'b')));
|
assert_eq!(Durability::HIGH, db.query(AddQuery).durability(('a', 'b')));
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ fn durability() {
|
||||||
fn mixed_constant() {
|
fn mixed_constant() {
|
||||||
let db = &mut TestContextImpl::default();
|
let db = &mut TestContextImpl::default();
|
||||||
|
|
||||||
db.set_constant_input('a', 22);
|
db.set_input_with_durability('a', 22, Durability::HIGH);
|
||||||
db.set_input('b', 44);
|
db.set_input('b', 44);
|
||||||
assert_eq!(db.add('a', 'b'), 66);
|
assert_eq!(db.add('a', 'b'), 66);
|
||||||
assert_eq!(Durability::LOW, db.query(AddQuery).durability(('a', 'b')));
|
assert_eq!(Durability::LOW, db.query(AddQuery).durability(('a', 'b')));
|
||||||
|
@ -101,13 +101,20 @@ fn becomes_constant_with_change() {
|
||||||
assert_eq!(db.add('a', 'b'), 66);
|
assert_eq!(db.add('a', 'b'), 66);
|
||||||
assert_eq!(Durability::LOW, db.query(AddQuery).durability(('a', 'b')));
|
assert_eq!(Durability::LOW, db.query(AddQuery).durability(('a', 'b')));
|
||||||
|
|
||||||
db.set_constant_input('a', 23);
|
db.set_input_with_durability('a', 23, Durability::HIGH);
|
||||||
assert_eq!(db.add('a', 'b'), 67);
|
assert_eq!(db.add('a', 'b'), 67);
|
||||||
assert_eq!(Durability::LOW, db.query(AddQuery).durability(('a', 'b')));
|
assert_eq!(Durability::LOW, db.query(AddQuery).durability(('a', 'b')));
|
||||||
|
|
||||||
db.set_constant_input('b', 45);
|
db.set_input_with_durability('b', 45, Durability::HIGH);
|
||||||
assert_eq!(db.add('a', 'b'), 68);
|
assert_eq!(db.add('a', 'b'), 68);
|
||||||
assert_eq!(Durability::HIGH, db.query(AddQuery).durability(('a', 'b')));
|
assert_eq!(Durability::HIGH, db.query(AddQuery).durability(('a', 'b')));
|
||||||
|
|
||||||
|
db.set_input_with_durability('b', 45, Durability::MEDIUM);
|
||||||
|
assert_eq!(db.add('a', 'b'), 68);
|
||||||
|
assert_eq!(
|
||||||
|
Durability::MEDIUM,
|
||||||
|
db.query(AddQuery).durability(('a', 'b'))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test a subtle case in which an input changes from constant to
|
// Test a subtle case in which an input changes from constant to
|
||||||
|
@ -118,9 +125,9 @@ fn becomes_constant_with_change() {
|
||||||
fn constant_to_non_constant() {
|
fn constant_to_non_constant() {
|
||||||
let db = &mut TestContextImpl::default();
|
let db = &mut TestContextImpl::default();
|
||||||
|
|
||||||
db.set_constant_input('a', 11);
|
db.set_input_with_durability('a', 11, Durability::HIGH);
|
||||||
db.set_constant_input('b', 22);
|
db.set_input_with_durability('b', 22, Durability::HIGH);
|
||||||
db.set_constant_input('c', 33);
|
db.set_input_with_durability('c', 33, Durability::HIGH);
|
||||||
|
|
||||||
// Here, `add3` invokes `add`, which yields 33. Both calls are
|
// Here, `add3` invokes `add`, which yields 33. Both calls are
|
||||||
// constant.
|
// constant.
|
||||||
|
|
Loading…
Reference in a new issue