From 14836df51193269e94395e2799f079d90d673055 Mon Sep 17 00:00:00 2001 From: Fitzchak Yitzchaki Date: Thu, 7 Feb 2013 13:26:39 +0200 Subject: [PATCH] RavenDB-769 Issue with SelectMany() in index map --- Raven.Abstractions/Linq/DynamicJsonObject.cs | 12 ++++++++---- Raven.Database/Indexing/SimpleIndex.cs | 2 +- Raven.Tests/Linq/SelectManyShouldWork.cs | 6 +++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Raven.Abstractions/Linq/DynamicJsonObject.cs b/Raven.Abstractions/Linq/DynamicJsonObject.cs index 6697714bfafa..48b5ea1a30f6 100644 --- a/Raven.Abstractions/Linq/DynamicJsonObject.cs +++ b/Raven.Abstractions/Linq/DynamicJsonObject.cs @@ -219,12 +219,16 @@ public object TransformToValue(RavenJToken jToken) } private RavenJObject FindReference(string refId) + { + return GetRootParentOrSelf().Scan().FirstOrDefault(x => x.Value("$id") == refId); + } + + public DynamicJsonObject GetRootParentOrSelf() { var p = this; while (p.parent != null) p = p.parent; - - return p.Scan().FirstOrDefault(x => x.Value("$id") == refId); + return p; } private IEnumerable Scan() @@ -294,7 +298,7 @@ public object GetValue(string name) { if (name == Constants.DocumentIdFieldName) { - return GetDocumentId(); + return GetRootParentOrSelf().GetDocumentId(); } RavenJToken value; if (inner.TryGetValue(name, out value)) @@ -310,7 +314,7 @@ public object GetValue(string name) } if (name == "Id") { - return GetDocumentId(); + return GetRootParentOrSelf().GetDocumentId(); } if (name == "Inner") { diff --git a/Raven.Database/Indexing/SimpleIndex.cs b/Raven.Database/Indexing/SimpleIndex.cs index 69e2d45a26de..08ef2cd0c2d9 100644 --- a/Raven.Database/Indexing/SimpleIndex.cs +++ b/Raven.Database/Indexing/SimpleIndex.cs @@ -212,7 +212,7 @@ private class IndexingResult private IndexingResult ExtractIndexDataFromDocument(AnonymousObjectToLuceneDocumentConverter anonymousObjectToLuceneDocumentConverter, DynamicJsonObject dynamicJsonObject) { - var newDocId = dynamicJsonObject.GetDocumentId(); + var newDocId = dynamicJsonObject.GetRootParentOrSelf().GetDocumentId(); return new IndexingResult { Fields = anonymousObjectToLuceneDocumentConverter.Index(((IDynamicJsonObject)dynamicJsonObject).Inner, Field.Store.NO).ToList(), diff --git a/Raven.Tests/Linq/SelectManyShouldWork.cs b/Raven.Tests/Linq/SelectManyShouldWork.cs index a4fcc60f561c..8008cd7d3aec 100644 --- a/Raven.Tests/Linq/SelectManyShouldWork.cs +++ b/Raven.Tests/Linq/SelectManyShouldWork.cs @@ -138,7 +138,11 @@ public Creatives_ClickActions_2() { Map = snapshots => snapshots .SelectMany(x => x.ClickActions) - .Select(x => new {ClickedBy = x.ContactId, x.CreativeId}); + .Select(x => new + { + ClickedBy = new[] {x.ContactId}, + x.CreativeId + }); Reduce = result => result .GroupBy(x => x.CreativeId)