Example #1
0
        public void WritePropertyName(string prop)
        {
            var lazyProp = _context.GetLazyStringForFieldWithCaching(prop);

            WriteString(lazyProp);
            EnsureBuffer(1);
            _buffer[_pos++] = Colon;
        }
Example #2
0
        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);
        }
Example #3
0
 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);
 }
Example #4
0
 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);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #10
0
        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);
        }