private void VerifyScalarSourceModels(IModels containsBy, Column sourceColumn, string exceptionParamName) { if (sourceColumn.ScalarSourceModels.Count == 0 && sourceColumn.GetExpression() == null) { throw new ArgumentException(DiagnosticMessages.Column_EmptyScalarSourceModels, exceptionParamName); } foreach (var model in sourceColumn.ScalarSourceModels) { if (!containsBy.Contains(model)) { throw new ArgumentException(DiagnosticMessages.DbQueryBuilder_InvalidScalarSourceModel(model), exceptionParamName); } } }
private void MergeComputation(Column computationColumn) { Debug.Assert(computationColumn.IsExpression); if (_computationManager == null) { _computationManager = new ComputationManager(); } var baseColumns = computationColumn.GetExpression().BaseColumns; foreach (var baseColumn in baseColumns) { MergeComputation(baseColumn, computationColumn, true); } }
private void MergeComputation(Column baseColumn, Column computationColumn, bool isDirect) { if (baseColumn == computationColumn) { throw new InvalidOperationException(DiagnosticMessages.ComputationManager_CircularComputation(baseColumn.Name)); } if (baseColumn.ParentModel != null) { _computationManager.AddDependency(baseColumn, computationColumn, isDirect); isDirect = false; } if (baseColumn.IsExpression) { var baseBaseColumns = baseColumn.GetExpression().BaseColumns; foreach (var baseBaseColumn in baseBaseColumns) { MergeComputation(baseBaseColumn, computationColumn, isDirect); } } }