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);
        }
 public override ValidationResult Validate(object value, CultureInfo cultureInfo)
 {
     return(new ValidationResult(OracleStatementValidator.IsValidBindVariableIdentifier((string)value, _databaseVersion), "Bind variable identifier contains characters that are not allowed, has more than 30 characters, matches a reserved word or is a number value not between 0 and 65535. "));
 }