コード例 #1
0
        private IComparable PerformArithmeticOperation(IEvaluable evaluable, IJSONDocument document, ArithmeticOperation operation)
        {
            IJsonValue value1, value2;

            if (!Evaluate(out value1, document))
            {
                return(null);
            }
            if (!evaluable.Evaluate(out value2, document))
            {
                return(null);
            }

            TypeCode      actualType1, actualType2;
            FieldDataType fieldDataType1 = JSONType.GetJSONType(value1.Value, out actualType1);
            FieldDataType fieldDataType2 = JSONType.GetJSONType(value2.Value, out actualType2);

            if (fieldDataType1.CompareTo(fieldDataType2) != 0)
            {
                return(null);
            }

            return(Evaluator.PerformArithmeticOperation(value1, actualType1, value2, actualType2, operation,
                                                        fieldDataType1));
        }
コード例 #2
0
ファイル: SUM.cs プロジェクト: waqashaneef/NosDB
        public void ApplyValue(params object[] values)
        {
            if (values != null && values.Length > 0)
            {
                if (values[0] != null)
                {
                    FieldDataType type = JSONType.GetJSONType(values[0]);
                    switch (type)
                    {
                    case FieldDataType.Number:
                        _sum += Convert.ToDouble(values[0]);
                        break;

                    case FieldDataType.DateTime:
                        _sum += Convert.ToDateTime(values[0]).ToOADate();
                        break;
                    }
                }
            }
        }
コード例 #3
0
        public override IJsonValue Evaluate(IJSONDocument document)
        {
            JSONResult result = (JSONResult)document;

            if (result != null)
            {
                IAggregation aggregation = result.GetAggregation(Name);
                if (aggregation != null)
                {
                    FieldDataType dataType = JSONType.GetJSONType(aggregation.Value);
                    switch (dataType)
                    {
                    case FieldDataType.Number:
                        return(new NumberJsonValue(aggregation.Value));

                    case FieldDataType.String:
                        return(new StringJsonValue((string)aggregation.Value));

                    case FieldDataType.Null:
                        return(new NullValue());

                    case FieldDataType.Object:
                        return(new ObjectJsonValue((IJSONDocument)aggregation.Value));

                    case FieldDataType.DateTime:
                        return(new DateTimeJsonValue((DateTime)aggregation.Value));

                    case FieldDataType.Bool:
                        return(new BooleanJsonValue((bool)aggregation.Value));

                    case FieldDataType.Array:
                        return(new ArrayJsonValue((IJsonValue[])aggregation.Value));
                    }
                }
            }
            return(base.Evaluate(document));
        }
コード例 #4
0
ファイル: JsonWrapper.cs プロジェクト: waqashaneef/NosDB
        public static IJsonValue Wrap(object value)
        {
            if (value is JValue)
            {
                value = ((JValue)value).Value;
            }

            FieldDataType dataType  = JSONType.GetJSONType(value);
            IJsonValue    jsonValue = null;

            switch (dataType)
            {
            case FieldDataType.Array:
                var values = new List <IJsonValue>();
                if (value is System.Collections.ArrayList)
                {
                    var array = (System.Collections.ArrayList)value;
                    foreach (var obj in array)
                    {
                        values.Add(Wrap(obj));
                    }
                }
                else
                {
                    var array = (Array)value;
                    foreach (var obj in array)
                    {
                        values.Add(Wrap(obj));
                    }
                }
                jsonValue = new ArrayJsonValue(values.ToArray());
                break;

            case FieldDataType.Bool:
                jsonValue = new BooleanJsonValue((bool)value);
                break;

            case FieldDataType.DateTime:
                jsonValue = new DateTimeJsonValue((DateTime)value);
                break;

            case FieldDataType.Null:
                jsonValue = new NullValue();
                break;

            case FieldDataType.Number:
                jsonValue = new NumberJsonValue(value);
                break;

            case FieldDataType.Object:
                if (value.GetType() == typeof(JArray))
                {
                    var arr  = (JArray)value;
                    var vals = new List <IJsonValue>();
                    foreach (var obj in arr)
                    {
                        vals.Add(Wrap(obj));
                    }
                    jsonValue = new ArrayJsonValue(vals.ToArray());
                }
                else if (value.GetType() == typeof(IJsonValue[]))
                {
                    var arr = (IJsonValue[])value;
                    //var vals = new List<IJsonValue>();
                    //foreach (var obj in arr)
                    //{
                    //    vals.Add(Wrap(obj));
                    //}
                    jsonValue = new ArrayJsonValue(arr);    //vals.ToArray());
                }
                else
                {
                    jsonValue = new ObjectJsonValue(Serialize(value));
                }
                break;

            case FieldDataType.String:
                jsonValue = new StringJsonValue((string)value);
                break;
            }
            return(jsonValue);
        }