private bool ContainConflictingAnalyticFunctions() { var parentAnalyticFunctionRootNodes = _parentQueryBlock.Columns .Where(c => c.HasExplicitDefinition) .SelectMany(c => c.ProgramReferences) .Where(p => p.AnalyticClauseNode != null) .Select(p => p.RootNode[0]) .ToHashSet(); var namedParentColumnReferences = _parentQueryBlock.Columns .Where(c => c.HasExplicitDefinition) .SelectMany(c => c.ColumnReferences) .Where(c => c.ValidObjectReference?.QueryBlocks.FirstOrDefault() == CurrentQueryBlock) .ToLookup(c => c.NormalizedName); foreach (var columnWithAnalyticFunction in CurrentQueryBlock.Columns.Where(OracleQueryBlock.PredicateContainsAnalyticFunction)) { foreach (var parentColumnReference in namedParentColumnReferences[columnWithAnalyticFunction.NormalizedName]) { var parentAnalyticFunctionRootNode = OracleStatementValidator.GetParentAggregateOrAnalyticFunctionRootNode(parentColumnReference.RootNode); if (parentAnalyticFunctionRootNodes.Contains(parentAnalyticFunctionRootNode)) { return(true); } } } return(false); }