Example #1
0
        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);
        }
Example #6
0
 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);
Example #10
0
 public override bool Visit(SqlSubqueryScalarExpression sqlSubqueryScalarExpression)
 {
     // No need to worry about the aggregates within the subquery since they get recursively evaluated.
     return(false);
 }
Example #11
0
 public abstract TResult Visit(SqlSubqueryScalarExpression sqlObject);
Example #12
0
 public override bool Visit(SqlSubqueryScalarExpression scalarExpression)
 {
     return(false);
 }
Example #13
0
 public abstract TOutput Visit(SqlSubqueryScalarExpression sqlObject, TArg input);
Example #14
0
 public abstract TResult Visit(SqlSubqueryScalarExpression scalarExpression);