avoid using raw Strings in more places (#923)

- `DataConnectorAggregationFunctionName` and `AggregateFunctionName` now
use `str_newtype`.
- All usages of `String`s for subgraph names are removed.

(This is part of a larger effort to remove references in
`execute::plan::QueryPlan`).

V3_GIT_ORIGIN_REV_ID: d51f0a2335e8dabbc9efdad1d1efff285ddb74c3
This commit is contained in:
Vamshi Surabhi 2024-08-05 14:59:43 -07:00 committed by hasura-bot
parent 9bf0ad967f
commit 4aefdabb65
59 changed files with 1170 additions and 553 deletions

View File

@ -508,7 +508,7 @@ fn make_aggregates(
Some(nested_field_path)
},
function: ndc_models_v01::AggregateFunctionName::from(
function_name.0.as_str(),
function_name.as_str(),
),
}
}

View File

@ -511,7 +511,7 @@ fn make_aggregates(
Some(nested_field_path)
},
function: ndc_models_v02::AggregateFunctionName::from(
function_name.0.as_str(),
function_name.as_str(),
),
}
}

View File

@ -186,48 +186,48 @@ mod tests {
count_command, count_model, extend_usage_count, CommandCount, ModelCount, UsagesCounts,
};
use metadata_resolve::Qualified;
use open_dds::{commands::CommandName, identifier, models::ModelName};
use open_dds::{commands::CommandName, identifier, models::ModelName, subgraph_identifier};
#[test]
fn test_extend_usage_count() {
let model_count1 = ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model1")),
),
count: 1,
};
let model_count2 = ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model2")),
),
count: 5,
};
let model_count3 = ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model3")),
),
count: 2,
};
let command_count1 = CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command1")),
),
count: 2,
};
let command_count2 = CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command2")),
),
count: 1,
};
let command_count3 = CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command3")),
),
count: 3,
@ -245,21 +245,21 @@ mod tests {
models_used: vec![
ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model2")),
),
count: 10,
},
ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model3")),
),
count: 2,
},
ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model1")),
),
count: 1,
@ -268,21 +268,21 @@ mod tests {
commands_used: vec![
CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command2")),
),
count: 2,
},
CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command3")),
),
count: 3,
},
CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command1")),
),
count: 2,
@ -297,7 +297,7 @@ mod tests {
let mut aggregator = UsagesCounts::new();
count_command(
&Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command1")),
),
&mut aggregator,
@ -308,7 +308,7 @@ mod tests {
models_used: Vec::new(),
commands_used: vec![CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command1"))
),
count: 1,
@ -317,7 +317,7 @@ mod tests {
);
count_command(
&Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command1")),
),
&mut aggregator,
@ -328,7 +328,7 @@ mod tests {
models_used: Vec::new(),
commands_used: vec![CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command1"))
),
count: 2,
@ -337,7 +337,7 @@ mod tests {
);
count_model(
&Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model1")),
),
&mut aggregator,
@ -347,14 +347,14 @@ mod tests {
UsagesCounts {
models_used: vec![ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model1"))
),
count: 1,
}],
commands_used: vec![CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command1"))
),
count: 2,
@ -363,7 +363,7 @@ mod tests {
);
count_model(
&Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model1")),
),
&mut aggregator,
@ -373,14 +373,14 @@ mod tests {
UsagesCounts {
models_used: vec![ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model1"))
),
count: 2,
}],
commands_used: vec![CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command1"))
),
count: 2,
@ -389,7 +389,7 @@ mod tests {
);
count_model(
&Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model2")),
),
&mut aggregator,
@ -400,14 +400,14 @@ mod tests {
models_used: vec![
ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model1"))
),
count: 2,
},
ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model2"))
),
count: 1,
@ -415,7 +415,7 @@ mod tests {
],
commands_used: vec![CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command1"))
),
count: 2,
@ -424,7 +424,7 @@ mod tests {
);
count_command(
&Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command2")),
),
&mut aggregator,
@ -435,14 +435,14 @@ mod tests {
models_used: vec![
ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model1"))
),
count: 2,
},
ModelCount {
model: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
ModelName::new(identifier!("model2"))
),
count: 1,
@ -451,14 +451,14 @@ mod tests {
commands_used: vec![
CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command1"))
),
count: 2,
},
CommandCount {
command: Qualified::new(
"subgraph".to_string(),
subgraph_identifier!("subgraph"),
CommandName::new(identifier!("command2"))
),
count: 1,

View File

@ -22,6 +22,7 @@ use open_dds::arguments::ArgumentName;
use open_dds::data_connector::{
DataConnectorName, DataConnectorObjectType, DataConnectorOperatorName,
};
use open_dds::identifier::SubgraphName;
use open_dds::models::ModelName;
use open_dds::permissions;
use open_dds::relationships::RelationshipName;
@ -264,7 +265,7 @@ pub(crate) fn resolve_value_expression_for_argument(
argument_type: &QualifiedTypeReference,
source_argument_type: Option<&ndc_models::Type>,
data_connector_link: &data_connectors::DataConnectorLink,
subgraph: &str,
subgraph: &SubgraphName,
object_types: &BTreeMap<Qualified<CustomTypeName>, relationships::ObjectTypeWithRelationships>,
scalar_types: &BTreeMap<Qualified<CustomTypeName>, scalar_types::ScalarTypeRepresentation>,
object_boolean_expression_types: &BTreeMap<
@ -401,7 +402,7 @@ pub(crate) fn resolve_model_predicate_with_type(
boolean_expression_graphql: Option<&boolean_expressions::BooleanExpressionGraphqlConfig>,
data_connector_field_mappings: &BTreeMap<FieldName, object_types::FieldMapping>,
data_connector_link: &data_connectors::DataConnectorLink,
subgraph: &str,
subgraph: &SubgraphName,
scalars: &data_connector_scalar_types::ScalarTypeWithRepresentationInfoMap,
object_types: &BTreeMap<Qualified<CustomTypeName>, relationships::ObjectTypeWithRelationships>,
scalar_types: &BTreeMap<Qualified<CustomTypeName>, scalar_types::ScalarTypeRepresentation>,
@ -916,7 +917,7 @@ fn resolve_binary_operator_for_type<'a>(
fields: &'a IndexMap<FieldName, object_types::FieldDefinition>,
scalars: &'a data_connector_scalar_types::ScalarTypeWithRepresentationInfoMap,
ndc_scalar_type: &'a ndc_models::ScalarType,
subgraph: &'a str,
subgraph: &'a SubgraphName,
) -> Result<(DataConnectorOperatorName, QualifiedTypeReference), Error> {
let field_definition = fields
.get(field_name)
@ -1004,7 +1005,7 @@ fn remove_object_relationships(
// in short, should we convert this to an NDC expression before sending it
pub fn get_argument_kind(
type_obj: &TypeReference,
subgraph: &str,
subgraph: &SubgraphName,
object_boolean_expression_types: &BTreeMap<
Qualified<CustomTypeName>,
object_boolean_expressions::ObjectBooleanExpressionType,
@ -1021,8 +1022,7 @@ pub fn get_argument_kind(
BaseType::Named(type_name) => match type_name {
TypeName::Inbuilt(_) => ArgumentKind::Other,
TypeName::Custom(type_name) => {
let qualified_type_name =
Qualified::new(subgraph.to_string(), type_name.to_owned());
let qualified_type_name = Qualified::new(subgraph.clone(), type_name.to_owned());
match get_type_representation::<type_permissions::ObjectTypesWithPermissions>(
&qualified_type_name,

View File

@ -4,6 +4,7 @@ use std::collections::{BTreeMap, BTreeSet, HashSet};
use lang_graphql::ast::common as ast;
use open_dds::aggregates::{AggregateExpressionName, AggregationFunctionName};
use open_dds::data_connector::{DataConnectorName, DataConnectorObjectType};
use open_dds::identifier::SubgraphName;
use open_dds::types::{CustomTypeName, TypeName};
use crate::helpers::types::{store_new_graphql_type, unwrap_qualified_type_name};
@ -40,7 +41,7 @@ pub fn resolve(
} in &metadata_accessor.aggregate_expressions
{
let aggregate_expression_name =
Qualified::new(subgraph.to_string(), aggregate_expression.name.clone());
Qualified::new(subgraph.clone(), aggregate_expression.name.clone());
// Have we seen this aggregate expression name before?
// Check this before checking anything else, so we can fail fast
@ -214,7 +215,7 @@ fn resolve_aggregatable_field(
.aggregate_expressions
.iter()
.find(|agg_exp| {
agg_exp.subgraph.as_str() == aggregate_expression_name.subgraph.as_str()
agg_exp.subgraph == aggregate_expression_name.subgraph
&& agg_exp.object.name == aggregate_field_def.aggregate_expression
})
.map(|agg_exp| &agg_exp.object)
@ -412,13 +413,13 @@ fn resolve_aggregation_function(
})?;
// Check that the mapped data connector aggregate function actually exists
let data_connector_fn = data_connector_scalar_type.aggregate_functions.get(fn_mapping.name.0.as_str())
let data_connector_fn = data_connector_scalar_type.aggregate_functions.get(fn_mapping.name.as_str())
.ok_or_else(||
AggregateExpressionError::AggregateOperandDataConnectorFunctionNotFound {
name: aggregate_expression_name.clone(),
function_name: aggregation_function_def.name.clone(),
data_connector_name: data_connector_name.clone(),
data_connector_aggregate_function_name: fn_mapping.name.0.clone(),
data_connector_aggregate_function_name: fn_mapping.name.clone(),
})?;
check_aggregation_function_return_type(
@ -665,7 +666,7 @@ fn resolve_aggregate_expression_graphql_config(
.aggregation_functions
.iter()
.find(|function| {
function.name.0.as_str() == aggregate_config.count_field_name.as_str()
function.name.as_str() == aggregate_config.count_field_name.as_str()
})
{
return Err(AggregateExpressionError::AggregationFunctionNameConflict {
@ -692,7 +693,7 @@ fn resolve_aggregate_expression_graphql_config(
.aggregation_functions
.iter()
.find(|function| {
function.name.0.as_str()
function.name.as_str()
== aggregate_config.count_distinct_field_name.as_str()
})
{
@ -730,6 +731,9 @@ fn resolve_aggregate_count(
}
}
fn qualify<T: std::fmt::Display + std::clone::Clone>(item: &T, subgraph: &str) -> Qualified<T> {
Qualified::new(subgraph.to_owned(), item.clone())
fn qualify<T: std::fmt::Display + std::clone::Clone>(
item: &T,
subgraph: &SubgraphName,
) -> Qualified<T> {
Qualified::new(subgraph.clone(), item.clone())
}

View File

@ -193,7 +193,7 @@ pub enum AggregateExpressionError {
name: Qualified<AggregateExpressionName>,
function_name: AggregationFunctionName,
data_connector_name: Qualified<DataConnectorName>,
data_connector_aggregate_function_name: String,
data_connector_aggregate_function_name: DataConnectorAggregationFunctionName,
},
#[error("the aggregate expression {name} specifies an aggregation function '{function_name}' which is mapped to the data connector '{data_connector_name}' but the Open DD return type {return_type} is not compatible with the data connector's return type. Reason: {reason}")]

View File

@ -108,7 +108,7 @@ pub(crate) fn resolve_object_boolean_graphql(
ObjectComparisonExpressionInfo {
object_type_name: comparable_field_type_name.clone(),
underlying_object_type_name: Qualified::new(
(*field_subgraph).to_string(),
(*field_subgraph).clone(),
object_operand.r#type.clone(),
),
graphql_type_name: graphql_type_name.clone(),

View File

@ -10,7 +10,7 @@ pub(crate) fn lookup_raw_boolean_expression<'a>(
raw_boolean_expression_types: &'a super::object::RawBooleanExpressionTypes<'a>,
) -> Result<
&'a (
&'a open_dds::identifier::SubgraphIdentifier,
&'a open_dds::identifier::SubgraphName,
&'a open_dds::boolean_expression::BooleanExpressionTypeV1,
),
BooleanExpressionError,

View File

@ -44,7 +44,7 @@ pub fn resolve(
} in &metadata_accessor.boolean_expression_types
{
raw_boolean_expression_types.insert(
Qualified::new(subgraph.to_string(), boolean_expression_type.name.clone()),
Qualified::new(subgraph.clone(), boolean_expression_type.name.clone()),
(subgraph, boolean_expression_type),
);
}

View File

@ -8,6 +8,7 @@ pub use super::{
use crate::stages::{graphql_config, object_types, scalar_boolean_expressions, type_permissions};
use crate::types::subgraph::mk_qualified_type_name;
use crate::{Qualified, QualifiedBaseType};
use open_dds::identifier::SubgraphName;
use open_dds::{
boolean_expression::{
BooleanExpressionComparableField, BooleanExpressionLogicalOperators,
@ -21,7 +22,7 @@ use std::collections::BTreeMap;
pub(crate) type RawBooleanExpressionTypes<'a> = BTreeMap<
Qualified<CustomTypeName>,
(
&'a open_dds::identifier::SubgraphIdentifier,
&'a open_dds::identifier::SubgraphName,
&'a open_dds::boolean_expression::BooleanExpressionTypeV1,
),
>;
@ -36,7 +37,7 @@ pub(crate) fn resolve_object_boolean_expression_type(
boolean_expression_type_name: &Qualified<CustomTypeName>,
object_boolean_expression_operand: &BooleanExpressionObjectOperand,
logical_operators: &BooleanExpressionLogicalOperators,
subgraph: &str,
subgraph: &SubgraphName,
graphql: &Option<BooleanExpressionTypeGraphQlConfiguration>,
object_types: &BTreeMap<Qualified<CustomTypeName>, type_permissions::ObjectTypeWithPermissions>,
scalar_boolean_expression_types: &BTreeMap<
@ -47,7 +48,7 @@ pub(crate) fn resolve_object_boolean_expression_type(
graphql_config: &graphql_config::GraphqlConfig,
) -> Result<ObjectBooleanExpressionTypeOutput, BooleanExpressionError> {
let qualified_object_type_name = Qualified::new(
subgraph.to_string(),
subgraph.clone(),
object_boolean_expression_operand.r#type.clone(),
);
@ -117,7 +118,7 @@ fn resolve_comparable_relationships(
comparable_relationships: &Vec<
open_dds::boolean_expression::BooleanExpressionComparableRelationship,
>,
subgraph: &str,
subgraph: &SubgraphName,
raw_boolean_expression_types: &RawBooleanExpressionTypes,
) -> Result<BTreeMap<FieldName, BooleanExpressionComparableRelationship>, BooleanExpressionError> {
let mut resolved_comparable_relationships = BTreeMap::new();
@ -131,7 +132,7 @@ fn resolve_comparable_relationships(
let _raw_boolean_expression_type = helpers::lookup_raw_boolean_expression(
boolean_expression_type_name,
&Qualified::new(
subgraph.to_string(),
subgraph.clone(),
target_boolean_expression_type_name.clone(),
),
raw_boolean_expression_types,
@ -142,7 +143,7 @@ fn resolve_comparable_relationships(
boolean_expression_type: comparable_relationship
.boolean_expression_type
.as_ref()
.map(|bool_exp| Qualified::new(subgraph.to_string(), bool_exp.clone())),
.map(|bool_exp| Qualified::new(subgraph.clone(), bool_exp.clone())),
};
resolved_comparable_relationships.insert(
FieldName::new(comparable_relationship.relationship_name.inner().clone()),
@ -164,7 +165,7 @@ fn resolve_comparable_fields(
comparable_fields: &Vec<BooleanExpressionComparableField>,
object_type_representation: &object_types::ObjectTypeRepresentation,
boolean_expression_type_name: &Qualified<CustomTypeName>,
subgraph: &str,
subgraph: &SubgraphName,
raw_boolean_expression_types: &RawBooleanExpressionTypes,
) -> Result<ComparableFieldsOutput, BooleanExpressionError> {
let mut resolved_comparable_fields = BTreeMap::new();
@ -197,7 +198,7 @@ fn resolve_comparable_fields(
}
let field_boolean_expression_type_name = Qualified::new(
subgraph.to_string(),
subgraph.clone(),
comparable_field.boolean_expression_type.clone(),
);

View File

@ -1,6 +1,7 @@
use hasura_authn_core::Role;
use indexmap::IndexMap;
use open_dds::identifier::SubgraphName;
use open_dds::{data_connector::DataConnectorName, models::ModelName, types::CustomTypeName};
use crate::stages::{
@ -52,7 +53,7 @@ pub fn resolve_command_permissions(
Qualified<DataConnectorName>,
data_connector_scalar_types::ScalarTypeWithRepresentationInfoMap,
>,
subgraph: &str,
subgraph: &SubgraphName,
) -> Result<BTreeMap<Role, CommandPermission>, Error> {
let mut validated_permissions = BTreeMap::new();
for command_permission in &permissions.permissions {

View File

@ -55,7 +55,7 @@ pub fn resolve(
} in &metadata_accessor.command_permissions
{
let command_name = &command_permissions.command_name;
let qualified_command_name = Qualified::new(subgraph.to_string(), command_name.to_owned());
let qualified_command_name = Qualified::new(subgraph.clone(), command_name.to_owned());
let command = commands_with_permissions
.get_mut(&qualified_command_name)
.ok_or_else(|| Error::UnknownCommandInCommandPermissions {

View File

@ -6,6 +6,7 @@ use crate::stages::{
use crate::types::error::Error;
use crate::types::subgraph::{mk_qualified_type_reference, ArgumentInfo, Qualified};
use indexmap::IndexMap;
use open_dds::identifier::SubgraphName;
use super::types::{Command, CommandGraphQlApi};
use open_dds::commands::CommandV1;
@ -16,7 +17,7 @@ use std::collections::BTreeMap;
pub fn resolve_command(
command: &CommandV1,
subgraph: &str,
subgraph: &SubgraphName,
object_types: &BTreeMap<Qualified<CustomTypeName>, type_permissions::ObjectTypeWithPermissions>,
scalar_types: &BTreeMap<Qualified<CustomTypeName>, scalar_types::ScalarTypeRepresentation>,
object_boolean_expression_types: &BTreeMap<
@ -26,7 +27,7 @@ pub fn resolve_command(
boolean_expression_types: &boolean_expressions::BooleanExpressionTypes,
) -> Result<Command, Error> {
let mut arguments = IndexMap::new();
let qualified_command_name = Qualified::new(subgraph.to_string(), command.name.clone());
let qualified_command_name = Qualified::new(subgraph.clone(), command.name.clone());
let command_description = command.description.clone();
// duplicate command arguments should not be allowed
for argument in &command.arguments {
@ -96,7 +97,7 @@ pub fn resolve_command(
fn type_exists(
type_obj: &TypeReference,
subgraph: &str,
subgraph: &SubgraphName,
object_types: &BTreeMap<Qualified<CustomTypeName>, type_permissions::ObjectTypeWithPermissions>,
scalar_types: &BTreeMap<Qualified<CustomTypeName>, scalar_types::ScalarTypeRepresentation>,
object_boolean_expression_types: &BTreeMap<
@ -117,8 +118,7 @@ fn type_exists(
BaseType::Named(type_name) => match type_name {
TypeName::Inbuilt(_) => true,
TypeName::Custom(type_name) => {
let qualified_type_name =
Qualified::new(subgraph.to_string(), type_name.to_owned());
let qualified_type_name = Qualified::new(subgraph.clone(), type_name.to_owned());
get_type_representation(
&qualified_type_name,

View File

@ -58,7 +58,7 @@ pub fn resolve(
resolved_command.source = Some(command_source);
issues.extend(command_source_issues);
}
let qualified_command_name = Qualified::new(subgraph.to_string(), command.name.clone());
let qualified_command_name = Qualified::new(subgraph.clone(), command.name.clone());
if commands
.insert(qualified_command_name.clone(), resolved_command)
.is_some()

View File

@ -12,7 +12,7 @@ use super::types::CommandsIssue;
pub use super::types::{Command, CommandSource};
use open_dds::commands::{self, DataConnectorCommand};
use open_dds::identifier::SubgraphIdentifier;
use open_dds::identifier::SubgraphName;
use open_dds::types::{CustomTypeName, DataConnectorArgumentName};
use std::collections::BTreeMap;
@ -27,7 +27,7 @@ struct CommandSourceResponse {
pub fn resolve_command_source(
command_source: &commands::CommandSource,
command: &Command,
subgraph: &SubgraphIdentifier,
subgraph: &SubgraphName,
data_connectors: &data_connectors::DataConnectors,
object_types: &type_permissions::ObjectTypesWithPermissions,
scalar_types: &BTreeMap<Qualified<CustomTypeName>, scalar_types::ScalarTypeRepresentation>,
@ -44,10 +44,8 @@ pub fn resolve_command_source(
}
// check if data_connector for the command exists
let qualified_data_connector_name = Qualified::new(
subgraph.to_string(),
command_source.data_connector_name.clone(),
);
let qualified_data_connector_name =
Qualified::new(subgraph.clone(), command_source.data_connector_name.clone());
let data_connector_context = data_connectors
.0

View File

@ -1,6 +1,7 @@
mod error;
mod types;
pub use error::DataConnectorScalarTypesError;
use open_dds::identifier::SubgraphName;
use std::collections::{BTreeMap, BTreeSet};
pub use types::{
ComparisonOperators, DataConnectorWithScalarsOutput, ScalarTypeWithRepresentationInfo,
@ -43,7 +44,7 @@ pub fn resolve<'a>(
let scalar_type_name = &scalar_type_representation.data_connector_scalar_type;
let qualified_data_connector_name = Qualified::new(
subgraph.to_string(),
subgraph.clone(),
scalar_type_representation.data_connector_name.clone(),
);
@ -106,14 +107,14 @@ pub fn resolve<'a>(
fn validate_type_name(
type_name: &TypeName,
subgraph: &str,
subgraph: &SubgraphName,
scalar_types: &BTreeMap<Qualified<CustomTypeName>, scalar_types::ScalarTypeRepresentation>,
scalar_type_name: &DataConnectorScalarType,
) -> Result<(), DataConnectorScalarTypesError> {
match type_name {
TypeName::Inbuilt(_) => {} // TODO: Validate Nullable and Array types in Inbuilt
TypeName::Custom(type_name) => {
let qualified_type_name = Qualified::new(subgraph.to_string(), type_name.to_owned());
let qualified_type_name = Qualified::new(subgraph.clone(), type_name.to_owned());
let _representation = scalar_types.get(&qualified_type_name).ok_or_else(|| {
DataConnectorScalarTypesError::ScalarTypeUnknownRepresentation {
scalar_type: scalar_type_name.clone(),

View File

@ -26,7 +26,7 @@ pub fn resolve<'a>(
} in &metadata_accessor.data_connectors
{
let qualified_data_connector_name =
Qualified::new(subgraph.to_string(), data_connector.name.clone());
Qualified::new(subgraph.clone(), data_connector.name.clone());
let (data_connector_context, connector_issues) =
types::DataConnectorContext::new(data_connector, &configuration.unstable_features)

View File

@ -56,7 +56,7 @@ pub fn resolve(
object: permissions,
} in &metadata_accessor.model_permissions
{
let model_name = Qualified::new(subgraph.to_string(), permissions.model_name.clone());
let model_name = Qualified::new(subgraph.clone(), permissions.model_name.clone());
let model = models_with_permissions
.get_mut(&model_name)
.ok_or_else(|| Error::UnknownModelInModelSelectPermissions {

View File

@ -5,6 +5,7 @@ use crate::stages::{
object_boolean_expressions, object_types, relationships, scalar_types,
};
use indexmap::IndexMap;
use open_dds::identifier::SubgraphName;
use open_dds::{data_connector::DataConnectorName, models::ModelName, types::CustomTypeName};
use std::collections::BTreeMap;
@ -26,7 +27,7 @@ use open_dds::{
fn resolve_model_predicate_with_model(
model_predicate: &open_dds::permissions::ModelPredicate,
model: &models::Model,
subgraph: &str,
subgraph: &SubgraphName,
boolean_expression_graphql: Option<&boolean_expressions::BooleanExpressionGraphqlConfig>,
data_connectors: &data_connectors::DataConnectors,
data_connector_scalars: &BTreeMap<
@ -125,7 +126,7 @@ pub fn get_model_source_argument<'a>(
pub fn resolve_model_select_permissions(
model: &models::Model,
subgraph: &str,
subgraph: &SubgraphName,
model_permissions: &ModelPermissionsV1,
boolean_expression_graphql: Option<&boolean_expressions::BooleanExpressionGraphqlConfig>,
data_connectors: &data_connectors::DataConnectors,

View File

@ -1,3 +1,4 @@
use open_dds::identifier::SubgraphName;
pub use types::{Model, ModelRaw, ModelSource, ModelsIssue, ModelsOutput, NDCFieldSourceMapping};
mod aggregation;
mod helpers;
@ -65,7 +66,7 @@ pub fn resolve(
object: model,
} in &metadata_accessor.models
{
let qualified_model_name = Qualified::new(subgraph.to_string(), model.name.clone());
let qualified_model_name = Qualified::new(subgraph.clone(), model.name.clone());
let mut resolved_model = resolve_model(
subgraph,
model,
@ -114,7 +115,7 @@ pub fn resolve(
.as_ref()
.map(|aggregate_expression_name| {
aggregation::resolve_aggregate_expression(
&Qualified::new(subgraph.to_string(), aggregate_expression_name.clone()),
&Qualified::new(subgraph.clone(), aggregate_expression_name.clone()),
&qualified_model_name,
&resolved_model.data_type,
&resolved_model.source,
@ -144,7 +145,7 @@ pub fn resolve(
}
fn resolve_model(
subgraph: &str,
subgraph: &SubgraphName,
model: &ModelV1,
object_types: &type_permissions::ObjectTypesWithPermissions,
object_boolean_expression_types: &BTreeMap<
@ -158,9 +159,8 @@ fn resolve_model(
Option<Qualified<ModelName>>,
>,
) -> Result<Model, Error> {
let qualified_object_type_name =
Qualified::new(subgraph.to_string(), model.object_type.clone());
let qualified_model_name = Qualified::new(subgraph.to_string(), model.name.clone());
let qualified_object_type_name = Qualified::new(subgraph.clone(), model.object_type.clone());
let qualified_model_name = Qualified::new(subgraph.clone(), model.name.clone());
let object_type_representation = source::get_model_object_type_representation(
object_types,
&qualified_object_type_name,
@ -294,7 +294,7 @@ fn resolve_model(
filter_expression_type: model
.filter_expression_type
.as_ref()
.map(|filter_name| Qualified::new(subgraph.to_string(), filter_name.clone())),
.map(|filter_name| Qualified::new(subgraph.clone(), filter_name.clone())),
graphql: model.graphql.clone(),
};

View File

@ -1,5 +1,6 @@
use super::types::{Model, ModelSource, ModelsIssue};
use open_dds::data_connector::{DataConnectorName, DataConnectorObjectType};
use open_dds::identifier::SubgraphName;
use open_dds::types::DataConnectorArgumentName;
use crate::helpers::argument::{get_argument_mappings, ArgumentMappingResults};
@ -25,7 +26,7 @@ use std::iter;
pub(crate) fn resolve_model_source(
model_source: &models::ModelSource,
model: &mut Model,
subgraph: &str,
subgraph: &SubgraphName,
data_connectors: &data_connectors::DataConnectors,
data_connector_scalars: &BTreeMap<
Qualified<DataConnectorName>,
@ -44,10 +45,8 @@ pub(crate) fn resolve_model_source(
model_name: model.name.clone(),
});
}
let qualified_data_connector_name = Qualified::new(
subgraph.to_string(),
model_source.data_connector_name.clone(),
);
let qualified_data_connector_name =
Qualified::new(subgraph.clone(), model_source.data_connector_name.clone());
let data_connector_context = data_connectors
.0

View File

@ -302,7 +302,7 @@ fn is_model_used_in_any_aggregate_relationship(
// And the target of the relationship is this model
target
.subgraph()
.is_some_and(|subgraph| subgraph == model_name.subgraph.as_str())
.is_some_and(|subgraph| subgraph == model_name.subgraph)
&& *name == model_name.name
}
_ => false,

View File

@ -7,6 +7,7 @@ use crate::types::subgraph::{
use ndc_models;
use open_dds::data_connector::{DataConnectorName, DataConnectorScalarType};
use open_dds::identifier::SubgraphName;
// helper function to resolve ndc types to dds type based on scalar type representations
// this should only be used when we know the underlying type must be a scalar and not an object
@ -14,7 +15,7 @@ pub fn resolve_ndc_type(
data_connector: &Qualified<DataConnectorName>,
source_type: &ndc_models::Type,
scalars: &data_connector_scalar_types::ScalarTypeWithRepresentationInfoMap,
subgraph: &str,
subgraph: &SubgraphName,
) -> Result<QualifiedTypeReference, scalar_boolean_expressions::ScalarBooleanExpressionTypeError> {
match source_type {
ndc_models::Type::Named { name } => {

View File

@ -5,6 +5,7 @@ use crate::stages::{
object_types, type_permissions,
};
pub use helpers::resolve_ndc_type;
use open_dds::identifier::SubgraphName;
use crate::helpers::types::{mk_name, store_new_graphql_type};
use crate::types::subgraph::Qualified;
@ -78,7 +79,7 @@ pub fn resolve(
/// Resolves a given object boolean expression type
pub(crate) fn resolve_object_boolean_expression_type(
object_boolean_expression: &open_dds::types::ObjectBooleanExpressionTypeV1,
subgraph: &str,
subgraph: &SubgraphName,
data_connectors: &data_connectors::DataConnectors,
data_connector_scalars: &BTreeMap<
Qualified<DataConnectorName>,
@ -89,12 +90,11 @@ pub(crate) fn resolve_object_boolean_expression_type(
graphql_config: &graphql_config::GraphqlConfig,
) -> Result<ObjectBooleanExpressionType, boolean_expressions::BooleanExpressionError> {
// name of the boolean expression
let qualified_name =
Qualified::new(subgraph.to_string(), object_boolean_expression.name.clone());
let qualified_name = Qualified::new(subgraph.clone(), object_boolean_expression.name.clone());
// name of the object type backing the boolean expression
let qualified_object_type_name = Qualified::new(
subgraph.to_string(),
subgraph.clone(),
object_boolean_expression.object_type.clone(),
);
let object_type_representation =
@ -105,7 +105,7 @@ pub(crate) fn resolve_object_boolean_expression_type(
})?;
let qualified_data_connector_name = Qualified::new(
subgraph.to_string(),
subgraph.clone(),
object_boolean_expression.data_connector_name.clone(),
);
@ -189,10 +189,10 @@ pub(crate) fn resolve_object_boolean_expression_type(
}
let object_boolean_expression_type =
Qualified::new(subgraph.to_string(), object_boolean_expression.name.clone());
Qualified::new(subgraph.clone(), object_boolean_expression.name.clone());
let data_connector_name = Qualified::new(
subgraph.to_string(),
subgraph.clone(),
object_boolean_expression.data_connector_name.clone(),
);
@ -262,7 +262,7 @@ pub(crate) fn resolve_object_boolean_expression_type(
pub fn resolve_boolean_expression_graphql_config(
data_connector_name: &Qualified<open_dds::data_connector::DataConnectorName>,
where_type_name: ast::TypeName,
subgraph: &str,
subgraph: &SubgraphName,
scalars: &data_connector_scalar_types::ScalarTypeWithRepresentationInfoMap,
type_mappings: &object_types::TypeMapping,
graphql_config: &graphql_config::GraphqlConfig,

View File

@ -2,6 +2,7 @@ mod error;
pub mod types;
pub use error::{ObjectTypesError, TypeMappingValidationError};
use open_dds::identifier::SubgraphName;
use std::borrow::Cow;
use std::collections::{BTreeMap, BTreeSet};
@ -41,7 +42,7 @@ pub(crate) fn resolve(
} in &metadata_accessor.object_types
{
let qualified_object_type_name =
Qualified::new(subgraph.to_string(), object_type_definition.name.clone());
Qualified::new(subgraph.clone(), object_type_definition.name.clone());
let resolved_object_type = resolve_object_type(
object_type_definition,
@ -57,7 +58,7 @@ pub(crate) fn resolve(
// resolve object types' type mappings
for dc_type_mapping in &object_type_definition.data_connector_type_mapping {
let qualified_data_connector_name = Qualified::new(
subgraph.to_string(),
subgraph.clone(),
dc_type_mapping.data_connector_name.clone(),
);
let type_mapping = resolve_data_connector_type_mapping(
@ -108,7 +109,7 @@ pub(crate) fn resolve(
fn resolve_field(
field: &open_dds::types::FieldDefinition,
subgraph: &str,
subgraph: &SubgraphName,
qualified_type_name: &Qualified<CustomTypeName>,
) -> Result<FieldDefinition, ObjectTypesError> {
let mut field_arguments = IndexMap::new();
@ -140,7 +141,7 @@ pub fn resolve_object_type(
object_type_definition: &open_dds::types::ObjectTypeV1,
existing_graphql_types: &mut BTreeSet<ast::TypeName>,
qualified_type_name: &Qualified<CustomTypeName>,
subgraph: &str,
subgraph: &SubgraphName,
global_id_enabled_types: &mut BTreeMap<
Qualified<CustomTypeName>,
Vec<Qualified<open_dds::models::ModelName>>,
@ -282,12 +283,12 @@ pub fn resolve_object_type(
pub fn resolve_data_connector_type_mapping(
data_connector_type_mapping: &open_dds::types::DataConnectorTypeMapping,
qualified_type_name: &Qualified<CustomTypeName>,
subgraph: &str,
subgraph: &SubgraphName,
type_representation: &ObjectTypeRepresentation,
data_connectors: &data_connectors::DataConnectors,
) -> Result<TypeMapping, TypeMappingValidationError> {
let qualified_data_connector_name = Qualified::new(
subgraph.to_string(),
subgraph.clone(),
data_connector_type_mapping.data_connector_name.clone(),
);

View File

@ -6,6 +6,7 @@ use indexmap::IndexMap;
use lang_graphql::ast::common::{self as ast};
use open_dds::aggregates::AggregateExpressionName;
use open_dds::identifier::SubgraphName;
use open_dds::relationships::{
self, FieldAccess, RelationshipName, RelationshipType, RelationshipV1,
};
@ -77,7 +78,7 @@ pub fn resolve(
} in &metadata_accessor.relationships
{
let qualified_relationship_source_type_name =
Qualified::new(subgraph.to_string(), relationship.source_type.clone());
Qualified::new(subgraph.clone(), relationship.source_type.clone());
let object_representation = object_types_with_relationships
.get_mut(&qualified_relationship_source_type_name)
.ok_or_else(|| Error::RelationshipDefinedOnUnknownType {
@ -467,7 +468,7 @@ fn resolve_aggregate_relationship_field(
// Validate its usage with the relationship's target model
let aggregate_expression_name = models::resolve_aggregate_expression(
&Qualified::new(
resolved_target_model.name.subgraph.to_string(),
resolved_target_model.name.subgraph.clone(),
aggregate.aggregate_expression.clone(),
),
&resolved_target_model.name,
@ -530,7 +531,7 @@ fn resolve_aggregate_relationship_field(
fn resolve_model_relationship_fields(
target_model: &relationships::ModelRelationshipTarget,
subgraph: &open_dds::identifier::SubgraphIdentifier,
subgraph: &open_dds::identifier::SubgraphName,
models: &IndexMap<Qualified<ModelName>, crate::Model>,
data_connectors: &data_connectors::DataConnectors,
source_type_name: &Qualified<CustomTypeName>,
@ -548,7 +549,7 @@ fn resolve_model_relationship_fields(
graphql_config: &graphql_config::GraphqlConfig,
) -> Result<Vec<RelationshipField>, Error> {
let qualified_target_model_name = Qualified::new(
target_model.subgraph().unwrap_or(subgraph).to_string(),
target_model.subgraph().unwrap_or(subgraph.clone()),
target_model.name.clone(),
);
let resolved_target_model = models.get(&qualified_target_model_name).ok_or_else(|| {
@ -623,7 +624,7 @@ pub fn make_relationship_field_name(
fn resolve_command_relationship_field(
target_command: &relationships::CommandRelationshipTarget,
subgraph: &open_dds::identifier::SubgraphIdentifier,
subgraph: &open_dds::identifier::SubgraphName,
commands: &IndexMap<Qualified<CommandName>, commands::Command>,
data_connectors: &data_connectors::DataConnectors,
source_type_name: &Qualified<CustomTypeName>,
@ -631,7 +632,7 @@ fn resolve_command_relationship_field(
source_type: &object_types::ObjectTypeRepresentation,
) -> Result<RelationshipField, Error> {
let qualified_target_command_name = Qualified::new(
target_command.subgraph().unwrap_or(subgraph).to_string(),
target_command.subgraph().unwrap_or(subgraph.clone()),
target_command.name.clone(),
);
let resolved_target_command =
@ -683,8 +684,8 @@ fn resolve_command_relationship_field(
fn resolve_relationships(
configuration: Configuration,
relationship: &RelationshipV1,
subgraph: &open_dds::identifier::SubgraphIdentifier,
known_subgraphs: &HashSet<open_dds::identifier::SubgraphIdentifier>,
subgraph: &open_dds::identifier::SubgraphName,
known_subgraphs: &HashSet<open_dds::identifier::SubgraphName>,
models: &IndexMap<Qualified<ModelName>, models::Model>,
commands: &IndexMap<Qualified<CommandName>, commands::Command>,
data_connectors: &data_connectors::DataConnectors,
@ -700,10 +701,14 @@ fn resolve_relationships(
graphql_config: &graphql_config::GraphqlConfig,
source_type: &object_types::ObjectTypeRepresentation,
) -> Result<Vec<RelationshipField>, Error> {
let source_type_name = Qualified::new(subgraph.to_string(), relationship.source_type.clone());
let source_type_name = Qualified::new(subgraph.clone(), relationship.source_type.clone());
match &relationship.target {
relationships::RelationshipTarget::Model(target_model) => {
if should_skip(configuration, known_subgraphs, target_model.subgraph()) {
if should_skip(
configuration,
known_subgraphs,
target_model.subgraph().as_ref(),
) {
return Ok(vec![]);
}
resolve_model_relationship_fields(
@ -721,7 +726,11 @@ fn resolve_relationships(
)
}
relationships::RelationshipTarget::Command(target_command) => {
if should_skip(configuration, known_subgraphs, target_command.subgraph()) {
if should_skip(
configuration,
known_subgraphs,
target_command.subgraph().as_ref(),
) {
return Ok(vec![]);
}
let command_relationship_field = resolve_command_relationship_field(
@ -746,8 +755,8 @@ fn resolve_relationships(
// abstraction for that purpose.
fn should_skip(
configuration: Configuration,
known_subgraphs: &HashSet<open_dds::identifier::SubgraphIdentifier>,
target_subgraph: Option<&str>,
known_subgraphs: &HashSet<open_dds::identifier::SubgraphName>,
target_subgraph: Option<&SubgraphName>,
) -> bool {
configuration.allow_unknown_subgraphs
&& target_subgraph.is_some_and(|subgraph| !known_subgraphs.contains(subgraph))

View File

@ -35,7 +35,7 @@ pub fn resolve(
} in &metadata_accessor.boolean_expression_types
{
raw_boolean_expression_types.insert(
Qualified::new(subgraph.to_string(), boolean_expression_type.name.clone()),
Qualified::new(subgraph.clone(), boolean_expression_type.name.clone()),
(subgraph, boolean_expression_type),
);
}

View File

@ -4,6 +4,7 @@ use crate::helpers::types::unwrap_qualified_type_name;
use crate::stages::{data_connectors, object_types, scalar_types};
use crate::types::subgraph::mk_qualified_type_reference;
use crate::{Qualified, QualifiedTypeName};
use open_dds::identifier::SubgraphName;
use open_dds::{
boolean_expression::{
BooleanExpressionIsNull, BooleanExpressionScalarOperand,
@ -18,7 +19,7 @@ pub(crate) fn resolve_scalar_boolean_expression_type(
boolean_expression_type_name: &Qualified<CustomTypeName>,
scalar_boolean_expression_operand: &BooleanExpressionScalarOperand,
is_null: &BooleanExpressionIsNull,
subgraph: &str,
subgraph: &SubgraphName,
data_connectors: &data_connectors::DataConnectors,
object_types: &object_types::ObjectTypesWithTypeMappings,
scalar_types: &BTreeMap<Qualified<CustomTypeName>, scalar_types::ScalarTypeRepresentation>,
@ -34,7 +35,7 @@ pub(crate) fn resolve_scalar_boolean_expression_type(
// scope the data connector to the current subgraph
let qualified_data_connector_name = Qualified::new(
subgraph.to_string(),
subgraph.clone(),
data_connector_operator_mapping.data_connector_name.clone(),
);

View File

@ -29,8 +29,7 @@ pub fn resolve(
.map(Some),
}?;
let qualified_scalar_type_name =
Qualified::new(subgraph.to_string(), scalar_type.name.clone());
let qualified_scalar_type_name = Qualified::new(subgraph.clone(), scalar_type.name.clone());
if scalar_types
.insert(

View File

@ -37,10 +37,8 @@ pub fn resolve(
object: output_type_permission,
} in &metadata_accessor.type_permissions
{
let qualified_type_name = Qualified::new(
subgraph.to_string(),
output_type_permission.type_name.clone(),
);
let qualified_type_name =
Qualified::new(subgraph.clone(), output_type_permission.type_name.clone());
match object_types_with_permissions.get_mut(&qualified_type_name) {
None => {
return Err(TypePermissionError::from(

View File

@ -1,6 +1,7 @@
use std::fmt::Display;
use std::{collections::BTreeMap, fmt::Write};
use open_dds::identifier::SubgraphName;
use open_dds::types::{BaseType, CustomTypeName, InbuiltType, TypeName, TypeReference};
use schemars::JsonSchema;
use serde::{de::DeserializeOwned, ser::SerializeMap, Deserialize, Serialize};
@ -10,7 +11,7 @@ use serde_json;
Serialize, Deserialize, JsonSchema, Clone, Debug, PartialEq, Hash, Eq, PartialOrd, Ord,
)]
pub struct Qualified<T: Display> {
pub subgraph: String,
pub subgraph: SubgraphName,
pub name: T,
}
@ -22,7 +23,7 @@ impl<T: Display> Display for Qualified<T> {
}
impl<T: Display> Qualified<T> {
pub fn new(subgraph: String, name: T) -> Self {
pub fn new(subgraph: SubgraphName, name: T) -> Self {
Qualified { subgraph, name }
}
@ -238,7 +239,7 @@ where
pub(crate) fn mk_qualified_type_reference(
type_reference: &TypeReference,
subgraph: &str,
subgraph: &SubgraphName,
) -> QualifiedTypeReference {
QualifiedTypeReference {
nullable: type_reference.nullable,
@ -246,7 +247,10 @@ pub(crate) fn mk_qualified_type_reference(
}
}
pub(crate) fn mk_qualified_base_type(base_type: &BaseType, subgraph: &str) -> QualifiedBaseType {
pub(crate) fn mk_qualified_base_type(
base_type: &BaseType,
subgraph: &SubgraphName,
) -> QualifiedBaseType {
match base_type {
BaseType::List(type_reference) => QualifiedBaseType::List(Box::new(
mk_qualified_type_reference(type_reference, subgraph),
@ -257,17 +261,21 @@ pub(crate) fn mk_qualified_base_type(base_type: &BaseType, subgraph: &str) -> Qu
}
}
pub(crate) fn mk_qualified_type_name(type_name: &TypeName, subgraph: &str) -> QualifiedTypeName {
pub(crate) fn mk_qualified_type_name(
type_name: &TypeName,
subgraph: &SubgraphName,
) -> QualifiedTypeName {
match type_name {
TypeName::Inbuilt(inbuilt_type) => QualifiedTypeName::Inbuilt(inbuilt_type.clone()),
TypeName::Custom(type_name) => {
QualifiedTypeName::Custom(Qualified::new(subgraph.to_string(), type_name.to_owned()))
QualifiedTypeName::Custom(Qualified::new(subgraph.clone(), type_name.to_owned()))
}
}
}
#[test]
fn test_btree_map_serialize_deserialize() {
use open_dds::subgraph_identifier;
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
struct ObjectForTest {
#[serde(
@ -281,7 +289,7 @@ fn test_btree_map_serialize_deserialize() {
map: BTreeMap::new(),
};
obj.map.insert(
Qualified::new("subgraph".to_string(), "name".to_string()),
Qualified::new(subgraph_identifier!("subgraph"), "name".to_string()),
"value".to_string(),
);
let obj_clone =

View File

@ -7,7 +7,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
Metadata {
object_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Invoice",
@ -25,7 +27,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -49,7 +53,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -73,7 +79,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -97,7 +105,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -121,7 +131,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -145,7 +157,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -169,7 +183,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Timestamp",
@ -193,7 +209,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -217,7 +235,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Numeric",
@ -266,7 +286,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
),
source: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Invoice",
@ -276,7 +298,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
target: Model(
ModelRelationshipTarget {
model_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"InvoiceLine",
@ -285,7 +309,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
},
relationship_type: Array,
target_typename: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"InvoiceLine",
@ -344,7 +370,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
),
source: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Invoice",
@ -354,7 +382,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
target: ModelAggregate(
ModelAggregateRelationshipTarget {
model_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"InvoiceLine",
@ -362,7 +392,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
},
target_typename: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"InvoiceLine",
@ -398,7 +430,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
},
],
aggregate_expression: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"InvoiceLine_aggregate_exp",
@ -424,7 +458,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -662,7 +698,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
},
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"InvoiceLine",
@ -680,7 +718,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -704,7 +744,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -728,7 +770,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -752,7 +796,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -776,7 +822,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Numeric",
@ -816,7 +864,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -954,7 +1004,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
},
scalar_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -971,7 +1023,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
description: None,
},
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int8",
@ -990,7 +1044,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
},
models: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"Invoice",
@ -999,7 +1055,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
}: ModelWithPermissions {
model: Model {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"Invoice",
@ -1007,7 +1065,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
},
data_type: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Invoice",
@ -1024,7 +1084,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -1048,7 +1110,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -1072,7 +1136,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -1096,7 +1162,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -1120,7 +1188,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -1144,7 +1214,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1168,7 +1240,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Timestamp",
@ -1192,7 +1266,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1216,7 +1292,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Numeric",
@ -1238,7 +1316,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
ModelSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -1307,7 +1387,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
type_mappings: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Invoice",
@ -1639,7 +1721,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
],
aggregate_expression: Some(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Invoice_aggregate_exp",
@ -1717,7 +1801,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1761,7 +1847,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
description: None,
deprecated: None,
aggregate_expression_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Invoice_aggregate_exp",
@ -1798,7 +1886,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
},
},
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"InvoiceLine",
@ -1807,7 +1897,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
}: ModelWithPermissions {
model: Model {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"InvoiceLine",
@ -1815,7 +1907,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
},
data_type: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"InvoiceLine",
@ -1832,7 +1926,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1856,7 +1952,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1880,7 +1978,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1904,7 +2004,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1928,7 +2030,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Numeric",
@ -1950,7 +2054,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
ModelSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -2019,7 +2125,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
type_mappings: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"InvoiceLine",
@ -2209,7 +2317,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
],
aggregate_expression: Some(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"InvoiceLine_aggregate_exp",
@ -2287,7 +2397,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -2331,7 +2443,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
description: None,
deprecated: None,
aggregate_expression_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"InvoiceLine_aggregate_exp",
@ -2376,7 +2490,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
},
aggregate_expressions: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Int4_aggregate_exp",
@ -2384,7 +2500,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
}: AggregateExpression {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Int4_aggregate_exp",
@ -2394,7 +2512,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
operand: AggregateOperand {
aggregated_type: Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -2415,7 +2535,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int8",
@ -2429,7 +2551,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
data_connector_functions: [
DataConnectorAggregationFunctionInfo {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -2456,7 +2580,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -2470,7 +2596,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
data_connector_functions: [
DataConnectorAggregationFunctionInfo {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -2497,7 +2625,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -2511,7 +2641,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
data_connector_functions: [
DataConnectorAggregationFunctionInfo {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -2541,7 +2673,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
description: None,
},
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"InvoiceLine_aggregate_exp",
@ -2549,7 +2683,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
}: AggregateExpression {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"InvoiceLine_aggregate_exp",
@ -2559,7 +2695,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
operand: AggregateOperand {
aggregated_type: Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"InvoiceLine",
@ -2576,7 +2714,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
description: None,
aggregate_expression: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Int4_aggregate_exp",
@ -2599,7 +2739,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
description: None,
},
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Invoice_aggregate_exp",
@ -2607,7 +2749,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
}: AggregateExpression {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Invoice_aggregate_exp",
@ -2617,7 +2761,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
operand: AggregateOperand {
aggregated_type: Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Invoice",
@ -2634,7 +2780,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation
),
description: None,
aggregate_expression: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Int4_aggregate_exp",

View File

@ -7,7 +7,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
Metadata {
object_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Invoice",
@ -25,7 +27,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -49,7 +53,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -73,7 +79,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -97,7 +105,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -121,7 +131,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -145,7 +157,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -169,7 +183,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Timestamp",
@ -193,7 +209,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -217,7 +235,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Numeric",
@ -257,7 +277,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -497,7 +519,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
},
scalar_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -514,7 +538,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
description: None,
},
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int8",
@ -533,7 +559,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
},
models: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"Invoice",
@ -542,7 +570,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
}: ModelWithPermissions {
model: Model {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"Invoice",
@ -550,7 +580,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
),
},
data_type: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Invoice",
@ -567,7 +599,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -591,7 +625,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -615,7 +651,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -639,7 +677,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -663,7 +703,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Varchar",
@ -687,7 +729,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -711,7 +755,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Timestamp",
@ -735,7 +781,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -759,7 +807,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Numeric",
@ -781,7 +831,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
ModelSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -850,7 +902,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
),
type_mappings: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Invoice",
@ -1182,7 +1236,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
],
aggregate_expression: Some(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Invoice_aggregate_exp",
@ -1260,7 +1316,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1304,7 +1362,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
description: None,
deprecated: None,
aggregate_expression_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Invoice_aggregate_exp",
@ -1349,7 +1409,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
},
aggregate_expressions: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Int4_aggregate_exp",
@ -1357,7 +1419,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
),
}: AggregateExpression {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Int4_aggregate_exp",
@ -1367,7 +1431,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
operand: AggregateOperand {
aggregated_type: Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1388,7 +1454,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int8",
@ -1402,7 +1470,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
data_connector_functions: [
DataConnectorAggregationFunctionInfo {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -1429,7 +1499,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1443,7 +1515,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
data_connector_functions: [
DataConnectorAggregationFunctionInfo {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -1470,7 +1544,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
underlying_type: Named(
Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Int4",
@ -1484,7 +1560,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
data_connector_functions: [
DataConnectorAggregationFunctionInfo {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"mypg",
@ -1514,7 +1592,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
description: None,
},
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Invoice_aggregate_exp",
@ -1522,7 +1602,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
),
}: AggregateExpression {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Invoice_aggregate_exp",
@ -1532,7 +1614,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
operand: AggregateOperand {
aggregated_type: Custom(
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Invoice",
@ -1549,7 +1633,9 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie
),
description: None,
aggregate_expression: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: AggregateExpressionName(
Identifier(
"Int4_aggregate_exp",

View File

@ -7,7 +7,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
Metadata {
object_types: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author",
@ -129,7 +131,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",
@ -216,7 +220,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
boolean_expression_types: BooleanExpressionTypes {
objects: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author_bool_exp",
@ -224,7 +230,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
),
}: ResolvedObjectBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author_bool_exp",
@ -232,7 +240,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
),
},
object_type: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author",
@ -255,7 +265,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_int_comparison_bool_exp",
@ -297,7 +309,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",
@ -324,7 +338,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_string_comparison_bool_exp",
@ -366,7 +382,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",
@ -393,7 +411,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_string_comparison_bool_exp",
@ -435,7 +455,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",
@ -478,7 +500,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
},
scalars: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_int_comparison_bool_exp",
@ -486,7 +510,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_int_comparison_bool_exp",
@ -525,7 +551,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",
@ -557,7 +585,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
include_is_null: Yes,
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_string_comparison_bool_exp",
@ -565,7 +595,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_string_comparison_bool_exp",
@ -604,7 +636,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/basic/
},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",

View File

@ -7,7 +7,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
Metadata {
object_types: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"institution",
@ -59,7 +61,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
underlying_type: Named(
Custom(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"location",
@ -85,7 +89,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
underlying_type: Named(
Custom(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"staff_member",
@ -176,7 +182,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"custom",
@ -298,7 +306,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"location",
@ -404,7 +414,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"custom",
@ -490,7 +502,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"staff_member",
@ -596,7 +610,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"custom",
@ -685,7 +701,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
scalar_types: {},
models: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: ModelName(
Identifier(
"institutions",
@ -694,7 +712,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
}: ModelWithPermissions {
model: Model {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: ModelName(
Identifier(
"institutions",
@ -702,7 +722,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
},
data_type: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"institution",
@ -753,7 +775,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
underlying_type: Named(
Custom(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"location",
@ -779,7 +803,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
underlying_type: Named(
Custom(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"staff_member",
@ -826,7 +852,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
ModelSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"custom",
@ -874,7 +902,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
type_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"institution",
@ -989,7 +1019,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
},
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"location",
@ -1068,7 +1100,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
},
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"staff_member",
@ -1277,7 +1311,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
boolean_expression_types: BooleanExpressionTypes {
objects: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"institution_bool_exp",
@ -1285,7 +1321,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
}: ResolvedObjectBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"institution_bool_exp",
@ -1293,7 +1331,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
},
object_type: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"institution",
@ -1319,7 +1359,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
),
object_type_name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"location_bool_exp",
@ -1327,7 +1369,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
},
underlying_object_type_name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"location",
@ -1344,7 +1388,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp",
@ -1360,7 +1406,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
operators: {},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"custom",
@ -1381,7 +1429,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"string_bool_exp",
@ -1397,7 +1447,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
operators: {},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"custom",
@ -1432,7 +1484,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
include_logical_operators: Yes,
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"location_bool_exp",
@ -1440,7 +1494,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
}: ResolvedObjectBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"location_bool_exp",
@ -1448,7 +1504,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
},
object_type: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"location",
@ -1471,7 +1529,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"string_bool_exp",
@ -1487,7 +1547,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
operators: {},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"custom",
@ -1508,7 +1570,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"string_bool_exp",
@ -1524,7 +1588,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
operators: {},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"custom",
@ -1561,7 +1627,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
},
scalars: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp",
@ -1569,7 +1637,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp",
@ -1582,7 +1652,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
comparison_operators: {},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"custom",
@ -1608,7 +1680,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
include_is_null: Yes,
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"string_bool_exp",
@ -1616,7 +1690,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"string_bool_exp",
@ -1629,7 +1705,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested
comparison_operators: {},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"custom",

View File

@ -7,7 +7,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
Metadata {
object_types: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author",
@ -129,7 +131,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",
@ -216,7 +220,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
boolean_expression_types: BooleanExpressionTypes {
objects: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author_bool_exp",
@ -224,7 +230,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
),
}: ResolvedObjectBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author_bool_exp",
@ -232,7 +240,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
),
},
object_type: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author",
@ -245,7 +255,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
},
scalars: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_int_comparison_bool_exp",
@ -253,7 +265,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_int_comparison_bool_exp",
@ -292,7 +306,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",
@ -320,7 +336,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
include_is_null: Yes,
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_string_comparison_bool_exp",
@ -328,7 +346,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_string_comparison_bool_exp",
@ -367,7 +387,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/no_gra
},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",

View File

@ -7,7 +7,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
Metadata {
object_types: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_range",
@ -69,7 +71,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -128,7 +132,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
),
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"movie",
@ -229,7 +235,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -310,7 +318,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
scalar_types: {},
models: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: ModelName(
Identifier(
"movies",
@ -319,7 +329,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
}: ModelWithPermissions {
model: Model {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: ModelName(
Identifier(
"movies",
@ -327,7 +339,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
),
},
data_type: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"movie",
@ -393,7 +407,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
ModelSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -441,7 +457,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
),
type_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"movie",
@ -555,7 +573,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
raw: ModelRaw {
filter_expression_type: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"movie_bool_exp",
@ -597,7 +617,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
BooleanExpressionType(
ResolvedObjectBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"movie_bool_exp",
@ -605,7 +627,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
),
},
object_type: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"movie",
@ -628,7 +652,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp",
@ -644,7 +670,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
operators: {},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -665,7 +693,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp_with_range",
@ -685,7 +715,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
underlying_type: Named(
Custom(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_range",
@ -699,7 +731,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -720,7 +754,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"string_bool_exp",
@ -736,7 +772,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
operators: {},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -809,7 +847,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
boolean_expression_types: BooleanExpressionTypes {
objects: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"movie_bool_exp",
@ -817,7 +857,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
),
}: ResolvedObjectBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"movie_bool_exp",
@ -825,7 +867,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
),
},
object_type: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"movie",
@ -848,7 +892,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp",
@ -864,7 +910,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
operators: {},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -885,7 +933,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp_with_range",
@ -905,7 +955,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
underlying_type: Named(
Custom(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_range",
@ -919,7 +971,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -940,7 +994,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
): ComparisonExpressionInfo {
object_type_name: Some(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"string_bool_exp",
@ -956,7 +1012,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
operators: {},
operator_mapping: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -993,7 +1051,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
},
scalars: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp",
@ -1001,7 +1061,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp",
@ -1014,7 +1076,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
comparison_operators: {},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -1040,7 +1104,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
include_is_null: Yes,
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp_with_range",
@ -1048,7 +1114,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_bool_exp_with_range",
@ -1065,7 +1133,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
underlying_type: Named(
Custom(
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"int_range",
@ -1079,7 +1149,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",
@ -1105,7 +1177,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
include_is_null: Yes,
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"string_bool_exp",
@ -1113,7 +1187,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"string_bool_exp",
@ -1126,7 +1202,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/
comparison_operators: {},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"elastic",

View File

@ -7,7 +7,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
Metadata {
object_types: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author",
@ -129,7 +131,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",
@ -216,7 +220,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
boolean_expression_types: BooleanExpressionTypes {
objects: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author_bool_exp",
@ -224,7 +230,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
),
}: ResolvedObjectBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author_bool_exp",
@ -232,7 +240,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
),
},
object_type: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"author",
@ -245,7 +255,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
},
scalars: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_int_comparison_bool_exp",
@ -253,7 +265,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_int_comparison_bool_exp",
@ -292,7 +306,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",
@ -316,7 +332,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
},
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db_2",
@ -344,7 +362,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
include_is_null: Yes,
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_string_comparison_bool_exp",
@ -352,7 +372,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
),
}: ResolvedScalarBooleanExpressionType {
name: Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: CustomTypeName(
Identifier(
"postgres_string_comparison_bool_exp",
@ -391,7 +413,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
},
data_connector_operator_mappings: {
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db",
@ -415,7 +439,9 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/two_da
},
},
Qualified {
subgraph: "__unknown_namespace",
subgraph: SubgraphName(
"__unknown_namespace",
),
name: DataConnectorName(
Identifier(
"postgres_db_2",

View File

@ -1,14 +1,16 @@
---
source: crates/metadata-resolve/tests/metadata_golden_tests.rs
expression: resolved
input_file: crates/metadata-resolve/tests/passing/commands/all_function_args_are_set_include_connector_link_presets/metadata.json
input_file: crates/metadata-resolve/tests/passing/commands/functions/all_args_are_set_including_connector_link_presets/metadata.json
---
(
Metadata {
object_types: {},
scalar_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Headers",
@ -30,7 +32,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/all_function_args_are
models: {},
commands: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CommandName(
Identifier(
"function_with_args",
@ -39,7 +43,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/all_function_args_are
}: CommandWithPermissions {
command: Command {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CommandName(
Identifier(
"function_with_args",
@ -93,7 +99,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/all_function_args_are
CommandSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",

View File

@ -8,7 +8,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/functions/issue_when_
object_types: {},
scalar_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Headers",
@ -30,7 +32,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/functions/issue_when_
models: {},
commands: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CommandName(
Identifier(
"function_with_args",
@ -39,7 +43,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/functions/issue_when_
}: CommandWithPermissions {
command: Command {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CommandName(
Identifier(
"function_with_args",
@ -93,7 +99,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/functions/issue_when_
CommandSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",
@ -248,7 +256,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/functions/issue_when_
CommandIssue(
FunctionArgumentMappingIssue {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",
@ -256,7 +266,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/functions/issue_when_
),
},
command_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CommandName(
Identifier(
"function_with_args",

View File

@ -1,14 +1,16 @@
---
source: crates/metadata-resolve/tests/metadata_golden_tests.rs
expression: resolved
input_file: crates/metadata-resolve/tests/passing/commands/all_procedure_args_are_set_include_connector_link_presets/metadata.json
input_file: crates/metadata-resolve/tests/passing/commands/procedures/all_args_are_set_including_connector_link_presets/metadata.json
---
(
Metadata {
object_types: {},
scalar_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Headers",
@ -30,7 +32,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/all_procedure_args_ar
models: {},
commands: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CommandName(
Identifier(
"procedure_with_args",
@ -39,7 +43,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/all_procedure_args_ar
}: CommandWithPermissions {
command: Command {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CommandName(
Identifier(
"procedure_with_args",
@ -93,7 +99,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/all_procedure_args_ar
CommandSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",

View File

@ -8,7 +8,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/procedures/issue_when
object_types: {},
scalar_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Headers",
@ -30,7 +32,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/procedures/issue_when
models: {},
commands: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CommandName(
Identifier(
"procedure_with_args",
@ -39,7 +43,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/procedures/issue_when
}: CommandWithPermissions {
command: Command {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CommandName(
Identifier(
"procedure_with_args",
@ -93,7 +99,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/procedures/issue_when
CommandSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",
@ -248,7 +256,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/procedures/issue_when
CommandIssue(
ProcedureArgumentMappingIssue {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",
@ -256,7 +266,9 @@ input_file: crates/metadata-resolve/tests/passing/commands/procedures/issue_when
),
},
command_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CommandName(
Identifier(
"procedure_with_args",

View File

@ -49,7 +49,9 @@ input_file: crates/metadata-resolve/tests/passing/data_connector_link/invalid_nd
DataConnectorIssue(
NamedDataConnectorIssue {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",

View File

@ -7,7 +7,9 @@ input_file: crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring
Metadata {
object_types: {
Qualified {
subgraph: "article_namespace",
subgraph: SubgraphName(
"article_namespace",
),
name: CustomTypeName(
Identifier(
"article",
@ -146,7 +148,9 @@ input_file: crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "article_namespace",
subgraph: SubgraphName(
"article_namespace",
),
name: DataConnectorName(
Identifier(
"db",
@ -233,7 +237,9 @@ input_file: crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring
scalar_types: {},
models: {
Qualified {
subgraph: "article_namespace",
subgraph: SubgraphName(
"article_namespace",
),
name: ModelName(
Identifier(
"Articles",
@ -242,7 +248,9 @@ input_file: crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring
}: ModelWithPermissions {
model: Model {
name: Qualified {
subgraph: "article_namespace",
subgraph: SubgraphName(
"article_namespace",
),
name: ModelName(
Identifier(
"Articles",
@ -250,7 +258,9 @@ input_file: crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring
),
},
data_type: Qualified {
subgraph: "article_namespace",
subgraph: SubgraphName(
"article_namespace",
),
name: CustomTypeName(
Identifier(
"article",
@ -322,7 +332,9 @@ input_file: crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring
ModelSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "article_namespace",
subgraph: SubgraphName(
"article_namespace",
),
name: DataConnectorName(
Identifier(
"db",
@ -370,7 +382,9 @@ input_file: crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring
),
type_mappings: {
Qualified {
subgraph: "article_namespace",
subgraph: SubgraphName(
"article_namespace",
),
name: CustomTypeName(
Identifier(
"article",
@ -546,7 +560,9 @@ input_file: crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring
),
),
field_parent_type: Qualified {
subgraph: "article_namespace",
subgraph: SubgraphName(
"article_namespace",
),
name: CustomTypeName(
Identifier(
"article",

View File

@ -7,7 +7,9 @@ input_file: crates/metadata-resolve/tests/passing/models/all_args_are_set_includ
Metadata {
object_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"RowType",
@ -46,7 +48,9 @@ input_file: crates/metadata-resolve/tests/passing/models/all_args_are_set_includ
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",
@ -88,7 +92,9 @@ input_file: crates/metadata-resolve/tests/passing/models/all_args_are_set_includ
},
scalar_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Headers",
@ -109,7 +115,9 @@ input_file: crates/metadata-resolve/tests/passing/models/all_args_are_set_includ
},
models: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"collection_with_args",
@ -118,7 +126,9 @@ input_file: crates/metadata-resolve/tests/passing/models/all_args_are_set_includ
}: ModelWithPermissions {
model: Model {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"collection_with_args",
@ -126,7 +136,9 @@ input_file: crates/metadata-resolve/tests/passing/models/all_args_are_set_includ
),
},
data_type: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"RowType",
@ -191,7 +203,9 @@ input_file: crates/metadata-resolve/tests/passing/models/all_args_are_set_includ
ModelSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",
@ -260,7 +274,9 @@ input_file: crates/metadata-resolve/tests/passing/models/all_args_are_set_includ
),
type_mappings: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"RowType",
@ -430,7 +446,9 @@ input_file: crates/metadata-resolve/tests/passing/models/all_args_are_set_includ
order_by_expression: Some(
ModelOrderByExpression {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",

View File

@ -7,7 +7,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
Metadata {
object_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"RowType",
@ -46,7 +48,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
type_mappings: DataConnectorTypeMappingsForObject(
{
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",
@ -88,7 +92,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
},
scalar_types: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"Headers",
@ -109,7 +115,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
},
models: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"collection_with_args",
@ -118,7 +126,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
}: ModelWithPermissions {
model: Model {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"collection_with_args",
@ -126,7 +136,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
),
},
data_type: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"RowType",
@ -191,7 +203,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
ModelSource {
data_connector: DataConnectorLink {
name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",
@ -260,7 +274,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
),
type_mappings: {
Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: CustomTypeName(
Identifier(
"RowType",
@ -411,7 +427,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
order_by_expression: Some(
ModelOrderByExpression {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",
@ -498,7 +516,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
ModelIssue(
FunctionArgumentMappingIssue {
data_connector_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: DataConnectorName(
Identifier(
"myconnector",
@ -506,7 +526,9 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu
),
},
model_name: Qualified {
subgraph: "default",
subgraph: SubgraphName(
"default",
),
name: ModelName(
Identifier(
"collection_with_args",

View File

@ -904,7 +904,8 @@
"type": [
"string",
"null"
]
],
"pattern": "^(?!__)[_a-zA-Z][_a-zA-Z0-9]*$"
}
},
"additionalProperties": false
@ -2386,7 +2387,8 @@
"type": [
"string",
"null"
]
],
"pattern": "^(?!__)[_a-zA-Z][_a-zA-Z0-9]*$"
},
"relationshipType": {
"description": "Type of the relationship - object or array.",

View File

@ -1,23 +1,22 @@
use std::collections::HashSet;
use crate::identifier::SubgraphIdentifier;
use crate::identifier::SubgraphName;
use crate::{
aggregates, boolean_expression, commands, data_connector, flags, graphql_config, models,
order_by_expression, permissions, relationships, types, Metadata, MetadataWithVersion,
OpenDdSubgraphObject, OpenDdSupergraphObject,
};
const GLOBALS_SUBGRAPH: SubgraphIdentifier = SubgraphIdentifier::new_inline_static("__globals");
const UNKNOWN_SUBGRAPH: SubgraphIdentifier =
SubgraphIdentifier::new_inline_static("__unknown_namespace");
const GLOBALS_SUBGRAPH: SubgraphName = SubgraphName::new_inline_static("__globals");
const UNKNOWN_SUBGRAPH: SubgraphName = SubgraphName::new_inline_static("__unknown_namespace");
pub struct QualifiedObject<T> {
pub subgraph: SubgraphIdentifier,
pub subgraph: SubgraphName,
pub object: T,
}
impl<T> QualifiedObject<T> {
pub fn new(subgraph: &SubgraphIdentifier, object: T) -> Self {
pub fn new(subgraph: &SubgraphName, object: T) -> Self {
QualifiedObject {
subgraph: subgraph.clone(),
object,
@ -28,7 +27,7 @@ impl<T> QualifiedObject<T> {
const DEFAULT_FLAGS: flags::Flags = flags::Flags::new();
pub struct MetadataAccessor {
pub subgraphs: HashSet<SubgraphIdentifier>,
pub subgraphs: HashSet<SubgraphName>,
pub data_connectors: Vec<QualifiedObject<data_connector::DataConnectorLinkV1>>,
pub object_types: Vec<QualifiedObject<types::ObjectTypeV1>>,
pub object_boolean_expression_types: Vec<QualifiedObject<types::ObjectBooleanExpressionTypeV1>>,
@ -51,7 +50,7 @@ pub struct MetadataAccessor {
fn load_metadata_objects(
metadata_objects: Vec<OpenDdSubgraphObject>,
subgraph: &SubgraphIdentifier,
subgraph: &SubgraphName,
accessor: &mut MetadataAccessor,
) {
accessor.subgraphs.insert(subgraph.clone());
@ -170,8 +169,7 @@ impl MetadataAccessor {
let mut accessor: MetadataAccessor =
MetadataAccessor::new_empty(Some(metadata.flags));
for namespaced_metadata in metadata.namespaces {
let subgraph =
SubgraphIdentifier::new_without_validation(&namespaced_metadata.name);
let subgraph = SubgraphName::new_without_validation(&namespaced_metadata.name);
load_metadata_objects(namespaced_metadata.objects, &subgraph, &mut accessor);
}
accessor
@ -183,7 +181,7 @@ impl MetadataAccessor {
load_metadata_supergraph_object(supergraph_object, &mut accessor);
}
for subgraph in metadata.subgraphs {
load_metadata_objects(subgraph.objects, &subgraph.name, &mut accessor);
load_metadata_objects(subgraph.objects, &subgraph.name.into(), &mut accessor);
}
accessor
}
@ -191,7 +189,7 @@ impl MetadataAccessor {
let mut accessor: MetadataAccessor =
MetadataAccessor::new_empty(Some(metadata.flags));
for subgraph in metadata.subgraphs {
load_metadata_objects(subgraph.objects, &subgraph.name, &mut accessor);
load_metadata_objects(subgraph.objects, &subgraph.name.into(), &mut accessor);
}
accessor
}

View File

@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize};
use crate::{
data_connector::{DataConnectorName, DataConnectorScalarType},
identifier::Identifier,
impl_JsonSchema_with_OpenDd_for, str_newtype,
str_newtype,
types::{CustomTypeName, Deprecated, FieldName, GraphQlTypeName, TypeName, TypeReference},
};
@ -157,41 +157,9 @@ pub struct AggregationFunctionDefinition {
pub return_type: TypeReference,
}
#[repr(transparent)]
#[derive(
Serialize,
Deserialize,
Clone,
Debug,
PartialEq,
Eq,
Hash,
ref_cast::RefCast,
derive_more::Display,
opendds_derive::OpenDd,
)]
/// The name of an aggregation function.
pub struct AggregationFunctionName(pub Identifier);
str_newtype!(AggregationFunctionName over Identifier | doc "The name of an aggregation function.");
impl_JsonSchema_with_OpenDd_for!(AggregationFunctionName);
#[repr(transparent)]
#[derive(
Serialize,
Deserialize,
Clone,
Debug,
PartialEq,
Eq,
Hash,
ref_cast::RefCast,
derive_more::Display,
opendds_derive::OpenDd,
)]
/// The name of an aggregation function in a data connector
pub struct DataConnectorAggregationFunctionName(pub String);
impl_JsonSchema_with_OpenDd_for!(DataConnectorAggregationFunctionName);
str_newtype!(DataConnectorAggregationFunctionName | doc "The name of an aggregation function in a data connector");
#[derive(
Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema, opendds_derive::OpenDd,

View File

@ -117,55 +117,24 @@ impl<'de> Deserialize<'de> for Identifier {
}
}
// Macro to produce a validated subgraph identifier using a string literal that crashes if the
// literal is invalid. Does not work for non-literal strings to avoid use on user supplied input.
#[macro_export]
macro_rules! subgraph_identifier {
($name:literal) => {
open_dds::identifier::SubgraphIdentifier::new($name.to_string()).unwrap()
};
}
/// Type capturing a subgraph identifier used within the metadata. The wrapped String
/// is guaranteed to be a valid identifier, i.e.
/// Type capturing a subgraph identifier for a user defined subgraph.
/// The wrapped String is guaranteed to be a valid identifier, i.e.
/// - does not start with __
/// - starts with an alphabet or underscore
/// - all characters are either alphanumeric or underscore
#[derive(
Clone,
Debug,
derive_more::Display,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
serde::Serialize,
serde::Deserialize,
Clone, Debug, derive_more::Display, PartialEq, Eq, PartialOrd, Ord, Hash, serde::Serialize,
)]
pub struct SubgraphIdentifier(SmolStr);
pub struct SubgraphNameInput(SmolStr);
impl SubgraphIdentifier {
pub fn new(value: impl AsRef<str>) -> Result<SubgraphIdentifier, &'static str> {
impl SubgraphNameInput {
pub fn new(value: impl AsRef<str>) -> Result<SubgraphNameInput, &'static str> {
let value = value.as_ref();
let Identifier(inner) = Identifier::new(value)?;
if inner.starts_with("__") {
return Err("__ is a reserved prefix for subgraph names");
}
Ok(SubgraphIdentifier(SmolStr::new(value)))
}
/// Creates a new subgraph identifier, skipping validation.
pub fn new_without_validation(value: impl AsRef<str>) -> SubgraphIdentifier {
SubgraphIdentifier(SmolStr::new(value))
}
/// Creates a new subgraph identifier from a static string, skipping
/// validation.
///
/// Panics if the string is more than 23 characters.
pub const fn new_inline_static(value: &'static str) -> SubgraphIdentifier {
SubgraphIdentifier(SmolStr::new_inline(value))
Ok(SubgraphNameInput(SmolStr::new(value)))
}
pub fn as_str(&self) -> &str {
@ -173,7 +142,7 @@ impl SubgraphIdentifier {
}
}
impl Deref for SubgraphIdentifier {
impl Deref for SubgraphNameInput {
type Target = str;
fn deref(&self) -> &Self::Target {
@ -181,20 +150,20 @@ impl Deref for SubgraphIdentifier {
}
}
impl std::borrow::Borrow<str> for SubgraphIdentifier {
impl std::borrow::Borrow<str> for SubgraphNameInput {
fn borrow(&self) -> &str {
&self.0
}
}
impl OpenDd for SubgraphIdentifier {
impl OpenDd for SubgraphNameInput {
fn deserialize(json: serde_json::Value) -> Result<Self, OpenDdDeserializeError> {
let string: String =
serde_json::from_value(json).map_err(|error| OpenDdDeserializeError {
error,
path: JSONPath::default(),
})?;
SubgraphIdentifier::new(string).map_err(|e| OpenDdDeserializeError {
SubgraphNameInput::new(string).map_err(|e| OpenDdDeserializeError {
error: serde_json::Error::custom(e),
path: JSONPath::default(),
})
@ -214,7 +183,7 @@ impl OpenDd for SubgraphIdentifier {
}
fn _schema_name() -> String {
"SubgraphIdentifier".to_string()
"SubgraphNameInput".to_string()
}
fn _schema_is_referenceable() -> bool {
@ -223,3 +192,84 @@ impl OpenDd for SubgraphIdentifier {
false
}
}
impl<'de> Deserialize<'de> for SubgraphNameInput {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
OpenDd::deserialize(serde_json::Value::deserialize(deserializer)?).map_err(D::Error::custom)
}
}
impl_JsonSchema_with_OpenDd_for!(SubgraphNameInput);
/// The name of a subgraph.
///
/// This is different from 'SubgraphNameInput' which is more restrictive.
/// A SubgraphName may refer to a user defined subgraph (through 'SubgraphNameInput') or
/// a restricted namespace such as '__globals' or '__unknown_namespace'
///
/// Further, it may not be a valid identifier as v2 version of Metadata did not do any validation
/// on namespaces. When we deprecate v2 version of metadata, this can switch to str_newtype over
/// Identifier
///
/// This is also not meant to be used in any of the user facing metadata types, hence there is on
/// 'OpenDD' trait implementation. However, there is a 'JsonSchema' trait implementation to help
/// with query analytics
#[derive(
Clone,
Debug,
derive_more::Display,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
serde::Serialize,
serde::Deserialize,
schemars::JsonSchema,
)]
pub struct SubgraphName(SmolStr);
impl From<SubgraphNameInput> for SubgraphName {
fn from(SubgraphNameInput(value): SubgraphNameInput) -> Self {
SubgraphName(value)
}
}
impl From<&SubgraphNameInput> for SubgraphName {
fn from(SubgraphNameInput(value): &SubgraphNameInput) -> Self {
SubgraphName(value.clone())
}
}
impl SubgraphName {
pub fn try_new(value: impl AsRef<str>) -> Result<SubgraphName, &'static str> {
let value = value.as_ref();
let Identifier(_inner) = Identifier::new(value)?;
Ok(SubgraphName(SmolStr::new(value)))
}
/// Creates a new subgraph identifier, skipping validation.
pub fn new_without_validation(value: impl AsRef<str>) -> SubgraphName {
SubgraphName(SmolStr::new(value))
}
/// Creates a new subgraph identifier from a static string, skipping
/// validation.
///
/// Panics if the string is more than 23 characters.
pub const fn new_inline_static(value: &'static str) -> SubgraphName {
SubgraphName(SmolStr::new_inline(value))
}
}
// Macro to produce a validated subgraph identifier using a string literal that crashes if the
// literal is invalid. Does not work for non-literal strings to avoid use on user supplied input.
#[macro_export]
macro_rules! subgraph_identifier {
($name:literal) => {
open_dds::identifier::SubgraphName::try_new($name.to_string()).unwrap()
};
}

View File

@ -280,7 +280,7 @@ impl Supergraph {
#[derive(Serialize, Clone, Debug, PartialEq, opendds_derive::OpenDd)]
#[opendd(json_schema(rename = "OpenDdSubgraph"))]
pub struct Subgraph {
pub name: identifier::SubgraphIdentifier,
pub name: identifier::SubgraphNameInput,
pub objects: Vec<OpenDdSubgraphObject>,
}

View File

@ -6,7 +6,7 @@ use crate::{
aggregates::AggregationFunctionName,
arguments::ArgumentName,
commands::CommandName,
identifier::{Identifier, SubgraphIdentifier},
identifier::{Identifier, SubgraphName},
models::{ModelName, OrderByDirection},
relationships::RelationshipName,
str_newtype,
@ -119,7 +119,7 @@ pub struct RelationshipAggregateSelection {
#[serde(rename_all = "camelCase")]
/// The model lookup to target in a query.
pub struct ModelTarget {
pub subgraph: SubgraphIdentifier,
pub subgraph: SubgraphName,
pub model_name: ModelName,
pub filter: Option<BooleanExpression>,
#[serde(default)]
@ -159,7 +159,7 @@ pub struct RelationshipTarget {
#[serde(rename_all = "camelCase")]
/// The command execution to to target in a query.
pub struct CommandTarget {
pub subgraph: SubgraphIdentifier,
pub subgraph: SubgraphName,
pub command_name: CommandName,
#[serde(default)]
pub arguments: IndexMap<ArgumentName, Value>,

View File

@ -5,7 +5,7 @@ use crate::{
aggregates::AggregateExpressionName,
arguments::ArgumentName,
commands::CommandName,
identifier::Identifier,
identifier::{Identifier, SubgraphName, SubgraphNameInput},
impl_JsonSchema_with_OpenDd_for,
models::ModelName,
permissions::ValueExpression,
@ -35,7 +35,7 @@ pub struct ModelRelationshipTarget {
/// The name of the data model.
pub name: ModelName,
/// The subgraph of the target model. Defaults to the current subgraph.
subgraph: Option<String>,
subgraph: Option<SubgraphNameInput>,
/// Type of the relationship - object or array.
pub relationship_type: RelationshipType,
/// How to aggregate over the relationship. Only valid for array relationships
@ -46,8 +46,8 @@ pub struct ModelRelationshipTarget {
impl_JsonSchema_with_OpenDd_for!(ModelRelationshipTarget);
impl ModelRelationshipTarget {
pub fn subgraph(&self) -> Option<&str> {
self.subgraph.as_deref()
pub fn subgraph(&self) -> Option<SubgraphName> {
self.subgraph.as_ref().map(std::convert::Into::into)
}
}
@ -72,12 +72,12 @@ pub struct CommandRelationshipTarget {
/// The name of the command.
pub name: CommandName,
/// The subgraph of the target command. Defaults to the current subgraph.
pub subgraph: Option<String>,
pub subgraph: Option<SubgraphNameInput>,
}
impl CommandRelationshipTarget {
pub fn subgraph(&self) -> Option<&str> {
self.subgraph.as_deref()
pub fn subgraph(&self) -> Option<SubgraphName> {
self.subgraph.as_ref().map(std::convert::Into::into)
}
}

View File

@ -246,13 +246,17 @@
],
"properties": {
"subgraph": {
"type": "string"
"$ref": "#/definitions/SubgraphName"
},
"name": {
"$ref": "#/definitions/ModelName"
}
}
},
"SubgraphName": {
"description": "The name of a subgraph.\n\nThis is different from 'SubgraphNameInput' which is more restrictive. A SubgraphName may refer to a user defined subgraph (through 'SubgraphNameInput') or a restricted namespace such as '__globals' or '__unknown_namespace'\n\nFurther, it may not be a valid identifier as v2 version of Metadata did not do any validation on namespaces. When we deprecate v2 version of metadata, this can switch to str_newtype over Identifier\n\nThis is also not meant to be used in any of the user facing metadata types, hence there is on 'OpenDD' trait implementation. However, there is a 'JsonSchema' trait implementation to help with query analytics",
"type": "string"
},
"ModelName": {
"$id": "https://hasura.io/jsonschemas/metadata/ModelName",
"title": "ModelName",
@ -268,7 +272,7 @@
],
"properties": {
"subgraph": {
"type": "string"
"$ref": "#/definitions/SubgraphName"
},
"name": {
"$ref": "#/definitions/CommandName"
@ -316,7 +320,7 @@
],
"properties": {
"subgraph": {
"type": "string"
"$ref": "#/definitions/SubgraphName"
},
"name": {
"$ref": "#/definitions/CustomTypeName"

View File

@ -120,8 +120,8 @@ pub enum RelationshipTarget {
mod tests {
use super::*;
use goldenfile::Mint;
use open_dds::identifier;
use open_dds::relationships::RelationshipType;
use open_dds::{identifier, subgraph_identifier};
use schemars::schema_for;
use std::{io::Write, path::PathBuf};
@ -164,10 +164,13 @@ mod tests {
*/
let product_relationship = OpenddObject::Relationship(RelationshipUsage {
name: RelationshipName::new(identifier!("product")),
source: Qualified::new("app".to_string(), CustomTypeName(identifier!("Order"))),
source: Qualified::new(
subgraph_identifier!("app"),
CustomTypeName(identifier!("Order")),
),
target: RelationshipTarget::Model {
model_name: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
ModelName::new(identifier!("Products")),
),
relationship_type: RelationshipType::Object,
@ -180,7 +183,7 @@ mod tests {
used: vec![OpenddObject::Field(FieldUsage {
name: FieldName::new(identifier!("id")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Order")),
),
deprecated: false,
@ -199,7 +202,7 @@ mod tests {
used: vec![OpenddObject::Field(FieldUsage {
name: FieldName::new(identifier!("price")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Product")),
),
deprecated: false,
@ -230,7 +233,7 @@ mod tests {
used: vec![OpenddObject::Field(FieldUsage {
name: FieldName::new(identifier!("price")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Product")),
),
deprecated: false,
@ -247,7 +250,7 @@ mod tests {
used: vec![OpenddObject::Field(FieldUsage {
name: FieldName::new(identifier!("quantity")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Product")),
),
deprecated: false,
@ -273,7 +276,7 @@ mod tests {
used: vec![OpenddObject::Field(FieldUsage {
name: FieldName::new(identifier!("quantity")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Product")),
),
deprecated: false,
@ -291,7 +294,7 @@ mod tests {
used: vec![
OpenddObject::Model {
name: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
ModelName::new(identifier!("Orders")),
),
},
@ -300,7 +303,7 @@ mod tests {
fields: vec![FieldUsage {
name: FieldName::new(identifier!("id")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Order")),
),
deprecated: false,
@ -316,7 +319,7 @@ mod tests {
used: vec![OpenddObject::Field(FieldUsage {
name: FieldName::new(identifier!("date")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Order")),
),
deprecated: false,
@ -337,7 +340,7 @@ mod tests {
used: vec![OpenddObject::Field(FieldUsage {
name: FieldName::new(identifier!("address_line_1")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Address")),
),
deprecated: false,
@ -351,7 +354,7 @@ mod tests {
used: vec![OpenddObject::Field(FieldUsage {
name: FieldName::new(identifier!("address_line_2")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Address")),
),
deprecated: false,
@ -361,7 +364,7 @@ mod tests {
used: vec![OpenddObject::Field(FieldUsage {
name: FieldName::new(identifier!("address")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Order")),
),
deprecated: false,
@ -378,7 +381,7 @@ mod tests {
used: vec![OpenddObject::Field(FieldUsage {
name: FieldName::new(identifier!("name")),
opendd_type: Qualified::new(
"app".to_string(),
subgraph_identifier!("app"),
CustomTypeName(identifier!("Product")),
),
deprecated: false,

View File

@ -271,7 +271,7 @@ fn add_aggregation_functions(
aggregate_expression: &AggregateExpression,
) -> Result<(), Error> {
for aggregatable_function_info in &aggregate_expression.operand.aggregation_functions {
let field_graphql_name = mk_name(aggregatable_function_info.name.0.as_str())
let field_graphql_name = mk_name(aggregatable_function_info.name.as_str())
.map_err(metadata_resolve::Error::from)?;
let field = gql_schema::Field::<GDS>::new(

View File

@ -37,7 +37,7 @@ impl Catalog {
let table_name = &model_name.name;
let subgraph =
subgraphs
.entry(schema_name.clone())
.entry(schema_name.to_string())
.or_insert_with(|| subgraph::Subgraph {
tables: IndexMap::new(),
});

View File

@ -48,13 +48,13 @@ impl Introspection {
for (schema_name, schema) in schemas {
for (table_name, table) in &schema.tables {
table_metadata_rows.push(TableRow::new(
schema_name.clone(),
schema_name.to_string(),
table_name.to_string(),
table.model.description.clone(),
));
for (column_name, column_description) in &table.model.columns {
column_metadata_rows.push(ColumnRow {
schema_name: schema_name.clone(),
schema_name: schema_name.to_string(),
table_name: table_name.clone(),
column_name: column_name.clone(),
description: column_description.clone(),
@ -78,10 +78,10 @@ impl Introspection {
{
for mapping in mappings {
foreign_key_constraint_rows.push(ForeignKeyRow {
from_schema_name: schema_name.clone(),
from_schema_name: schema_name.to_string(),
from_table_name: table_name.clone(),
from_column_name: mapping.source_field.field_name.to_string(),
to_schema_name: model_name.subgraph.clone(),
to_schema_name: model_name.subgraph.to_string(),
to_table_name: model_name.name.to_string(),
to_column_name: mapping.target_field.field_name.to_string(),
});

View File

@ -132,7 +132,7 @@ impl ModelWithPermissions {
.map(|source| Arc::new(source.clone()));
let model = Model {
subgraph: model.model.name.subgraph.clone(),
subgraph: model.model.name.subgraph.to_string(),
name: model.model.name.name.clone(),
description: model.model.raw.description.clone(),
arguments: IndexMap::new(),