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. ")); }