private KeyValuePair <string, object> Fetch(AggregateOperand source)
        {
            var basePropertyOperand = source.CollectionProperty;
            var subPropertyOperator = source.Condition;


            var binaryOperator = subPropertyOperator as BinaryOperator;

            if (binaryOperator != null)
            {
                var subPropertyFetchingResult = Fetch(binaryOperator);

                var basePropertyName = basePropertyOperand.PropertyName;
                var subPropertyName  = subPropertyFetchingResult.Key;


                var propertyName  = basePropertyName + "." + subPropertyName;
                var propertyValue = subPropertyFetchingResult.Value;

                return(new KeyValuePair <string, object>(propertyName, propertyValue));
            }


            return(new KeyValuePair <string, object>());
        }
예제 #2
0
 public object Visit(AggregateOperand theOperand)
 {
     if(theOperand.AggregateType == Aggregate.Exists){
         return BooleanCriteriaStateObject.Logical;
     }
     return BooleanCriteriaStateObject.Value;
 }
        private bool ProcessSingleAggregate(MemberExpression node)
        {
            AggregateOperand singleAggregate = ExtractSingleAggregate(node);

            singleAggregate.AggregatedExpression = new OperandProperty(node.Member.Name);
            Result = singleAggregate;
            return(true);
        }
        protected virtual CriteriaOperator VisitAggregate(AggregateOperand theOperand)
        {
            CriteriaOperator aggregatedExpression = this.AcceptOperator(theOperand.AggregatedExpression);
            CriteriaOperator condition            = this.AcceptOperator(theOperand.Condition);

            if (object.ReferenceEquals(theOperand.AggregatedExpression, aggregatedExpression) &&
                object.ReferenceEquals(theOperand.Condition, condition))
            {
                return(theOperand);
            }
            return(new AggregateOperand(theOperand.CollectionProperty, aggregatedExpression, theOperand.AggregateType, condition));
        }
        private AggregateOperand ExtractSingleAggregate(MemberExpression node)
        {
            AggregateOperand singleAggregate = ExtractOperand(node.Expression) as AggregateOperand;

            if (IsNull(singleAggregate) || singleAggregate.AggregateType != Aggregate.Single)
            {
                string msg = string.Format(CultureInfo.CurrentCulture, Resources.ExpressionNotSupportedException, node);
                throw new NotSupportedException(msg);
            }

            return(singleAggregate);
        }
    public virtual CriteriaOperator Visit(AggregateOperand theOperand)
    {
        OperandProperty  operand    = theOperand.CollectionProperty.Accept(this) as OperandProperty;
        CriteriaOperator condition  = theOperand.Condition.Accept(this) as CriteriaOperator;
        CriteriaOperator expression = theOperand.AggregatedExpression.Accept(this) as CriteriaOperator;

        if (object.ReferenceEquals(condition, null) || object.ReferenceEquals(expression, null) || object.ReferenceEquals(operand, null))
        {
            return(null);
        }
        return(new AggregateOperand(operand, expression, theOperand.AggregateType, condition));
    }
예제 #7
0
 object IClientCriteriaVisitor <object> .Visit(AggregateOperand operand)
 {
     Process(operand);
     AggregateLevel++;
     if (!ReferenceEquals(operand.AggregatedExpression, null))
     {
         operand.AggregatedExpression.Accept(this);
     }
     if (!ReferenceEquals(operand.CollectionProperty, null))
     {
         operand.CollectionProperty.Accept(this);
     }
     AggregateLevel--;
     return(null);
 }
예제 #8
0
        public override CriteriaOperator Visit(AggregateOperand theOperand)
        {
            CriteriaOperator collectionProperty = Visit(theOperand.CollectionProperty);

            if (IsNull(collectionProperty))
            {
                return(null);
            }
            CriteriaOperator patched = base.Visit(theOperand);

            if (object.ReferenceEquals(theOperand, patched))
            {
                return(theOperand);
            }
            return(null);
        }
예제 #9
0
        /*
         * AND
         *      Human Case ID = 'AAA'
         *      Human Case ID = 'BBB'
         *      Exists Human Case Test
         *          AND
         *              Human case Test Type = 6618590000000 ('Anaplasma test')
         */

        private void CreateFilterCondition1(QueryFilterControl filter, out GroupOperator rootGroup, out GroupOperator aggrGroup)
        {
            CriteriaOperator criteria;

            rootGroup = QueryFilterControl.AddGroupOperator(null, null, null, out criteria);
            QueryFilterControl.AddFieldOperator(rootGroup, CaseIDAlias, StrValue1, SearchOperator.Binary, BinaryOperatorType.Equal, false);
            QueryFilterControl.AddFieldOperator(rootGroup, CaseIDAlias, StrValue2, SearchOperator.Binary, BinaryOperatorType.Equal, false);
            AggregateOperand aggrOp = QueryFilterControl.AddAggregateOperand(rootGroup, "<Human Case Test>", false);
            CriteriaOperator aggrCriteria;

            aggrGroup = QueryFilterControl.AddGroupOperator(null, null, null, out aggrCriteria);
            QueryFilterControl.AddFieldOperator(aggrGroup, TestNameAlias, TestNameIdValue, SearchOperator.Binary, BinaryOperatorType.Equal,
                                                false);
            aggrOp.Condition      = aggrCriteria;
            filter.FilterCriteria = criteria;
            filter.HasChanges     = true;
        }
        private AggregateOperand BuildAggregation(Expression collectionProperty, Expression aggregationExpression,
                                                  Expression condition, Aggregate aggregationType)
        {
            CriteriaOperator @operator  = ExtractOperand(collectionProperty);
            OperandProperty  collection = @operator as OperandProperty;

            if (!IsNull(collection))
            {
                return(new AggregateOperand(collection, ExtractOperand(aggregationExpression), aggregationType, ExtractOperand(condition)));
            }
            AggregateOperand aggregation = @operator as AggregateOperand;

            if (!IsNull(aggregation))
            {
                aggregation.AggregatedExpression = ExtractOperand(aggregationExpression);
                aggregation.AggregateType        = aggregationType;
                return(aggregation);
            }
            string msg = string.Format(CultureInfo.CurrentCulture, Resources.CollectionPropertyAbsentException, collectionProperty);

            throw new NotSupportedException(msg);
        }
        public void GetSummaryValues(GridViewCustomBindingGetSummaryValuesArgs e)
        {
            XPView data = new XPView(Session, ClassInfo);

            data.Criteria = CriteriaOperator.Parse(e.FilterExpression) & GetGroupFilter(e.GroupInfoList);
            foreach (GridViewSummaryItemState summaryItem in e.SummaryItems)
            {
                Aggregate        aggregateType        = GetAggregateType(summaryItem.SummaryType);
                CriteriaOperator aggregatedExpression = new OperandProperty(summaryItem.FieldName);
                CriteriaOperator property             = new AggregateOperand(null, aggregatedExpression, aggregateType, null);
                string           name = string.Concat(summaryItem.FieldName, summaryItem.SummaryType);
                data.AddProperty(name, property);
            }
            ArrayList  result = new ArrayList();
            ViewRecord rec    = data[0];

            for (int i = 0; i < data.Properties.Count; i++)
            {
                result.Add(rec[i]);
            }
            e.Data = result;
        }
예제 #12
0
        private static IObservable <Unit> PositionNewObjects(this IObservable <XafApplication> whenApplication)
        => whenApplication.SelectMany(application => application.WhenObjectSpaceCreated().SelectMany(t => t.e.ObjectSpace.WhenNewObjectCommiting <object>().Pair(t.e.ObjectSpace))
                                      .Do(t => {
            var modelPositionInListView = application.Model.ModelPositionInListView();
            var listViewItems           = modelPositionInListView.ListViewItems;
            if (listViewItems.Any())
            {
                var objectType   = t.source.GetType();
                var listViewItem = listViewItems.FirstOrDefault(item => item.ListView.ModelClass.TypeInfo.Type == objectType);
                if (listViewItem != null)
                {
                    var modelClassItem = modelPositionInListView.ModelClassItems
                                         .FirstOrDefault(item => item.ModelClass.TypeInfo.Type == objectType && item.ModelMember == listViewItem.PositionMember);
                    var aggregate = Aggregate.Max;
                    if (modelClassItem != null && modelClassItem.NewObjectsStrategy == PositionInListViewNewObjectsStrategy.First)
                    {
                        aggregate = Aggregate.Min;
                    }
                    var memberInfo       = listViewItem.PositionMember.MemberInfo;
                    var aggregateOperand = new AggregateOperand("", memberInfo.Name, aggregate);
                    var value            = (int)(t.other.Evaluate(objectType, aggregateOperand, null) ?? 0);
                    var allValues        = t.other.ModifiedObjects.Cast <object>().Select(o => memberInfo.GetValue(o) ?? 0).Cast <int>().Add(value);
                    if (aggregate == Aggregate.Max)
                    {
                        value = allValues.Max();
                        value++;
                    }
                    else
                    {
                        value = allValues.Min();
                        value--;
                    }
                    memberInfo.SetValue(t.source, value);
                }
            }
        }))

        .TracePositionInListView(_ => $"{_.source}")
        .ToUnit();
        /// <summary>
        /// The UpdateSummation.
        /// </summary>
        /// <returns>The <see cref="MemberRubrics"/>.</returns>
        public MemberRubrics UpdateSummation()
        {
            AggregateOperand parsed = new AggregateOperand();

            summaryRubrics = new MemberRubrics();
            Figure summaryFigure = new Figure(figures.Rubrics.AsValues().Where(c =>
                                                                               (c.RubricName.Split('=').Length > 1 ||
                                                                                (c.SummaryOperand != AggregateOperand.None))).Select(c =>
                                                                                                                                     (new MemberRubric(c)
            {
                SummaryRubric = (c.SummaryRubric != null) ? c.SummaryRubric :
                                (c.RubricName.Split('=').Length > 1) ?
                                new MemberRubric(c)
                {
                    RubricName = c.RubricName.Split('=')[1]
                } : null,
                SummaryOperand = (Enum.TryParse(c.RubricName.Split('=')[0], true, out parsed)) ? parsed : c.SummaryOperand
            })).ToArray(), "Summary_" + figures.GetType().Name);

            figures.Summary = summaryFigure.Combine();
            summaryRubrics  = (MemberRubrics)summaryFigure.Rubrics;
            return(summaryRubrics);
        }
예제 #14
0
 public virtual object Visit(AggregateOperand theOperand)
 {
     if(theOperand.IsTopLevel)
         throw new InvalidOperationException("can't evaluate top level aggregate on single objct, collection property expected");
     Validate(theOperand.CollectionProperty);
     return null;
 }
예제 #15
0
 public object Visit(AggregateOperand theOperand)
 {
     return(theOperand);
 }
        private string ProcessAggregateOperand(AggregateOperand aggregateOperand, string alias)
        {
            var aggregateOperandAlias = ProcessOperandProperty(aggregateOperand.CollectionProperty, alias);

            return InterpritateFilter(aggregateOperand.Condition, aggregateOperandAlias);
        }
예제 #17
0
 public object Visit(AggregateOperand theOperand)
 {
     return evaluatorCore.Visit(theOperand);
 }
 CriteriaOperator IClientCriteriaVisitor <CriteriaOperator> .Visit(AggregateOperand theOperand)
 {
     return(this.VisitAggregate(theOperand));
 }
예제 #19
0
 protected virtual void Process(AggregateOperand operand)
 {
 }
        private void btnFiterStandard_Click(object sender, System.EventArgs e)
        {
            CriteriaOperator criteria = new AggregateOperand("Orders", Aggregate.Count) > 0;

            SetFilter(criteria);
        }
        private string ProcessAggregateOperand(AggregateOperand aggregateOperand, string alias)
        {
            var aggregateOperandAlias = ProcessOperandProperty(aggregateOperand.CollectionProperty, alias);

            return(InterpritateFilter(aggregateOperand.Condition, aggregateOperandAlias));
        }
예제 #22
0
  Object yyparse (yyInput yyLex) {
	if (yyMax <= 0) yyMax = 256;			
	int yyState = 0;								   
	int [] yyStates = new int[yyMax];					
	Object yyVal = null;							   
	Object [] yyVals = new Object[yyMax];			
	int yyToken = -1;					
	int yyErrorFlag = 0;				
	int yyTop = 0;
	goto skip;
	yyLoop:
	yyTop++;
	skip:
	for(;; ++yyTop) {
	  if(yyTop >= yyStates.Length) {			
		int[] i = new int[yyStates.Length + yyMax];
		yyStates.CopyTo(i, 0);
		yyStates = i;
		Object[] o = new Object[yyVals.Length + yyMax];
		yyVals.CopyTo(o, 0);
		yyVals = o;
	  }
	  yyStates[yyTop] = yyState;
	  yyVals[yyTop] = yyVal;
	  yyDiscarded:	
	  for(;;) {
		int yyN;
		if ((yyN = yyDefRed[yyState]) == 0) {	
		  if(yyToken < 0)
			yyToken = yyLex.advance() ? yyLex.token() : 0;
		  if((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0)
			  && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) {
			yyState = yyTable[yyN];		
			yyVal = yyLex.value();
			yyToken = -1;
			if (yyErrorFlag > 0) -- yyErrorFlag;
			goto yyLoop;
		  }
		  if((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0
			  && yyN < yyTable.Length && yyCheck[yyN] == yyToken)
			yyN = yyTable[yyN];			
		  else
			switch(yyErrorFlag) {
			case 0:
			  yyerror("syntax error");
			  goto case 1;
			case 1: case 2:
			  yyErrorFlag = 3;
			  do {
				if((yyN = yySindex[yyStates[yyTop]]) != 0
					&& (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length
					&& yyCheck[yyN] == Token.yyErrorCode) {
				  yyState = yyTable[yyN];
				  yyVal = yyLex.value();
				  goto yyLoop;
				}
			  } while (--yyTop >= 0);
			  yyerror("irrecoverable syntax error");
			  goto yyDiscarded;
			case 3:
			  if (yyToken == 0)
				yyerror("irrecoverable syntax error at end-of-file");
			  yyToken = -1;
			  goto yyDiscarded;		
			}
		}
		int yyV = yyTop + 1 - yyLen[yyN];
		yyVal = yyV > yyTop ? null : yyVals[yyV];
		switch(yyN) {
case 1:
#line 54 "grammar.y"
  { result = new CriteriaOperator[0]; }
  break;
case 2:
#line 55 "grammar.y"
  { result = ((List<CriteriaOperator>)yyVals[-1+yyTop]).ToArray(); }
  break;
case 3:
#line 59 "grammar.y"
  { yyVal = new List<CriteriaOperator>(new CriteriaOperator[] {(CriteriaOperator)yyVals[0+yyTop]}); }
  break;
case 4:
#line 60 "grammar.y"
  { yyVal = yyVals[-2+yyTop]; ((List<CriteriaOperator>)yyVal).Add((CriteriaOperator)yyVals[0+yyTop]); }
  break;
case 5:
#line 64 "grammar.y"
  { yyVal = yyVals[0+yyTop]; }
  break;
case 6:
#line 65 "grammar.y"
  {
		OperandProperty prop2 = (OperandProperty)yyVals[-2+yyTop];
		OperandProperty prop4 = (OperandProperty)yyVals[0+yyTop];
		prop2.PropertyName = '<' + prop2.PropertyName + '>' + prop4.PropertyName;
		yyVal = prop2;
	}
  break;
case 7:
#line 74 "grammar.y"
  { yyVal = yyVals[0+yyTop]; }
  break;
case 8:
#line 75 "grammar.y"
  { yyVal = new OperandProperty("^"); }
  break;
case 9:
#line 79 "grammar.y"
  { yyVal = yyVals[0+yyTop]; }
  break;
case 10:
#line 80 "grammar.y"
  {
		OperandProperty prop1 = (OperandProperty)yyVals[-2+yyTop];
		OperandProperty prop3 = (OperandProperty)yyVals[0+yyTop];
		prop1.PropertyName += '.' + prop3.PropertyName;
		yyVal = prop1;
	}
  break;
case 11:
#line 89 "grammar.y"
  {
		AggregateOperand agg = (AggregateOperand)yyVals[0+yyTop];
		yyVal = JoinOperand.JoinOrAggreagate((OperandProperty)yyVals[-2+yyTop], null, agg.AggregateType, agg.AggregatedExpression);
	}
  break;
case 12:
#line 93 "grammar.y"
  {
		AggregateOperand agg = (AggregateOperand)yyVals[0+yyTop];
		yyVal = JoinOperand.JoinOrAggreagate((OperandProperty)yyVals[-5+yyTop], (CriteriaOperator)yyVals[-3+yyTop], agg.AggregateType, agg.AggregatedExpression);
	}
  break;
case 13:
#line 97 "grammar.y"
  {
		AggregateOperand agg = (AggregateOperand)yyVals[0+yyTop];
		yyVal = JoinOperand.JoinOrAggreagate((OperandProperty)yyVals[-4+yyTop], null, agg.AggregateType, agg.AggregatedExpression);
	}
  break;
case 14:
#line 101 "grammar.y"
  { yyVal = JoinOperand.JoinOrAggreagate((OperandProperty)yyVals[-3+yyTop], (CriteriaOperator)yyVals[-1+yyTop], Aggregate.Exists, null); }
  break;
case 15:
#line 102 "grammar.y"
  { yyVal = JoinOperand.JoinOrAggreagate((OperandProperty)yyVals[-2+yyTop], null, Aggregate.Exists, null); }
  break;
case 18:
#line 110 "grammar.y"
  { yyVal = new AggregateOperand((OperandProperty)null, (CriteriaOperator)null, Aggregate.Count, null); }
  break;
case 19:
#line 111 "grammar.y"
  { yyVal = new AggregateOperand((OperandProperty)null, (CriteriaOperator)null, Aggregate.Exists, null); }
  break;
case 20:
#line 112 "grammar.y"
  { yyVal = new AggregateOperand((OperandProperty)null, (CriteriaOperator)null, Aggregate.Count, null); }
  break;
case 21:
#line 113 "grammar.y"
  { yyVal = new AggregateOperand((OperandProperty)null, (CriteriaOperator)null, Aggregate.Exists, null); }
  break;
case 22:
#line 114 "grammar.y"
  { yyVal = new AggregateOperand((OperandProperty)null, (CriteriaOperator)yyVals[-1+yyTop], Aggregate.Min, null); }
  break;
case 23:
#line 115 "grammar.y"
  { yyVal = new AggregateOperand((OperandProperty)null, (CriteriaOperator)yyVals[-1+yyTop], Aggregate.Max, null); }
  break;
case 24:
#line 116 "grammar.y"
  { yyVal = new AggregateOperand((OperandProperty)null, (CriteriaOperator)yyVals[-1+yyTop], Aggregate.Avg, null); }
  break;
case 25:
#line 117 "grammar.y"
  { yyVal = new AggregateOperand((OperandProperty)null, (CriteriaOperator)yyVals[-1+yyTop], Aggregate.Sum, null); }
  break;
case 26:
#line 121 "grammar.y"
  { yyVal = yyVals[0+yyTop]; }
  break;
case 27:
#line 122 "grammar.y"
  {
						  string paramName = (string)yyVals[0+yyTop];
						  if(string.IsNullOrEmpty(paramName)) {
							OperandValue param = new OperandValue();
							resultParameters.Add(param);
							yyVal = param;
						  } else {
							bool paramNotFound = true;
							foreach(OperandValue v in resultParameters) {
							  OperandParameter p = v as OperandParameter;
							  if(ReferenceEquals(p, null))
								continue;
							  if(p.ParameterName != paramName)
								continue;
							  paramNotFound = false;
							  resultParameters.Add(p);
							  yyVal = p;
							  break;
							}
							if(paramNotFound) {
							  OperandParameter param = new OperandParameter(paramName);
							  resultParameters.Add(param);
							  yyVal = param;
							}
						  }
						}
  break;
case 28:
#line 148 "grammar.y"
  { yyVal = yyVals[0+yyTop]; }
  break;
case 29:
#line 149 "grammar.y"
  { yyVal = yyVals[0+yyTop]; }
  break;
case 30:
#line 150 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.Multiply ); }
  break;
case 31:
#line 151 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.Divide ); }
  break;
case 32:
#line 152 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.Plus ); }
  break;
case 33:
#line 153 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.Minus ); }
  break;
case 34:
#line 154 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.Modulo ); }
  break;
case 35:
#line 155 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.BitwiseOr ); }
  break;
case 36:
#line 156 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.BitwiseAnd ); }
  break;
case 37:
#line 157 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.BitwiseXor ); }
  break;
case 38:
#line 158 "grammar.y"
  {
								yyVal = new UnaryOperator( UnaryOperatorType.Minus, (CriteriaOperator)yyVals[0+yyTop] );
								try {
									if(yyVals[0+yyTop] is OperandValue) {
										OperandValue operand = (OperandValue)yyVals[0+yyTop];
										if(operand.Value is Int32) {
											operand.Value = -(Int32)operand.Value;
											yyVal = operand;
											break;
										} else if(operand.Value is Int64) {
											operand.Value = -(Int64)operand.Value;
											yyVal = operand;
											break;
										} else if(operand.Value is Double) {
											operand.Value = -(Double)operand.Value;
											yyVal = operand;
											break;
										} else if(operand.Value is Decimal) {
											operand.Value = -(Decimal)operand.Value;
											yyVal = operand;
											break;
										}  else if(operand.Value is Int16) {
											operand.Value = -(Int16)operand.Value;
											yyVal = operand;
											break;
										}  else if(operand.Value is SByte) {
											operand.Value = -(SByte)operand.Value;
											yyVal = operand;
											break;
										}
									}
								} catch {}
							}
  break;
case 39:
#line 191 "grammar.y"
  { yyVal = new UnaryOperator( UnaryOperatorType.Plus, (CriteriaOperator)yyVals[0+yyTop] ); }
  break;
case 40:
#line 192 "grammar.y"
  { yyVal = new UnaryOperator( UnaryOperatorType.BitwiseNot, (CriteriaOperator)yyVals[0+yyTop] ); }
  break;
case 41:
#line 193 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.Equal); }
  break;
case 42:
#line 194 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.NotEqual); }
  break;
case 43:
#line 195 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.Greater); }
  break;
case 44:
#line 196 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.Less); }
  break;
case 45:
#line 197 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.GreaterOrEqual); }
  break;
case 46:
#line 198 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.LessOrEqual); }
  break;
case 47:
#line 199 "grammar.y"
  { yyVal = new BinaryOperator( (CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.Like); }
  break;
case 48:
#line 200 "grammar.y"
  { yyVal = new UnaryOperator(UnaryOperatorType.Not, new BinaryOperator( (CriteriaOperator)yyVals[-3+yyTop], (CriteriaOperator)yyVals[0+yyTop], BinaryOperatorType.Like)); }
  break;
case 49:
#line 201 "grammar.y"
  { yyVal = new UnaryOperator(UnaryOperatorType.Not, (CriteriaOperator)yyVals[0+yyTop]); }
  break;
case 50:
#line 202 "grammar.y"
  { yyVal = GroupOperator.And((CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop]); }
  break;
case 51:
#line 203 "grammar.y"
  { yyVal = GroupOperator.Or((CriteriaOperator)yyVals[-2+yyTop], (CriteriaOperator)yyVals[0+yyTop]); }
  break;
case 52:
#line 204 "grammar.y"
  { yyVal = yyVals[-1+yyTop]; }
  break;
case 53:
#line 205 "grammar.y"
  { yyVal = new UnaryOperator(UnaryOperatorType.IsNull, (CriteriaOperator)yyVals[-2+yyTop]); }
  break;
case 54:
#line 206 "grammar.y"
  { yyVal = new UnaryOperator(UnaryOperatorType.Not, new UnaryOperator(UnaryOperatorType.IsNull, (CriteriaOperator)yyVals[-3+yyTop])); }
  break;
case 55:
#line 207 "grammar.y"
  { yyVal = new InOperator((CriteriaOperator)yyVals[-2+yyTop], (IEnumerable<CriteriaOperator>)yyVals[0+yyTop]); }
  break;
case 56:
#line 208 "grammar.y"
  { yyVal = new BetweenOperator((CriteriaOperator)yyVals[-6+yyTop], (CriteriaOperator)yyVals[-3+yyTop], (CriteriaOperator)yyVals[-1+yyTop]); }
  break;
case 57:
#line 209 "grammar.y"
  { yyVal = new UnaryOperator(UnaryOperatorType.IsNull, (CriteriaOperator)yyVals[-1+yyTop]); }
  break;
case 58:
#line 210 "grammar.y"
  { yyVal = new FunctionOperator(FunctionOperatorType.IsNull, (CriteriaOperator)yyVals[-3+yyTop], (CriteriaOperator)yyVals[-1+yyTop]); }
  break;
case 59:
#line 211 "grammar.y"
  {  FunctionOperator fo = new FunctionOperator((FunctionOperatorType)yyVals[-1+yyTop], (IEnumerable<CriteriaOperator>)yyVals[0+yyTop]); lexer.CheckFunctionArgumentsCount(fo.OperatorType, fo.Operands.Count); yyVal = fo; }
  break;
case 60:
#line 212 "grammar.y"
  { yyVal = null; }
  break;
case 61:
#line 216 "grammar.y"
  { yyVal = yyVals[-1+yyTop]; }
  break;
case 62:
#line 217 "grammar.y"
  { yyVal = new List<CriteriaOperator>(); }
  break;
case 63:
#line 221 "grammar.y"
  {
							List<CriteriaOperator> lst = new List<CriteriaOperator>();
							lst.Add((CriteriaOperator)yyVals[0+yyTop]);
							yyVal = lst;
						}
  break;
case 64:
#line 226 "grammar.y"
  {
							List<CriteriaOperator> lst = (List<CriteriaOperator>)yyVals[-2+yyTop];
							lst.Add((CriteriaOperator)yyVals[0+yyTop]);
							yyVal = lst;
						}
  break;
#line default
		}
		yyTop -= yyLen[yyN];
		yyState = yyStates[yyTop];
		int yyM = yyLhs[yyN];
		if(yyState == 0 && yyM == 0) {
		  yyState = yyFinal;
		  if(yyToken < 0)
			yyToken = yyLex.advance() ? yyLex.token() : 0;
		  if(yyToken == 0)
			return yyVal;
		  goto yyLoop;
		}
		if(((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0)
			&& (yyN < yyTable.Length) && (yyCheck[yyN] == yyState))
		  yyState = yyTable[yyN];
		else
		  yyState = yyDgoto[yyM];
	 goto yyLoop;
	  }
	}
  }
예제 #23
0
 object IClientCriteriaVisitor.Visit(AggregateOperand theOperand)
 {
     throw new NotImplementedException();
 }
예제 #24
0
 object IClientCriteriaVisitor.Visit(AggregateOperand theOperand)
 {
     if(theOperand.IsTopLevel && !this.contexts[0].Descriptor.IsTopLevelCollectionSource)
         throw new InvalidOperationException("can't evaluate top level aggregate on single objct, collection property expected");
     EvaluatorContext[] rememberedContexts = this.contexts;
     try {
         EvaluatorProperty property = theOperand.IsTopLevel ? null : PropertyCache[theOperand.CollectionProperty];
         IEnumerable nestedContextsCollection = CreateNestedContext(property);
         return DoAggregate(theOperand.AggregateType, nestedContextsCollection, theOperand.Condition, theOperand.AggregatedExpression);
     } finally {
         this.contexts = rememberedContexts;
     }
 }
        /// <summary>
        /// The UpdateAggregation.
        /// </summary>
        /// <returns>The <see cref="MemberRubrics"/>.</returns>
        public MemberRubrics UpdateAggregation()
        {
            AggregateOperand parsed      = new AggregateOperand();
            Links            targetLinks = figures.Linker.TargetLinks;

            aggregateRubrics = new MemberRubrics();
            MemberRubric[] _aggregateRubrics = figures.Rubrics.AsValues()
                                               .Where(c => (c.RubricName.Split('#').Length > 1) ||
                                                      (c.AggregateRubric != null &&
                                                       c.AggregateOperand != AggregateOperand.None) ||
                                                      c.AggregateOperand != AggregateOperand.None).ToArray();
            foreach (MemberRubric c in _aggregateRubrics)
            {
                c.AggregateRubric = (c.AggregateRubric != null) ?
                                    c.AggregateRubric :
                                    (c.AggregateOperand != AggregateOperand.None) ?
                                    new MemberRubric(c)
                {
                    RubricName = c.RubricName
                } :
                new MemberRubric(c)
                {
                    RubricName = c.RubricName.Split('#')[1]
                };

                c.AggregateOperand = c.AggregateOperand != AggregateOperand.None ?
                                     c.AggregateOperand :
                                     (Enum.TryParse(c.RubricName.Split('#')[0], true, out parsed)) ?
                                     parsed : AggregateOperand.None;

                c.AggregateLinkId = (targetLinks.AsValues().Where(cr => cr.Target.Figures.Rubrics.AsValues()
                                                                  .Where(ct => ct.RubricName == ((c.AggregateRubric != null) ?
                                                                                                 c.AggregateRubric.RubricName :
                                                                                                 c.RubricName.Split('#')[1])).Any()).Any()) ?
                                    targetLinks.AsValues().Where(cr => cr.Target.Figures.Rubrics.AsValues()
                                                                 .Where(ct => ct.RubricName == ((c.AggregateRubric != null) ?
                                                                                                c.AggregateRubric.RubricName :
                                                                                                c.RubricName.Split('#')[1])).Any()).ToArray()
                                    .Select(ix => targetLinks.IndexOf(ix)).FirstOrDefault()
                                              : -1;

                c.AggregateOrdinal = targetLinks.AsValues().Where(cr => cr.Target.Figures.Rubrics.AsValues()
                                                                  .Where(ct => ct.RubricName == ((c.AggregateRubric != null) ?
                                                                                                 c.AggregateRubric.RubricName :
                                                                                                 c.RubricName.Split('#')[1])).Any())
                                     .Select(cr => cr.Target.Figures.Rubrics.AsValues()
                                             .Where(ct => ct.RubricName == ((c.AggregateRubric != null) ?
                                                                            c.AggregateRubric.RubricName :
                                                                            c.RubricName.Split('#')[1]))
                                             .Select(o => o.RubricId).FirstOrDefault()).FirstOrDefault();
            }

            aggregateRubrics.Put(_aggregateRubrics);
            aggregateRubrics.AsValues().Where(j => j.AggregateLinkId > -1)
            .Select(p => p.AggregateLinks =
                        new Links(targetLinks.AsCards().Where((x, y) =>
                                                              p.AggregateLinkId == x.Index).Select(v => v.Value).ToArray()));

            UpdateReplication();

            return(aggregateRubrics);
        }
예제 #26
0
 public CriteriaOperator Visit(AggregateOperand theOperand)
 {
     return(theOperand);
 }
예제 #27
0
 public override Object Visit(AggregateOperand operand)
 {
     Object result = null;
     if (operand.AggregateType == Aggregate.Count)
     {
         if (Object.ReferenceEquals(operand.CollectionProperty, null))
         {
             result = new CriteriaToStringVisitResult("Count(0)");
         }
         else
         {
             result = new CriteriaToStringVisitResult(String.Format("Count(select value 1 from {0})", Process(operand.CollectionProperty).Result));
         }
     }
     else if (operand.AggregateType == Aggregate.Sum)
     {
         if (Object.ReferenceEquals(operand.CollectionProperty, null))
         {
             result = new CriteriaToStringVisitResult(String.Format("Sum({0})", Process(operand.AggregatedExpression).Result));
         }
         else
         {
             String collectionTableName = operand.CollectionProperty.PropertyName;
             Xpand.ExpressApp.NH.DataLayer.CriteriaToHqlConverter criteriaToEFSqlConverter = new Xpand.ExpressApp.NH.DataLayer.CriteriaToHqlConverter(collectionTableName, GetListElementType(operand.CollectionProperty.PropertyName));
             result = new CriteriaToStringVisitResult(String.Format("Sum(select value {0} from {1} as {2})",
                 criteriaToEFSqlConverter.Convert(operand.AggregatedExpression),
                 Process(operand.CollectionProperty).Result,
                 collectionTableName));
         }
     }
     else if (operand.AggregateType == Aggregate.Exists)
     {
         String collectionTableName = operand.CollectionProperty.PropertyName;
         Xpand.ExpressApp.NH.DataLayer.CriteriaToHqlConverter criteriaToEFSqlConverter = new Xpand.ExpressApp.NH.DataLayer.CriteriaToHqlConverter(collectionTableName, GetListElementType(operand.CollectionProperty.PropertyName));
         result = new CriteriaToStringVisitResult(String.Format("Exists(from {0} as {1} where {2})",
             Process(operand.CollectionProperty).Result,
             collectionTableName,
             criteriaToEFSqlConverter.Convert(operand.Condition)));
     }
     else
     {
         String resultString = ((CriteriaToStringVisitResult)base.Visit(operand)).Result;
         result = new CriteriaToStringVisitResult(resultString.TrimStart('[', ']', '.'));
     }
     return result;
 }
 public object Visit(AggregateOperand theOperand){
     return theOperand;
 }
 CriteriaOperator IClientCriteriaVisitor <CriteriaOperator> .Visit(AggregateOperand theOperand)
 {
     throw new NotImplementedException();
 }
        private KeyValuePair<string, object> Fetch(AggregateOperand source)
        {
            var basePropertyOperand = source.CollectionProperty;
            var subPropertyOperator = source.Condition;


            var binaryOperator = subPropertyOperator as BinaryOperator;

            if (binaryOperator != null)
            {
                var subPropertyFetchingResult = Fetch(binaryOperator);

                var basePropertyName = basePropertyOperand.PropertyName;
                var subPropertyName = subPropertyFetchingResult.Key;


                var propertyName = basePropertyName + "." + subPropertyName;
                var propertyValue = subPropertyFetchingResult.Value;

                return new KeyValuePair<string, object>(propertyName, propertyValue);
            }


            return new KeyValuePair<string, object>();
        }
예제 #31
0
 public override void Visit(AggregateOperand theOperand)
 {
 }
		protected override void Process(AggregateOperand operand) {
			base.Process(operand);
			Type collectionElementType = objectTypeInfo.FindMember(operand.CollectionProperty.PropertyName).ListElementType;
			Xpand.ExpressApp.NH.ObjectMemberValueCriteriaProcessor aggregatedCriteriaProcessor = new ObjectMemberValueCriteriaProcessor(typesInfo, collectionElementType);
			aggregatedCriteriaProcessor.Process(operand.Condition);
		}