Improve performance
This commit is contained in:
parent
1a8f432383
commit
11e82e56e4
|
@ -157,29 +157,33 @@ impl<'a> Fields<'a> {
|
||||||
async move {
|
async move {
|
||||||
let ctx_field = ctx.with_field(field);
|
let ctx_field = ctx.with_field(field);
|
||||||
let field_name = ctx_field.item.node.response_key().node.clone();
|
let field_name = ctx_field.item.node.response_key().node.clone();
|
||||||
|
|
||||||
|
let res = if ctx_field.query_env.extensions.is_empty() {
|
||||||
let ctx_extension = ExtensionContext {
|
let ctx_extension = ExtensionContext {
|
||||||
schema_data: &ctx.schema_env.data,
|
schema_data: &ctx.schema_env.data,
|
||||||
query_data: &ctx.query_env.ctx_data,
|
query_data: &ctx.query_env.ctx_data,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let type_name = T::type_name();
|
||||||
let resolve_info = ResolveInfo {
|
let resolve_info = ResolveInfo {
|
||||||
resolve_id: ctx_field.resolve_id,
|
resolve_id: ctx_field.resolve_id,
|
||||||
path_node: ctx_field.path_node.as_ref().unwrap(),
|
path_node: ctx_field.path_node.as_ref().unwrap(),
|
||||||
parent_type: &T::type_name(),
|
parent_type: &type_name,
|
||||||
return_type: match ctx_field
|
return_type: match ctx_field
|
||||||
.schema_env
|
.schema_env
|
||||||
.registry
|
.registry
|
||||||
.types
|
.types
|
||||||
.get(T::type_name().as_ref())
|
.get(type_name.as_ref())
|
||||||
.and_then(|ty| ty.field_by_name(field.node.name.node.as_str()))
|
.and_then(|ty| {
|
||||||
|
ty.field_by_name(field.node.name.node.as_str())
|
||||||
|
})
|
||||||
.map(|field| &field.ty)
|
.map(|field| &field.ty)
|
||||||
{
|
{
|
||||||
Some(ty) => &ty,
|
Some(ty) => &ty,
|
||||||
None => {
|
None => {
|
||||||
return Err(ServerError::new(format!(
|
return Err(ServerError::new(format!(
|
||||||
r#"Cannot query field "{}" on type "{}"."#,
|
r#"Cannot query field "{}" on type "{}"."#,
|
||||||
field_name,
|
field_name, type_name
|
||||||
T::type_name()
|
|
||||||
))
|
))
|
||||||
.at(ctx_field.item.pos)
|
.at(ctx_field.item.pos)
|
||||||
.path(PathSegment::Field(field_name.to_string())));
|
.path(PathSegment::Field(field_name.to_string())));
|
||||||
|
@ -193,8 +197,10 @@ impl<'a> Fields<'a> {
|
||||||
.resolve_start(&ctx_extension, &resolve_info);
|
.resolve_start(&ctx_extension, &resolve_info);
|
||||||
|
|
||||||
let res = match root.resolve_field(&ctx_field).await {
|
let res = match root.resolve_field(&ctx_field).await {
|
||||||
Ok(value) => Ok((field_name, value.unwrap())),
|
Ok(value) => Ok((field_name, value.unwrap_or_default())),
|
||||||
Err(e) => Err(e.path(PathSegment::Field(field_name.to_string()))),
|
Err(e) => {
|
||||||
|
Err(e.path(PathSegment::Field(field_name.to_string())))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.log_error(&ctx_extension, &ctx_field.query_env.extensions)?;
|
.log_error(&ctx_extension, &ctx_field.query_env.extensions)?;
|
||||||
|
|
||||||
|
@ -203,6 +209,16 @@ impl<'a> Fields<'a> {
|
||||||
.extensions
|
.extensions
|
||||||
.resolve_end(&ctx_extension, &resolve_info);
|
.resolve_end(&ctx_extension, &resolve_info);
|
||||||
|
|
||||||
|
res
|
||||||
|
} else {
|
||||||
|
match root.resolve_field(&ctx_field).await {
|
||||||
|
Ok(value) => Ok((field_name, value.unwrap_or_default())),
|
||||||
|
Err(e) => {
|
||||||
|
Err(e.path(PathSegment::Field(field_name.to_string())))
|
||||||
|
}
|
||||||
|
}?
|
||||||
|
};
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user