Skip to content

Commit ac8b8bd

Browse files
committed
add OneColumnIterator
Change-Id: Ib422fb1f126e11cf331464ac7f9e05ad0564846d
1 parent 3c68818 commit ac8b8bd

File tree

2 files changed

+73
-31
lines changed

2 files changed

+73
-31
lines changed

hugegraph-core/src/main/java/com/baidu/hugegraph/backend/store/BackendEntry.java

Lines changed: 71 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
package com.baidu.hugegraph.backend.store;
2121

22-
import java.util.Arrays;
2322
import java.util.Collection;
2423
import java.util.Iterator;
2524
import java.util.NoSuchElementException;
@@ -117,7 +116,18 @@ public static BackendColumnIterator empty() {
117116
return EMPTY;
118117
}
119118

120-
public final BackendColumnIterator EMPTY = new BackendColumnIterator() {
119+
public static BackendColumnIterator iterator(BackendColumn element) {
120+
return new OneColumnIterator(element);
121+
}
122+
123+
public static BackendColumnIterator wrap(Iterator<BackendColumn> iter) {
124+
return new BackendColumnIteratorWrapper(iter);
125+
}
126+
127+
public static final BackendColumnIterator EMPTY = new EmptyIterator();
128+
129+
public static final class EmptyIterator
130+
implements BackendColumnIterator {
121131

122132
@Override
123133
public boolean hasNext() {
@@ -138,41 +148,74 @@ public void close() {
138148
public byte[] position() {
139149
return null;
140150
}
141-
};
142-
}
151+
}
143152

144-
public static class BackendColumnIteratorWrapper
145-
implements BackendColumnIterator {
153+
public static final class OneColumnIterator
154+
implements BackendColumnIterator {
146155

147-
private final Iterator<BackendColumn> iter;
156+
private BackendColumn element;
148157

149-
public BackendColumnIteratorWrapper(BackendColumn... cols) {
150-
this.iter = Arrays.asList(cols).iterator();
151-
}
158+
public OneColumnIterator(BackendColumn element) {
159+
assert element != null;
160+
this.element = element;
161+
}
152162

153-
public BackendColumnIteratorWrapper(Iterator<BackendColumn> cols) {
154-
E.checkNotNull(cols, "cols");
155-
this.iter = cols;
156-
}
163+
@Override
164+
public boolean hasNext() {
165+
return this.element != null;
166+
}
157167

158-
@Override
159-
public boolean hasNext() {
160-
return iter.hasNext();
161-
}
168+
@Override
169+
public BackendColumn next() {
170+
if (this.element == null) {
171+
throw new NoSuchElementException();
172+
}
173+
BackendColumn result = this.element;
174+
this.element = null;
175+
return result;
176+
}
162177

163-
@Override
164-
public BackendColumn next() {
165-
return iter.next();
166-
}
178+
@Override
179+
public void close() {
180+
// pass
181+
}
167182

168-
@Override
169-
public void close() {
170-
WrappedIterator.close(this.iter);
183+
@Override
184+
public byte[] position() {
185+
return null;
186+
}
171187
}
172188

173-
@Override
174-
public byte[] position() {
175-
return null;
189+
public static final class BackendColumnIteratorWrapper
190+
implements BackendColumnIterator {
191+
192+
private final Iterator<BackendColumn> iter;
193+
194+
public BackendColumnIteratorWrapper(Iterator<BackendColumn> iter) {
195+
E.checkNotNull(iter, "iter");
196+
this.iter = iter;
197+
}
198+
199+
@Override
200+
public boolean hasNext() {
201+
return this.iter.hasNext();
202+
}
203+
204+
@Override
205+
public BackendColumn next() {
206+
return this.iter.next();
207+
}
208+
209+
@Override
210+
public void close() {
211+
WrappedIterator.close(this.iter);
212+
}
213+
214+
@Override
215+
public byte[] position() {
216+
// No paging position for discrete iterators like queryByIds()
217+
return null;
218+
}
176219
}
177220
}
178221
}

hugegraph-rocksdb/src/main/java/com/baidu/hugegraph/backend/store/rocksdb/RocksDBTable.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import com.baidu.hugegraph.backend.store.BackendEntry;
4545
import com.baidu.hugegraph.backend.store.BackendEntry.BackendColumn;
4646
import com.baidu.hugegraph.backend.store.BackendEntry.BackendColumnIterator;
47-
import com.baidu.hugegraph.backend.store.BackendEntry.BackendColumnIteratorWrapper;
4847
import com.baidu.hugegraph.backend.store.BackendEntryIterator;
4948
import com.baidu.hugegraph.backend.store.BackendTable;
5049
import com.baidu.hugegraph.backend.store.Shard;
@@ -199,7 +198,7 @@ protected BackendColumnIterator queryByIds(Session session,
199198
}
200199

201200
// NOTE: this will lead to lazy create rocksdb iterator
202-
return new BackendColumnIteratorWrapper(new FlatMapperIterator<>(
201+
return BackendColumnIterator.wrap(new FlatMapperIterator<>(
203202
ids.iterator(), id -> this.queryById(session, id)
204203
));
205204
}
@@ -210,7 +209,7 @@ protected BackendColumnIterator getById(Session session, Id id) {
210209
return BackendColumnIterator.empty();
211210
}
212211
BackendColumn col = BackendColumn.of(id.asBytes(), value);
213-
return new BackendEntry.BackendColumnIteratorWrapper(col);
212+
return BackendColumnIterator.iterator(col);
214213
}
215214

216215
protected BackendColumnIterator getByIds(Session session, Set<Id> ids) {

0 commit comments

Comments
 (0)