Ejemplo n.º 1
0
        private void HandleSelectStatementLimitOffset(SelectStatement selectStatement, KoraliumParser.Select_statementContext context)
        {
            if (context.limit != null || context.offset != null)
            {
                OffsetLimitClause offsetLimitClause = new OffsetLimitClause();
                if (context.limit != null)
                {
                    var limit = Visit(context.limit) as ScalarExpression;

                    if (limit == null)
                    {
                        throw new SqlParserException("Could not parse limit");
                    }
                    offsetLimitClause.Limit = limit;
                }
                if (context.offset != null)
                {
                    var offset = Visit(context.offset) as ScalarExpression;

                    if (offset == null)
                    {
                        throw new SqlParserException("Could not parse offset");
                    }
                    offsetLimitClause.Offset = offset;
                }
                selectStatement.OffsetLimitClause = offsetLimitClause;
            }
        }
Ejemplo n.º 2
0
        public void TestOffsetLimitClauseAccept()
        {
            Mock <KoraliumSqlVisitor> mock = new Mock <KoraliumSqlVisitor>();
            OffsetLimitClause         offsetLimitClause = new OffsetLimitClause();

            offsetLimitClause.Accept(mock.Object);
            mock.Verify(x => x.VisitOffsetLimitClause(offsetLimitClause));
        }
Ejemplo n.º 3
0
 public override void VisitOffsetLimitClause(OffsetLimitClause offsetLimitClause)
 {
     if (offsetLimitClause.Offset != null)
     {
         VisitOffsetExpression(offsetLimitClause.Offset);
     }
     if (offsetLimitClause.Limit != null)
     {
         VisitFetchExpression(offsetLimitClause.Limit);
     }
 }
Ejemplo n.º 4
0
        public void TestOffsetNoLimit()
        {
            var actual = new OffsetLimitClause()
            {
                Offset = new IntegerLiteral()
                {
                    Value = 17
                }
            }.Print();
            var expected = "OFFSET 17";

            actual.Should().Be(expected);
        }
Ejemplo n.º 5
0
        public void TestLimitNoOffset()
        {
            var actual = new OffsetLimitClause()
            {
                Limit = new IntegerLiteral()
                {
                    Value = 17
                }
            }.Print();
            var expected = "LIMIT 17";

            actual.Should().Be(expected);
        }
Ejemplo n.º 6
0
        public static OffsetStage GetOffsetStage(IQueryStage previousStage, OffsetLimitClause offsetClause, VisitorMetadata visitorMetadata)
        {
            OffsetVisitor offsetVisitor = new OffsetVisitor(visitorMetadata);

            offsetClause.Accept(offsetVisitor);

            return(new OffsetStage(
                       previousStage.TypeInfo,
                       previousStage.ParameterExpression,
                       previousStage.CurrentType,
                       previousStage.FromAliases,
                       offsetVisitor.OffsetCount,
                       offsetVisitor.TakeCount
                       ));
        }
Ejemplo n.º 7
0
        public void TestVisitOffsetLimitClause()
        {
            Mock <ScalarExpression> limitMock  = new Mock <ScalarExpression>();
            Mock <ScalarExpression> offsetMock = new Mock <ScalarExpression>();

            OffsetLimitClause offsetLimitClause = new OffsetLimitClause()
            {
                Limit  = limitMock.Object,
                Offset = offsetMock.Object
            };

            KoraliumSqlVisitor koraliumSqlVisitor = new KoraliumSqlVisitor();

            koraliumSqlVisitor.Visit(offsetLimitClause);

            limitMock.Verify(x => x.Accept(koraliumSqlVisitor));
            offsetMock.Verify(x => x.Accept(koraliumSqlVisitor));
        }
Ejemplo n.º 8
0
        public void TestCloneOffsetLimitClause()
        {
            OffsetLimitClause offsetLimitClause = new OffsetLimitClause()
            {
                Limit = new IntegerLiteral()
                {
                    Value = 3
                },
                Offset = new IntegerLiteral()
                {
                    Value = 17
                }
            };

            var clone = offsetLimitClause.Clone() as OffsetLimitClause;

            Assert.AreEqual(offsetLimitClause, clone);
            Assert.IsFalse(ReferenceEquals(offsetLimitClause, clone));
            Assert.IsFalse(ReferenceEquals(offsetLimitClause.Limit, clone.Limit));
            Assert.IsFalse(ReferenceEquals(offsetLimitClause.Offset, clone.Offset));
        }
Ejemplo n.º 9
0
 public virtual void VisitOffsetLimitClause(OffsetLimitClause offsetLimitClause)
 {
     Visit(offsetLimitClause.Limit);
     Visit(offsetLimitClause.Offset);
     //DONE
 }
Ejemplo n.º 10
0
        public void TestOffsetLimitClauseEquals()
        {
            OffsetLimitClause first = new OffsetLimitClause()
            {
                Limit = new IntegerLiteral()
                {
                    Value = 3
                },
                Offset = new IntegerLiteral()
                {
                    Value = 17
                }
            };

            OffsetLimitClause firstClone = new OffsetLimitClause()
            {
                Limit = new IntegerLiteral()
                {
                    Value = 3
                },
                Offset = new IntegerLiteral()
                {
                    Value = 17
                }
            };

            OffsetLimitClause second = new OffsetLimitClause()
            {
                Limit = new IntegerLiteral()
                {
                    Value = 4
                },
                Offset = new IntegerLiteral()
                {
                    Value = 17
                }
            };

            OffsetLimitClause third = new OffsetLimitClause()
            {
                Limit = new IntegerLiteral()
                {
                    Value = 3
                },
                Offset = new IntegerLiteral()
                {
                    Value = 18
                }
            };

            //Equals
            Assert.IsTrue(Equals(first, firstClone));
            Assert.IsFalse(Equals(first, null));
            Assert.IsFalse(Equals(first, second));
            Assert.IsFalse(Equals(first, third));
            Assert.IsFalse(Equals(first, "other type"));

            //Hash code
            Assert.AreEqual(first.GetHashCode(), firstClone.GetHashCode());
            Assert.AreNotEqual(first.GetHashCode(), second.GetHashCode());
            Assert.AreNotEqual(first.GetHashCode(), third.GetHashCode());
        }