Skip to content

Commit

Permalink
JSONSelection refactoring, $variable syntax, new README.md (#5142)
Browse files Browse the repository at this point in the history
  • Loading branch information
benjamn authored May 13, 2024
2 parents 85432ab + 42a076c commit 17ed310
Show file tree
Hide file tree
Showing 48 changed files with 5,723 additions and 2,573 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ use crate::sources::connect::federated_query_graph::ConcreteNode;
use crate::sources::connect::federated_query_graph::EnumNode;
use crate::sources::connect::federated_query_graph::ScalarNode;
use crate::sources::connect::federated_query_graph::SourceEnteringEdge;
use crate::sources::connect::json_selection::JSONSelection;
use crate::sources::connect::json_selection::Key;
use crate::sources::connect::json_selection::SubSelection;
use crate::sources::connect::models::Connector;
use crate::sources::connect::selection_parser::Property;
use crate::sources::connect::selection_parser::SubSelection;
use crate::sources::connect::Selection;
use crate::sources::source::federated_query_graph::builder::FederatedQueryGraphBuilderApi;
use crate::sources::source::SourceId;
use crate::ValidFederationSubgraph;
Expand Down Expand Up @@ -106,7 +106,7 @@ impl FederatedQueryGraphBuilderApi for FederatedQueryGraphBuilder {
/// This method creates nodes from selection parameters of a field decorated by
/// a connect directive, making sure to reuse nodes if possible.
fn process_selection(
selection: Selection,
selection: JSONSelection,
field_output_type_pos: TypeDefinitionPosition,
subgraph_schema: &ValidFederationSchema,
builder: &mut impl IntraSourceQueryGraphBuilderApi,
Expand Down Expand Up @@ -137,7 +137,7 @@ fn process_selection(

// If we aren't a custom scalar, then look at the selection to see what to attempt
match selection {
Selection::Path(path) => match field_output_type_pos {
JSONSelection::Path(path) => match field_output_type_pos {
TypeDefinitionPosition::Enum(enum_type) => {
// Create the node for this enum
builder.add_enum_node(
Expand Down Expand Up @@ -179,7 +179,7 @@ fn process_selection(
)
}
},
Selection::Named(sub) => {
JSONSelection::Named(sub) => {
// Make sure that we aren't selecting sub fields from simple types
if field_ty.is_scalar() || field_ty.is_enum() {
return Err(FederationError::internal(
Expand All @@ -206,7 +206,7 @@ fn process_subselection(
subgraph_schema: &ValidFederationSchema,
builder: &mut impl IntraSourceQueryGraphBuilderApi,
node_cache: &mut IndexMap<Name, NodeIndex<u32>>,
properties_path: Option<Vec<Property>>,
properties_path: Option<Vec<Key>>,
) -> Result<NodeIndex<u32>, FederationError> {
// Get the type of the field
let field_ty = field_output_type_pos.get(subgraph_schema.schema())?;
Expand Down Expand Up @@ -669,7 +669,7 @@ mod tests {
use crate::source_aware::federated_query_graph::SelfConditionIndex;
use crate::sources::connect::federated_query_graph::ConcreteFieldEdge;
use crate::sources::connect::federated_query_graph::SourceEnteringEdge;
use crate::sources::connect::selection_parser::Property;
use crate::sources::connect::json_selection::Key;
use crate::sources::connect::ConnectId;
use crate::sources::source;
use crate::sources::source::SourceId;
Expand All @@ -690,7 +690,7 @@ mod tests {
/// A mock query edge
struct MockEdge {
field_name: Name,
path: Vec<Property>,
path: Vec<Key>,
}
impl Display for MockEdge {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
Expand All @@ -702,13 +702,13 @@ mod tests {
}

// Helper for checking name equality of a property
fn is_name_eq(prop: &Property, other: &str) -> bool {
fn is_name_eq(prop: &Key, other: &str) -> bool {
match prop {
Property::Field(f) => f == other,
Property::Quoted(q) => q == other,
Key::Field(f) => f == other,
Key::Quoted(q) => q == other,

// No string name will be equal to a number
Property::Index(_) => false,
Key::Index(_) => false,
}
}

Expand Down
20 changes: 10 additions & 10 deletions apollo-federation/src/sources/connect/federated_query_graph/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ use crate::schema::position::EnumTypeDefinitionPosition;
use crate::schema::position::ObjectTypeDefinitionPosition;
use crate::schema::position::ScalarTypeDefinitionPosition;
use crate::schema::ObjectFieldDefinitionPosition;
use crate::sources::connect::selection_parser::PathSelection;
use crate::sources::connect::selection_parser::Property;
use crate::sources::connect::Selection;
use crate::sources::connect::SubSelection;
use crate::sources::connect::json_selection::JSONSelection;
use crate::sources::connect::json_selection::Key;
use crate::sources::connect::json_selection::PathSelection;
use crate::sources::connect::json_selection::SubSelection;
use crate::sources::source;
use crate::sources::source::federated_query_graph::FederatedQueryGraphApi;
use crate::sources::source::SourceId;
Expand Down Expand Up @@ -42,7 +42,7 @@ pub(crate) enum ConcreteNode {
},
SelectionRoot {
subgraph_type: ObjectTypeDefinitionPosition,
property_path: Vec<Property>,
property_path: Vec<Key>,
},
SelectionChild {
subgraph_type: ObjectTypeDefinitionPosition,
Expand All @@ -53,7 +53,7 @@ pub(crate) enum ConcreteNode {
pub(crate) enum EnumNode {
SelectionRoot {
subgraph_type: EnumTypeDefinitionPosition,
property_path: Vec<Property>,
property_path: Vec<Key>,
},
SelectionChild {
subgraph_type: EnumTypeDefinitionPosition,
Expand All @@ -64,11 +64,11 @@ pub(crate) enum EnumNode {
pub(crate) enum ScalarNode {
SelectionRoot {
subgraph_type: ScalarTypeDefinitionPosition,
property_path: Vec<Property>,
property_path: Vec<Key>,
},
CustomScalarSelectionRoot {
subgraph_type: ScalarTypeDefinitionPosition,
selection: Selection,
selection: JSONSelection,
},
SelectionChild {
subgraph_type: ScalarTypeDefinitionPosition,
Expand All @@ -86,7 +86,7 @@ pub(crate) enum ConcreteFieldEdge {
},
Selection {
subgraph_field: ObjectFieldDefinitionPosition,
property_path: Vec<Property>,
property_path: Vec<Key>,
},
CustomScalarPathSelection {
subgraph_field: ObjectFieldDefinitionPosition,
Expand All @@ -95,7 +95,7 @@ pub(crate) enum ConcreteFieldEdge {
CustomScalarStarSelection {
subgraph_field: ObjectFieldDefinitionPosition,
star_subselection: Option<SubSelection>,
excluded_properties: IndexSet<Property>,
excluded_properties: IndexSet<Key>,
},
}

Expand Down
24 changes: 12 additions & 12 deletions apollo-federation/src/sources/connect/fetch_dependency_graph/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ use crate::source_aware::federated_query_graph::FederatedQueryGraph;
use crate::source_aware::federated_query_graph::SelfConditionIndex;
use crate::source_aware::query_plan::FetchDataPathElement;
use crate::source_aware::query_plan::QueryPlanCost;
use crate::sources::connect::selection_parser::PathSelection;
use crate::sources::connect::selection_parser::Property;
use crate::sources::connect::Selection;
use crate::sources::connect::SubSelection;
use crate::sources::connect::json_selection::JSONSelection;
use crate::sources::connect::json_selection::Key;
use crate::sources::connect::json_selection::PathSelection;
use crate::sources::connect::json_selection::SubSelection;
use crate::sources::source;
use crate::sources::source::fetch_dependency_graph::FetchDependencyGraphApi;
use crate::sources::source::fetch_dependency_graph::PathApi;
Expand Down Expand Up @@ -124,7 +124,7 @@ pub(crate) struct Node {
source_entering_edge: EdgeIndex,
field_response_name: Name,
field_arguments: IndexMap<Name, Value>,
selection: Selection,
selection: JSONSelection,
}

#[derive(Debug)]
Expand All @@ -145,26 +145,26 @@ pub(crate) struct PathField {
#[derive(Debug)]
pub(crate) enum PathSelections {
Selections {
head_property_path: Vec<Property>,
named_selections: Vec<(Name, Vec<Property>)>,
head_property_path: Vec<Key>,
named_selections: Vec<(Name, Vec<Key>)>,
tail_selection: Option<(Name, PathTailSelection)>,
},
CustomScalarRoot {
selection: Selection,
selection: JSONSelection,
},
}

#[derive(Debug)]
pub(crate) enum PathTailSelection {
Selection {
property_path: Vec<Property>,
property_path: Vec<Key>,
},
CustomScalarPathSelection {
path_selection: PathSelection,
},
CustomScalarStarSelection {
star_subselection: Option<SubSelection>,
excluded_properties: IndexSet<Property>,
excluded_properties: IndexSet<Key>,
},
}

Expand Down Expand Up @@ -205,7 +205,7 @@ mod tests {
use crate::sources::connect::federated_query_graph::ConcreteFieldEdge;
use crate::sources::connect::federated_query_graph::ConcreteNode;
use crate::sources::connect::federated_query_graph::SourceEnteringEdge;
use crate::sources::connect::selection_parser::Property;
use crate::sources::connect::json_selection::Key;
use crate::sources::connect::ConnectId;
use crate::sources::source::fetch_dependency_graph::FetchDependencyGraphApi;
use crate::sources::source::SourceId;
Expand Down Expand Up @@ -272,7 +272,7 @@ mod tests {
source_id: source_id.clone(),
source_data: ConcreteNode::SelectionRoot {
subgraph_type: node_type.clone(),
property_path: vec![Property::Field(type_name.to_lowercase().to_string())],
property_path: vec![Key::Field(type_name.to_lowercase().to_string())],
}
.into(),
});
Expand Down
Loading

0 comments on commit 17ed310

Please sign in to comment.