Exemplo n.º 1
0
        protected override void WriteJson(BlittableJsonWriter writer, CounterOperation value, JsonSerializer serializer)
        {
            if (value == null)
            {
                writer.WriteNull();
                return;
            }

            writer.WriteStartObject();

            writer.WritePropertyName(nameof(CounterOperation.CounterName));
            if (value.CounterName != null)
            {
                writer.WriteValue(value.CounterName);
            }
            else
            {
                writer.WriteNull();
            }

            writer.WritePropertyName(nameof(CounterOperation.Delta));
            writer.WriteValue(value.Delta);

            writer.WritePropertyName(nameof(CounterOperation.Type));
            writer.WriteValue(value.Type);

            writer.WritePropertyName(nameof(CounterOperation.DocumentId));
            if (value.DocumentId != null)
            {
                writer.WriteValue(value.DocumentId);
            }
            else
            {
                writer.WriteNull();
            }

            writer.WritePropertyName(nameof(CounterOperation.ChangeVector));
            if (value.ChangeVector != null)
            {
                writer.WriteValue(value.ChangeVector);
            }
            else
            {
                writer.WriteNull();
            }

            writer.WriteEndObject();
        }
Exemplo n.º 2
0
        public void ConcurrentWrite_WhenResetCachedPropertiesForNewDocument_ShouldThrowInformativeException()
        {
            Assert.Throws <InvalidOperationException>(() =>
            {
                using (var context = JsonOperationContext.ShortTermSingleUse())
                    using (var writer = new BlittableJsonWriter(context))
                        using (var secondWriter = new BlittableJsonWriter(context))
                        {
                            secondWriter.WriteStartObject();
                            secondWriter.WritePropertyName("Property1");
                            secondWriter.WriteValue(4);
                            secondWriter.WriteEndObject();

                            context.CachedProperties.NewDocument();
                            writer.WriteStartObject();
                            writer.WritePropertyName("ObjectProp");
                            writer.WriteValue(4);
                            writer.WriteEndObject();
                            writer.FinalizeDocument();
                            var first = writer.CreateReader();

                            secondWriter.FinalizeDocument();
                            var second = secondWriter.CreateReader();
                        }
            });
        }
Exemplo n.º 3
0
                public bool MoveNext()
                {
                    if (_enumerator.MoveNext() == false)
                    {
                        return(false);
                    }

                    var output = _enumerator.Current;

                    _parent._indexContext.CachedProperties.NewDocument();

                    using (_createBlittableResult.Start())
                        using (var writer = new BlittableJsonWriter(_parent._indexContext))
                        {
                            IPropertyAccessor accessor;

                            if (_parent._isMultiMap == false)
                            {
                                accessor = _parent._propertyAccessor ??
                                           (_parent._propertyAccessor = PropertyAccessor.CreateMapReduceOutputAccessor(output.GetType(), output, _groupByFields));
                            }
                            else
                            {
                                accessor = TypeConverter.GetPropertyAccessorForMapReduceOutput(output, _groupByFields);
                            }

                            _reduceKeyProcessor.Reset();

                            writer.WriteStartObject();
                            foreach (var property in accessor.GetPropertiesInOrder(output))
                            {
                                var value          = property.Value;
                                var blittableValue = TypeConverter.ToBlittableSupportedType(value, context: _parent._indexContext);

                                writer.WritePropertyName(property.Key);
                                WriteValue(writer, blittableValue);

                                if (property.IsGroupByField)
                                {
                                    var valueForProcessor = property.GroupByField.GetValue(value, blittableValue);
                                    _reduceKeyProcessor.Process(_parent._indexContext.Allocator, valueForProcessor);
                                }
                            }

                            writer.WriteEndObject();

                            if (_reduceKeyProcessor.ProcessedFields != _groupByFields.Count)
                            {
                                ThrowMissingGroupByFieldsInMapOutput(output, _groupByFields, _parent._compiledIndex);
                            }

                            var reduceHashKey = _reduceKeyProcessor.Hash;

                            writer.FinalizeDocument();

                            Current.Data          = writer.CreateReader();
                            Current.ReduceKeyHash = reduceHashKey;
                        }

                    return(true);
Exemplo n.º 4
0
        private object AddTypeNameToValueIfNeeded(Type propertyType, object value)
        {
            var typeOfValue = value.GetType();

            if (propertyType == typeOfValue || typeOfValue.IsClass == false)
            {
                return(value);
            }

            using (var writer = new BlittableJsonWriter(Context))
            {
                // the type of the object that's being serialized
                // is not the same as its declared type.
                // so we need to include $type in json

                var serializer = Conventions.CreateSerializer();
                serializer.TypeNameHandling = TypeNameHandling.Objects;

                writer.WriteStartObject();
                writer.WritePropertyName("Value");

                serializer.Serialize(writer, value);

                writer.WriteEndObject();

                writer.FinalizeDocument();

                var reader = writer.CreateReader();

                return(reader["Value"]);
            }
        }
Exemplo n.º 5
0
                    static void WriteValue(BlittableJsonWriter writer, object value)
                    {
                        switch (value)
                        {
                        case bool val:
                            writer.WriteValue(val);
                            break;

                        case decimal val:
                            writer.WriteValue(val);
                            break;

                        case double val:
                            writer.WriteValue(val);
                            break;

                        case float val:
                            writer.WriteValue(val);
                            break;

                        case LazyCompressedStringValue val:
                            writer.WriteValue(val);
                            break;

                        case LazyNumberValue val:
                            writer.WriteValue(val);
                            break;

                        case LazyStringValue val:
                            writer.WriteValue(val);
                            break;

                        case long val:
                            writer.WriteValue(val);
                            break;

                        case int val:
                            writer.WriteValue(val);
                            break;

                        case string val:
                            writer.WriteValue(val);
                            break;

                        case ulong val:
                            writer.WriteValue(val);
                            break;

                        case uint val:
                            writer.WriteValue(val);
                            break;

                        case short val:
                            writer.WriteValue(val);
                            break;

                        case byte val:
                            writer.WriteValue(val);
                            break;

                        case DateTime val:
                            writer.WriteValue(val);
                            break;

                        case DateTimeOffset val:
                            writer.WriteValue(val);
                            break;

                        case TimeSpan val:
                            writer.WriteValue(val);
                            break;

                        case BlittableJsonReaderObject val:
                            var propertyDetails = new BlittableJsonReaderObject.PropertyDetails();

                            writer.WriteStartObject();
                            for (int i = 0; i < val.Count; i++)
                            {
                                val.GetPropertyByIndex(i, ref propertyDetails);
                                writer.WritePropertyName(propertyDetails.Name);
                                WriteValue(writer, propertyDetails.Value);
                            }

                            writer.WriteEndObject();

                            break;

                        case BlittableJsonReaderArray val:
                            writer.WriteStartArray();
                            foreach (var property in val)
                            {
                                WriteValue(writer, property);
                            }
                            writer.WriteEndArray();
                            break;

                        case null:
                            writer.WriteNull();
                            break;

                        case DynamicJsonValue val:
                            writer.WriteStartObject();
                            foreach (var property in val.Properties)
                            {
                                writer.WritePropertyName(property.Name);
                                WriteValue(writer, property.Value);
                            }
                            writer.WriteEndObject();
                            break;

                        case DynamicJsonArray val:
                            writer.WriteStartArray();
                            foreach (var item in val)
                            {
                                WriteValue(writer, item);
                            }
                            writer.WriteEndArray();
                            break;

                        default:
                            throw new NotSupportedException($"Not supported value type '{value?.GetType().Name}'.");
                        }
                    }