public void WritePropertyName(string prop) { var lazyProp = _context.GetLazyStringForFieldWithCaching(prop); WriteString(lazyProp); EnsureBuffer(1); _buffer[_pos++] = Colon; }
public BlittableJsonWriter(JsonOperationContext context, DocumentInfo documentInfo = null, BlittableJsonDocumentBuilder.UsageMode?mode = null, BlittableWriter <UnmanagedWriteBuffer> writer = null, LazyStringValue idField = null, LazyStringValue keyField = null, LazyStringValue collectionField = null) { _manualBlittableJsonDocumentBuilder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(context, mode ?? BlittableJsonDocumentBuilder.UsageMode.None, writer); _manualBlittableJsonDocumentBuilder.Reset(mode ?? BlittableJsonDocumentBuilder.UsageMode.None); _manualBlittableJsonDocumentBuilder.StartWriteObjectDocument(); _documentInfo = documentInfo; _first = true; _metadataId = idField ?? context.GetLazyStringForFieldWithCaching(Constants.Documents.Metadata.Id); _metadataKey = keyField ?? context.GetLazyStringForFieldWithCaching(Constants.Documents.Metadata.Key); _metadataCollection = collectionField ?? context.GetLazyStringForFieldWithCaching(Constants.Documents.Metadata.Collection); }
public static LazyStringValue GetLazyCollectionNameFrom(JsonOperationContext context, BlittableJsonReaderObject document) { if (document.TryGet(MetadataKeySegment, out BlittableJsonReaderObject metadata) == false || metadata.TryGet(MetadataCollectionSegment, out LazyStringValue collectionName) == false) { return(context.GetLazyStringForFieldWithCaching(EmptyCollectionSegment)); } return(collectionName); }
public void Reset(JsonOperationContext ctx) { if (_ctx == null) // should never happen { _ctx = ctx; _metadataCollections = _ctx.GetLazyStringForFieldWithCaching(CollectionName.MetadataCollectionSegment); _metadataExpires = _ctx.GetLazyStringForFieldWithCaching(Constants.Documents.Metadata.Expires); return; } Id = null; ChangeVector = null; Flags = DocumentFlags.None; NonPersistentFlags = NonPersistentDocumentFlags.None; _depth = 0; _state = State.None; _readingMetadataObject = false; _ctx = ctx; _metadataCollections = _ctx.GetLazyStringForFieldWithCaching(CollectionName.MetadataCollectionSegment); _metadataExpires = _ctx.GetLazyStringForFieldWithCaching(Constants.Documents.Metadata.Expires); }
public void StartArrayDocument() { var currentState = new BuildingState { State = ContinuationState.ReadArrayDocument }; var fakeFieldName = _context.GetLazyStringForFieldWithCaching(UnderscoreSegment); var prop = _context.CachedProperties.GetProperty(fakeFieldName); currentState.CurrentProperty = prop; currentState.MaxPropertyId = prop.PropertyId; currentState.FirstWrite = _writer.Position; currentState.Properties = new FastList <PropertyTag> { new PropertyTag { Property = prop } }; _continuationState.Push(currentState); }
public void Renew(string debugTag, UsageMode mode) { _writeToken = default(WriteToken); _debugTag = debugTag; _mode = mode; _continuationState.Clear(); _cacheItem.Reset(); _writer.ResetAndRenew(); _modifier?.Reset(_context); _fakeFieldName = _context.GetLazyStringForFieldWithCaching(UnderscoreSegment); }
private int WritePropertyNames(int rootOffset) { var cachedProperties = _context.CachedProperties; int propertiesDiscovered = cachedProperties.PropertiesDiscovered; // Write the property names and register their positions if (_propertyArrayOffset == null || _propertyArrayOffset.Length < propertiesDiscovered) { _propertyArrayOffset = new int[Bits.NextPowerOf2(propertiesDiscovered)]; } unsafe { for (var index = 0; index < propertiesDiscovered; index++) { var str = _context.GetLazyStringForFieldWithCaching(cachedProperties.GetProperty(index)); if (str.EscapePositions == null || str.EscapePositions.Length == 0) { _propertyArrayOffset[index] = WriteValue(str.Buffer, str.Size); continue; } _propertyArrayOffset[index] = WriteValue(str.Buffer, str.Size, str.EscapePositions); } } // Register the position of the properties offsets start var propertiesStart = _position; // Find the minimal space to store the offsets (byte,short,int) and raise the appropriate flag in the properties metadata BlittableJsonToken propertiesSizeMetadata = 0; var propertyNamesOffset = _position - rootOffset; var propertyArrayOffsetValueByteSize = SetOffsetSizeFlag(ref propertiesSizeMetadata, propertyNamesOffset); WriteNumber((int)propertiesSizeMetadata, sizeof(byte)); // Write property names offsets // PERF: Using for to avoid the cost of the enumerator. for (int i = 0; i < propertiesDiscovered; i++) { int offset = _propertyArrayOffset[i]; WriteNumber(propertiesStart - offset, propertyArrayOffsetValueByteSize); } return(propertiesStart); }
public static DocumentConflict From(JsonOperationContext ctx, Document doc) { if (doc == null) { return(null); } return(new DocumentConflict { LowerId = doc.LowerId, Id = doc.Id, Doc = doc.Data, StorageId = doc.StorageId, ChangeVector = doc.ChangeVector, LastModified = doc.LastModified, Collection = ctx.GetLazyStringForFieldWithCaching(CollectionName.GetCollectionName(doc.Data)) }); }
private static void WriteDocumentProperties(this BlittableJsonTextWriter writer, JsonOperationContext context, Document document, Func <LazyStringValue, bool> filterMetadataProperty = null) { var first = true; BlittableJsonReaderObject metadata = null; var metadataField = context.GetLazyStringForFieldWithCaching(Raven.Server.Json.BlittableJsonTextWriterExtensions.MetadataKeySegment); var prop = new BlittableJsonReaderObject.PropertyDetails(); using (var buffers = document.Data.GetPropertiesByInsertionOrder()) { for (var i = 0; i < buffers.Size; i++) { unsafe { document.Data.GetPropertyByIndex(buffers.Properties[i], ref prop); } if (metadataField.Equals(prop.Name)) { metadata = (BlittableJsonReaderObject)prop.Value; continue; } if (first == false) { writer.WriteComma(); } first = false; writer.WritePropertyName((string)prop.Name); writer.WriteValue(prop.Token & BlittableJsonReaderBase.TypesMask, prop.Value); } } if (first == false) { writer.WriteComma(); } WriteMetadata(writer, document, metadata, filterMetadataProperty); }
private PropertyName UnlikelyGetProperty(LazyStringValue propName) { var propIndex = _docPropNames.Count; propName = _context.GetLazyStringForFieldWithCaching(propName); var prop = new PropertyName(_propertyNameCounter++) { Comparer = propName, GlobalSortOrder = -1, PropertyId = propIndex }; _docPropNames.Add(prop); _propertiesSortOrder.Add(prop, prop); _propertyNameToId[propName] = prop; _propertiesNeedSorting = true; if (_docPropNames.Count > PropertiesDiscovered + 1) { prop = SwapPropertyIds(prop); } PropertiesDiscovered++; return(prop); }
private static void WriteDocumentProperties(this BlittableJsonTextWriter writer, JsonOperationContext context, Document document) { if (_buffers == null) { _buffers = new BlittableJsonReaderObject.PropertiesInsertionBuffer(); } var first = true; BlittableJsonReaderObject metadata = null; var metadataField = context.GetLazyStringForFieldWithCaching(MetadataKeySegment); var size = document.Data.GetPropertiesByInsertionOrder(_buffers); var prop = new BlittableJsonReaderObject.PropertyDetails(); for (var i = 0; i < size; i++) { document.Data.GetPropertyByIndex(_buffers.Properties[i], ref prop); if (metadataField.Equals(prop.Name)) { metadata = (BlittableJsonReaderObject)prop.Value; continue; } if (first == false) { writer.WriteComma(); } first = false; writer.WritePropertyName(prop.Name); writer.WriteValue(prop.Token & BlittableJsonReaderBase.TypesMask, prop.Value); } if (first == false) { writer.WriteComma(); } WriteMetadata(writer, document, metadata); }