public virtual void VisitAdditionalFromClause (AdditionalFromClause fromClause, QueryModel queryModel, int index) { ArgumentUtility.CheckNotNull ("fromClause", fromClause); ArgumentUtility.CheckNotNull ("queryModel", queryModel); // nothing to do here }
/// <summary> /// Clones this clause, registering its clone with the <paramref name="cloneContext"/>. /// </summary> /// <param name="cloneContext">The clones of all query source clauses are registered with this <see cref="CloneContext"/>.</param> /// <returns>A clone of this clause.</returns> public virtual AdditionalFromClause Clone (CloneContext cloneContext) { ArgumentUtility.CheckNotNull ("cloneContext", cloneContext); var clone = new AdditionalFromClause (ItemName, ItemType, FromExpression); cloneContext.QuerySourceMapping.AddMapping (this, new QuerySourceReferenceExpression (clone)); return clone; }
public override void VisitAdditionalFromClause (AdditionalFromClause fromClause, QueryModel queryModel, int index) { ArgumentUtility.CheckNotNull ("fromClause", fromClause); ArgumentUtility.CheckNotNull ("queryModel", queryModel); var subQueryExpression = fromClause.FromExpression as SubQueryExpression; if (subQueryExpression != null) FlattenSubQuery (subQueryExpression, fromClause, queryModel, index + 1); base.VisitAdditionalFromClause (fromClause, queryModel, index); }
/// <summary> /// Modifies the given query model for fetching, adding an <see cref="AdditionalFromClause"/> and changing the <see cref="SelectClause.Selector"/> to /// retrieve the result of the <see cref="AdditionalFromClause"/>. /// For example, a fetch request such as <c>FetchMany (x => x.Orders)</c> will be transformed into a <see cref="AdditionalFromClause"/> selecting /// <c>y.Orders</c> (where <c>y</c> is what the query model originally selected) and a <see cref="SelectClause"/> selecting the result of the /// <see cref="AdditionalFromClause"/>. /// This method is called by <see cref="FetchRequestBase.CreateFetchQueryModel"/> in the process of creating the new fetch query model. /// </summary> protected override void ModifyFetchQueryModel (QueryModel fetchQueryModel) { ArgumentUtility.CheckNotNull ("fetchQueryModel", fetchQueryModel); var fromExpression = GetFetchedMemberExpression (new QuerySourceReferenceExpression (fetchQueryModel.MainFromClause)); var memberFromClause = new AdditionalFromClause (fetchQueryModel.GetNewName ("#fetch"), _relatedObjectType, fromExpression); fetchQueryModel.BodyClauses.Add (memberFromClause); var newSelector = new QuerySourceReferenceExpression (memberFromClause); var newSelectClause = new SelectClause (newSelector); fetchQueryModel.SelectClause = newSelectClause; }
public override void VisitAdditionalFromClause(AdditionalFromClause fromClause, QueryModel queryModel, int index) { var subQuery = fromClause.FromExpression as SubQueryExpression; if (subQuery != null) { this.DontReturn = true; GetAqlExpression(subQuery, queryModel, handleJoin: true); } else if(fromClause.FromExpression.Type.Name == "AqlQueryable`1") { string fromName = LinqUtility.ResolveCollectionName(this.Db, fromClause.ItemType); QueryText.AppendFormat(" for {0} in {1} ", LinqUtility.ResolvePropertyName(fromClause.ItemName), fromName); } else { QueryText.AppendFormat(" for {0} in ", LinqUtility.ResolvePropertyName(fromClause.ItemName)); GetAqlExpression(fromClause.FromExpression, queryModel); } }
protected override QueryModel ApplyNodeSpecificSemantics (QueryModel queryModel, ClauseGenerationContext clauseGenerationContext) { ArgumentUtility.CheckNotNull ("queryModel", queryModel); var resolvedCollectionSelector = GetResolvedCollectionSelector (clauseGenerationContext); var clause = new AdditionalFromClause (ResultSelector.Parameters[1].Name, ResultSelector.Parameters[1].Type, resolvedCollectionSelector); queryModel.BodyClauses.Add (clause); clauseGenerationContext.AddContextInfo (this, clause); var selectClause = queryModel.SelectClause; selectClause.Selector = GetResolvedResultSelector (clauseGenerationContext); return queryModel; }