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