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); }
/// <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)); }
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); }
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)); }
public abstract TResult Visit(SqlOffsetLimitClause sqlObject);
public abstract TOutput Visit(SqlOffsetLimitClause sqlObject, TArg input);