public override void Visit(SqlArrayScalarExpression sqlArrayScalarExpression)
 {
     this.writer.Write("ARRAY");
     this.WriteStartContext("(");
     sqlArrayScalarExpression.SqlQuery.Accept(this);
     this.WriteEndContext(")");
 }
        public override int Visit(SqlArrayScalarExpression sqlArrayScalarExpression)
        {
            int hashCode = SqlArrayScalarExpressionHashCode;

            hashCode = CombineHashes(hashCode, sqlArrayScalarExpression.SqlQuery.Accept(this));
            return(hashCode);
        }
        public override SqlObject VisitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context)
        {
            Contract.Requires(context != null);

            SqlQuery sqlQuery = (SqlQuery)this.Visit(context.sql_query());

            return(SqlArrayScalarExpression.Create(sqlQuery));
        }
        public override bool Visit(SqlArrayScalarExpression first, SqlObject secondAsObject)
        {
            if (!(secondAsObject is SqlArrayScalarExpression second))
            {
                return(false);
            }

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

            return(true);
        }
        public void SqlArrayScalarExpressionTest()
        {
            CosmosObject tag = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["name"] = CosmosString.Create("asdf")
            });

            CosmosObject tags = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["tags"] = CosmosArray.Create(new List <CosmosElement>()
                {
                    tag
                }),
                ["_rid"] = CosmosString.Create("AYIMAMmFOw8YAAAAAAAAAA==")
            });

            CosmosObject tagsWrapped = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["c"]    = tags,
                ["_rid"] = CosmosString.Create("AYIMAMmFOw8YAAAAAAAAAA==")
            });

            // ARRAY(SELECT VALUE t.name FROM t in c.tags)
            SqlArrayScalarExpression arrayScalarExpression = SqlArrayScalarExpression.Create(
                SqlQuery.Create(
                    SqlSelectClause.Create(
                        SqlSelectValueSpec.Create(
                            TestUtils.CreatePathExpression("t", "name"))),
                    SqlFromClause.Create(
                        SqlArrayIteratorCollectionExpression.Create(
                            SqlIdentifier.Create("t"),
                            SqlInputPathCollection.Create(
                                SqlIdentifier.Create("c"),
                                SqlStringPathExpression.Create(
                                    null,
                                    SqlStringLiteral.Create("tags"))))),
                    whereClause: null,
                    groupByClause: null,
                    orderByClause: null,
                    offsetLimitClause: null));

            CosmosArray tagNames = CosmosArray.Create(new List <CosmosElement>()
            {
                CosmosString.Create("asdf")
            });

            AssertEvaluation(tagNames, arrayScalarExpression, tagsWrapped);
        }
示例#6
0
        public override CosmosElement Visit(
            SqlArrayScalarExpression scalarExpression,
            CosmosElement document)
        {
            // Only run on the current document since the subquery is always correlated.
            IEnumerable <CosmosElement> subqueryResults = SqlInterpreter.ExecuteQuery(
                new CosmosElement[] { document },
                scalarExpression.SqlQuery);
            List <CosmosElement> arrayScalarResult = new List <CosmosElement>();

            foreach (CosmosElement subQueryResult in subqueryResults)
            {
                arrayScalarResult.Add(subQueryResult);
            }

            return(CosmosArray.Create(subqueryResults));
        }
示例#7
0
 public abstract void Visit(SqlArrayScalarExpression sqlObject);
 public override SqlObject Visit(SqlArrayScalarExpression sqlArrayScalarExpression)
 {
     return(SqlArrayScalarExpression.Create(sqlArrayScalarExpression.SqlQuery.Accept(this) as SqlQuery));
 }
 public abstract void Visit(SqlArrayScalarExpression scalarExpression);
示例#10
0
 public override bool Visit(SqlArrayScalarExpression sqlArrayScalarExpression)
 {
     // No need to worry about aggregates in the subquery (they will recursively get rewritten).
     return(false);
 }
示例#11
0
 public abstract TResult Visit(SqlArrayScalarExpression sqlObject);
示例#12
0
 public override bool Visit(SqlArrayScalarExpression scalarExpression)
 {
     // We don't allow subqueries in group by projections.
     return(false);
 }
示例#13
0
 public abstract TOutput Visit(SqlArrayScalarExpression sqlObject, TArg input);
示例#14
0
 public abstract TResult Visit(SqlArrayScalarExpression scalarExpression);