You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2017/04/18 09:00:19 UTC

[07/50] [abbrv] ignite git commit: IGNITE-4669 .NET: Sort binary object fields

IGNITE-4669 .NET: Sort binary object fields

This closes #1686


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/dff77389
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/dff77389
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/dff77389

Branch: refs/heads/ignite-4985
Commit: dff77389d8864ce66e176d828d72d209ef401820
Parents: 2a2e719
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Apr 17 17:34:36 2017 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Apr 17 17:34:36 2017 +0300

----------------------------------------------------------------------
 .../Binary/BinaryBuilderSelfTest.cs             | 32 ++++++++++++++++++--
 .../Binary/BinarySelfTest.cs                    | 20 ++++++------
 .../Cache/Query/CacheDmlQueriesTest.cs          |  4 +++
 .../Impl/Binary/BinaryObjectBuilder.cs          |  4 +--
 4 files changed, 45 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/dff77389/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryBuilderSelfTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryBuilderSelfTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryBuilderSelfTest.cs
index 63faaec..c104e15 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryBuilderSelfTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryBuilderSelfTest.cs
@@ -601,10 +601,10 @@ namespace Apache.Ignite.Core.Tests.Binary
 
             Assert.AreEqual(obj1, obj2);
 
-            Assert.AreEqual(1823354401, obj1.GetHashCode());
-            Assert.AreEqual(1823354401, obj2.GetHashCode());
+            Assert.AreEqual(-88648479, obj1.GetHashCode());
+            Assert.AreEqual(obj1.GetHashCode(), obj2.GetHashCode());
 
-            Assert.IsTrue(Regex.IsMatch(obj1.ToString(), @"myType \[idHash=[0-9]+, str=foo, int=1\]"));
+            Assert.AreEqual("myType [, int=1, str=foo]", Regex.Replace(obj1.ToString(), "idHash=\\d+", ""));
         }
 
         /// <summary>
@@ -1711,6 +1711,32 @@ namespace Apache.Ignite.Core.Tests.Binary
                 Assert.AreEqual(3, cache2[6].GetField<int>("foo2"));
             }
         }
+
+        /// <summary>
+        /// Tests that fields are sorted by name in serialized form.
+        /// </summary>
+        [Test]
+        public void TestFieldSorting()
+        {
+            var obj1 = (BinaryObject)_grid.GetBinary().GetBuilder("sortTest")
+                .SetByteField("c", 3).SetByteField("b", 1).SetByteField("a", 2).Build();
+
+            var obj2 = (BinaryObject)_grid.GetBinary().GetBuilder("sortTest")
+                .SetByteField("b", 1).SetByteField("a", 2).SetByteField("c", 3).Build();
+
+            Assert.AreEqual(obj1, obj2);
+            Assert.AreEqual(obj1.GetHashCode(), obj2.GetHashCode());
+
+            Assert.AreEqual("sortTest [, a=2, b=1, c=3]", Regex.Replace(obj1.ToString(), "idHash=\\d+", ""));
+
+            // Skip header, take 3 fields (type code + value).
+            var bytes1 = obj1.Data.Skip(24).Take(6).ToArray();
+            var bytes2 = obj2.Data.Skip(24).Take(6).ToArray();
+            
+            Assert.AreEqual(bytes1, bytes2);
+
+            Assert.AreEqual(new[] {1, 2, 1, 1, 1, 3}, bytes1);
+        }
     }
 
     /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/dff77389/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs
index 06fbe48..bde8166 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs
@@ -2392,21 +2392,21 @@ namespace Apache.Ignite.Core.Tests.Binary
 
             public void WriteBinary(IBinaryWriter writer)
             {
-                writer.WriteCollection("col", Collection);
-                writer.WriteDictionary("dict", Dictionary);
-                writer.WriteObject("dictEntry", DictionaryEntry);
-                writer.WriteObject("obj", Object);
-                writer.WriteArray("arr", Array);
+                writer.WriteCollection("1col", Collection);
+                writer.WriteDictionary("2dict", Dictionary);
+                writer.WriteObject("3dictEntry", DictionaryEntry);
+                writer.WriteObject("4obj", Object);
+                writer.WriteArray("5arr", Array);
                 writer.GetRawWriter().WriteCollection(CollectionRaw);
             }
 
             public void ReadBinary(IBinaryReader reader)
             {
-                Collection = reader.ReadCollection("col");
-                Dictionary = reader.ReadDictionary("dict");
-                DictionaryEntry = reader.ReadObject<DictionaryEntry>("dictEntry");
-                Object = reader.ReadObject<object>("obj");
-                Array = reader.ReadArray<object>("arr");
+                Collection = reader.ReadCollection("1col");
+                Dictionary = reader.ReadDictionary("2dict");
+                DictionaryEntry = reader.ReadObject<DictionaryEntry>("3dictEntry");
+                Object = reader.ReadObject<object>("4obj");
+                Array = reader.ReadArray<object>("5arr");
                 CollectionRaw = reader.GetRawReader().ReadCollection();
             }
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/dff77389/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/CacheDmlQueriesTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/CacheDmlQueriesTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/CacheDmlQueriesTest.cs
index d687894..6afeff4 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/CacheDmlQueriesTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/CacheDmlQueriesTest.cs
@@ -127,11 +127,15 @@ namespace Apache.Ignite.Core.Tests.Cache.Query
             Assert.IsTrue(cache.ContainsKey(foos[0].Key));
             Assert.IsTrue(binCache.ContainsKey(
                 binary.GetBuilder(typeof(Key)).SetField("hi", 1).SetField("lo", 2).Build()));
+            Assert.IsTrue(binCache.ContainsKey(  // Fields are sorted.
+                binary.GetBuilder(typeof(Key)).SetField("lo", 2).SetField("hi", 1).Build()));
 
             Assert.IsTrue(cache.ContainsKey(new Key(5, 4)));
             Assert.IsTrue(cache.ContainsKey(foos[1].Key));
             Assert.IsTrue(binCache.ContainsKey(
                 binary.GetBuilder(typeof(Key)).SetField("hi", 4).SetField("lo", 5).Build()));
+            Assert.IsTrue(binCache.ContainsKey(  // Fields are sorted.
+                binary.GetBuilder(typeof(Key)).SetField("lo", 5).SetField("hi", 4).Build()));
         }
 
         /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/dff77389/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryObjectBuilder.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryObjectBuilder.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryObjectBuilder.cs
index 41c7305..91fe12a 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryObjectBuilder.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryObjectBuilder.cs
@@ -49,7 +49,7 @@ namespace Apache.Ignite.Core.Impl.Binary
         private readonly IBinaryTypeDescriptor _desc;
 
         /** Values. */
-        private IDictionary<string, BinaryBuilderField> _vals;
+        private SortedDictionary<string, BinaryBuilderField> _vals;
 
         /** Contextual fields. */
         private IDictionary<int, BinaryBuilderField> _cache;
@@ -476,7 +476,7 @@ namespace Apache.Ignite.Core.Impl.Binary
         private IBinaryObjectBuilder SetField0(string fieldName, BinaryBuilderField val)
         {
             if (_vals == null)
-                _vals = new Dictionary<string, BinaryBuilderField>();
+                _vals = new SortedDictionary<string, BinaryBuilderField>();
 
             _vals[fieldName] = val;