public override SqlObject VisitOffset_count([NotNull] sqlParser.Offset_countContext context)
        {
            Contract.Requires(context != null);

            SqlOffsetSpec sqlOffsetSpec;

            if (context.NUMERIC_LITERAL() != null)
            {
                sqlOffsetSpec = SqlOffsetSpec.Create(
                    SqlNumberLiteral.Create(
                        CstToAstVisitor.GetNumber64ValueFromNode(
                            context.NUMERIC_LITERAL())));
            }
            else if (context.PARAMETER() != null)
            {
                sqlOffsetSpec = SqlOffsetSpec.Create(
                    SqlParameter.Create(
                        context.PARAMETER().GetText()));
            }
            else
            {
                throw new NotImplementedException();
            }

            return(sqlOffsetSpec);
        }
Ejemplo n.º 2
0
        public QueryUnderConstruction AddOffsetSpec(SqlOffsetSpec offsetSpec, TranslationContext context)
        {
            QueryUnderConstruction result = context.PackageCurrentQueryIfNeccessary();

            if (result.offsetSpec != null)
            {
                // Skip(A).Skip(B) => Skip(A + B)
                result.offsetSpec = SqlOffsetSpec.Create(result.offsetSpec.Offset + offsetSpec.Offset);
            }
            else
            {
                result.offsetSpec = offsetSpec;
            }

            return(result);
        }
Ejemplo n.º 3
0
        public override SqlObject VisitOffset_limit_clause([NotNull] sqlParser.Offset_limit_clauseContext context)
        {
            Contract.Requires(context != null);

            SqlOffsetSpec sqlOffsetSpec = SqlOffsetSpec.Create(
                SqlNumberLiteral.Create(
                    CstToAstVisitor.GetNumber64ValueFromNode(
                        context.offset_count().NUMERIC_LITERAL())));

            SqlLimitSpec sqlLimitSpec = SqlLimitSpec.Create(
                SqlNumberLiteral.Create(
                    CstToAstVisitor.GetNumber64ValueFromNode(
                        context.limit_count().NUMERIC_LITERAL())));

            return(SqlOffsetLimitClause.Create(sqlOffsetSpec, sqlLimitSpec));
        }
Ejemplo n.º 4
0
        public QueryUnderConstruction AddOffsetSpec(SqlOffsetSpec offsetSpec, TranslationContext context)
        {
            QueryUnderConstruction result = context.PackageCurrentQueryIfNeccessary();

            if (result.offsetSpec != null)
            {
                // Skip(A).Skip(B) => Skip(A + B)
                long offsetA = QueryUnderConstruction.GetOffsetCount(result.offsetSpec);
                long offsetB = QueryUnderConstruction.GetOffsetCount(offsetSpec);
                result.offsetSpec = SqlOffsetSpec.Create(SqlNumberLiteral.Create(offsetA + offsetB));
            }
            else
            {
                result.offsetSpec = offsetSpec;
            }

            return(result);
        }
 public override SqlObject Visit(SqlOffsetSpec sqlObject)
 {
     return(SqlOffsetSpec.Create(SqlNumberLiteral.Create(0)));
 }