Exemplo n.º 1
0
        private void WritePropertyValue(string propName, object value)
        {
            switch (value)
            {
            case null:
                _manualBlittableJsonDocumentBuilder.WriteValueNull();
                break;

            case string strValue:
                _manualBlittableJsonDocumentBuilder.WriteValue(strValue);
                break;

            case LazyStringValue lazyStringValue:
                _manualBlittableJsonDocumentBuilder.WriteValue(lazyStringValue);
                break;

            case long l:
                _manualBlittableJsonDocumentBuilder.WriteValue(l);
                break;

            case double d:
                _manualBlittableJsonDocumentBuilder.WriteValue(d);
                break;

            case decimal decVal:
                BlittableJsonReader.AssertDecimalValueInDoublePercisionBoundries(decVal);
                _manualBlittableJsonDocumentBuilder.WriteValue(decVal);
                break;

            case float f:
                _manualBlittableJsonDocumentBuilder.WriteValue(f);
                break;

            case bool b:
                _manualBlittableJsonDocumentBuilder.WriteValue(b);
                break;

            case LazyNumberValue lazyNumber:
                _manualBlittableJsonDocumentBuilder.WriteValue(lazyNumber);
                break;

            case IEnumerable enumerable:
                _manualBlittableJsonDocumentBuilder.StartWriteArray();
                foreach (var entry in enumerable)
                {
                    WritePropertyValue(propName, entry);
                }
                _manualBlittableJsonDocumentBuilder.WriteArrayEnd();
                break;

            default:
                throw new NotSupportedException($"The value type {value.GetType().FullName} of key {propName} is not supported in the metadata");
            }
        }
Exemplo n.º 2
0
 public override void WriteValue(decimal?value)
 {
     if (value != null)
     {
         BlittableJsonReader.AssertDecimalValueInDoublePercisionBoundries(value.Value);
         _manualBlittableJsonDocumentBuilder.WriteValue(value.Value);
     }
     else
     {
         _manualBlittableJsonDocumentBuilder.WriteValueNull();
     }
 }
Exemplo n.º 3
0
        private void WriteMetadata()
        {
            if (_documentInfo == null)
            {
                return;
            }
            if (_documentInfo.Metadata?.Modifications != null && (_documentInfo.Metadata.Modifications.Properties.Count > 0))
            {
                _manualBlittableJsonDocumentBuilder.WritePropertyName(Constants.Documents.Metadata.Key);
                _manualBlittableJsonDocumentBuilder.StartWriteObject();

                foreach (var prop in _documentInfo.Metadata.Modifications.Properties)
                {
                    if (prop.Name.Length > 0 && prop.Name[0] == '@')
                    {
                        if (prop.Name != Constants.Documents.Metadata.Collection && prop.Name != Constants.Documents.Metadata.Expires)
                        {
                            continue; // system property, ignoring it
                        }
                    }

                    _manualBlittableJsonDocumentBuilder.WritePropertyName(prop.Item1);
                    var value = prop.Item2;

                    if (value == null)
                    {
                        _manualBlittableJsonDocumentBuilder.WriteValueNull();
                        continue;
                    }

                    var strValue = value as string;
                    if (strValue != null)
                    {
                        _manualBlittableJsonDocumentBuilder.WriteValue(strValue);
                    }
                    else if (value is long)
                    {
                        _manualBlittableJsonDocumentBuilder.WriteValue((long)value);
                    }
                    else if (value is double)
                    {
                        _manualBlittableJsonDocumentBuilder.WriteValue((double)value);
                    }
                    else if (value is decimal decVal)
                    {
                        BlittableJsonReader.AssertDecimalValueInDoublePercisionBoundries(decVal);
                        _manualBlittableJsonDocumentBuilder.WriteValue((decimal)value);
                    }
                    else if (value is float)
                    {
                        _manualBlittableJsonDocumentBuilder.WriteValue((float)value);
                    }
                    else if (value is bool)
                    {
                        _manualBlittableJsonDocumentBuilder.WriteValue((bool)value);
                    }
                    else if (value is LazyNumberValue)
                    {
                        _manualBlittableJsonDocumentBuilder.WriteValue((LazyNumberValue)value);
                    }
                    else
                    {
                        throw new NotSupportedException($"The value type {value.GetType().FullName} of key {prop.Item1} is not supported in the metadata");
                    }
                }

                if (_documentInfo.Collection != null)
                {
                    _manualBlittableJsonDocumentBuilder.WritePropertyName(Constants.Documents.Metadata.Collection);
                    _manualBlittableJsonDocumentBuilder.WriteValue(_documentInfo.Collection);
                }

                _manualBlittableJsonDocumentBuilder.WriteObjectEnd();
                _documentInfo.Metadata.Modifications = null;
            }
            else if (_documentInfo.Metadata != null)
            {
                _manualBlittableJsonDocumentBuilder.WritePropertyName(Constants.Documents.Metadata.Key);
                _manualBlittableJsonDocumentBuilder.StartWriteObject();
                var ids = _documentInfo.Metadata.GetPropertiesByInsertionOrder();

                foreach (var id in ids)
                {
                    var propertyDetails = new BlittableJsonReaderObject.PropertyDetails();
                    _documentInfo.Metadata.GetPropertyByIndex(id, ref propertyDetails);
                    _manualBlittableJsonDocumentBuilder.WritePropertyName(propertyDetails.Name);

                    switch (propertyDetails.Token & BlittableJsonReaderBase.TypesMask)
                    {
                    case BlittableJsonToken.StartArray:
                        _manualBlittableJsonDocumentBuilder.StartWriteArray();
                        var array = propertyDetails.Value as BlittableJsonReaderArray;
                        if (array != null)
                        {
                            var propDetails = new BlittableJsonReaderObject.PropertyDetails();
                            foreach (BlittableJsonReaderObject entry in array)
                            {
                                _manualBlittableJsonDocumentBuilder.StartWriteObject();
                                var propsIndexes = entry.GetPropertiesByInsertionOrder();
                                foreach (var index in propsIndexes)
                                {
                                    entry.GetPropertyByIndex(index, ref propDetails);
                                    _manualBlittableJsonDocumentBuilder.WritePropertyName(propDetails.Name);
                                    switch (propDetails.Token)
                                    {
                                    case BlittableJsonToken.Integer:
                                        _manualBlittableJsonDocumentBuilder.WriteValue((long)propDetails.Value);
                                        break;

                                    case BlittableJsonToken.String:
                                        _manualBlittableJsonDocumentBuilder.WriteValue(propDetails.Value.ToString());
                                        break;

                                    default:
                                        throw new NotSupportedException($"Found property token of type '{propDetails.Token}' which is not supported.");
                                    }
                                }
                                _manualBlittableJsonDocumentBuilder.WriteObjectEnd();
                            }
                        }
                        _manualBlittableJsonDocumentBuilder.WriteArrayEnd();
                        break;

                    case BlittableJsonToken.Integer:
                        _manualBlittableJsonDocumentBuilder.WriteValue((long)propertyDetails.Value);
                        break;

                    case BlittableJsonToken.LazyNumber:
                        if (propertyDetails.Value is LazyNumberValue ldv)
                        {
                            _manualBlittableJsonDocumentBuilder.WriteValue(ldv);
                        }
                        else if (propertyDetails.Value is double d)
                        {
                            _manualBlittableJsonDocumentBuilder.WriteValue(d);
                        }
                        else
                        {
                            _manualBlittableJsonDocumentBuilder.WriteValue((float)propertyDetails.Value);
                        }
                        break;

                    case BlittableJsonToken.String:
                        _manualBlittableJsonDocumentBuilder.WriteValue(propertyDetails.Value.ToString());
                        break;

                    case BlittableJsonToken.CompressedString:
                        _manualBlittableJsonDocumentBuilder.WriteValue(propertyDetails.Value.ToString());
                        break;

                    case BlittableJsonToken.Boolean:
                        _manualBlittableJsonDocumentBuilder.WriteValue((bool)propertyDetails.Value);
                        break;

                    case BlittableJsonToken.Null:
                        _manualBlittableJsonDocumentBuilder.WriteValueNull();
                        break;

                    default:
                        throw new NotSupportedException();
                    }
                }
                _manualBlittableJsonDocumentBuilder.WriteObjectEnd();
            }
            else if (_documentInfo.Collection != null)
            {
                _manualBlittableJsonDocumentBuilder.WritePropertyName(Constants.Documents.Metadata.Key);
                _manualBlittableJsonDocumentBuilder.StartWriteObject();

                _manualBlittableJsonDocumentBuilder.WritePropertyName(Constants.Documents.Metadata.Collection);
                _manualBlittableJsonDocumentBuilder.WriteValue(_documentInfo.Collection);

                if (_documentInfo.Id != null)
                {
                    _manualBlittableJsonDocumentBuilder.WritePropertyName(Constants.Documents.Metadata.Id);
                    _manualBlittableJsonDocumentBuilder.WriteValue(_documentInfo.Id);
                }

                _manualBlittableJsonDocumentBuilder.WriteObjectEnd();
            }
        }
Exemplo n.º 4
0
 public override void WriteValue(decimal value)
 {
     BlittableJsonReader.AssertDecimalValueInDoublePercisionBoundries(value);
     _manualBlittableJsonDocumentBuilder.WriteValue(value);
 }