public override CosmosElement Visit(SqlSubqueryScalarExpression scalarExpression, CosmosElement document) { // Only run on the current document since the subquery is always correlated. IEnumerable <CosmosElement> subqueryResults = SqlInterpreter.ExecuteQuery( new CosmosElement[] { document }, scalarExpression.Query); CosmosElement result; int cardinality = subqueryResults.Count(); if (cardinality > 1) { throw new ArgumentException("The cardinality of a subquery can not exceed 1."); } else if (cardinality == 1) { result = subqueryResults.First(); } else { // cardinality = 0 result = Undefined; } return(result); }
public override int Visit(SqlSubqueryScalarExpression sqlSubqueryScalarExpression) { int hashCode = SqlSubqueryScalarExpressionHashCode; hashCode = CombineHashes(hashCode, sqlSubqueryScalarExpression.Query.Accept(this)); return(hashCode); }
public override SqlObject VisitSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context) { Contract.Requires(context != null); // '(' sql_query ')' SqlQuery subquery = (SqlQuery)this.Visit(context.sql_query()); return(SqlSubqueryScalarExpression.Create(subquery)); }
public override bool Visit(SqlSubqueryScalarExpression first, SqlObject secondAsObject) { if (!(secondAsObject is SqlSubqueryScalarExpression second)) { return(false); } if (!Equals(first.Query, second.Query)) { return(false); } return(true); }
public void SqlSubqueryScalarExpressionTest() { SqlLiteralScalarExpression five = SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(5)); SqlLiteralScalarExpression three = SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(3)); // (SELECT VALUE 5 + 3) SqlSubqueryScalarExpression subqueryScalarExpression = SqlSubqueryScalarExpression.Create( SqlQuery.Create( SqlSelectClause.Create( SqlSelectValueSpec.Create( SqlBinaryScalarExpression.Create( SqlBinaryScalarOperatorKind.Add, five, three))), fromClause: null, whereClause: null, groupByClause: null, orderByClause: null, offsetLimitClause: null)); AssertEvaluation(CosmosNumber64.Create(5 + 3), subqueryScalarExpression); }
public abstract void Visit(SqlSubqueryScalarExpression sqlObject);
public override void Visit(SqlSubqueryScalarExpression sqlSubqueryScalarExpression) { this.WriteStartContext("("); sqlSubqueryScalarExpression.Query.Accept(this); this.WriteEndContext(")"); }
public override SqlObject Visit(SqlSubqueryScalarExpression sqlSubqueryScalarExpression) { return(SqlSubqueryScalarExpression.Create(sqlSubqueryScalarExpression.Query.Accept(this) as SqlQuery)); }
public abstract void Visit(SqlSubqueryScalarExpression scalarExpression);
public override bool Visit(SqlSubqueryScalarExpression sqlSubqueryScalarExpression) { // No need to worry about the aggregates within the subquery since they get recursively evaluated. return(false); }
public abstract TResult Visit(SqlSubqueryScalarExpression sqlObject);
public override bool Visit(SqlSubqueryScalarExpression scalarExpression) { return(false); }
public abstract TOutput Visit(SqlSubqueryScalarExpression sqlObject, TArg input);
public abstract TResult Visit(SqlSubqueryScalarExpression scalarExpression);