コード例 #1
0
        public override SqlObject VisitSubqueryCollection([NotNull] sqlParser.SubqueryCollectionContext context)
        {
            Contract.Requires(context != null);

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

            return(SqlSubqueryCollection.Create(subQuery));
        }
コード例 #2
0
        private SqlFromClause CreateSubqueryFromClause(SqlQuery subquery)
        {
            var           collection = new SqlSubqueryCollection(subquery);
            var           inputParam = this.InputParameter();
            SqlIdentifier identifier = new SqlIdentifier(inputParam.Name);
            var           colExp     = new SqlSubqueryCollectionExpression(identifier, collection);
            var           fromClause = new SqlFromClause(colExp);

            return(fromClause);
        }
コード例 #3
0
        private SqlFromClause CreateSubqueryFromClause()
        {
            SqlQuery subquery = this.inputQuery.GetSqlQuery();
            SqlSubqueryCollection          collection = SqlSubqueryCollection.Create(subquery);
            ParameterExpression            inputParam = this.inputQuery.Alias;
            SqlIdentifier                  identifier = SqlIdentifier.Create(inputParam.Name);
            SqlAliasedCollectionExpression colExp     = SqlAliasedCollectionExpression.Create(collection, identifier);
            SqlFromClause                  fromClause = this.CreateFrom(colExp);

            return(fromClause);
        }
コード例 #4
0
        public override bool Visit(SqlSubqueryCollection first, SqlObject secondAsObject)
        {
            if (!(secondAsObject is SqlSubqueryCollection second))
            {
                return(false);
            }

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

            return(true);
        }
コード例 #5
0
            public override CollectionEvaluationResult Visit(SqlSubqueryCollection collection, IEnumerable <CosmosElement> input)
            {
                List <Tuple <CosmosElement, string> > subDocumentsAndRids = new List <Tuple <CosmosElement, string> >();

                foreach (CosmosObject document in input)
                {
                    string rid = ((CosmosString)document["_rid"]).Value;
                    IEnumerable <CosmosElement> subqueryResults = SqlInterpreter.ExecuteQuery(
                        new CosmosElement[] { document },
                        collection.Query);
                    foreach (CosmosElement subqueryResult in subqueryResults)
                    {
                        subDocumentsAndRids.Add(new Tuple <CosmosElement, string>(subqueryResult, rid));
                    }
                }

                return(new CollectionEvaluationResult(subDocumentsAndRids, null));
            }
コード例 #6
0
 public abstract void Visit(SqlSubqueryCollection sqlObject);
コード例 #7
0
 public override void Visit(SqlSubqueryCollection sqlSubqueryCollection)
 {
     this.WriteStartContext("(");
     sqlSubqueryCollection.Query.Accept(this);
     this.WriteEndContext(")");
 }
コード例 #8
0
 public override SqlObject Visit(SqlSubqueryCollection sqlSubqueryCollection)
 {
     return(SqlSubqueryCollection.Create(sqlSubqueryCollection.Query.Accept(this) as SqlQuery));
 }
コード例 #9
0
 public abstract void Visit(SqlSubqueryCollection collection);
コード例 #10
0
 public abstract TResult Visit(SqlSubqueryCollection sqlObject);
コード例 #11
0
        public void AliasedCollectionExpressionTest()
        {
            // FROM c
            SqlAliasedCollectionExpression fromC = SqlAliasedCollectionExpression.Create(
                SqlInputPathCollection.Create(
                    SqlIdentifier.Create("c"),
                    relativePath: null),
                alias: null);

            CosmosObject andersenWrapped = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["c"]    = AndersenFamily,
                ["_rid"] = AndersenFamily["_rid"]
            });

            CosmosObject wakeFieldWrapped = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["c"]    = WakefieldFamily,
                ["_rid"] = WakefieldFamily["_rid"]
            });

            AssertEvaluation(new CosmosElement[] { andersenWrapped, wakeFieldWrapped }, fromC, DataSource);

            // FROM c.id
            SqlAliasedCollectionExpression fromCDotId = SqlAliasedCollectionExpression.Create(
                SqlInputPathCollection.Create(
                    SqlIdentifier.Create("c"),
                    SqlIdentifierPathExpression.Create(
                        null,
                        SqlIdentifier.Create("id"))),
                alias: null);

            CosmosObject andersenId = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["id"]   = CosmosString.Create("AndersenFamily"),
                ["_rid"] = AndersenFamily["_rid"]
            });

            CosmosObject wakefieldId = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["id"]   = CosmosString.Create("WakefieldFamily"),
                ["_rid"] = WakefieldFamily["_rid"]
            });

            AssertEvaluation(new CosmosElement[] { andersenId, wakefieldId }, fromCDotId, DataSource);

            // FROM c.id AS familyId
            SqlAliasedCollectionExpression fromCDotIdAsFamilyId = SqlAliasedCollectionExpression.Create(
                SqlInputPathCollection.Create(
                    SqlIdentifier.Create("c"),
                    SqlIdentifierPathExpression.Create(
                        null,
                        SqlIdentifier.Create("id"))),
                SqlIdentifier.Create("familyId"));

            CosmosObject andersenIdAsFamilyId = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["familyId"] = CosmosString.Create("AndersenFamily"),
                ["_rid"]     = AndersenFamily["_rid"]
            });

            CosmosObject wakefieldIdAsFamilyId = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["familyId"] = CosmosString.Create("WakefieldFamily"),
                ["_rid"]     = WakefieldFamily["_rid"]
            });

            AssertEvaluation(new CosmosElement[] { andersenIdAsFamilyId, wakefieldIdAsFamilyId }, fromCDotIdAsFamilyId, DataSource);

            // FROM (SELECT VALUE child["grade"] FROM child IN c.children) grade
            SqlAliasedCollectionExpression fromSubqueryGrades = SqlAliasedCollectionExpression.Create(
                SqlSubqueryCollection.Create(
                    SqlQuery.Create(
                        SqlSelectClause.Create(
                            SqlSelectValueSpec.Create(
                                TestUtils.CreatePathExpression("child", "grade"))),
                        SqlFromClause.Create(
                            SqlArrayIteratorCollectionExpression.Create(
                                SqlIdentifier.Create("child"),
                                SqlInputPathCollection.Create(
                                    SqlIdentifier.Create("c"),
                                    SqlStringPathExpression.Create(
                                        null,
                                        SqlStringLiteral.Create("children"))))),
                        whereClause: null,
                        groupByClause: null,
                        orderByClause: null,
                        offsetLimitClause: null)),
                SqlIdentifier.Create("grade"));

            CosmosObject henrietteWrapped = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["grade"] = CosmosNumber64.Create(5),
                ["_rid"]  = AndersenFamily["_rid"]
            });

            CosmosObject jesseWrapped = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["grade"] = CosmosNumber64.Create(1),
                ["_rid"]  = WakefieldFamily["_rid"]
            });

            CosmosObject lisaWrapped = CosmosObject.Create(new Dictionary <string, CosmosElement>
            {
                ["grade"] = CosmosNumber64.Create(8),
                ["_rid"]  = WakefieldFamily["_rid"]
            });

            AssertEvaluation(
                new CosmosElement[]
            {
                henrietteWrapped,
                jesseWrapped,
                lisaWrapped
            },
                fromSubqueryGrades,
                DataSource);
        }
コード例 #12
0
 public abstract TOutput Visit(SqlSubqueryCollection sqlObject, TArg input);
コード例 #13
0
 public abstract TResult Visit(SqlSubqueryCollection collection);
 public abstract TOuput Visit(SqlSubqueryCollection collection, TArg input);