public void FlatObjectWithObjectArray() { using (var context = new JsonOperationContext(1024, 1024 * 4, 32 * 1024, SharedMultipleUseFlag.None)) { using (var builder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(context)) { builder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); builder.StartWriteObjectDocument(); builder.StartWriteObject(); { builder.WritePropertyName("MyObjects"); { builder.StartWriteArray(); { for (var i = 0; i < 8; i++) { builder.StartWriteObject(); { builder.WritePropertyName("NestedNode"); { builder.WriteValue(i); } builder.WriteObjectEnd(); } } builder.WriteArrayEnd(); } } builder.WritePropertyName("Height"); { builder.WriteValue(55); } builder.WriteObjectEnd(); } builder.FinalizeDocument(); using (var reader = builder.CreateReader()) { Assert.Equal(2, reader.Count); var array = reader["MyObjects"] as BlittableJsonReaderArray; Assert.Equal(8, array.Length); for (var i = 0; i < 8; i++) { var nested = array[i] as BlittableJsonReaderObject; Assert.Equal(i, int.Parse(nested["NestedNode"].ToString(), CultureInfo.InvariantCulture)); } Assert.Equal(55, int.Parse(reader["Height"].ToString(), CultureInfo.InvariantCulture)); } } } }
public void BasicEmptyObject() { using (var context = new JsonOperationContext(1024, 1024 * 4, SharedMultipleUseFlag.None)) { using (var builder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(context)) { builder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); builder.StartWriteObjectDocument(); builder.StartWriteObject(); { builder.WriteObjectEnd(); } builder.FinalizeDocument(); var reader = builder.CreateReader(); Assert.Equal(0, reader.Count); } } }
public void BigDepthTest(int propertiesAmount) { using (var context = new JsonOperationContext(1024, 1024 * 4, SharedMultipleUseFlag.None)) { using (var builder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(context)) { builder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); builder.StartWriteObjectDocument(); builder.StartWriteObject(); for (int i = 0; i < propertiesAmount; i++) { builder.WritePropertyName("Data" + i); builder.StartWriteObject(); builder.WritePropertyName("Age" + i); builder.WriteValue(i); } for (int i = 0; i < propertiesAmount; i++) { builder.WriteObjectEnd(); } builder.WriteObjectEnd(); builder.FinalizeDocument(); var reader = builder.CreateReader(); Assert.Equal(1, reader.Count); for (var i = 0; i < propertiesAmount; i++) { reader = reader["Data" + i] as BlittableJsonReaderObject; var val = reader["Age" + i]; Assert.Equal(i, int.Parse(val.ToString(), CultureInfo.InvariantCulture)); } } } }
private MergeResult GenerateOutput(Dictionary <string, object> result, int indent) { using (var documentWriter = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(_context)) using (var metadataWriter = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(_context)) { documentWriter.Reset(BlittableJsonDocumentBuilder.UsageMode.None); metadataWriter.Reset(BlittableJsonDocumentBuilder.UsageMode.None); documentWriter.StartWriteObjectDocument(); metadataWriter.StartWriteObjectDocument(); documentWriter.StartWriteObject(); metadataWriter.StartWriteObject(); foreach (var o in result) { var resolver = o.Value as ConflictResolverAdvisor; if (resolver != null) { WriteConflictResolver(o.Key, documentWriter, metadataWriter, resolver, o.Key == Constants.Documents.Metadata.Key ? 0 : indent + 1); } else { WriteToken(o.Key == Constants.Documents.Metadata.Key ? metadataWriter : documentWriter, o.Key, o.Value); } } documentWriter.WriteObjectEnd(); metadataWriter.WriteObjectEnd(); documentWriter.FinalizeDocument(); metadataWriter.FinalizeDocument(); return(new MergeResult { Document = documentWriter.CreateReader(), Metadata = metadataWriter.CreateReader() }); } }
public void FlatObjectWithEmptyArray() { using (var context = new JsonOperationContext(1024, 1024 * 4, SharedMultipleUseFlag.None)) { using (var builder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(context)) { builder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); builder.StartWriteObjectDocument(); builder.StartWriteObject(); { builder.WritePropertyName("MyEmptyArray"); { builder.StartWriteArray(); { builder.WriteArrayEnd(); } } builder.WritePropertyName("Height"); { builder.WriteValue(55); } builder.WriteObjectEnd(); } builder.FinalizeDocument(); var reader = builder.CreateReader(); Assert.Equal(2, reader.Count); var array = reader["MyEmptyArray"] as BlittableJsonReaderArray; Assert.Equal(0, array.Length); Assert.Equal(55, int.Parse(reader["Height"].ToString(), CultureInfo.InvariantCulture)); } } }
public void Equals_blittables_created_manually() { using (var ctx = JsonOperationContext.ShortTermSingleUse()) { BlittableJsonReaderObject CreateBlittable() { using (var builder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(ctx)) using (var officeBuilder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(ctx)) using (var companyBuilder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(ctx)) { builder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); officeBuilder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); companyBuilder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); companyBuilder.StartWriteObjectDocument(); companyBuilder.StartWriteObject(); companyBuilder.WritePropertyName("Name"); companyBuilder.WriteValue("Hibernating Rhinos"); companyBuilder.WritePropertyName("Type"); companyBuilder.WriteValue("LTD"); companyBuilder.WriteObjectEnd(); companyBuilder.FinalizeDocument(); var embeddedCompany = companyBuilder.CreateReader(); officeBuilder.StartWriteObjectDocument(); officeBuilder.StartWriteObject(); officeBuilder.WritePropertyName("Company"); officeBuilder.WriteEmbeddedBlittableDocument(embeddedCompany); officeBuilder.WritePropertyName("Street"); officeBuilder.WriteValue("Hanasi 21"); officeBuilder.WritePropertyName("City"); officeBuilder.WriteValue("Hadera"); officeBuilder.WriteObjectEnd(); officeBuilder.FinalizeDocument(); var embeddedOffice = officeBuilder.CreateReader(); builder.StartWriteObjectDocument(); builder.StartWriteObject(); builder.WritePropertyName("Office"); builder.WriteEmbeddedBlittableDocument(embeddedOffice); builder.WriteObjectEnd(); builder.FinalizeDocument(); return(builder.CreateReader()); } } using (var blittable1 = CreateBlittable()) using (var blittable2 = CreateBlittable()) { Assert.Equal(blittable1, blittable2); Assert.Equal(blittable1.GetHashCode(), blittable2.GetHashCode()); blittable1.TryGet("Office", out BlittableJsonReaderObject ob1); blittable2.TryGet("Office", out BlittableJsonReaderObject ob2); Assert.Equal(ob1.GetHashCode(), ob2.GetHashCode()); Assert.Equal(ob1, ob2); } } }
public void Equals_when_creating_blittable_in_different_ways() { using (var ctx = JsonOperationContext.ShortTermSingleUse()) { using (var builder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(ctx)) using (var embeddedBuilder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(ctx)) { builder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); embeddedBuilder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); embeddedBuilder.StartWriteObjectDocument(); embeddedBuilder.StartWriteObject(); embeddedBuilder.WritePropertyName("Name"); embeddedBuilder.WriteValue("Hibernating Rhinos"); embeddedBuilder.WritePropertyName("Type"); embeddedBuilder.WriteValue("LTD"); embeddedBuilder.WriteObjectEnd(); embeddedBuilder.FinalizeDocument(); var embeddedCompany = embeddedBuilder.CreateReader(); builder.StartWriteObjectDocument(); builder.StartWriteObject(); builder.WritePropertyName("Company"); builder.WriteEmbeddedBlittableDocument(embeddedCompany); builder.WritePropertyName("Street"); builder.WriteValue("Hanasi 21"); builder.WritePropertyName("City"); builder.WriteValue("Hadera"); builder.WriteObjectEnd(); builder.FinalizeDocument(); var blittable1 = builder.CreateReader(); var json2 = new DynamicJsonValue() { ["Company"] = new DynamicJsonValue() { ["Name"] = "Hibernating Rhinos", ["Type"] = "LTD", }, ["Street"] = "Hanasi 21", ["City"] = "Hadera", }; using (var blittable2 = ctx.ReadObject(json2, "foo")) { Assert.Equal(blittable1, blittable2); Assert.Equal(blittable1.GetHashCode(), blittable2.GetHashCode()); blittable1.TryGet("Company", out BlittableJsonReaderObject ob1); blittable2.TryGet("Company", out BlittableJsonReaderObject ob2); Assert.Equal(ob1.GetHashCode(), ob2.GetHashCode()); Assert.Equal(ob1, ob2); } } } }
public BlittableJsonReaderObject CreateReader() { return(_manualBlittableJsonDocumentBuilder.CreateReader()); }
public unsafe void ReadDataTypesTest() { using (var context = new JsonOperationContext(1024, 1024 * 4, SharedMultipleUseFlag.None)) { BlittableJsonReaderObject embeddedReader; using (var builder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(context)) { builder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); builder.StartWriteObjectDocument(); builder.StartWriteObject(); builder.WritePropertyName("Value"); builder.WriteValue(1000); builder.WriteObjectEnd(); builder.FinalizeDocument(); embeddedReader = builder.CreateReader(); } using (var builder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(context)) { var lonEscapedCharsString = string.Join(",", Enumerable.Repeat("\"Cool\"", 200).ToArray()); var longEscapedCharsAndNonAsciiString = string.Join(",", Enumerable.Repeat("\"מגניב\"", 200).ToArray()); builder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); builder.StartWriteObjectDocument(); builder.StartWriteObject(); builder.WritePropertyName("FloatMin"); builder.WriteValue(float.MinValue); builder.WritePropertyName("FloatMax"); builder.WriteValue(float.MaxValue); builder.WritePropertyName("UshortMin"); builder.WriteValue(ushort.MinValue); builder.WritePropertyName("UshortMax"); builder.WriteValue(ushort.MaxValue); builder.WritePropertyName("UintMin"); builder.WriteValue(uint.MinValue); builder.WritePropertyName("UintMax"); builder.WriteValue(uint.MaxValue); builder.WritePropertyName("DoubleMin"); builder.WriteValue(double.MinValue); builder.WritePropertyName("DoubleMax"); builder.WriteValue(double.MaxValue); builder.WritePropertyName("LongMin"); builder.WriteValue(long.MinValue); builder.WritePropertyName("LongMax"); builder.WriteValue(long.MaxValue); builder.WritePropertyName("StringEmpty"); builder.WriteValue(string.Empty); builder.WritePropertyName("StringSimple"); builder.WriteValue("StringSimple"); builder.WritePropertyName("StringEscapedChars"); builder.WriteValue("\"Cool\""); builder.WritePropertyName("StringLongEscapedChars"); builder.WriteValue(lonEscapedCharsString); builder.WritePropertyName("StringEscapedCharsAndNonAscii"); builder.WriteValue(longEscapedCharsAndNonAsciiString); var lsvString = "\"fooאbar\""; var lsvStringBytes = Encoding.UTF8.GetBytes(lsvString); fixed(byte *b = lsvStringBytes) { var escapePositionsMaxSize = JsonParserState.FindEscapePositionsMaxSize(lsvString); var lsv = context.AllocateStringValue(null, b, lsvStringBytes.Length); var escapePositions = new FastList <int>(); var len = lsvStringBytes.Length; JsonParserState.FindEscapePositionsIn(escapePositions, b, ref len, escapePositionsMaxSize); lsv.EscapePositions = escapePositions.ToArray(); builder.WritePropertyName("LSVString"); builder.WriteValue(lsv); } builder.WritePropertyName("Embedded"); builder.WriteEmbeddedBlittableDocument(embeddedReader); builder.WriteObjectEnd(); builder.FinalizeDocument(); var reader = builder.CreateReader(); reader.BlittableValidation(); Assert.Equal(17, reader.Count); Assert.Equal(float.MinValue, float.Parse(reader["FloatMin"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(float.MaxValue, float.Parse(reader["FloatMax"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(ushort.MinValue, ushort.Parse(reader["UshortMin"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(ushort.MaxValue, ushort.Parse(reader["UshortMax"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(uint.MinValue, uint.Parse(reader["UintMin"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(uint.MaxValue, uint.Parse(reader["UintMax"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(double.MinValue, double.Parse(reader["DoubleMin"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(double.MaxValue, double.Parse(reader["DoubleMax"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(long.MinValue, long.Parse(reader["LongMin"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(long.MaxValue, long.Parse(reader["LongMax"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(string.Empty, reader["StringEmpty"].ToString()); Assert.Equal("StringSimple", reader["StringSimple"].ToString()); Assert.Equal("\"Cool\"", reader["StringEscapedChars"].ToString()); Assert.Equal(lonEscapedCharsString, reader["StringLongEscapedChars"].ToString()); Assert.Equal(longEscapedCharsAndNonAsciiString, reader["StringEscapedCharsAndNonAscii"].ToString()); Assert.Equal(lsvString, reader["LSVString"].ToString()); Assert.Equal(1000, int.Parse((reader["Embedded"] as BlittableJsonReaderObject)["Value"].ToString(), CultureInfo.InvariantCulture)); } } }
public void BasicIntDeeperNestedStructure() { using (var context = new JsonOperationContext(1024, 1024 * 4, SharedMultipleUseFlag.None)) { using (var builder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(context)) { builder.Reset(BlittableJsonDocumentBuilder.UsageMode.None); builder.StartWriteObjectDocument(); builder.StartWriteObject(); { builder.WritePropertyName("MegaData"); { builder.StartWriteObject(); { builder.WritePropertyName("Data"); { builder.StartWriteObject(); { builder.WritePropertyName("Volume"); { builder.WriteValue(44); } builder.WritePropertyName("Height"); { builder.WriteValue(55); } } } builder.WriteObjectEnd(); builder.WritePropertyName("@MetaData"); { builder.StartWriteObject(); { builder.WritePropertyName("Ticks"); { builder.WriteValue(22); } builder.WritePropertyName("Tacks"); { builder.WriteValue(11); } builder.WriteObjectEnd(); } } } builder.WriteObjectEnd(); } builder.WritePropertyName("MegaMetaData"); { builder.StartWriteObject(); { builder.WritePropertyName("MetaObject"); { builder.StartWriteObject(); { builder.WritePropertyName("Age"); { builder.WriteValue(78); } builder.WritePropertyName("Code"); { builder.WriteValue(100); } builder.WriteObjectEnd(); } builder.WritePropertyName("@MetaMetaData"); { builder.StartWriteObject(); { builder.WritePropertyName("Tricks"); { builder.WriteValue(2); } builder.WritePropertyName("Tracks"); { builder.WriteValue(111); } builder.WriteObjectEnd(); } } } builder.WriteObjectEnd(); } } builder.WriteObjectEnd(); } builder.FinalizeDocument(); using (var reader = builder.CreateReader()) { Assert.Equal(2, reader.Count); var megaData = reader["MegaData"] as BlittableJsonReaderObject; var data = megaData["Data"] as BlittableJsonReaderObject; Assert.Equal(2, data.Count); Assert.Equal(44, int.Parse(data["Volume"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(55, int.Parse(data["Height"].ToString(), CultureInfo.InvariantCulture)); var metadata = megaData["@MetaData"] as BlittableJsonReaderObject; Assert.Equal(2, metadata.Count); Assert.Equal(22, int.Parse(metadata["Ticks"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(11, int.Parse(metadata["Tacks"].ToString(), CultureInfo.InvariantCulture)); var megaMetaData = reader["MegaMetaData"] as BlittableJsonReaderObject; Assert.Equal(2, megaMetaData.Count); var metaObject = megaMetaData["MetaObject"] as BlittableJsonReaderObject; Assert.Equal(2, metaObject.Count); Assert.Equal(78, int.Parse(metaObject["Age"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(100, int.Parse(metaObject["Code"].ToString(), CultureInfo.InvariantCulture)); var metaMetaData = megaMetaData["@MetaMetaData"] as BlittableJsonReaderObject; Assert.Equal(2, metaMetaData.Count); Assert.Equal(2, int.Parse(metaMetaData["Tricks"].ToString(), CultureInfo.InvariantCulture)); Assert.Equal(111, int.Parse(metaMetaData["Tracks"].ToString(), CultureInfo.InvariantCulture)); } } } }