Пример #1
0
        public void ProcessTopFilter(TopRowFilter TopFilter)
        {
            IntegerLiteral TopLiteral = null;

            if (FragmentTypeParser.GetFragmentType(TopFilter.Expression) != "ParenthesisExpression")
            {
                _smells.SendFeedBack(34, TopFilter);
                if (FragmentTypeParser.GetFragmentType(TopFilter.Expression) == "IntegerLiteral")
                {
                    TopLiteral = (IntegerLiteral)TopFilter.Expression;
                }
            }
            else
            {
                var ParenthesisExpression = (ParenthesisExpression)TopFilter.Expression;
                if (FragmentTypeParser.GetFragmentType(ParenthesisExpression.Expression) == "IntegerLiteral")
                {
                    TopLiteral = (IntegerLiteral)ParenthesisExpression.Expression;
                }
            }
            if (TopFilter.Percent && TopLiteral != null && TopLiteral.Value == "100")
            {
                _smells.SendFeedBack(35, TopLiteral);
            }
        }
        internal override string ToString(string indent)
        {
            StringBuilder sb = new StringBuilder(128);

            sb.AppendFormat("{0}DELETE NODE", indent);
            if (TopRowFilter != null)
            {
                if (TopRowFilter.OneLine())
                {
                    sb.Append(TopRowFilter.ToString(""));
                }
                else
                {
                    sb.Append("\r\n");
                    sb.Append(TopRowFilter.ToString(indent + "  "));
                }
            }
            sb.AppendFormat(" FROM {0}", Target.ToString());

            if (FromClause != null)
            {
                sb.Append("\r\n");
                sb.Append(FromClause.ToString(indent));
            }

            if (WhereClause != null && WhereClause.SearchCondition != null)
            {
                sb.Append("\r\n");
                sb.Append(WhereClause.ToString(indent));
            }

            return(sb.ToString());
        }
Пример #3
0
        public override void AcceptChildren(WSqlFragmentVisitor visitor)
        {
            if (FromClause != null)
            {
                FromClause.Accept(visitor);
            }
            if (WhereClause != null)
            {
                WhereClause.Accept(visitor);
            }
            if (TopRowFilter != null)
            {
                TopRowFilter.Accept(visitor);
            }
            if (GroupByClause != null)
            {
                GroupByClause.Accept(visitor);
            }
            if (HavingClause != null)
            {
                HavingClause.Accept(visitor);
            }

            if (SelectElements != null)
            {
                var index = 0;
                for (var count = SelectElements.Count; index < count; ++index)
                {
                    SelectElements[index].Accept(visitor);
                }
            }

            base.AcceptChildren(visitor);
        }
Пример #4
0
 protected override object InternalVisit(TopRowFilter node)
 {
     return(new Func <Environment, object>(env =>
     {
         return new TopResult(
             amount: EvaluateExpression <int>(node.Expression, env),
             percent: node.Percent,
             ties: node.WithTies);
     }));
 }
Пример #5
0
 public override void ExplicitVisit(TopRowFilter node)
 {
     WasVisited = true;
     SqlFragment = node;
     for (int i = node.FirstTokenIndex; i <= node.LastTokenIndex; i++)
     {
       TSqlParserToken token = node.ScriptTokenStream[i];
       if (token.TokenType == TSqlTokenType.LeftParenthesis) _leftParethesisCount++;
       if (token.TokenType == TSqlTokenType.RightParenthesis) _rightParethesisCount++;
     }
 }
        public void TopRowFilterTest()
        {
            var empties = _board.Values.Where(v => v.Content == ContentType.Empty).ToArray();

            var rule = new TopRowFilter();

            Assert.AreEqual("is in TOP ROW ", rule.ToString());

            var matches = rule.GetMatches(_board, empties);

            CollectionAssert.AreEquivalent(new[] { 8, 3, 4 }, matches.ToArray());
        }
Пример #7
0
 public override void ExplicitVisit(TopRowFilter node)
 {
     WasVisited  = true;
     SqlFragment = node;
     for (int i = node.FirstTokenIndex; i <= node.LastTokenIndex; i++)
     {
         TSqlParserToken token = node.ScriptTokenStream[i];
         if (token.TokenType == TSqlTokenType.LeftParenthesis)
         {
             _leftParethesisCount++;
         }
         if (token.TokenType == TSqlTokenType.RightParenthesis)
         {
             _rightParethesisCount++;
         }
     }
 }
        internal override string ToString(string indent)
        {
            var sb = new StringBuilder();

            sb.AppendFormat("{0}UPDATE", indent);
            if (TopRowFilter != null)
            {
                sb.Append(TopRowFilter.ToString(indent));
            }

            sb.AppendFormat(" {0} SET \r\n", Target.ToString(indent));

            var first = true;

            if (SetClauses != null)
            {
                foreach (var setclause in SetClauses)
                {
                    if (first)
                    {
                        first = false;
                        sb.AppendFormat("{0}{1}", indent, setclause.ToString(indent));
                    }
                    else
                    {
                        sb.AppendFormat(", {0}", setclause.ToString(indent));
                    }
                }
            }

            if (FromClause != null)
            {
                sb.AppendFormat("\r\n{0}{1}", indent, FromClause.ToString(indent));
            }
            if (WhereClause != null && WhereClause.SearchCondition != null)
            {
                sb.AppendFormat("\r\n{0}{1}", indent, WhereClause.ToString(indent));
            }
            sb.Append("\r\n");
            return(sb.ToString());
        }
Пример #9
0
        public QsiLimitExpressionNode VisitLimitOffset(TopRowFilter topRowFilter, OffsetClause offsetClause)
        {
            return(TreeHelper.Create <QsiLimitExpressionNode>(n =>
            {
                if (topRowFilter != null)
                {
                    var topRowFilterNode = ExpressionVisitor.VisitScalarExpression(topRowFilter.Expression);
                    SqlServerTree.PutFragmentSpan(topRowFilterNode, topRowFilter);

                    n.Limit.SetValue(topRowFilterNode);
                }

                if (offsetClause != null)
                {
                    var offsetClauseNode = ExpressionVisitor.VisitScalarExpression(offsetClause.OffsetExpression);
                    SqlServerTree.PutFragmentSpan(offsetClauseNode, offsetClause);

                    n.Offset.SetValue(offsetClauseNode);
                }
            }));
        }
Пример #10
0
 public void ProcessTopFilter(TopRowFilter TopFilter)
 {
     IntegerLiteral TopLiteral = null;
     if (FragmentTypeParser.GetFragmentType(TopFilter.Expression) != "ParenthesisExpression")
     {
         _smells.SendFeedBack(34, TopFilter);
         if (FragmentTypeParser.GetFragmentType(TopFilter.Expression) == "IntegerLiteral")
         {
             TopLiteral = (IntegerLiteral) TopFilter.Expression;
         }
     }
     else
     {
         var ParenthesisExpression = (ParenthesisExpression) TopFilter.Expression;
         if (FragmentTypeParser.GetFragmentType(ParenthesisExpression.Expression) == "IntegerLiteral")
         {
             TopLiteral = (IntegerLiteral) ParenthesisExpression.Expression;
         }
     }
     if (TopFilter.Percent && TopLiteral != null && TopLiteral.Value == "100")
     {
         _smells.SendFeedBack(35, TopLiteral);
     }
 }
Пример #11
0
        internal override string ToString(string indent)
        {
            var sb = new StringBuilder();

            sb.AppendFormat("{0}DELETE ", indent);
            if (TopRowFilter != null)
            {
                sb.Append(TopRowFilter.ToString(indent));
            }

            sb.AppendFormat(" FROM {0} ", Target.ToString(indent));

            if (FromClause != null)
            {
                sb.Append(FromClause.ToString(indent));
            }

            if (WhereClause != null && WhereClause.SearchCondition != null)
            {
                sb.Append(WhereClause.ToString(indent));
            }

            return(sb.ToString());
        }
Пример #12
0
        internal override string ToString(string indent)
        {
            var sb = new StringBuilder(1024);

            if (WithPathClause2 != null)
            {
                sb.Append(WithPathClause2.ToString(indent));
            }

            sb.AppendFormat("{0}SELECT ", indent);

            if (TopRowFilter != null)
            {
                if (TopRowFilter.OneLine())
                {
                    sb.AppendFormat("{0} ", TopRowFilter.ToString(""));
                }
                else
                {
                    sb.Append("\r\n");
                    sb.AppendFormat("{0} ", TopRowFilter.ToString(indent));
                }
            }

            switch (UniqueRowFilter)
            {
            case UniqueRowFilter.All:
                sb.Append("ALL ");
                break;

            case UniqueRowFilter.Distinct:
                sb.Append("DISTINCT ");
                break;
            }

            for (var i = 0; i < SelectElements.Count; i++)
            {
                if (i > 0)
                {
                    sb.Append(", ");
                }

                if (SelectElements[i].OneLine())
                {
                    sb.Append(SelectElements[i].ToString(""));
                }
                else
                {
                    sb.Append("\r\n");
                    sb.Append(SelectElements[i].ToString(indent + " "));
                }
            }

            if (Into != null)
            {
                sb.AppendFormat(" INTO {0} ", Into);
            }

            if (FromClause != null)
            {
                sb.Append("\r\n");
                sb.Append(FromClause.ToString(indent));
            }

            if (MatchClause != null)
            {
                sb.Append("\r\n");
                sb.Append(MatchClause.ToString(indent));
            }

            if (WhereClause != null && (WhereClause.SearchCondition != null || !string.IsNullOrEmpty(WhereClause.GhostString)))
            {
                sb.Append("\r\n");
                sb.Append(WhereClause.ToString(indent));
            }

            if (GroupByClause != null)
            {
                sb.Append("\r\n");
                sb.Append(GroupByClause.ToString(indent));
            }

            if (HavingClause != null)
            {
                sb.Append("\r\n");
                sb.Append(HavingClause.ToString(indent));
            }

            if (OrderByClause != null)
            {
                sb.Append("\r\n");
                sb.Append(OrderByClause.ToString(indent));
            }

            return(sb.ToString());
        }
Пример #13
0
 public override void Visit(TopRowFilter node) { this.action(node); }
 public override void ExplicitVisit(TopRowFilter fragment)
 {
     _fragments.Add(fragment);
 }
Пример #15
0
 public override void ExplicitVisit(TopRowFilter node)
 {
     IsSuspected = false;
     base.ExplicitVisit(node);
 }
 public override void ExplicitVisit(TopRowFilter node)
 {
     _hasTopRowFilter = true;
     base.ExplicitVisit(node);
 }