public void BuildFor(CohortAggregateContainer container, ParameterManager parameterManager) { ThrowIfAlreadyBuilt(); IsForContainer = true; _log.AppendLine("Starting Build for " + container); //gather dependencies foreach (var cohortSet in ChildProvider.GetAllChildrenRecursively(container).OfType <AggregateConfiguration>().Where(IsEnabled).OrderBy(ac => ac.Order)) { AddDependency(cohortSet); } if (!Dependencies.Any()) { throw new QueryBuildingException($"There are no AggregateConfigurations under the SET container '{container}'"); } LogDependencies(); BuildDependenciesSql(parameterManager.ParametersFoundSoFarInQueryGeneration[ParameterLevel.Global].ToArray()); MakeCacheDecision(); Sql = BuildSql(container, parameterManager); }
/// <summary> /// Objects are enabled if they do not support disabling (<see cref="IDisableable"/>) or are <see cref="IDisableable.IsDisabled"/> = false /// </summary> /// <returns></returns> private bool IsEnabled(IOrderable arg) { var parentDisabled = ChildProvider.GetDescendancyListIfAnyFor(arg)?.Parents.Any(p => p is IDisableable d && d.IsDisabled); //if a parent is disabled if (parentDisabled.HasValue && parentDisabled.Value) { return(false); } //or you yourself are disabled var dis = arg as IDisableable; return(dis == null || !dis.IsDisabled); }