public override SqlObject VisitSubqueryCollection([NotNull] sqlParser.SubqueryCollectionContext context) { Contract.Requires(context != null); SqlQuery subQuery = (SqlQuery)this.Visit(context.sql_query()); return(SqlSubqueryCollection.Create(subQuery)); }
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); }
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); }
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); }
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)); }
public abstract void Visit(SqlSubqueryCollection sqlObject);
public override void Visit(SqlSubqueryCollection sqlSubqueryCollection) { this.WriteStartContext("("); sqlSubqueryCollection.Query.Accept(this); this.WriteEndContext(")"); }
public override SqlObject Visit(SqlSubqueryCollection sqlSubqueryCollection) { return(SqlSubqueryCollection.Create(sqlSubqueryCollection.Query.Accept(this) as SqlQuery)); }
public abstract void Visit(SqlSubqueryCollection collection);
public abstract TResult Visit(SqlSubqueryCollection sqlObject);
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); }
public abstract TOutput Visit(SqlSubqueryCollection sqlObject, TArg input);
public abstract TResult Visit(SqlSubqueryCollection collection);
public abstract TOuput Visit(SqlSubqueryCollection collection, TArg input);