Index: lucene/src/test/org/apache/lucene/TestExternalCodecs.java
===================================================================
--- lucene/src/test/org/apache/lucene/TestExternalCodecs.java (revision 944313)
+++ lucene/src/test/org/apache/lucene/TestExternalCodecs.java (working copy)
@@ -436,11 +436,6 @@
}
@Override
- public int getPayloadLength() {
- return 0;
- }
-
- @Override
public BytesRef getPayload() {
return null;
}
Index: lucene/src/test/org/apache/lucene/index/TestPayloads.java
===================================================================
--- lucene/src/test/org/apache/lucene/index/TestPayloads.java (revision 944313)
+++ lucene/src/test/org/apache/lucene/index/TestPayloads.java (working copy)
@@ -309,14 +309,6 @@
* Test multiple call of getPayload()
*/
tp.getPayload(null, 0);
- try {
- // it is forbidden to call getPayload() more than once
- // without calling nextPosition()
- tp.getPayload(null, 0);
- fail("Expected exception not thrown");
- } catch (Exception expected) {
- // expected exception
- }
reader.close();
Index: lucene/src/test/org/apache/lucene/index/FlexTestUtil.java
===================================================================
--- lucene/src/test/org/apache/lucene/index/FlexTestUtil.java (revision 944313)
+++ lucene/src/test/org/apache/lucene/index/FlexTestUtil.java (working copy)
@@ -190,8 +190,8 @@
assertEquals(position, termPos.nextPosition());
assertEquals(postings.hasPayload(), termPos.isPayloadAvailable());
if (postings.hasPayload()) {
- assertEquals(postings.getPayloadLength(), termPos.getPayloadLength());
BytesRef payload = postings.getPayload();
+ assertEquals(payload.length, termPos.getPayloadLength());
byte[] b2 = termPos.getPayload(null, 0);
assertNotNull(payload);
assertNotNull(b2);
@@ -337,9 +337,9 @@
assertEquals(position, termPos.nextPosition());
assertEquals(postings.hasPayload(), termPos.isPayloadAvailable());
if (postings.hasPayload()) {
- assertEquals(postings.getPayloadLength(), termPos.getPayloadLength());
if (rand.nextInt(3) <= 1) {
BytesRef payload = postings.getPayload();
+ assertEquals(payload.length, termPos.getPayloadLength());
byte[] b2 = termPos.getPayload(null, 0);
assertNotNull(payload);
assertNotNull(b2);
@@ -525,8 +525,8 @@
assertEquals(pos1, pos2);
assertEquals(postings.hasPayload(), termPositions.isPayloadAvailable());
if (postings.hasPayload()) {
- assertEquals(postings.getPayloadLength(), termPositions.getPayloadLength());
BytesRef b1 = postings.getPayload();
+ assertEquals(b1.length, termPositions.getPayloadLength());
byte[] b2 = termPositions.getPayload(null, 0);
assertNotNull(b1);
assertNotNull(b2);
Index: lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java
===================================================================
--- lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java (working copy)
@@ -509,11 +509,6 @@
}
@Override
- public int getPayloadLength() {
- throw new UnsupportedOperationException();
- }
-
- @Override
public BytesRef getPayload() {
throw new UnsupportedOperationException();
}
Index: lucene/src/java/org/apache/lucene/index/LegacyFieldsEnum.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/LegacyFieldsEnum.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/LegacyFieldsEnum.java (working copy)
@@ -305,11 +305,6 @@
return tp.nextPosition();
}
- @Override
- public int getPayloadLength() {
- return tp.getPayloadLength();
- }
-
private BytesRef payload;
@Override
Index: lucene/src/java/org/apache/lucene/index/ParallelReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/ParallelReader.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/ParallelReader.java (working copy)
@@ -721,7 +721,7 @@
return ((TermPositions)termDocs).nextPosition();
}
- public int getPayloadLength() {
+ public int getPayloadLength() throws IOException {
return ((TermPositions)termDocs).getPayloadLength();
}
Index: lucene/src/java/org/apache/lucene/index/SegmentReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/SegmentReader.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/SegmentReader.java (working copy)
@@ -1653,19 +1653,31 @@
throw new UnsupportedOperationException("TermPositions does not support processing multiple documents in one call. Use TermDocs instead.");
}
- public int nextPosition() throws IOException {
+ public int nextPosition() throws IOException {
+ pendingPayload = null;
if (!any || postingsEnum == null) {
return 0;
} else {
return postingsEnum.nextPosition();
}
}
+
+ private BytesRef pendingPayload;
- public int getPayloadLength() {
+ public int getPayloadLength() throws IOException {
if (!any || postingsEnum == null) {
return 0;
} else {
- return postingsEnum.getPayloadLength();
+ if (pendingPayload == null) {
+ if (!postingsEnum.hasPayload()) {
+ return 0;
+ }
+ pendingPayload = postingsEnum.getPayload();
+ }
+ if (pendingPayload == null) {
+ return 0;
+ }
+ return pendingPayload.length;
}
}
@@ -1673,17 +1685,26 @@
if (!any || postingsEnum == null) {
return null;
}
- final BytesRef payload = postingsEnum.getPayload();
+ if (pendingPayload == null) {
+ if (!postingsEnum.hasPayload()) {
+ return null;
+ }
+ pendingPayload = postingsEnum.getPayload();
+ }
+ if (pendingPayload == null) {
+ return null;
+ }
+
// old API would always used passed in bytes if it
// "fits", else allocate new:
- if (bytes != null && payload.length <= bytes.length - offset) {
- System.arraycopy(payload.bytes, payload.offset, bytes, offset, payload.length);
+ if (bytes != null && pendingPayload.length <= bytes.length - offset) {
+ System.arraycopy(pendingPayload.bytes, pendingPayload.offset, bytes, offset, pendingPayload.length);
return bytes;
- } else if (payload.offset == 0 && payload.length == payload.bytes.length) {
- return payload.bytes;
+ } else if (pendingPayload.offset == 0 && pendingPayload.length == pendingPayload.bytes.length) {
+ return pendingPayload.bytes;
} else {
- final byte[] retBytes = new byte[payload.length];
- System.arraycopy(payload.bytes, payload.offset, retBytes, 0, payload.length);
+ final byte[] retBytes = new byte[pendingPayload.length];
+ System.arraycopy(pendingPayload.bytes, pendingPayload.offset, retBytes, 0, pendingPayload.length);
return retBytes;
}
}
Index: lucene/src/java/org/apache/lucene/index/CheckIndex.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/CheckIndex.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/CheckIndex.java (working copy)
@@ -685,7 +685,7 @@
throw new RuntimeException("term " + term + ": doc " + doc + ": pos " + pos + " < lastPos " + lastPos);
}
lastPos = pos;
- if (postings.getPayloadLength() != 0) {
+ if (postings.hasPayload()) {
postings.getPayload();
}
}
Index: lucene/src/java/org/apache/lucene/index/DocsAndPositionsEnum.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/DocsAndPositionsEnum.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/DocsAndPositionsEnum.java (working copy)
@@ -29,9 +29,6 @@
* the behavior is not defined. */
public abstract int nextPosition() throws IOException;
- /** Returns length of payload at current position */
- public abstract int getPayloadLength();
-
/** Returns the payload at this position, or null if no
* payload was indexed. */
public abstract BytesRef getPayload() throws IOException;
Index: lucene/src/java/org/apache/lucene/index/DirectoryReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/DirectoryReader.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/DirectoryReader.java (working copy)
@@ -1393,7 +1393,7 @@
return ((TermPositions)current).nextPosition();
}
- public int getPayloadLength() {
+ public int getPayloadLength() throws IOException {
return ((TermPositions)current).getPayloadLength();
}
Index: lucene/src/java/org/apache/lucene/index/FilterIndexReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/FilterIndexReader.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/FilterIndexReader.java (working copy)
@@ -67,7 +67,7 @@
return ((TermPositions) this.in).nextPosition();
}
- public int getPayloadLength() {
+ public int getPayloadLength() throws IOException {
return ((TermPositions) this.in).getPayloadLength();
}
Index: lucene/src/java/org/apache/lucene/index/TermPositions.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/TermPositions.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/TermPositions.java (working copy)
@@ -46,7 +46,7 @@
* the first time.
* @return length of the current payload in number of bytes
*/
- int getPayloadLength();
+ int getPayloadLength() throws IOException;
/**
* Returns the payload data at the current term position.
Index: lucene/src/java/org/apache/lucene/index/MultiDocsAndPositionsEnum.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/MultiDocsAndPositionsEnum.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/MultiDocsAndPositionsEnum.java (working copy)
@@ -112,11 +112,6 @@
}
@Override
- public int getPayloadLength() {
- return current.getPayloadLength();
- }
-
- @Override
public boolean hasPayload() {
return current.hasPayload();
}
Index: lucene/src/java/org/apache/lucene/index/codecs/MappingMultiDocsAndPositionsEnum.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/MappingMultiDocsAndPositionsEnum.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/codecs/MappingMultiDocsAndPositionsEnum.java (working copy)
@@ -102,13 +102,7 @@
return current.nextPosition();
}
-
@Override
- public int getPayloadLength() {
- return current.getPayloadLength();
- }
-
- @Override
public BytesRef getPayload() throws IOException {
BytesRef payload = current.getPayload();
if (mergeState.currentPayloadProcessor[upto] != null) {
Index: lucene/src/java/org/apache/lucene/index/codecs/pulsing/PulsingPostingsReaderImpl.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/pulsing/PulsingPostingsReaderImpl.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/codecs/pulsing/PulsingPostingsReaderImpl.java (working copy)
@@ -358,11 +358,6 @@
}
@Override
- public int getPayloadLength() {
- return payloadRetrieved || pos.payload == null ? 0 : pos.payload.length;
- }
-
- @Override
public boolean hasPayload() {
return !payloadRetrieved && pos.payload != null && pos.payload.length > 0;
}
Index: lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsReaderImpl.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsReaderImpl.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsReaderImpl.java (working copy)
@@ -638,11 +638,6 @@
return position;
}
- @Override
- public int getPayloadLength() {
- return payloadLength;
- }
-
private BytesRef payload;
@Override
Index: lucene/src/java/org/apache/lucene/index/codecs/PostingsConsumer.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/PostingsConsumer.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/codecs/PostingsConsumer.java (working copy)
@@ -79,9 +79,8 @@
this.startDoc(doc, freq);
for(int i=0;i 0) {
+ if (postingsEnum.hasPayload()) {
payload = postingsEnum.getPayload();
} else {
payload = null;
Index: lucene/src/java/org/apache/lucene/index/codecs/preflex/PreFlexFields.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/preflex/PreFlexFields.java (revision 944313)
+++ lucene/src/java/org/apache/lucene/index/codecs/preflex/PreFlexFields.java (working copy)
@@ -457,11 +457,6 @@
}
@Override
- public int getPayloadLength() {
- return pos.getPayloadLength();
- }
-
- @Override
public boolean hasPayload() {
return pos.isPayloadAvailable();
}