예제 #1
0
 protected void WriteValue(VfpConstantExpression c)
 {
     if (c != null)
     {
         WriteValue(c.Value);
     }
 }
        public override VfpExpression Visit(VfpConstantExpression expression)
        {
            switch (expression.ResultType.ToPrimitiveTypeKind())
            {
            case PrimitiveTypeKind.Binary:
            case PrimitiveTypeKind.Decimal:
            case PrimitiveTypeKind.Double:
            case PrimitiveTypeKind.Single:
            case PrimitiveTypeKind.String:
                return(new VfpParameterExpression(expression.ResultType, GetParameterName(), expression));

            default:
                return(base.Visit(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));
        }
예제 #4
0
        public override VfpExpression Visit(VfpConstantExpression expression)
        {
            WriteValue(expression.Value);

            return(expression);
        }
 private static bool IsZero(VfpConstantExpression expression)
 {
     return(expression != null && expression.Value != null && expression.Value.ToString() == "0");
 }
예제 #6
0
        public override VfpExpression Visit(VfpConstantExpression expression)
        {
            _expressions.Add(expression);

            return(base.Visit(expression));
        }
 public virtual VfpExpression Visit(VfpConstantExpression expression)
 {
     return(expression);
 }