From bf48ba12e72d4e28dc203cf7365beea14d4f69be Mon Sep 17 00:00:00 2001 From: Ashkan Daie Date: Wed, 15 Oct 2014 12:08:57 -0700 Subject: [PATCH 1/4] Fixed bug with RangeItem serialization. --- .../Converters/Aggregations/AggregationConverter.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs b/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs index 14f20bb2297..5159fa7fb37 100644 --- a/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs +++ b/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs @@ -366,13 +366,11 @@ public IAggregation GetRangeAggregation(JsonReader reader, JsonSerializer serial reader.Read(); break; case "from_as_string": - reader.Read(); - fromAsString = reader.Value as string; + fromAsString = reader.ReadAsString(); reader.Read(); break; case "to_as_string": - reader.Read(); - toAsString = reader.Value as string; + toAsString = reader.ReadAsString(); reader.Read(); break; case "doc_count": From 2132664731ecaadab831c99b4426bc4bd65bafd5 Mon Sep 17 00:00:00 2001 From: Ashkan Daie Date: Wed, 15 Oct 2014 12:41:44 -0700 Subject: [PATCH 2/4] Updated DateRangeItem UnitTest to check for valid to_as_string and from_as_string. --- .../Aggregations/ParseResponseItemsTests.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs b/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs index be1a1de580a..963b8b27b73 100644 --- a/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs +++ b/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using Elasticsearch.Net; using FluentAssertions; using Nest.Tests.MockData.Domain; @@ -180,6 +181,20 @@ public void DateRangeItem() firstAgg.Items.Should().NotBeEmpty(); var grams = firstAgg.Items.OfType(); grams.Should().NotBeEmpty(); + var firstRange = grams.FirstOrDefault(); + firstRange.Should().NotBeNull(); + firstRange.To.Should().HaveValue(); + firstRange.ToAsString.Should().NotBeNull(); + var firstRangeToDateLeft = firstRange.To.Value.JavaTimeStampToDateTime(); + var firstRangeToDateRight = DateTime.Parse(firstRange.ToAsString); + firstRangeToDateLeft.Should().Be(firstRangeToDateRight); + var lastRange = grams.LastOrDefault(); + lastRange.Should().NotBeNull(); + lastRange.From.Should().HaveValue(); + lastRange.FromAsString.Should().NotBeNull(); + var LastRangeFromDateLeft = lastRange.From.Value.JavaTimeStampToDateTime(); + var LastRangeFromDateRight = DateTime.Parse(lastRange.FromAsString); + LastRangeFromDateLeft.Should().Be(LastRangeFromDateRight); } [Test] public void IpRangeItem() From f6f13d830e410a875af45c6830ff5cd8f12a34c7 Mon Sep 17 00:00:00 2001 From: Ashkan Daie Date: Wed, 15 Oct 2014 15:17:45 -0700 Subject: [PATCH 3/4] Fixed other potential JSON.NET deserialization of DateTime property values --- .../Aggregations/AggregationConverter.cs | 16 ++++++---------- .../Converters/FieldNameQueryConverter.cs | 3 +-- .../Filters/GeoBoundingFilterConverter.cs | 9 +++------ .../Aggregations/ParseResponseItemsTests.cs | 14 +++++++------- 4 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs b/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs index 5159fa7fb37..d689f8b0f9e 100644 --- a/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs +++ b/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs @@ -199,8 +199,7 @@ private IAggregation GetStatsAggregation(JsonReader reader, JsonSerializer seria private IAggregation GetDateHistogramAggregation(JsonReader reader, JsonSerializer serializer) { - reader.Read(); - var keyAsString = reader.Value as string; + var keyAsString = reader.ReadAsString(); reader.Read(); reader.Read(); var key = (reader.Value as long?).GetValueOrDefault(0); reader.Read(); reader.Read(); @@ -215,21 +214,19 @@ private IAggregation GetDateHistogramAggregation(JsonReader reader, JsonSerializ private IAggregation GetKeyedBucketItem(JsonReader reader, JsonSerializer serializer) { - reader.Read(); - var key = reader.Value; + var key = reader.ReadAsString(); reader.Read(); var property = reader.Value as string; if (property == "from" || property == "to") - return GetRangeAggregation(reader, serializer, key.ToString()); + return GetRangeAggregation(reader, serializer, key); var keyItem = new KeyItem(); - keyItem.Key = key.ToString(); + keyItem.Key = key; if (property == "key_as_string") { - reader.Read(); - keyItem.KeyAsString = reader.Value.ToString(); + keyItem.KeyAsString = reader.ReadAsString(); reader.Read(); } @@ -361,8 +358,7 @@ public IAggregation GetRangeAggregation(JsonReader reader, JsonSerializer serial reader.Read(); break; case "key": - reader.Read(); - key = reader.Value as string; + key = reader.ReadAsString(); reader.Read(); break; case "from_as_string": diff --git a/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs b/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs index 061be94dacc..a43335c2671 100644 --- a/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs +++ b/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs @@ -42,8 +42,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist var depth = reader.Depth; if (reader.TokenType != JsonToken.StartObject) return null; - reader.Read(); - var fieldName = reader.Value as string; + var fieldName = reader.ReadAsString(); reader.Read(); var query = this._reader.ReadJson(reader, objectType, existingValue, serializer); var setter = query as IFieldNameQuery; diff --git a/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs b/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs index a14899bc02a..ab7bf564721 100644 --- a/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs +++ b/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs @@ -79,16 +79,13 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist f.Cache = reader.Value as bool?; break; case "_name": - reader.Read(); - f.FilterName = reader.Value as string; + f.FilterName = reader.ReadAsString(); break; case "_cache_key": - reader.Read(); - f.CacheKey = reader.Value as string; + f.CacheKey = reader.ReadAsString(); break; case "type": - reader.Read(); - f.GeoExecution = (reader.Value as string).ToEnum(); + f.GeoExecution = reader.ReadAsString().ToEnum(); break; default: f.Field = property; diff --git a/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs b/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs index 963b8b27b73..e260729bcc2 100644 --- a/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs +++ b/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs @@ -185,16 +185,16 @@ public void DateRangeItem() firstRange.Should().NotBeNull(); firstRange.To.Should().HaveValue(); firstRange.ToAsString.Should().NotBeNull(); - var firstRangeToDateLeft = firstRange.To.Value.JavaTimeStampToDateTime(); - var firstRangeToDateRight = DateTime.Parse(firstRange.ToAsString); - firstRangeToDateLeft.Should().Be(firstRangeToDateRight); - var lastRange = grams.LastOrDefault(); + var firstRangeToDateLeft = firstRange.To.Value.JavaTimeStampToDateTime(); + var firstRangeToDateRight = DateTime.Parse(firstRange.ToAsString); + firstRangeToDateLeft.Should().Be(firstRangeToDateRight); + var lastRange = grams.LastOrDefault(); lastRange.Should().NotBeNull(); lastRange.From.Should().HaveValue(); lastRange.FromAsString.Should().NotBeNull(); - var LastRangeFromDateLeft = lastRange.From.Value.JavaTimeStampToDateTime(); - var LastRangeFromDateRight = DateTime.Parse(lastRange.FromAsString); - LastRangeFromDateLeft.Should().Be(LastRangeFromDateRight); + var lastRangeFromDateLeft = lastRange.From.Value.JavaTimeStampToDateTime(); + var lastRangeFromDateRight = DateTime.Parse(lastRange.FromAsString); + lastRangeFromDateLeft.Should().Be(lastRangeFromDateRight); } [Test] public void IpRangeItem() From 4ad890f22418463c8fcdd88e7211dc0b883a6a2d Mon Sep 17 00:00:00 2001 From: Ashkan Daie Date: Wed, 15 Oct 2014 15:57:24 -0700 Subject: [PATCH 4/4] Revert "Fixed other potential JSON.NET deserialization of DateTime property values" This reverts commit f6f13d830e410a875af45c6830ff5cd8f12a34c7. --- .../Aggregations/AggregationConverter.cs | 16 ++++++++++------ .../Converters/FieldNameQueryConverter.cs | 3 ++- .../Filters/GeoBoundingFilterConverter.cs | 9 ++++++--- .../Aggregations/ParseResponseItemsTests.cs | 14 +++++++------- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs b/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs index d689f8b0f9e..5159fa7fb37 100644 --- a/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs +++ b/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs @@ -199,7 +199,8 @@ private IAggregation GetStatsAggregation(JsonReader reader, JsonSerializer seria private IAggregation GetDateHistogramAggregation(JsonReader reader, JsonSerializer serializer) { - var keyAsString = reader.ReadAsString(); + reader.Read(); + var keyAsString = reader.Value as string; reader.Read(); reader.Read(); var key = (reader.Value as long?).GetValueOrDefault(0); reader.Read(); reader.Read(); @@ -214,19 +215,21 @@ private IAggregation GetDateHistogramAggregation(JsonReader reader, JsonSerializ private IAggregation GetKeyedBucketItem(JsonReader reader, JsonSerializer serializer) { - var key = reader.ReadAsString(); + reader.Read(); + var key = reader.Value; reader.Read(); var property = reader.Value as string; if (property == "from" || property == "to") - return GetRangeAggregation(reader, serializer, key); + return GetRangeAggregation(reader, serializer, key.ToString()); var keyItem = new KeyItem(); - keyItem.Key = key; + keyItem.Key = key.ToString(); if (property == "key_as_string") { - keyItem.KeyAsString = reader.ReadAsString(); + reader.Read(); + keyItem.KeyAsString = reader.Value.ToString(); reader.Read(); } @@ -358,7 +361,8 @@ public IAggregation GetRangeAggregation(JsonReader reader, JsonSerializer serial reader.Read(); break; case "key": - key = reader.ReadAsString(); + reader.Read(); + key = reader.Value as string; reader.Read(); break; case "from_as_string": diff --git a/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs b/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs index a43335c2671..061be94dacc 100644 --- a/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs +++ b/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs @@ -42,7 +42,8 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist var depth = reader.Depth; if (reader.TokenType != JsonToken.StartObject) return null; - var fieldName = reader.ReadAsString(); + reader.Read(); + var fieldName = reader.Value as string; reader.Read(); var query = this._reader.ReadJson(reader, objectType, existingValue, serializer); var setter = query as IFieldNameQuery; diff --git a/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs b/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs index ab7bf564721..a14899bc02a 100644 --- a/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs +++ b/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs @@ -79,13 +79,16 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist f.Cache = reader.Value as bool?; break; case "_name": - f.FilterName = reader.ReadAsString(); + reader.Read(); + f.FilterName = reader.Value as string; break; case "_cache_key": - f.CacheKey = reader.ReadAsString(); + reader.Read(); + f.CacheKey = reader.Value as string; break; case "type": - f.GeoExecution = reader.ReadAsString().ToEnum(); + reader.Read(); + f.GeoExecution = (reader.Value as string).ToEnum(); break; default: f.Field = property; diff --git a/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs b/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs index e260729bcc2..963b8b27b73 100644 --- a/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs +++ b/src/Tests/Nest.Tests.Integration/Aggregations/ParseResponseItemsTests.cs @@ -185,16 +185,16 @@ public void DateRangeItem() firstRange.Should().NotBeNull(); firstRange.To.Should().HaveValue(); firstRange.ToAsString.Should().NotBeNull(); - var firstRangeToDateLeft = firstRange.To.Value.JavaTimeStampToDateTime(); - var firstRangeToDateRight = DateTime.Parse(firstRange.ToAsString); - firstRangeToDateLeft.Should().Be(firstRangeToDateRight); - var lastRange = grams.LastOrDefault(); + var firstRangeToDateLeft = firstRange.To.Value.JavaTimeStampToDateTime(); + var firstRangeToDateRight = DateTime.Parse(firstRange.ToAsString); + firstRangeToDateLeft.Should().Be(firstRangeToDateRight); + var lastRange = grams.LastOrDefault(); lastRange.Should().NotBeNull(); lastRange.From.Should().HaveValue(); lastRange.FromAsString.Should().NotBeNull(); - var lastRangeFromDateLeft = lastRange.From.Value.JavaTimeStampToDateTime(); - var lastRangeFromDateRight = DateTime.Parse(lastRange.FromAsString); - lastRangeFromDateLeft.Should().Be(lastRangeFromDateRight); + var LastRangeFromDateLeft = lastRange.From.Value.JavaTimeStampToDateTime(); + var LastRangeFromDateRight = DateTime.Parse(lastRange.FromAsString); + LastRangeFromDateLeft.Should().Be(LastRangeFromDateRight); } [Test] public void IpRangeItem()