Skip to content

Commit b22a9b8

Browse files
authored
Removing TermInSetQuery varargs ctor (apache#12837)
1 parent 880d0ba commit b22a9b8

File tree

11 files changed

+86
-68
lines changed

11 files changed

+86
-68
lines changed

lucene/CHANGES.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ API Changes
7070
* GITHUB#12873: Expressions module now uses MethodHandles to define custom functions. Support for
7171
custom classloaders was removed. (Uwe Schindler)
7272

73+
* GITHUB#12243: Remove TermInSetQuery ctors taking varargs param. SortedSetDocValuesField#newSlowSetQuery,
74+
SortedDocValuesField#newSlowSetQuery, KeywordField#newSetQuery, KeywordField#newSetQuery now take a collection. (Jakub Slowinski)
75+
7376
New Features
7477
---------------------
7578

@@ -150,7 +153,8 @@ Other
150153

151154
API Changes
152155
---------------------
153-
(No changes)
156+
* GITHUB#12243: Mark TermInSetQuery ctors with varargs terms as @Deprecated. SortedSetDocValuesField#newSlowSetQuery,
157+
SortedDocValuesField#newSlowSetQuery, KeywordField#newSetQuery now take a collection of terms as a param. (Jakub Slowinski)
154158

155159
New Features
156160
---------------------

lucene/core/src/java/org/apache/lucene/document/KeywordField.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package org.apache.lucene.document;
1818

19+
import java.util.Collection;
1920
import java.util.Objects;
2021
import org.apache.lucene.index.DocValuesType;
2122
import org.apache.lucene.index.IndexOptions;
@@ -171,7 +172,7 @@ public static Query newExactQuery(String field, String value) {
171172
* @throws NullPointerException if {@code field} is null.
172173
* @return a query matching documents with this exact value
173174
*/
174-
public static Query newSetQuery(String field, BytesRef... values) {
175+
public static Query newSetQuery(String field, Collection<BytesRef> values) {
175176
Objects.requireNonNull(field, "field must not be null");
176177
Objects.requireNonNull(values, "values must not be null");
177178
Query indexQuery = new TermInSetQuery(field, values);

lucene/core/src/java/org/apache/lucene/document/SortedDocValuesField.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package org.apache.lucene.document;
1818

19+
import java.util.Collection;
1920
import org.apache.lucene.index.DocValuesType;
2021
import org.apache.lucene.search.IndexOrDocValuesQuery;
2122
import org.apache.lucene.search.MultiTermQuery;
@@ -99,7 +100,7 @@ public static Query newSlowExactQuery(String field, BytesRef value) {
99100
* in an {@link IndexOrDocValuesQuery}, alongside a set query that executes on postings, such as
100101
* {@link TermInSetQuery}.
101102
*/
102-
public static Query newSlowSetQuery(String field, BytesRef... values) {
103+
public static Query newSlowSetQuery(String field, Collection<BytesRef> values) {
103104
return new TermInSetQuery(MultiTermQuery.DOC_VALUES_REWRITE, field, values);
104105
}
105106
}

lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesField.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package org.apache.lucene.document;
1818

19+
import java.util.Collection;
1920
import org.apache.lucene.index.DocValuesType;
2021
import org.apache.lucene.search.IndexOrDocValuesQuery;
2122
import org.apache.lucene.search.MultiTermQuery;
@@ -103,7 +104,7 @@ public static Query newSlowExactQuery(String field, BytesRef value) {
103104
* in an {@link IndexOrDocValuesQuery}, alongside a set query that executes on postings, such as
104105
* {@link TermInSetQuery}.
105106
*/
106-
public static Query newSlowSetQuery(String field, BytesRef... values) {
107+
public static Query newSlowSetQuery(String field, Collection<BytesRef> values) {
107108
return new TermInSetQuery(MultiTermQuery.DOC_VALUES_REWRITE, field, values);
108109
}
109110
}

lucene/core/src/java/org/apache/lucene/search/TermInSetQuery.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.io.IOException;
2020
import java.io.UncheckedIOException;
21-
import java.util.Arrays;
2221
import java.util.Collection;
2322
import java.util.Collections;
2423
import java.util.SortedSet;
@@ -83,10 +82,6 @@ public TermInSetQuery(String field, Collection<BytesRef> terms) {
8382
this(field, packTerms(field, terms));
8483
}
8584

86-
public TermInSetQuery(String field, BytesRef... terms) {
87-
this(field, packTerms(field, Arrays.asList(terms)));
88-
}
89-
9085
/** Creates a new {@link TermInSetQuery} from the given collection of terms. */
9186
public TermInSetQuery(RewriteMethod rewriteMethod, String field, Collection<BytesRef> terms) {
9287
super(field, rewriteMethod);
@@ -95,11 +90,6 @@ public TermInSetQuery(RewriteMethod rewriteMethod, String field, Collection<Byte
9590
termDataHashCode = termData.hashCode();
9691
}
9792

98-
/** Creates a new {@link TermInSetQuery} from the given array of terms. */
99-
public TermInSetQuery(RewriteMethod rewriteMethod, String field, BytesRef... terms) {
100-
this(rewriteMethod, field, Arrays.asList(terms));
101-
}
102-
10393
private TermInSetQuery(String field, PrefixCodedTerms termData) {
10494
super(field, MultiTermQuery.CONSTANT_SCORE_BLENDED_REWRITE);
10595
this.field = field;

lucene/core/src/test/org/apache/lucene/document/TestKeywordField.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
package org.apache.lucene.document;
1818

1919
import java.io.IOException;
20+
import java.util.ArrayList;
2021
import java.util.Collections;
22+
import java.util.List;
2123
import org.apache.lucene.index.DirectoryReader;
2224
import org.apache.lucene.index.IndexReader;
2325
import org.apache.lucene.index.IndexWriter;
@@ -125,15 +127,15 @@ public void testIndexStringValue() throws IOException {
125127
}
126128

127129
public void testValueClone() {
128-
BytesRef[] values = new BytesRef[100];
130+
List<BytesRef> values = new ArrayList<>(100);
129131
for (int i = 0; i < 100; i++) {
130132
String s = TestUtil.randomSimpleString(random(), 10, 20);
131-
values[i] = new BytesRef(s);
133+
values.add(new BytesRef(s));
132134
}
133135

134136
// Make sure we don't modify the input values array.
135-
BytesRef[] expected = values.clone();
137+
List<BytesRef> expected = new ArrayList<>(values);
136138
KeywordField.newSetQuery("f", values);
137-
assertArrayEquals(expected, values);
139+
assertEquals(expected, values);
138140
}
139141
}

lucene/core/src/test/org/apache/lucene/document/TestSortedSetDocValuesSetQuery.java

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -61,51 +61,60 @@ public void testMissingTerms() throws Exception {
6161
List<BytesRef> terms = new ArrayList<>();
6262
terms.add(new BytesRef("5"));
6363
results =
64-
searcher.search(
65-
SortedDocValuesField.newSlowSetQuery(fieldName, terms.toArray(new BytesRef[0])),
66-
numDocs)
67-
.scoreDocs;
64+
searcher.search(SortedDocValuesField.newSlowSetQuery(fieldName, terms), numDocs).scoreDocs;
6865
assertEquals("Must match nothing", 0, results.length);
6966

7067
terms = new ArrayList<>();
7168
terms.add(new BytesRef("10"));
7269
results =
73-
searcher.search(
74-
SortedDocValuesField.newSlowSetQuery(fieldName, terms.toArray(new BytesRef[0])),
75-
numDocs)
76-
.scoreDocs;
70+
searcher.search(SortedDocValuesField.newSlowSetQuery(fieldName, terms), numDocs).scoreDocs;
7771
assertEquals("Must match 1", 1, results.length);
7872

7973
terms = new ArrayList<>();
8074
terms.add(new BytesRef("10"));
8175
terms.add(new BytesRef("20"));
8276
results =
83-
searcher.search(
84-
SortedDocValuesField.newSlowSetQuery(fieldName, terms.toArray(new BytesRef[0])),
85-
numDocs)
86-
.scoreDocs;
77+
searcher.search(SortedDocValuesField.newSlowSetQuery(fieldName, terms), numDocs).scoreDocs;
8778
assertEquals("Must match 2", 2, results.length);
8879

8980
reader.close();
9081
rd.close();
9182
}
9283

9384
public void testEquals() {
85+
List<BytesRef> bar = new ArrayList<>();
86+
bar.add(new BytesRef("bar"));
87+
88+
List<BytesRef> barbar = new ArrayList<>();
89+
barbar.add(new BytesRef("bar"));
90+
barbar.add(new BytesRef("bar"));
91+
92+
List<BytesRef> barbaz = new ArrayList<>();
93+
barbaz.add(new BytesRef("bar"));
94+
barbaz.add(new BytesRef("baz"));
95+
96+
List<BytesRef> bazbar = new ArrayList<>();
97+
bazbar.add(new BytesRef("baz"));
98+
bazbar.add(new BytesRef("bar"));
99+
100+
List<BytesRef> baz = new ArrayList<>();
101+
baz.add(new BytesRef("baz"));
102+
94103
assertEquals(
95-
SortedDocValuesField.newSlowSetQuery("foo", new BytesRef("bar")),
96-
SortedDocValuesField.newSlowSetQuery("foo", new BytesRef("bar")));
104+
SortedDocValuesField.newSlowSetQuery("foo", bar),
105+
SortedDocValuesField.newSlowSetQuery("foo", bar));
97106
assertEquals(
98-
SortedDocValuesField.newSlowSetQuery("foo", new BytesRef("bar")),
99-
SortedDocValuesField.newSlowSetQuery("foo", new BytesRef("bar"), new BytesRef("bar")));
107+
SortedDocValuesField.newSlowSetQuery("foo", bar),
108+
SortedDocValuesField.newSlowSetQuery("foo", barbar));
100109
assertEquals(
101-
SortedDocValuesField.newSlowSetQuery("foo", new BytesRef("bar"), new BytesRef("baz")),
102-
SortedDocValuesField.newSlowSetQuery("foo", new BytesRef("baz"), new BytesRef("bar")));
103-
assertFalse(
104-
SortedDocValuesField.newSlowSetQuery("foo", new BytesRef("bar"))
105-
.equals(SortedDocValuesField.newSlowSetQuery("foo2", new BytesRef("bar"))));
106-
assertFalse(
107-
SortedDocValuesField.newSlowSetQuery("foo", new BytesRef("bar"))
108-
.equals(SortedDocValuesField.newSlowSetQuery("foo", new BytesRef("baz"))));
110+
SortedDocValuesField.newSlowSetQuery("foo", barbaz),
111+
SortedDocValuesField.newSlowSetQuery("foo", bazbar));
112+
assertNotEquals(
113+
SortedDocValuesField.newSlowSetQuery("foo", bar),
114+
SortedDocValuesField.newSlowSetQuery("foo2", bar));
115+
assertNotEquals(
116+
SortedDocValuesField.newSlowSetQuery("foo", bar),
117+
SortedDocValuesField.newSlowSetQuery("foo", baz));
109118
}
110119

111120
public void testDuelTermsQuery() throws IOException {
@@ -159,9 +168,7 @@ public void testDuelTermsQuery() throws IOException {
159168
bytesTerms.add(term.bytes());
160169
}
161170
final Query q2 =
162-
new BoostQuery(
163-
SortedDocValuesField.newSlowSetQuery("f", bytesTerms.toArray(new BytesRef[0])),
164-
boost);
171+
new BoostQuery(SortedDocValuesField.newSlowSetQuery("f", bytesTerms), boost);
165172
assertSameMatches(searcher, q1, q2, true);
166173
}
167174

@@ -221,9 +228,7 @@ public void testApproximation() throws IOException {
221228
bytesTerms.add(term.bytes());
222229
}
223230
final Query q2 =
224-
new BoostQuery(
225-
SortedDocValuesField.newSlowSetQuery("f", bytesTerms.toArray(new BytesRef[0])),
226-
boost);
231+
new BoostQuery(SortedDocValuesField.newSlowSetQuery("f", bytesTerms), boost);
227232

228233
BooleanQuery.Builder bq1 = new BooleanQuery.Builder();
229234
bq1.add(q1, Occur.MUST);

lucene/core/src/test/org/apache/lucene/search/TestTermInSetQuery.java

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -193,40 +193,42 @@ public void testHashCodeAndEquals() {
193193
}
194194
}
195195

196-
TermInSetQuery tq1 = new TermInSetQuery("thing", newBytesRef("apple"));
197-
TermInSetQuery tq2 = new TermInSetQuery("thing", newBytesRef("orange"));
196+
TermInSetQuery tq1 = new TermInSetQuery("thing", List.of(newBytesRef("apple")));
197+
TermInSetQuery tq2 = new TermInSetQuery("thing", List.of(newBytesRef("orange")));
198198
assertFalse(tq1.hashCode() == tq2.hashCode());
199199

200200
// different fields with the same term should have differing hashcodes
201-
tq1 = new TermInSetQuery("thing", newBytesRef("apple"));
202-
tq2 = new TermInSetQuery("thing2", newBytesRef("apple"));
201+
tq1 = new TermInSetQuery("thing", List.of(newBytesRef("apple")));
202+
tq2 = new TermInSetQuery("thing2", List.of(newBytesRef("apple")));
203203
assertFalse(tq1.hashCode() == tq2.hashCode());
204204
}
205205

206206
public void testSimpleEquals() {
207207
// Two terms with the same hash code
208208
assertEquals("AaAaBB".hashCode(), "BBBBBB".hashCode());
209-
TermInSetQuery left = new TermInSetQuery("id", newBytesRef("AaAaAa"), newBytesRef("AaAaBB"));
210-
TermInSetQuery right = new TermInSetQuery("id", newBytesRef("AaAaAa"), newBytesRef("BBBBBB"));
209+
TermInSetQuery left =
210+
new TermInSetQuery("id", List.of(newBytesRef("AaAaAa"), newBytesRef("AaAaBB")));
211+
TermInSetQuery right =
212+
new TermInSetQuery("id", List.of(newBytesRef("AaAaAa"), newBytesRef("BBBBBB")));
211213
assertFalse(left.equals(right));
212214
}
213215

214216
public void testToString() {
215217
TermInSetQuery termsQuery =
216-
new TermInSetQuery("field1", newBytesRef("a"), newBytesRef("b"), newBytesRef("c"));
218+
new TermInSetQuery("field1", List.of(newBytesRef("a"), newBytesRef("b"), newBytesRef("c")));
217219
assertEquals("field1:(a b c)", termsQuery.toString());
218220
}
219221

220222
public void testDedup() {
221-
Query query1 = new TermInSetQuery("foo", newBytesRef("bar"));
222-
Query query2 = new TermInSetQuery("foo", newBytesRef("bar"), newBytesRef("bar"));
223+
Query query1 = new TermInSetQuery("foo", List.of(newBytesRef("bar")));
224+
Query query2 = new TermInSetQuery("foo", List.of(newBytesRef("bar"), newBytesRef("bar")));
223225
QueryUtils.checkEqual(query1, query2);
224226
}
225227

226228
public void testOrderDoesNotMatter() {
227229
// order of terms if different
228-
Query query1 = new TermInSetQuery("foo", newBytesRef("bar"), newBytesRef("baz"));
229-
Query query2 = new TermInSetQuery("foo", newBytesRef("baz"), newBytesRef("bar"));
230+
Query query1 = new TermInSetQuery("foo", List.of(newBytesRef("bar"), newBytesRef("baz")));
231+
Query query2 = new TermInSetQuery("foo", List.of(newBytesRef("baz"), newBytesRef("bar")));
230232
QueryUtils.checkEqual(query1, query2);
231233
}
232234

@@ -346,12 +348,13 @@ public void testPullOneTermsEnum() throws Exception {
346348

347349
public void testBinaryToString() {
348350
TermInSetQuery query =
349-
new TermInSetQuery("field", newBytesRef(new byte[] {(byte) 0xff, (byte) 0xfe}));
351+
new TermInSetQuery("field", List.of(newBytesRef(new byte[] {(byte) 0xff, (byte) 0xfe})));
350352
assertEquals("field:([ff fe])", query.toString());
351353
}
352354

353355
public void testIsConsideredCostlyByQueryCache() throws IOException {
354-
TermInSetQuery query = new TermInSetQuery("foo", newBytesRef("bar"), newBytesRef("baz"));
356+
TermInSetQuery query =
357+
new TermInSetQuery("foo", List.of(newBytesRef("bar"), newBytesRef("baz")));
355358
UsageTrackingQueryCachingPolicy policy = new UsageTrackingQueryCachingPolicy();
356359
assertFalse(policy.shouldCache(query));
357360
policy.onUse(query);
@@ -362,7 +365,7 @@ public void testIsConsideredCostlyByQueryCache() throws IOException {
362365

363366
public void testVisitor() {
364367
// singleton reports back to consumeTerms()
365-
TermInSetQuery singleton = new TermInSetQuery("field", newBytesRef("term1"));
368+
TermInSetQuery singleton = new TermInSetQuery("field", List.of(newBytesRef("term1")));
366369
singleton.visit(
367370
new QueryVisitor() {
368371
@Override

lucene/monitor/src/java/org/apache/lucene/monitor/MultipassTermFilteredPresearcher.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.apache.lucene.monitor;
1919

20+
import java.util.Arrays;
2021
import java.util.Collections;
2122
import java.util.HashMap;
2223
import java.util.List;
@@ -125,7 +126,7 @@ public Query build() {
125126
BooleanQuery.Builder child = new BooleanQuery.Builder();
126127
for (String field : terms.keySet()) {
127128
child.add(
128-
new TermInSetQuery(field(field, i), collectedTerms.get(field)),
129+
new TermInSetQuery(field(field, i), Arrays.asList(collectedTerms.get(field))),
129130
BooleanClause.Occur.SHOULD);
130131
}
131132
parent.add(child.build(), BooleanClause.Occur.MUST);

lucene/monitor/src/test/org/apache/lucene/monitor/TestMultipassPresearcher.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.apache.lucene.monitor;
1919

2020
import java.io.IOException;
21+
import java.util.List;
2122
import org.apache.lucene.analysis.core.KeywordAnalyzer;
2223
import org.apache.lucene.index.DirectoryReader;
2324
import org.apache.lucene.index.IndexReader;
@@ -111,25 +112,33 @@ public IndexWriter buildIndexWriter() {
111112
must(
112113
new BooleanQuery.Builder()
113114
.add(
114-
should(new TermInSetQuery("f_0", new BytesRef("test"))))
115+
should(
116+
new TermInSetQuery(
117+
"f_0", List.of(new BytesRef("test")))))
115118
.build()))
116119
.add(
117120
must(
118121
new BooleanQuery.Builder()
119122
.add(
120-
should(new TermInSetQuery("f_1", new BytesRef("test"))))
123+
should(
124+
new TermInSetQuery(
125+
"f_1", List.of(new BytesRef("test")))))
121126
.build()))
122127
.add(
123128
must(
124129
new BooleanQuery.Builder()
125130
.add(
126-
should(new TermInSetQuery("f_2", new BytesRef("test"))))
131+
should(
132+
new TermInSetQuery(
133+
"f_2", List.of(new BytesRef("test")))))
127134
.build()))
128135
.add(
129136
must(
130137
new BooleanQuery.Builder()
131138
.add(
132-
should(new TermInSetQuery("f_3", new BytesRef("test"))))
139+
should(
140+
new TermInSetQuery(
141+
"f_3", List.of(new BytesRef("test")))))
133142
.build()))
134143
.build()))
135144
.add(should(new TermQuery(new Term("__anytokenfield", "__ANYTOKEN__"))))

0 commit comments

Comments
 (0)