public virtual VfpExpression Visit(VfpComparisonExpression expression) { return(new VfpComparisonExpression(expression.ExpressionKind, expression.ResultType, expression.Left.Accept(this), expression.Right.Accept(this))); }
public override VfpExpression Visit(VfpComparisonExpression expression) { // Check the left expression to see if it contains a property expression. // Don't need to rewrite the comparison expression of the left side already contains a property expression. if (PropertyGatherer.Gather(expression.Left).Any()) { return(expression); } // Check the right expression to see if it has a property expression. if (!PropertyGatherer.Gather(expression.Right).Any()) { return(expression); } return(reverseExpression(expression)); }
public override VfpExpression Visit(VfpProjectExpression expression) { VfpProjectExpression innerProjectionExpression; bool hasNotExpression; if (GetInnerProjectionExpression(expression, out innerProjectionExpression, out hasNotExpression)) { var innerNewInstanceExpression = innerProjectionExpression.Projection as VfpNewInstanceExpression; if (innerNewInstanceExpression != null) { var innerConstExpression = innerNewInstanceExpression.Arguments[0] as VfpConstantExpression; if (innerConstExpression != null) { var countExpression = new VfpConstantExpression(innerConstExpression.ResultType, "COUNT(*)"); innerNewInstanceExpression = new VfpNewInstanceExpression(innerNewInstanceExpression.ResultType, new VfpExpressionList(new List <VfpExpression> { countExpression })); innerProjectionExpression = new VfpProjectExpression(innerProjectionExpression.ResultType, innerProjectionExpression.Input, innerNewInstanceExpression); VfpExpression comparison = new VfpComparisonExpression(VfpExpressionKind.LessThan, PrimitiveTypeKind.Boolean.ToTypeUsage(), new VfpConstantExpression( PrimitiveTypeKind.Int32.ToTypeUsage(), 0), innerProjectionExpression); if (!hasNotExpression) { comparison = new VfpNotExpression(comparison.ResultType, comparison); } innerNewInstanceExpression = new VfpNewInstanceExpression(innerNewInstanceExpression.ResultType, new VfpExpressionList(new List <VfpExpression> { comparison })); innerProjectionExpression = new VfpProjectExpression(expression.ResultType, expression.Input, innerNewInstanceExpression); return(innerProjectionExpression); } } } return(base.Visit(expression)); }
private static VfpComparisonExpression reverseExpression(VfpComparisonExpression expression) { switch (expression.ExpressionKind) { case VfpExpressionKind.GreaterThan: return(expression.Right.LessThan(expression.Left)); case VfpExpressionKind.GreaterThanOrEquals: return(expression.Right.LessThanOrEquals(expression.Left)); case VfpExpressionKind.LessThan: return(expression.Right.GreaterThan(expression.Left)); case VfpExpressionKind.LessThanOrEquals: return(expression.Right.GreaterThanOrEquals(expression.Left)); default: return(expression); } }
public override VfpExpression Visit(VfpComparisonExpression expression) { return(Visit((VfpBinaryExpression)expression)); }
private static bool IsZeroEqualsZero(VfpComparisonExpression expression) { return(expression != null && expression.ExpressionKind == VfpExpressionKind.Equals && IsZero(expression.Left as VfpConstantExpression) && IsZero(expression.Right as VfpConstantExpression)); }
public override VfpExpression Visit(VfpComparisonExpression expression) { _expressions.Add(expression); return(base.Visit(expression)); }