public static ICollection <CommandExecutionHandler> ResolveCommandHandlers(OracleStatementSemanticModel semanticModel, StatementGrammarNode currentTerminal) { CheckParametersNotNull(semanticModel, currentTerminal); var commands = new List <CommandExecutionHandler>(); if (currentTerminal.Id != Terminals.Identifier && currentTerminal.Id != Terminals.RowIdPseudocolumn) { return(EmptyHandlerCollection); } var columnReference = semanticModel.AllReferenceContainers.SelectMany(qb => qb.ColumnReferences).SingleOrDefault(c => c.ColumnNode == currentTerminal); if (columnReference == null || columnReference.ColumnNodeObjectReferences.Count <= 1) { return(EmptyHandlerCollection); } var identifiers = OracleObjectIdentifier.GetUniqueReferences(columnReference.ColumnNodeObjectReferences.Select(r => r.FullyQualifiedObjectName).ToArray()); var actions = columnReference.ColumnNodeObjectReferences .Where(r => identifiers.Contains(r.FullyQualifiedObjectName)) .Select( r => new CommandExecutionHandler { Name = r.FullyQualifiedObjectName + "." + columnReference.Name, ExecutionHandler = c => new ResolveAmbiguousColumnCommand(c, r.FullyQualifiedObjectName + "." + columnReference.Name) .Execute(), CanExecuteHandler = c => true }); commands.AddRange(actions); return(commands.AsReadOnly()); }