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"); } }
public override void WriteValue(decimal?value) { if (value != null) { BlittableJsonReader.AssertDecimalValueInDoublePercisionBoundries(value.Value); _manualBlittableJsonDocumentBuilder.WriteValue(value.Value); } else { _manualBlittableJsonDocumentBuilder.WriteValueNull(); } }
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(); } }
public override void WriteValue(decimal value) { BlittableJsonReader.AssertDecimalValueInDoublePercisionBoundries(value); _manualBlittableJsonDocumentBuilder.WriteValue(value); }