Ejemplo n.º 1
0
        private static IEnumerable <CosmosElement> ExecuteOffsetLimitClause(
            IEnumerable <CosmosElement> dataSource,
            SqlOffsetLimitClause sqlOffsetLimitClause)
        {
            SqlOffsetSpec sqlOffsetSpec = sqlOffsetLimitClause.OffsetSpec;

            if (sqlOffsetSpec != null)
            {
                CosmosNumber cosmosOffsetValue = (CosmosNumber)sqlOffsetSpec.OffsetExpression.Accept(
                    ScalarExpressionEvaluator.Singleton,
                    input: null);
                long offsetCount = Number64.ToLong(cosmosOffsetValue.Value);
                dataSource = dataSource.Skip((int)offsetCount);
            }

            SqlLimitSpec sqlLimitSpec = sqlOffsetLimitClause.LimitSpec;

            if (sqlLimitSpec != null)
            {
                CosmosNumber cosmosLimitValue = (CosmosNumber)sqlLimitSpec.LimitExpression.Accept(
                    ScalarExpressionEvaluator.Singleton,
                    input: null);
                long limitCount = Number64.ToLong(cosmosLimitValue.Value);
                dataSource = dataSource.Take((int)limitCount);
            }

            return(dataSource);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Convert the entire query to a SQL Query.
        /// </summary>
        /// <returns>The corresponding SQL Query.</returns>
        public SqlQuery GetSqlQuery()
        {
            SqlFromClause fromClause;

            if (this.inputQuery != null)
            {
#if SUPPORT_SUBQUERIES
                fromClause = this.CreateSubqueryFromClause();
#else
                throw new DocumentQueryException("SQL subqueries currently not supported");
#endif
            }
            else
            {
                fromClause = this.CreateFrom(inputCollectionExpression: null);
            }

            // Create a SqlSelectClause with the topSpec.
            // If the query is flatten then selectClause may have a topSpec. It should be taken in that case.
            // If the query doesn't have a selectClause, use SELECT v0 where v0 is the input param.
            SqlSelectClause selectClause = this.selectClause;
            if (selectClause == null)
            {
                string parameterName = this.fromParameters.GetInputParameter().Name;
                SqlScalarExpression parameterExpression = SqlPropertyRefScalarExpression.Create(null, SqlIdentifier.Create(parameterName));
                selectClause = this.selectClause = SqlSelectClause.Create(SqlSelectValueSpec.Create(parameterExpression));
            }
            selectClause = SqlSelectClause.Create(selectClause.SelectSpec, selectClause.TopSpec ?? this.topSpec, selectClause.HasDistinct);
            SqlOffsetLimitClause offsetLimitClause = (this.offsetSpec != null) ?
                                                     SqlOffsetLimitClause.Create(this.offsetSpec, this.limitSpec ?? SqlLimitSpec.Create(int.MaxValue)) :
                                                     offsetLimitClause = default(SqlOffsetLimitClause);
            SqlQuery result = SqlQuery.Create(selectClause, fromClause, this.whereClause, this.orderByClause, offsetLimitClause);
            return(result);
        }
        public override int Visit(SqlOffsetLimitClause sqlObject)
        {
            int hashCode = SqlOffsetLimitClauseHashCode;

            hashCode = CombineHashes(hashCode, sqlObject.OffsetSpec.Accept(this));
            hashCode = CombineHashes(hashCode, sqlObject.LimitSpec.Accept(this));
            return(hashCode);
        }
        public override SqlObject VisitOffset_limit_clause([NotNull] sqlParser.Offset_limit_clauseContext context)
        {
            Contract.Requires(context != null);
            Contract.Requires(context.offset_count() != null);
            Contract.Requires(context.limit_count() != null);

            SqlOffsetSpec sqlOffsetSpec = (SqlOffsetSpec)this.Visit(context.offset_count());
            SqlLimitSpec  sqlLimitSpec  = (SqlLimitSpec)this.Visit(context.limit_count());

            return(SqlOffsetLimitClause.Create(sqlOffsetSpec, sqlLimitSpec));
        }
Ejemplo n.º 5
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));
        }
        public override bool Visit(SqlOffsetLimitClause first, SqlObject secondAsObject)
        {
            if (!(secondAsObject is SqlOffsetLimitClause second))
            {
                return(false);
            }

            if (!Equals(first.LimitSpec, second.LimitSpec))
            {
                return(false);
            }

            if (!Equals(first.OffsetSpec, second.OffsetSpec))
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 7
0
 public abstract void Visit(SqlOffsetLimitClause sqlObject);
 public override void Visit(SqlOffsetLimitClause sqlObject)
 {
     sqlObject.OffsetSpec.Accept(this);
     this.writer.Write(" ");
     sqlObject.LimitSpec.Accept(this);
 }
 public override SqlObject Visit(SqlOffsetLimitClause sqlObject)
 {
     return(SqlOffsetLimitClause.Create(
                sqlObject.OffsetSpec.Accept(this) as SqlOffsetSpec,
                sqlObject.LimitSpec.Accept(this) as SqlLimitSpec));
 }
Ejemplo n.º 10
0
 public abstract TResult Visit(SqlOffsetLimitClause sqlObject);
Ejemplo n.º 11
0
 public abstract TOutput Visit(SqlOffsetLimitClause sqlObject, TArg input);