Beispiel #1
0
 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;
     }
 }
Beispiel #2
0
        /// <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();
        }
Beispiel #3
0
        /// <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();
        }