-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
IndexReader.java
137 lines (119 loc) · 4.27 KB
/
IndexReader.java
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
* Copyright (c) 2002-2016 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.storageengine.api.schema;
import org.neo4j.collection.primitive.PrimitiveLongCollections;
import org.neo4j.collection.primitive.PrimitiveLongIterator;
import org.neo4j.graphdb.Resource;
/**
* Reader for an index. Must honor repeatable reads, which means that if a lookup is executed multiple times the
* same result set must be returned.
*/
public interface IndexReader extends Resource
{
/**
* Searches this index for a certain value.
*
* @param value property value to search for.
* @return ids of matching nodes.
*/
PrimitiveLongIterator seek( Object value );
/**
* Searches this index for numerics values between {@code lower} and {@code upper}.
*
* @param lower lower numeric bound of search (inclusive).
* @param upper upper numeric bound of search (inclusive).
* @return ids of matching nodes.
*/
PrimitiveLongIterator rangeSeekByNumberInclusive( Number lower, Number upper );
/**
* Searches this index for string values between {@code lower} and {@code upper}.
*
* @param lower lower numeric bound of search.
* @param includeLower whether or not lower bound is inclusive.
* @param upper upper numeric bound of search.
* @param includeUpper whether or not upper bound is inclusive.
* @return ids of matching nodes.
*/
PrimitiveLongIterator rangeSeekByString( String lower, boolean includeLower, String upper, boolean includeUpper );
/**
* Searches this index for string values starting with {@code prefix}.
*
* @param prefix prefix that matching strings must start with.
* @return ids of matching nodes.
*/
PrimitiveLongIterator rangeSeekByPrefix( String prefix );
/**
* Scans this index returning all nodes.
*
* @return node ids in index.
*/
PrimitiveLongIterator scan();
/**
* @param nodeId node if to match.
* @param propertyValue property value to match.
* @return number of index entries for the given {@code nodeId} and {@code propertyValue}.
*/
int countIndexedNodes( long nodeId, Object propertyValue );
IndexSampler createSampler();
IndexReader EMPTY = new IndexReader()
{
@Override
public PrimitiveLongIterator seek( Object value )
{
return PrimitiveLongCollections.emptyIterator();
}
@Override
public PrimitiveLongIterator rangeSeekByNumberInclusive( Number lower, Number upper )
{
return PrimitiveLongCollections.emptyIterator();
}
@Override
public PrimitiveLongIterator rangeSeekByString( String lower, boolean includeLower,
String upper, boolean includeUpper )
{
return PrimitiveLongCollections.emptyIterator();
}
@Override
public PrimitiveLongIterator rangeSeekByPrefix( String prefix )
{
return PrimitiveLongCollections.emptyIterator();
}
@Override
public PrimitiveLongIterator scan()
{
return PrimitiveLongCollections.emptyIterator();
}
// Used for checking index correctness
@Override
public int countIndexedNodes( long nodeId, Object propertyValue )
{
return 0;
}
@Override
public IndexSampler createSampler()
{
return IndexSampler.EMPTY;
}
@Override
public void close()
{
}
};
}