Skip to content

Commit

Permalink
Merge pull request #206 from Henr1k80/master
Browse files Browse the repository at this point in the history
Enable parsing of statnodes like <null name="min" /> <double name="mean">NaN</double>
  • Loading branch information
mausch committed Jul 16, 2015
2 parents 624ac30 + 67e9b6c commit 1ee89a4
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 14 deletions.
12 changes: 11 additions & 1 deletion SolrNet.Tests/Resources/responseWithStats.xml
Expand Up @@ -41,6 +41,16 @@
</lst>
</lst>
</lst>
<lst name="zeroResults">
<null name="min"/>
<null name="max"/>
<long name="count">0</long>
<long name="missing">0</long>
<double name="sum">0.0</double>
<double name="sumOfSquares">0.0</double>
<double name="mean">NaN</double>
<double name="stddev">0.0</double>
</lst>
</lst>
</lst>
</response>
</response>
12 changes: 11 additions & 1 deletion SolrNet.Tests/SolrQueryResultsParserTests.cs
Expand Up @@ -588,7 +588,7 @@ public void ParseTermVector()
var xml = EmbeddedResource.GetEmbeddedXml(GetType(), "Resources.responseWithStats.xml");
var docNode = xml.XPathSelectElement("response/lst[@name='stats']");
var stats = parser.ParseStats(docNode, "stats_fields");
Assert.AreEqual(1, stats.Count);
Assert.AreEqual(2, stats.Count);
Assert.IsTrue(stats.ContainsKey("price"));
var priceStats = stats["price"];
Assert.AreEqual(0.0, priceStats.Min);
Expand Down Expand Up @@ -623,6 +623,16 @@ public void ParseTermVector()
Assert.AreEqual(5385249.905200001, priceInStockTrueStats.SumOfSquares);
Assert.AreEqual(371.8072727272727, priceInStockTrueStats.Mean);
Assert.AreEqual(621.6592938755265, priceInStockTrueStats.StdDev);

var zeroResultsStats = stats["zeroResults"];
Assert.AreEqual(double.NaN, zeroResultsStats.Min);
Assert.AreEqual(double.NaN, zeroResultsStats.Max);
Assert.AreEqual(0, zeroResultsStats.Count);
Assert.AreEqual(0, zeroResultsStats.Missing);
Assert.AreEqual(0.0, zeroResultsStats.Sum);
Assert.AreEqual(0.0, zeroResultsStats.SumOfSquares);
Assert.AreEqual(double.NaN, zeroResultsStats.Mean);
Assert.AreEqual(0.0, zeroResultsStats.StdDev);
}

[Test]
Expand Down
31 changes: 19 additions & 12 deletions SolrNet/Impl/ResponseParsers/StatsResponseParser.cs
Expand Up @@ -69,23 +69,23 @@ public class StatsResponseParser<T> : ISolrResponseParser<T> {
foreach (var statNode in node.Elements()) {
var name = statNode.Attribute("name").Value;
switch (name) {
case "min":
r.Min = Convert.ToDouble( statNode.Value, CultureInfo.InvariantCulture );
case "min":
r.Min = GetDoubleValue(statNode);
break;
case "max":
r.Max = Convert.ToDouble( statNode.Value, CultureInfo.InvariantCulture );
case "max":
r.Max = GetDoubleValue(statNode);
break;
case "sum":
r.Sum = Convert.ToDouble( statNode.Value, CultureInfo.InvariantCulture );
case "sum":
r.Sum = GetDoubleValue(statNode);
break;
case "sumOfSquares":
r.SumOfSquares = Convert.ToDouble( statNode.Value, CultureInfo.InvariantCulture );
case "sumOfSquares":
r.SumOfSquares = GetDoubleValue(statNode);
break;
case "mean":
r.Mean = Convert.ToDouble( statNode.Value, CultureInfo.InvariantCulture );
case "mean":
r.Mean = GetDoubleValue(statNode);
break;
case "stddev":
r.StdDev = Convert.ToDouble( statNode.Value, CultureInfo.InvariantCulture );
case "stddev":
r.StdDev = GetDoubleValue(statNode);
break;
case "count":
r.Count = Convert.ToInt64( statNode.Value, CultureInfo.InvariantCulture );
Expand All @@ -100,5 +100,12 @@ public class StatsResponseParser<T> : ISolrResponseParser<T> {
}
return r;
}

private static double GetDoubleValue(XElement statNode) {
double parsedValue;
if (!double.TryParse(statNode.Value, NumberStyles.Float, CultureInfo.InvariantCulture, out parsedValue))
parsedValue = double.NaN;
return parsedValue;
}
}
}

0 comments on commit 1ee89a4

Please sign in to comment.