예제 #1
0
        private void BuildFunctionField(string tableName, string fieldName, string aliasName)
        {
            if (functionType == SqlFunctionType.NONE)
            {
                return;
            }
            string name = this.GetFieldName(tableName, fieldName);

            aliasName = string.IsNullOrEmpty(aliasName) ? fieldName : aliasName;
            aliasName = this.GetFieldName(aliasName);
            string selection = string.Format("{0}({1}) AS {2}", functionType.ToString(), name, aliasName);

            _selections.Add(selection);
        }
예제 #2
0
        /// <inheritdoc/>
        public override string Translate(SqlFunctionType type)
        {
            switch (type)
            {
            case SqlFunctionType.CharLength:
                return("CHAR_LENGTH");

            case SqlFunctionType.BinaryLength:
                return("OCTET_LENGTH");

            case SqlFunctionType.Truncate:
                return("TRUNC");

            case SqlFunctionType.IntervalNegate:
                return("-");

            case SqlFunctionType.Log:
                return("LN");

            case SqlFunctionType.Log10:
                return("LOG10");

            case SqlFunctionType.Ceiling:
                return("CEIL");

            case SqlFunctionType.PadLeft:
                return("LPAD");

            case SqlFunctionType.PadRight:
                return("RPAD");

            case SqlFunctionType.Concat:
                return("||");

            case SqlFunctionType.SystemUser:
            case SqlFunctionType.SessionUser:
                return(base.Translate(SqlFunctionType.CurrentUser));

            case SqlFunctionType.Degrees:
            case SqlFunctionType.Radians:
            case SqlFunctionType.Square:
                throw SqlHelper.NotSupported(type.ToString());

            case SqlFunctionType.IntervalAbs:
                return(Translate(SqlFunctionType.Abs));

            default:
                return(base.Translate(type));
            }
        }
예제 #3
0
        /// <inheritdoc/>
        public override string Translate(SqlFunctionType functionType)
        {
            switch (functionType)
            {
            case SqlFunctionType.Acos:
            case SqlFunctionType.Asin:
            case SqlFunctionType.Atan:
            case SqlFunctionType.Atan2:
            case SqlFunctionType.Sin:
            case SqlFunctionType.SessionUser:
            case SqlFunctionType.Sqrt:
            case SqlFunctionType.Square:
            case SqlFunctionType.Tan:
            case SqlFunctionType.Position:
            case SqlFunctionType.Power:
                throw SqlHelper.NotSupported(functionType.ToString());

            case SqlFunctionType.Concat:
                return("||");

            case SqlFunctionType.IntervalAbs:
                return("ABS");

            case SqlFunctionType.Substring:
                return("SUBSTR");

            case SqlFunctionType.IntervalNegate:
                return("-");

            case SqlFunctionType.CurrentDate:
                return("DATE()");

            case SqlFunctionType.BinaryLength:
                return("LENGTH");

            case SqlFunctionType.LastAutoGeneratedId:
                return("LAST_INSERT_ROWID()");

            case SqlFunctionType.DateTimeAddMonths:
                return("DATE");

            case SqlFunctionType.DateTimeConstruct:
                return("DATETIME");
            }
            return(base.Translate(functionType));
        }
예제 #4
0
        protected override SqlStatement GetLiteralDateTimePart(SqlStatement dateExpression, SqlFunctionType operationType)
        {
            switch (operationType)
            {
            case SqlFunctionType.Week:
                return(SqlStatement.Format("DATEPART(ISOWK,{0})", dateExpression));

            case SqlFunctionType.Date:
                return(SqlStatement.Format("CONVERT(DATE, {0})", dateExpression));

            case SqlFunctionType.Time:
                return(SqlStatement.Format("CONVERT(TIME, {0})", dateExpression));

            default:
                return(SqlStatement.Format("DATEPART({0},{1})", operationType.ToString().ToUpper(), dateExpression));
            }
        }
예제 #5
0
        public virtual SqlStatement GetSqlFunction(SqlFunctionType functionType, bool forceIgnoreCase, IList<SqlStatement> parameters)
        {
            var pLast = parameters.LastOrDefault();
            switch (functionType) //
            {
            case SqlFunctionType.IsNull:
                return GetLiteralIsNull(parameters[0]);
            case SqlFunctionType.IsNotNull:
                return GetLiteralIsNotNull(parameters[0]);
            case SqlFunctionType.EqualNullables:
                return GetEqualNullables(parameters[0], parameters[1]);
            case SqlFunctionType.Concat:
                return GetLiteralStringConcat(parameters[0], parameters[1]);
            case SqlFunctionType.Count:
                return GetLiteralCount(parameters[0]);
            case SqlFunctionType.Exists:
                return GetLiteralExists(parameters[0]);
            case SqlFunctionType.Like:
                return GetLiteralLike(parameters[0], parameters[1], forceIgnoreCase);
            // RI: changed index to 1 (from 0) for Min, Max, Avg, Sum
            case SqlFunctionType.Min:
                return GetLiteralMin(pLast);
            case SqlFunctionType.Max:
                return GetLiteralMax(pLast);
            case SqlFunctionType.Sum:
                return GetLiteralSum(pLast);
            case SqlFunctionType.Average:
                return GetLiteralAverage(pLast);

            case SqlFunctionType.StringLength:
                return GetLiteralStringLength(parameters[0]);
            case SqlFunctionType.ToUpper:
                return GetLiteralStringToUpper(parameters[0]);
            case SqlFunctionType.ToLower:
                return GetLiteralStringToLower(parameters[0]);
            case SqlFunctionType.In:
                return GetLiteralIn(parameters[0], parameters[1]);
            case SqlFunctionType.InArray:
                return GetLiteralInArray(parameters[0], parameters[1]);
            case SqlFunctionType.StringEqual:
                return GetLiteralStringEqual(parameters[0], parameters[1], forceIgnoreCase);
            case SqlFunctionType.Substring:
                if (parameters.Count > 2)
                    return GetLiteralSubString(parameters[0], parameters[1], parameters[2]);
                else
                    return GetLiteralSubString(parameters[0], parameters[1]);
            case SqlFunctionType.Trim:
            case SqlFunctionType.LTrim:
            case SqlFunctionType.RTrim:
                return GetLiteralTrim(parameters[0]);
            case SqlFunctionType.StringInsert:
                return GetLiteralStringInsert(parameters[0], parameters[1], parameters[2]);
            case SqlFunctionType.Replace:
                return GetLiteralStringReplace(parameters[0], parameters[1], parameters[2]);
            case SqlFunctionType.Remove:
                if (parameters.Count > 2)
                    return GetLiteralStringRemove(parameters[0], parameters[1], parameters[2]);
                return GetLiteralStringRemove(parameters[0], parameters[1]);
            case SqlFunctionType.IndexOf:
                if (parameters.Count == 2)
                    return GetLiteralStringIndexOf(parameters[0], parameters[1]);
                else if (parameters.Count == 3)
                    return GetLiteralStringIndexOf(parameters[0], parameters[1], parameters[2]);
                else if (parameters.Count == 4)
                    return GetLiteralStringIndexOf(parameters[0], parameters[1], parameters[2], parameters[3]);
                break;
            case SqlFunctionType.Year:
            case SqlFunctionType.Month:
            case SqlFunctionType.Day:
            case SqlFunctionType.Hour:
            case SqlFunctionType.Minute:
            case SqlFunctionType.Second:
            case SqlFunctionType.Millisecond:
            case SqlFunctionType.Date:
            case SqlFunctionType.Time:
            case SqlFunctionType.Week:
              return GetLiteralDateTimePart(parameters[0], functionType);
            case SqlFunctionType.DateDiffInMilliseconds:
                return GetLiteralDateDiff(parameters[0], parameters[1]);
            case SqlFunctionType.Abs:
                return GetLiteralMathAbs(parameters[0]);
            case SqlFunctionType.Exp:
                return GetLiteralMathExp(parameters[0]);
            case SqlFunctionType.Floor:
                return GetLiteralMathFloor(parameters[0]);
            case SqlFunctionType.Ln:
                return GetLiteralMathLn(parameters[0]);

            case SqlFunctionType.Log:
                if (parameters.Count == 1)
                    return GetLiteralMathLog(parameters[0]);
                else
                    return GetLiteralMathLog(parameters[0], parameters[1]);
            case SqlFunctionType.Pow:
                return GetLiteralMathPow(parameters[0], parameters[1]);
            case SqlFunctionType.Round:
                return GetLiteralMathRound(parameters[0]);
            case SqlFunctionType.Sign:
                return GetLiteralMathSign(parameters[0]);
            case SqlFunctionType.Sqrt:
                return GetLiteralMathSqrt(parameters[0]);
              case SqlFunctionType.AndBitwise:
                return GetLiteralAndBitwise(parameters[0], parameters[1]);
              case SqlFunctionType.OrBitwise:
                return GetLiteralOrBitwise(parameters[0], parameters[1]);
              case SqlFunctionType.XorBitwise:
                return GetLiteralExclusiveOrBitwise(parameters[0], parameters[1]);
              case SqlFunctionType.ConvertBoolToBit:
                return GetConvertBoolToBit(parameters[0]);
              case SqlFunctionType.NewGuid:
                return GetNewGuid();
            }//switch
            throw new ArgumentException(functionType.ToString());
        }
예제 #6
0
 /// <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, SqlFunctionType operationType)
 {
     return SqlStatement.Format("EXTRACT({0} FROM {1})", operationType.ToString().ToUpper(), dateExpression);
 }
예제 #7
0
 protected override SqlStatement GetLiteralDateTimePart(SqlStatement dateExpression, SqlFunctionType operationType)
 {
     switch (operationType) {
     case SqlFunctionType.Week:
       return SqlStatement.Format("DATEPART(ISOWK,{0})", dateExpression);
     case SqlFunctionType.Date:
       return SqlStatement.Format("CONVERT(DATE, {0})", dateExpression);
     case SqlFunctionType.Time:
       return SqlStatement.Format("CONVERT(TIME, {0})", dateExpression);
     default:
       return SqlStatement.Format("DATEPART({0},{1})", operationType.ToString().ToUpper(), dateExpression);
       }
 }
예제 #8
0
 private object EvaluateMathCallInvoke(SqlFunctionType SpecialNodeType, IList<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());
 }
예제 #9
0
 private object EvaluateMathCallInvoke(SqlFunctionType SpecialNodeType, IList <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()));
 }