private void Commands_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { switch (e.Action) { case NotifyCollectionChangedAction.Add: foreach (Command command in e.NewItems) { var localCommand = command; _callbacksManager.RunAnalysisVisitorOnCommand(() => { var aliasFinder = new AliasResolutionVisitor(); RunTSqlFragmentVisitor.AnalyzeFragmentVisitor(localCommand.Sql, localCommand.SqlHash, aliasFinder); var visitor = new FindEqualityJoinVisitor(aliasFinder.Aliases); return(RunTSqlFragmentVisitor.AnalyzeFragmentVisitorBase(localCommand.Sql, localCommand.SqlHash, visitor)); }, command); } break; } }
/// <summary> /// Initializes a new instance of the <see cref="Select"/> class. /// </summary> /// <param name="querySpecification">The query specification.</param> /// <param name="bodyColumnTypes">The body column types.</param> public Select(QuerySpecification querySpecification, IDictionary<string, DataType> bodyColumnTypes) { // Get any table aliases. var aliasResolutionVisitor = new AliasResolutionVisitor(); querySpecification.Accept(aliasResolutionVisitor); this.TableAliases = aliasResolutionVisitor.Aliases; var outerJoinedTables = new List<string>(); if (querySpecification.FromClause != null) { foreach (var join in querySpecification.FromClause.TableReferences.OfType<QualifiedJoin>()) { FillOuterJoins(outerJoinedTables, join, false); } } var topInt = querySpecification.TopRowFilter != null ? querySpecification.TopRowFilter.Expression as IntegerLiteral : null; this.IsSingleRow = topInt != null && topInt.Value == "1" && querySpecification.TopRowFilter.Percent == false; this.Columns = querySpecification.SelectElements.OfType<SelectScalarExpression>().Select(x => new SelectColumn(x, bodyColumnTypes, this.TableAliases, outerJoinedTables)).ToList(); }