public void VisitRemoveAndReturnClause(RemoveAndReturnClause removeAndReturnClause, QueryModel queryModel) { if (removeAndReturnClause.KeySelector != null) { QueryText.Append(" remove "); GetAqlExpression(removeAndReturnClause.KeySelector, queryModel); } else { QueryText.AppendFormat(" remove {0} ", LinqUtility.ResolvePropertyName(removeAndReturnClause.ItemName)); } CrudState.ModelVisitorHaveCrudOperation = true; CrudState.Collection = LinqUtility.ResolveCollectionName(Db, removeAndReturnClause.CollectionType); CrudState.ReturnResult = removeAndReturnClause.ReturnResult; CrudState.ReturnResultKind = "OLD"; }
public void VisitInsertAndReturnClause(InsertAndReturnClause insertAndReturnClause, QueryModel queryModel) { if (insertAndReturnClause.WithSelector != null) { QueryText.Append(" insert "); GetAqlExpression(insertAndReturnClause.WithSelector, queryModel); } else { QueryText.AppendFormat(" insert {0} ", LinqUtility.ResolvePropertyName(insertAndReturnClause.ItemName)); } CrudState.ModelVisitorHaveCrudOperation = true; CrudState.Collection = LinqUtility.ResolveCollectionName(Db, insertAndReturnClause.CollectionType); CrudState.ReturnResult = insertAndReturnClause.ReturnResult; CrudState.ReturnResultKind = "NEW"; }
protected override Expression VisitMemberExpression(MemberExpression expression) { var member = expression.Expression as MemberExpression; if ((member != null && member.Expression.Type.Name == "IGrouping`2")) { ModelVisitor.QueryText.AppendFormat(" {0} ", LinqUtility.ResolvePropertyName(expression.Member.Name)); } else if (expression.Expression.Type.Name == "IGrouping`2") { var groupByClause = LinqUtility.PriorGroupBy(ModelVisitor)[0]; var newExpression = groupByClause.Selector as NewExpression; if (newExpression != null) { ModelVisitor.QueryText.Append(" { "); for (int i = 0; i < newExpression.Members.Count; i++) { string memberName = newExpression.Members[i].Name; ModelVisitor.QueryText.AppendFormat(" {0} : {1} ", LinqUtility.ResolvePropertyName(memberName), LinqUtility.ResolvePropertyName(memberName)); if (i != newExpression.Members.Count - 1) { ModelVisitor.QueryText.Append(" , "); } } ModelVisitor.QueryText.Append(" } "); } if (groupByClause.Selector.NodeType != ExpressionType.New) { ModelVisitor.QueryText.AppendFormat(" {0} ", LinqUtility.ResolvePropertyName(groupByClause.CollectVariableName)); } } else { VisitExpression(expression.Expression); ModelVisitor.QueryText.AppendFormat(".{0} ", LinqUtility.ResolveMemberName(ModelVisitor.Db, expression.Member)); } return(expression); }
public override void VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel) { if (fromClause.FromExpression as SubQueryExpression != null) { throw new Exception("MainFromClause.FromExpression cant be SubQueryExpression because group by is handle in itself clause"); } string fromName = LinqUtility.ResolveCollectionName(this.Db, fromClause.ItemType); if (fromClause.FromExpression.Type.Name == "IGrouping`2") { var groupByClause = LinqUtility.PriorGroupBy(ParnetModelVisitor); var parentMVisitor = LinqUtility.FindParentModelVisitor(this); //parentMVisitor.GroupByNameCounter++; fromName = groupByClause[0].TranslateIntoName(); fromName = LinqUtility.ResolvePropertyName(fromName); } if (fromClause.FromExpression.NodeType == ExpressionType.Constant || fromClause.FromExpression.Type.Name == "IGrouping`2") { if (fromClause.FromExpression.Type.Name == "AqlQueryable`1" || fromClause.FromExpression.Type.Name == "IGrouping`2") { 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); } } else { QueryText.AppendFormat(" for {0} in ", LinqUtility.ResolvePropertyName(fromClause.ItemName)); GetAqlExpression(fromClause.FromExpression, queryModel); } base.VisitMainFromClause(fromClause, queryModel); }
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 Expression VisitQuerySourceReferenceExpression(QuerySourceReferenceExpression expression) { ModelVisitor.QueryText.AppendFormat(" {0}", LinqUtility.ResolvePropertyName(expression.ReferencedQuerySource.ItemName)); var mainFromClause = expression.ReferencedQuerySource as MainFromClause; if (mainFromClause != null && mainFromClause.FromExpression.Type.Name == "IGrouping`2") { var groupByClauses = LinqUtility.PriorGroupBy(ModelVisitor); for (int i = 0; i < groupByClauses.Count; i++) { ModelVisitor.QueryText.AppendFormat("{0}{1}{2}" , i == 0 ? "." : "" , LinqUtility.ResolvePropertyName(groupByClauses[i].FromParameterName) , i != groupByClauses.Count - 1 ? "." : ""); } } return(expression); }
public void VisitGroupByClause(GroupByClause groupByClause, QueryModel queryModel, int index) { var parentMVisitor = LinqUtility.FindParentModelVisitor(this); parentMVisitor.GroupByNameCounter++; groupByClause.IntoName = "C" + parentMVisitor.GroupByNameCounter; groupByClause.FuncIntoName = Db.Setting.Linq.TranslateGroupByIntoName; groupByClause.FromParameterName = queryModel.MainFromClause.ItemName; QueryText.Append(" collect "); if (groupByClause.Selector.NodeType != ExpressionType.New) { groupByClause.CollectVariableName = "CV" + parentMVisitor.GroupByNameCounter; QueryText.AppendFormat(" {0} = ", LinqUtility.ResolvePropertyName(groupByClause.CollectVariableName)); } GetAqlExpression(groupByClause.Selector, queryModel, true); QueryText.AppendFormat(" into {0} ", LinqUtility.ResolvePropertyName(groupByClause.TranslateIntoName())); groupByClause.Visited = true; }
protected override Expression VisitParameterExpression(ParameterExpression expression) { ModelVisitor.QueryText.AppendFormat(" {0} ", LinqUtility.ResolvePropertyName(expression.Name)); return(expression); }
public void VisitUpdateAndReturnClause(UpdateAndReturnClause updateAndReturnClause, QueryModel queryModel) { if (updateAndReturnClause.KeySelector != null) { QueryText.AppendFormat(" {0} ", updateAndReturnClause.Command); GetAqlExpression(updateAndReturnClause.KeySelector, queryModel); QueryText.AppendFormat(" with "); } else { QueryText.AppendFormat(" {0} {1} with ", updateAndReturnClause.Command, LinqUtility.ResolvePropertyName(updateAndReturnClause.ItemName)); } GetAqlExpression(updateAndReturnClause.WithSelector, queryModel); CrudState.ModelVisitorHaveCrudOperation = true; CrudState.Collection = LinqUtility.ResolveCollectionName(Db, updateAndReturnClause.CollectionType); CrudState.ReturnResult = updateAndReturnClause.ReturnResult; CrudState.ReturnResultKind = updateAndReturnClause.ReturnNewResult ? "NEW" : "OLD"; }