add a query_name associated constant

This commit is contained in:
Niko Matsakis 2020-07-01 09:36:20 +00:00
parent b4c6e69faf
commit 5a1bf10ba6
2 changed files with 10 additions and 0 deletions

View file

@ -41,6 +41,7 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream
let mut storage = QueryStorage::Memoized; let mut storage = QueryStorage::Memoized;
let mut cycle = None; let mut cycle = None;
let mut invoke = None; let mut invoke = None;
let query_name = method.sig.ident.to_string();
let mut query_type = Ident::new( let mut query_type = Ident::new(
&format!("{}Query", method.sig.ident.to_string().to_camel_case()), &format!("{}Query", method.sig.ident.to_string().to_camel_case()),
Span::call_site(), Span::call_site(),
@ -146,6 +147,7 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream
let lookup_keys = vec![value.clone()]; let lookup_keys = vec![value.clone()];
Some(Query { Some(Query {
query_type: lookup_query_type, query_type: lookup_query_type,
query_name: format!("lookup_{}", query_name),
fn_name: lookup_fn_name, fn_name: lookup_fn_name,
attrs: vec![], // FIXME -- some automatically generated docs on this method? attrs: vec![], // FIXME -- some automatically generated docs on this method?
storage: QueryStorage::InternedLookup { storage: QueryStorage::InternedLookup {
@ -162,6 +164,7 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream
queries.push(Query { queries.push(Query {
query_type, query_type,
query_name,
fn_name: method.sig.ident, fn_name: method.sig.ident,
attrs, attrs,
storage, storage,
@ -375,6 +378,7 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream
}; };
let keys = &query.keys; let keys = &query.keys;
let value = &query.value; let value = &query.value;
let query_name = &query.query_name;
// Emit the query struct and implement the Query trait on it. // Emit the query struct and implement the Query trait on it.
output.extend(quote! { output.extend(quote! {
@ -398,6 +402,8 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream
const QUERY_INDEX: u16 = #query_index; const QUERY_INDEX: u16 = #query_index;
const QUERY_NAME: &'static str = #query_name;
fn query_storage( fn query_storage(
group_storage: &Self::GroupStorage, group_storage: &Self::GroupStorage,
) -> &std::sync::Arc<Self::Storage> { ) -> &std::sync::Arc<Self::Storage> {
@ -591,6 +597,7 @@ fn filter_attrs(attrs: Vec<Attribute>) -> (Vec<Attribute>, Vec<SalsaAttr>) {
#[derive(Debug)] #[derive(Debug)]
struct Query { struct Query {
fn_name: Ident, fn_name: Ident,
query_name: String,
attrs: Vec<syn::Attribute>, attrs: Vec<syn::Attribute>,
query_type: Ident, query_type: Ident,
storage: QueryStorage, storage: QueryStorage,

View file

@ -469,6 +469,9 @@ pub trait Query<DB: Database>: Debug + Default + Sized + 'static {
/// A unique index identifying this query within the group. /// A unique index identifying this query within the group.
const QUERY_INDEX: u16; const QUERY_INDEX: u16;
/// Name of the query method (e.g., `foo`)
const QUERY_NAME: &'static str;
/// Extact storage for this query from the storage for its group. /// Extact storage for this query from the storage for its group.
fn query_storage(group_storage: &Self::GroupStorage) -> &Arc<Self::Storage>; fn query_storage(group_storage: &Self::GroupStorage) -> &Arc<Self::Storage>;