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); }
/// <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)); } }
/// <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)); }
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)); } }
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()); }
/// <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); }
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); } }
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()); }
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())); }