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());
        }