/// <summary>
        /// Converts a special expression type to literal
        /// </summary>
        /// <param name="operationType"></param>
        /// <param name="p"></param>
        /// <returns></returns>
        public virtual SqlStatement GetLiteral(SpecialExpressionType operationType, IList<SqlStatement> p)
        {
            switch (operationType) // SETuse
            {
            case SpecialExpressionType.IsNull:
                return GetLiteralIsNull(p[0]);
            case SpecialExpressionType.IsNotNull:
                return GetLiteralIsNotNull(p[0]);
            case SpecialExpressionType.Concat:
                return GetLiteralStringConcat(p[0], p[1]);
            case SpecialExpressionType.Count:
                return GetLiteralCount(p[0]);
            case SpecialExpressionType.Exists:
                return GetLiteralExists(p[0]);
            case SpecialExpressionType.Like:
                return GetLiteralLike(p[0], p[1]);
            case SpecialExpressionType.Min:
                return GetLiteralMin(p[0]);
            case SpecialExpressionType.Max:
                return GetLiteralMax(p[0]);
            case SpecialExpressionType.Sum:
                return GetLiteralSum(p[0]);
            case SpecialExpressionType.Average:
                return GetLiteralAverage(p[0]);
            case SpecialExpressionType.StringLength:
                return GetLiteralStringLength(p[0]);
            case SpecialExpressionType.ToUpper:
                return GetLiteralStringToUpper(p[0]);
            case SpecialExpressionType.ToLower:
                return GetLiteralStringToLower(p[0]);
            case SpecialExpressionType.In:
                return GetLiteralIn(p[0], p[1]);
            case SpecialExpressionType.Substring:
                if (p.Count > 2)
                    return GetLiteralSubString(p[0], p[1], p[2]);
                return GetLiteralSubString(p[0], p[1]);
            case SpecialExpressionType.Trim:
            case SpecialExpressionType.LTrim:
            case SpecialExpressionType.RTrim:
                return GetLiteralTrim(p[0]);
            case SpecialExpressionType.StringInsert:
                return GetLiteralStringInsert(p[0], p[1], p[2]);
            case SpecialExpressionType.Replace:
                return GetLiteralStringReplace(p[0], p[1], p[2]);
            case SpecialExpressionType.Remove:
                if (p.Count > 2)
                    return GetLiteralStringRemove(p[0], p[1], p[2]);
                return GetLiteralStringRemove(p[0], p[1]);
            case SpecialExpressionType.IndexOf:
                if (p.Count == 2)
                    return GetLiteralStringIndexOf(p[0], p[1]);
                else if (p.Count == 3)
                    return GetLiteralStringIndexOf(p[0], p[1], p[2]);
                else if (p.Count == 4)
                    return GetLiteralStringIndexOf(p[0], p[1], p[2], p[3]);
                break;
            case SpecialExpressionType.Year:
            case SpecialExpressionType.Month:
            case SpecialExpressionType.Day:
            case SpecialExpressionType.Hour:
            case SpecialExpressionType.Minute:
            case SpecialExpressionType.Second:
            case SpecialExpressionType.Millisecond:
                return GetLiteralDateTimePart(p[0], operationType);
            case SpecialExpressionType.Date:
                return p[0];
            case SpecialExpressionType.DateDiffInMilliseconds:
                return GetLiteralDateDiff(p[0], p[1]);
            case SpecialExpressionType.Abs:
                return GetLiteralMathAbs(p[0]);
            case SpecialExpressionType.Exp:
                return GetLiteralMathExp(p[0]);
            case SpecialExpressionType.Floor:
                return GetLiteralMathFloor(p[0]);
            case SpecialExpressionType.Ln:
                return GetLiteralMathLn(p[0]);

            case SpecialExpressionType.Log:
                if (p.Count == 1)
                    return GetLiteralMathLog(p[0]);
                else
                    return GetLiteralMathLog(p[0], p[1]);
            case SpecialExpressionType.Pow:
                return GetLiteralMathPow(p[0], p[1]);
            case SpecialExpressionType.Round:
                return GetLiteralMathRound(p[0]);
            case SpecialExpressionType.Sign:
                return GetLiteralMathSign(p[0]);
            case SpecialExpressionType.Sqrt:
                return GetLiteralMathSqrt(p[0]);

            }
            throw new ArgumentException(operationType.ToString());
        }
 /// <summary>
 /// Gets the literal date time part.
 /// </summary>
 /// <param name="dateExpression">The date expression.</param>
 /// <param name="operationType">Type of the operation.</param>
 /// <returns></returns>
 protected virtual SqlStatement GetLiteralDateTimePart(SqlStatement dateExpression, SpecialExpressionType operationType)
 {
     return SqlStatement.Format("EXTRACT({0} FROM {1})", operationType.ToString().ToUpper(), dateExpression);
 }
示例#3
0
 private object EvaluateMathCallInvoke(SpecialExpressionType SpecialNodeType, ReadOnlyCollection <Expression> operands)
 {
     return(typeof(Math).GetMethod(SpecialNodeType.ToString(), operands.Skip(1).Select(op => op.Type).ToArray())
            .Invoke(null, operands.Skip(1).Select(op => op.Evaluate()).ToArray()));
 }
示例#4
0
 private object EvaluateMathCallInvoke(SpecialExpressionType SpecialNodeType, ReadOnlyCollection<Expression> operands)
 {
     return typeof(Math).GetMethod(SpecialNodeType.ToString(), operands.Skip(1).Select(op => op.Type).ToArray())
             .Invoke(null, operands.Skip(1).Select(op => op.Evaluate()).ToArray());
 }
示例#5
0
 protected override SqlStatement GetLiteralDateTimePart(SqlStatement dateExpression, SpecialExpressionType operationType)
 {
     return(SqlStatement.Format("DATEPART({0},{1})", operationType.ToString().ToUpper(), dateExpression));
 }
 protected override SqlStatement GetLiteralDateTimePart(SqlStatement dateExpression, SpecialExpressionType operationType)
 {
     return SqlStatement.Format("DATEPART({0},{1})", operationType.ToString().ToUpper(), dateExpression);
 }
 protected override string GetLiteralDateTimePart(string dateExpression, SpecialExpressionType operationType)
 {
     return string.Format("DATEPART({0},{1})", operationType.ToString().ToUpper(), dateExpression);
 }
 protected virtual string GetLiteralDateTimePart(string dateExpression, SpecialExpressionType operationType)
 {
     return string.Format("EXTRACT({0} FROM {1})", operationType.ToString().ToUpper(), dateExpression);
 }
        /// <summary>
        /// Converts a special expression type to literal
        /// </summary>
        /// <param name="operationType"></param>
        /// <param name="p"></param>
        /// <returns></returns>
        public virtual string GetLiteral(SpecialExpressionType operationType, IList<string> p)
        {
            switch (operationType) // SETuse
            {
                case SpecialExpressionType.IsNull:
                    return GetLiteralIsNull(p[0]);
                case SpecialExpressionType.IsNotNull:
                    return GetLiteralIsNotNull(p[0]);
                case SpecialExpressionType.Concat:
                    return GetLiteralStringConcat(p[0], p[1]);
                case SpecialExpressionType.Count:
                    return GetLiteralCount(p[0]);
                case SpecialExpressionType.Like:
                    return GetLiteralLike(p[0], p[1]);
                case SpecialExpressionType.Min:
                    return GetLiteralMin(p[0]);
                case SpecialExpressionType.Max:
                    return GetLiteralMax(p[0]);
                case SpecialExpressionType.Sum:
                    return GetLiteralSum(p[0]);
                case SpecialExpressionType.Average:
                    return GetLiteralAverage(p[0]);
                case SpecialExpressionType.StringLength:
                    return GetLiteralStringLength(p[0]);
                case SpecialExpressionType.ToUpper:
                    return GetLiteralStringToUpper(p[0]);
                case SpecialExpressionType.ToLower:
                    return GetLiteralStringToLower(p[0]);
                case SpecialExpressionType.In:
                    return GetLiteralIn(p[0], p[1]);
                case SpecialExpressionType.Substring:
                    if (p.Count > 2)
                        return GetLiteralSubString(p[0], p[1], p[2]);
                    return GetLiteralSubString(p[0], p[1]);
                case SpecialExpressionType.Trim:
                    return GetLiteralTrim(p[0]);
                case SpecialExpressionType.StringInsert:
                    return GetLiteralStringInsert(p[0], p[1], p[2]);
                case SpecialExpressionType.Replace:
                    return GetLiteralStringReplace(p[0], p[1], p[2]);
                case SpecialExpressionType.Remove:
                    if (p.Count > 2)
                        return GetLiteralStringRemove(p[0], p[1], p[2]);
                    return GetLiteralStringRemove(p[0], p[1]);
                case SpecialExpressionType.IndexOf:
                    if (p.Count == 2)
                        return GetLiteralStringIndexOf(p[0], p[1]);
                    else if (p.Count == 3)
                        return GetLiteralStringIndexOf(p[0], p[1], p[2]);
                    else if (p.Count == 4)
                        return GetLiteralStringIndexOf(p[0], p[1], p[2], p[3]);
                    break;
                case SpecialExpressionType.Year:
                case SpecialExpressionType.Month:
                case SpecialExpressionType.Day:
                case SpecialExpressionType.Hour:
                case SpecialExpressionType.Minute:
                case SpecialExpressionType.Second:
                case SpecialExpressionType.Millisecond:
                    return GetLiteralDateTimePart(p[0], operationType);
                case SpecialExpressionType.DateDiff:
                    return GetLiteralDateDiff(p[0], p[1]);

            }
            throw new ArgumentException(operationType.ToString());
        }