forked from ravendb/ravendb
-
Notifications
You must be signed in to change notification settings - Fork 2
/
IndexNestedFields.cs
95 lines (82 loc) · 2.2 KB
/
IndexNestedFields.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//-----------------------------------------------------------------------
// <copyright file="IndexNestedFields.cs" company="Hibernating Rhinos LTD">
// Copyright (c) Hibernating Rhinos LTD. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.Linq;
using Raven.Abstractions.Indexing;
using Raven.Client;
using Raven.Client.Indexes;
using Raven.Database.Indexing;
using Xunit;
namespace Raven.Tests.Bugs
{
public class IndexNestedFields : LocalClientTest
{
public class Outer
{
public Middle middle;
}
public class Middle
{
public Inner inner;
}
public class Inner
{
public int ID;
}
static int ExpectedId = 1234;
[Fact]
public void can_query_by_ID()
{
UsingPrepoulatedDatabase(delegate(IDocumentSession session3)
{
var results1 = session3.Advanced.LuceneQuery<Outer>("matryoshka").Where("ID:" + ExpectedId).ToArray();
Assert.Equal(ExpectedId, results1.Single().middle.inner.ID);
});
}
[Fact]
public void can_query_by_ID_with_linq()
{
UsingPrepoulatedDatabase(delegate(IDocumentSession session3)
{
var results1 = session3.Query<Outer>("matryoshka")
.Where(d => d.middle.inner.ID == ExpectedId)
.ToArray();
Assert.Equal(ExpectedId, results1.Single().middle.inner.ID);
});
}
void UsingPrepoulatedDatabase(Action<IDocumentSession> testOperation)
{
using (var store = base.NewDocumentStore())
{
store.DatabaseCommands.PutIndex("matryoshka", new IndexDefinitionBuilder<Outer, Outer>()
{
Map = docs => from doc in docs
select new { doc.middle.inner.ID},
Indexes = { {d => d.middle.inner.ID, FieldIndexing.NotAnalyzed }}
});
using(var session = store.OpenSession())
{
session.Store(new Outer
{
middle = new Middle()
{
inner = new Inner()
{
ID = ExpectedId
}
}
});
session.SaveChanges();
}
WaitForIndexing(store);
using (var session = store.OpenSession())
{
testOperation(session);
}
}
}
}
}