private static int Compare(object value1, object value2, FunctionContext context, string exp) { Type type1 = value1.GetType(); Type type2 = value2.GetType(); StorageType storageType1 = DataStorageHelper.GetStorageType(type1); StorageType storageType2 = DataStorageHelper.GetStorageType(type2); bool flag1 = DataStorageHelper.IsSqlType(storageType1); bool flag2 = DataStorageHelper.IsSqlType(storageType2); if (flag1 && DataStorageHelper.IsObjectSqlNull(value1) || value1 == DBNull.Value) { return(-1); } if (flag2 && DataStorageHelper.IsObjectSqlNull(value2) || value2 == DBNull.Value) { return(1); } StorageType resultType = flag1 || flag2?DataStorageHelper.ResultSqlType(storageType1, storageType2, false, false, Operator.LessThen) : DataStorageHelper.ResultType(storageType1, storageType2, false, false, Operator.LessThen); if (resultType == StorageType.Empty) { throw InvalidExpressionException.TypeMismatch(exp); } return(Operator.BinaryCompare(value1, value2, resultType, Operator.LessOrEqual, new OperatorContext((object)null, context.FormatProvider, (object)null))); }
/// <returns> /// -1: value1 < value2 /// 0: value1 = value2 /// 1: value1 > value2 /// </returns> static int Compare(object value1 , object value2 , FunctionContext context , string exp) { Type lType = value1.GetType(); Type rType = value2.GetType(); StorageType lStorageType = DataStorageHelper.GetStorageType(lType); StorageType rStorageType = DataStorageHelper.GetStorageType(rType); bool isSqlTypeL = DataStorageHelper.IsSqlType(lStorageType); bool isSqlTypeR = DataStorageHelper.IsSqlType(rStorageType); if ((isSqlTypeL && DataStorageHelper.IsObjectSqlNull(value1)) || value1 == DBNull.Value) { return(-1); } if ((isSqlTypeR && DataStorageHelper.IsObjectSqlNull(value2)) || value2 == DBNull.Value) { return(1); } StorageType resultType = StorageType.Empty; if (isSqlTypeL || isSqlTypeR) { resultType = DataStorageHelper.ResultSqlType(lStorageType , rStorageType , false , false , Operator.LessThen); // op doesn't matter here } else { resultType = DataStorageHelper.ResultType(lStorageType , rStorageType , false , false , Operator.LessThen); // op doesn't matter here } if (resultType == StorageType.Empty) { throw InvalidExpressionException.TypeMismatch(exp); } return(Operator.BinaryCompare(value1 , value2 , resultType , Operator.LessOrEqual // op doesn't matter here , context.FormatProvider)); }
private static object Mean( IEnumerable data, ExpressionNode node, object context, string exp, out int count, out StorageType type) { count = 0; type = StorageType.Empty; object obj = Aggregates.Sum(data, node, context, exp, out count, out type); if (count == 0) { return((object)0); } switch (type) { case StorageType.Char: return((object)((int)(char)obj / count)); case StorageType.SByte: case StorageType.Byte: case StorageType.Int16: case StorageType.UInt16: case StorageType.Int32: case StorageType.UInt32: return((object)(Convert.ToDouble(obj) / (double)count)); case StorageType.Int64: case StorageType.UInt64: return((object)(Convert.ToDecimal(obj) / (Decimal)count)); case StorageType.Single: return((object)(float)((double)(float)obj / (double)count)); case StorageType.Double: return((object)((double)obj / (double)count)); case StorageType.Decimal: case StorageType.String: return((object)((Decimal)obj / (Decimal)count)); case StorageType.TimeSpan: return((object)new TimeSpan(((TimeSpan)obj).Ticks / (long)count)); case StorageType.SqlByte: return((object)((SqlDouble)((SqlByte)obj) / (SqlDouble)((double)count))); case StorageType.SqlDecimal: return((object)((SqlDouble)((SqlDecimal)obj) / (SqlDouble)((double)count))); case StorageType.SqlDouble: return((object)((SqlDouble)obj / (SqlDouble)((double)count))); case StorageType.SqlInt16: return((object)((SqlDouble)((SqlInt16)obj) / (SqlDouble)((double)(short)count))); case StorageType.SqlInt32: return((object)((SqlDouble)((SqlInt32)obj) / (SqlDouble)((double)count))); case StorageType.SqlInt64: return((object)((SqlDouble)((SqlInt64)obj) / (SqlDouble)((double)count))); case StorageType.SqlMoney: return((object)((SqlMoney)obj / (SqlMoney)((long)count))); case StorageType.SqlSingle: return((object)((SqlSingle)obj / (SqlSingle)((float)count))); default: throw InvalidExpressionException.TypeMismatch(exp); } }
private static object Multiply(object value1, object value2, StorageType type) { switch (type) { case StorageType.Char: return((object)((int)Convert.ToChar(value1) * (int)Convert.ToChar(value2))); case StorageType.SByte: return((object)((int)Convert.ToSByte(value1) * (int)Convert.ToSByte(value2))); case StorageType.Byte: return((object)((int)Convert.ToByte(value1) * (int)Convert.ToByte(value2))); case StorageType.Int16: return((object)((int)Convert.ToInt16(value1) * (int)Convert.ToInt16(value2))); case StorageType.UInt16: return((object)((int)Convert.ToUInt16(value1) * (int)Convert.ToUInt16(value2))); case StorageType.Int32: return((object)(Convert.ToInt32(value1) * Convert.ToInt32(value2))); case StorageType.UInt32: return((object)(uint)((int)Convert.ToUInt32(value1) * (int)Convert.ToUInt32(value2))); case StorageType.Int64: return((object)(Convert.ToInt64(value1) * Convert.ToInt64(value2))); case StorageType.UInt64: return((object)(ulong)((long)Convert.ToUInt64(value1) * (long)Convert.ToUInt64(value2))); case StorageType.Single: return((object)(float)((double)Convert.ToSingle(value1) * (double)Convert.ToSingle(value2))); case StorageType.Double: return((object)(Convert.ToDouble(value1) * Convert.ToDouble(value2))); case StorageType.Decimal: return((object)(Convert.ToDecimal(value1) * Convert.ToDecimal(value2))); case StorageType.String: Decimal result1; Decimal.TryParse(Convert.ToString(value1), out result1); Decimal result2; Decimal.TryParse(Convert.ToString(value2), out result2); return((object)(result1 * result2)); case StorageType.SqlByte: return((object)((SqlByte)value1 * (SqlByte)value2)); case StorageType.SqlDecimal: return((object)((SqlDecimal)value1 * (SqlDecimal)value2)); case StorageType.SqlDouble: return((object)((SqlDouble)value1 * (SqlDouble)value2)); case StorageType.SqlInt16: return((object)((SqlInt16)value1 * (SqlInt16)value2)); case StorageType.SqlInt32: return((object)((SqlInt32)value1 * (SqlInt32)value2)); case StorageType.SqlInt64: return((object)((SqlInt64)value1 * (SqlInt64)value2)); case StorageType.SqlMoney: return((object)((SqlMoney)value1 * (SqlMoney)value2)); case StorageType.SqlSingle: return((object)((SqlSingle)value1 * (SqlSingle)value2)); default: throw InvalidExpressionException.TypeMismatch(nameof(Multiply)); } }
private static object Add(object value1, object value2, StorageType type) { switch (type) { case StorageType.Char: return((object)((int)Convert.ToChar(value1) + (int)Convert.ToChar(value2))); case StorageType.SByte: return((object)((int)Convert.ToSByte(value1) + (int)Convert.ToSByte(value2))); case StorageType.Byte: return((object)((int)Convert.ToByte(value1) + (int)Convert.ToByte(value2))); case StorageType.Int16: return((object)((int)Convert.ToInt16(value1) + (int)Convert.ToInt16(value2))); case StorageType.UInt16: return((object)((int)Convert.ToUInt16(value1) + (int)Convert.ToUInt16(value2))); case StorageType.Int32: return((object)(Convert.ToInt32(value1) + Convert.ToInt32(value2))); case StorageType.UInt32: return((object)(uint)((int)Convert.ToUInt32(value1) + (int)Convert.ToUInt32(value2))); case StorageType.Int64: return((object)(Convert.ToInt64(value1) + Convert.ToInt64(value2))); case StorageType.UInt64: return((object)(ulong)((long)Convert.ToUInt64(value1) + (long)Convert.ToUInt64(value2))); case StorageType.Single: return((object)(float)((double)Convert.ToSingle(value1) + (double)Convert.ToSingle(value2))); case StorageType.Double: return((object)(Convert.ToDouble(value1) + Convert.ToDouble(value2))); case StorageType.Decimal: return((object)(Convert.ToDecimal(value1) + Convert.ToDecimal(value2))); case StorageType.TimeSpan: TimeSpan result1; TimeSpan.TryParse(Convert.ToString(value1), out result1); TimeSpan result2; TimeSpan.TryParse(Convert.ToString(value2), out result2); return((object)(result1 + result2)); case StorageType.String: Decimal result3; Decimal.TryParse(Convert.ToString(value1), out result3); Decimal result4; Decimal.TryParse(Convert.ToString(value2), out result4); return((object)(result3 + result4)); case StorageType.SqlByte: return((object)((SqlByte)value1 + (SqlByte)value2)); case StorageType.SqlDecimal: return((object)((SqlDecimal)value1 + (SqlDecimal)value2)); case StorageType.SqlDouble: return((object)((SqlDouble)value1 + (SqlDouble)value2)); case StorageType.SqlInt16: return((object)((SqlInt16)value1 + (SqlInt16)value2)); case StorageType.SqlInt32: return((object)((SqlInt32)value1 + (SqlInt32)value2)); case StorageType.SqlInt64: return((object)((SqlInt64)value1 + (SqlInt64)value2)); case StorageType.SqlMoney: return((object)((SqlMoney)value1 + (SqlMoney)value2)); case StorageType.SqlSingle: return((object)((SqlSingle)value1 + (SqlSingle)value2)); case StorageType.SqlString: return((object)((SqlString)value1 + (SqlString)value2)); default: throw InvalidExpressionException.TypeMismatch(nameof(Add)); } }
static object Mean(IEnumerable data , ExpressionNode node , object context , string exp , out int count , out StorageType type) { count = 0; type = StorageType.Empty; //if (0 == view.Data.Count) // return 0; object sum = Sum(data, node, context, exp, out count, out type); if (0 == count) { return(0); } switch (type) { case StorageType.Char: return((char)sum / count); case StorageType.SByte: return((SByte)sum / count); case StorageType.Byte: return((Byte)sum / count); case StorageType.Int16: return((Int16)sum / count); case StorageType.UInt16: return((UInt16)sum / count); case StorageType.Int32: return((Int32)sum / count); case StorageType.UInt32: return((UInt32)sum / count); case StorageType.Int64: return((Int64)sum / count); case StorageType.UInt64: return((UInt64)sum / (UInt64)count); case StorageType.Single: return((Single)sum / count); case StorageType.Double: return((Double)sum / count); case StorageType.Decimal: return((Decimal)sum / count); case StorageType.String: return((Decimal)sum / count); case StorageType.SqlByte: return((SqlByte)sum / (byte)count); case StorageType.SqlDecimal: return((SqlDecimal)sum / count); case StorageType.SqlDouble: return((SqlDouble)sum / count); case StorageType.SqlInt16: return((SqlInt16)sum / (short)count); case StorageType.SqlInt32: return((SqlInt32)sum / count); case StorageType.SqlInt64: return((SqlInt64)sum / count); case StorageType.SqlMoney: return((SqlMoney)sum / count); case StorageType.SqlSingle: return((SqlSingle)sum / count); default: throw InvalidExpressionException.TypeMismatch(exp); } }
static object Multiply(object value1, object value2, StorageType type) { switch (type) { case StorageType.Char: return(Convert.ToChar(value1) * Convert.ToChar(value2)); case StorageType.SByte: return(Convert.ToSByte(value1) * Convert.ToSByte(value2)); case StorageType.Byte: return(Convert.ToByte(value1) * Convert.ToByte(value2)); case StorageType.Int16: return(Convert.ToInt16(value1) * Convert.ToInt16(value2)); case StorageType.UInt16: return(Convert.ToUInt16(value1) * Convert.ToUInt16(value2)); case StorageType.Int32: return(Convert.ToInt32(value1) * Convert.ToInt32(value2)); case StorageType.UInt32: return(Convert.ToUInt32(value1) * Convert.ToUInt32(value2)); case StorageType.Int64: return(Convert.ToInt64(value1) * Convert.ToInt64(value2)); case StorageType.UInt64: return(Convert.ToUInt64(value1) * Convert.ToUInt64(value2)); case StorageType.Single: return(Convert.ToSingle(value1) * Convert.ToSingle(value2)); case StorageType.Double: return(Convert.ToDouble(value1) * Convert.ToDouble(value2)); case StorageType.Decimal: return(Convert.ToDecimal(value1) * Convert.ToDecimal(value2)); case StorageType.String: { Decimal decimalValue1; Decimal decimalValue2; Decimal.TryParse(Convert.ToString(value1), out decimalValue1); Decimal.TryParse(Convert.ToString(value2), out decimalValue2); return(decimalValue1 * decimalValue2); } case StorageType.SqlByte: return((SqlByte)value1 * (SqlByte)value2); case StorageType.SqlDecimal: return((SqlDecimal)value1 * (SqlDecimal)value2); case StorageType.SqlDouble: return((SqlDouble)value1 * (SqlDouble)value2); case StorageType.SqlInt16: return((SqlInt16)value1 * (SqlInt16)value2); case StorageType.SqlInt32: return((SqlInt32)value1 * (SqlInt32)value2); case StorageType.SqlInt64: return((SqlInt64)value1 * (SqlInt64)value2); case StorageType.SqlMoney: return((SqlMoney)value1 * (SqlMoney)value2); case StorageType.SqlSingle: return((SqlSingle)value1 * (SqlSingle)value2); default: throw InvalidExpressionException.TypeMismatch("Multiply"); } }