public static bool FindMappingErrors(ViewgenContext context, MemberDomainMap domainMap, ErrorLog errorLog) { //Can't get here if Update Views have validation disabled Debug.Assert(context.ViewTarget == ViewTarget.QueryView || context.Config.IsValidationEnabled); if (context.ViewTarget == ViewTarget.QueryView && !context.Config.IsValidationEnabled) { return(false); // Rules for QV under no validation are different } ErrorPatternMatcher matcher = new ErrorPatternMatcher(context, domainMap, errorLog); matcher.MatchMissingMappingErrors(); matcher.MatchConditionErrors(); matcher.MatchSplitErrors(); if (matcher.m_errorLog.Count == matcher.m_originalErrorCount) { //this will generate redundant errors if one of the above routine finds an error // so execute it only when we dont have any other errors matcher.MatchPartitionErrors(); } if (matcher.m_errorLog.Count > matcher.m_originalErrorCount) { ExceptionHelpers.ThrowMappingException(matcher.m_errorLog, matcher.m_viewgenContext.Config); } return(false); }
private void ReportConstraintViolation(string message, BoolExpression extraConstraint, ViewGenErrorCode errorCode, IEnumerable <LeftCellWrapper> relevantWrappers) { if (ErrorPatternMatcher.FindMappingErrors(_viewgenContext, _domainMap, _errorLog)) { return; } extraConstraint.ExpensiveSimplify(); // gather all relevant cell wrappers and sort them in the original input order HashSet <LeftCellWrapper> relevantCellWrappers = new HashSet <LeftCellWrapper>(relevantWrappers); List <LeftCellWrapper> relevantWrapperList = new List <LeftCellWrapper>(relevantCellWrappers); relevantWrapperList.Sort(LeftCellWrapper.OriginalCellIdComparer); StringBuilder builder = new StringBuilder(); builder.AppendLine(message); EntityConfigurationToUserString(extraConstraint, builder); _errorLog.AddEntry(new ErrorLog.Record(true, errorCode, builder.ToString(), relevantCellWrappers, "")); }