public static void ValidateCompartmentSearchExpression( Expression expression, string compartmentType, string compartmentId) { CompartmentSearchExpression compartmentSearchExpression = Assert.IsType <CompartmentSearchExpression>(expression); Assert.Equal(compartmentType, compartmentSearchExpression.CompartmentType); Assert.Equal(compartmentId, compartmentSearchExpression.CompartmentId); }
public override Expression VisitCompartment(CompartmentSearchExpression expression, object context) { SearchParameterInfo resourceTypeSearchParameter = _searchParameterDefinitionManager.Value.GetSearchParameter(KnownResourceTypes.Resource, SearchParameterNames.ResourceType); var compartmentType = expression.CompartmentType; var compartmentId = expression.CompartmentId; if (Enum.TryParse(compartmentType, out ValueSets.CompartmentType parsedCompartmentType)) { if (string.IsNullOrWhiteSpace(compartmentId)) { throw new InvalidSearchOperationException(Core.Resources.CompartmentIdIsInvalid); } var compartmentResourceTypesToSearch = new HashSet <string>(); var compartmentSearchExpressions = new Dictionary <string, (SearchParameterExpression Expression, HashSet <string> ResourceTypes)>(); if (_compartmentDefinitionManager.Value.TryGetResourceTypes(parsedCompartmentType, out HashSet <string> resourceTypes)) { if (expression.FilteredResourceTypes.Any(resourceType => !string.Equals(resourceType, KnownResourceTypes.DomainResource, StringComparison.Ordinal))) { resourceTypes = resourceTypes.Where(x => expression.FilteredResourceTypes.Contains(x)).ToHashSet(); } foreach (var resourceFilter in resourceTypes) { compartmentResourceTypesToSearch.Add(resourceFilter); } } foreach (var compartmentResourceType in compartmentResourceTypesToSearch) { var searchParamExpressionsForResourceType = new List <SearchParameterExpression>(); if (_compartmentDefinitionManager.Value.TryGetSearchParams(compartmentResourceType, parsedCompartmentType, out HashSet <string> compartmentSearchParameters)) { foreach (var compartmentSearchParameter in compartmentSearchParameters) { if (_searchParameterDefinitionManager.Value.TryGetSearchParameter(compartmentResourceType, compartmentSearchParameter, out SearchParameterInfo sp)) { searchParamExpressionsForResourceType.Add( Expression.SearchParameter(sp, Expression.And(Expression.StringEquals(FieldName.ReferenceResourceType, null, compartmentType, false), Expression.StringEquals(FieldName.ReferenceResourceId, null, compartmentId, false)))); } } } foreach (var expr in searchParamExpressionsForResourceType) { if (compartmentSearchExpressions.TryGetValue(expr.ToString(), out var resourceTypeList)) { resourceTypeList.ResourceTypes.Add(compartmentResourceType); } else { compartmentSearchExpressions[expr.ToString()] = (expr, new HashSet <string> { compartmentResourceType });
public override SearchParameterQueryGeneratorContext VisitCompartment(CompartmentSearchExpression expression, SearchParameterQueryGeneratorContext context) { byte compartmentTypeId = context.Model.GetCompartmentTypeId(expression.CompartmentType); context.StringBuilder .Append(VLatest.CompartmentAssignment.CompartmentTypeId, context.TableAlias) .Append(" = ") .Append(context.Parameters.AddParameter(VLatest.CompartmentAssignment.CompartmentTypeId, compartmentTypeId, true)) .AppendLine() .Append("AND ") .Append(VLatest.CompartmentAssignment.ReferenceResourceId, context.TableAlias) .Append(" = ") .Append(context.Parameters.AddParameter(VLatest.CompartmentAssignment.ReferenceResourceId, expression.CompartmentId, true)); return(context); }
public object VisitCompartment(CompartmentSearchExpression expression, Context context) { AppendArrayContainsFilter(GetCompartmentIndicesParamName(expression.CompartmentType), expression.CompartmentId); return(null); }
public NormalizedSearchParameterQueryGenerator VisitCompartment(CompartmentSearchExpression expression, object context) { return(CompartmentSearchParameterQueryGenerator.Instance); }
public void Visit(CompartmentSearchExpression expression) { AppendArrayContainsFilter(GetCompartmentIndicesParamName(expression.CompartmentType), expression.CompartmentId); }
public SearchParamTableExpressionQueryGenerator VisitCompartment(CompartmentSearchExpression expression, object context) { return(CompartmentQueryGenerator.Instance); }