Skip to content

Commit e0c751f

Browse files
committed
Refactor so MatchPhrase doesn't use all fulltext test cases, just text only
1 parent c8e6770 commit e0c751f

File tree

4 files changed

+382
-328
lines changed

4 files changed

+382
-328
lines changed

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/fulltext/AbstractMatchFullTextFunctionTests.java

+5-327
Original file line numberDiff line numberDiff line change
@@ -25,336 +25,14 @@ public abstract class AbstractMatchFullTextFunctionTests extends AbstractFunctio
2525
protected static List<TestCaseSupplier> testCaseSuppliers() {
2626
List<TestCaseSupplier> suppliers = new ArrayList<>();
2727

28-
AbstractMatchFullTextFunctionTests.addUnsignedLongCases(suppliers);
29-
AbstractMatchFullTextFunctionTests.addNumericCases(suppliers);
30-
AbstractMatchFullTextFunctionTests.addNonNumericCases(suppliers);
31-
AbstractMatchFullTextFunctionTests.addQueryAsStringTestCases(suppliers);
32-
AbstractMatchFullTextFunctionTests.addStringTestCases(suppliers);
28+
FullTextFunctionTestHelpers.addUnsignedLongCases(suppliers);
29+
FullTextFunctionTestHelpers.addNumericCases(suppliers);
30+
FullTextFunctionTestHelpers.addNonNumericCases(suppliers);
31+
FullTextFunctionTestHelpers.addQueryAsStringTestCases(suppliers);
32+
FullTextFunctionTestHelpers.addStringTestCases(suppliers);
3333
return suppliers;
3434
}
3535

36-
private static void addNonNumericCases(List<TestCaseSupplier> suppliers) {
37-
suppliers.addAll(
38-
TestCaseSupplier.forBinaryNotCasting(
39-
null,
40-
"field",
41-
"query",
42-
Object::equals,
43-
DataType.BOOLEAN,
44-
TestCaseSupplier.booleanCases(),
45-
TestCaseSupplier.booleanCases(),
46-
List.of(),
47-
false
48-
)
49-
);
50-
suppliers.addAll(
51-
TestCaseSupplier.forBinaryNotCasting(
52-
null,
53-
"field",
54-
"query",
55-
Object::equals,
56-
DataType.BOOLEAN,
57-
TestCaseSupplier.ipCases(),
58-
TestCaseSupplier.ipCases(),
59-
List.of(),
60-
false
61-
)
62-
);
63-
suppliers.addAll(
64-
TestCaseSupplier.forBinaryNotCasting(
65-
null,
66-
"field",
67-
"query",
68-
Object::equals,
69-
DataType.BOOLEAN,
70-
TestCaseSupplier.versionCases(""),
71-
TestCaseSupplier.versionCases(""),
72-
List.of(),
73-
false
74-
)
75-
);
76-
// Datetime
77-
suppliers.addAll(
78-
TestCaseSupplier.forBinaryNotCasting(
79-
null,
80-
"field",
81-
"query",
82-
Object::equals,
83-
DataType.BOOLEAN,
84-
TestCaseSupplier.dateCases(),
85-
TestCaseSupplier.dateCases(),
86-
List.of(),
87-
false
88-
)
89-
);
90-
91-
suppliers.addAll(
92-
TestCaseSupplier.forBinaryNotCasting(
93-
null,
94-
"field",
95-
"query",
96-
Object::equals,
97-
DataType.BOOLEAN,
98-
TestCaseSupplier.dateNanosCases(),
99-
TestCaseSupplier.dateNanosCases(),
100-
List.of(),
101-
false
102-
)
103-
);
104-
}
105-
106-
private static void addNumericCases(List<TestCaseSupplier> suppliers) {
107-
suppliers.addAll(
108-
TestCaseSupplier.forBinaryComparisonWithWidening(
109-
new TestCaseSupplier.NumericTypeTestConfigs<>(
110-
new TestCaseSupplier.NumericTypeTestConfig<>(
111-
(Integer.MIN_VALUE >> 1) - 1,
112-
(Integer.MAX_VALUE >> 1) - 1,
113-
(l, r) -> true,
114-
"EqualsIntsEvaluator"
115-
),
116-
new TestCaseSupplier.NumericTypeTestConfig<>(
117-
(Long.MIN_VALUE >> 1) - 1,
118-
(Long.MAX_VALUE >> 1) - 1,
119-
(l, r) -> true,
120-
"EqualsLongsEvaluator"
121-
),
122-
new TestCaseSupplier.NumericTypeTestConfig<>(
123-
Double.NEGATIVE_INFINITY,
124-
Double.POSITIVE_INFINITY,
125-
// NB: this has different behavior than Double::equals
126-
(l, r) -> true,
127-
"EqualsDoublesEvaluator"
128-
)
129-
),
130-
"field",
131-
"query",
132-
(lhs, rhs) -> List.of(),
133-
false
134-
)
135-
);
136-
}
137-
138-
private static void addUnsignedLongCases(List<TestCaseSupplier> suppliers) {
139-
// TODO: These should be integrated into the type cross product above, but are currently broken
140-
// see https://github.com/elastic/elasticsearch/issues/102935
141-
suppliers.addAll(
142-
TestCaseSupplier.forBinaryNotCasting(
143-
null,
144-
"field",
145-
"query",
146-
Object::equals,
147-
DataType.BOOLEAN,
148-
TestCaseSupplier.ulongCases(BigInteger.ZERO, NumericUtils.UNSIGNED_LONG_MAX, true),
149-
TestCaseSupplier.ulongCases(BigInteger.ZERO, NumericUtils.UNSIGNED_LONG_MAX, true),
150-
List.of(),
151-
false
152-
)
153-
);
154-
suppliers.addAll(
155-
TestCaseSupplier.forBinaryNotCasting(
156-
null,
157-
"field",
158-
"query",
159-
Object::equals,
160-
DataType.BOOLEAN,
161-
TestCaseSupplier.ulongCases(BigInteger.ZERO, NumericUtils.UNSIGNED_LONG_MAX, true),
162-
TestCaseSupplier.intCases(Integer.MIN_VALUE, Integer.MAX_VALUE, true),
163-
List.of(),
164-
false
165-
)
166-
);
167-
suppliers.addAll(
168-
TestCaseSupplier.forBinaryNotCasting(
169-
null,
170-
"field",
171-
"query",
172-
Object::equals,
173-
DataType.BOOLEAN,
174-
TestCaseSupplier.ulongCases(BigInteger.ZERO, NumericUtils.UNSIGNED_LONG_MAX, true),
175-
TestCaseSupplier.longCases(Long.MIN_VALUE, Long.MAX_VALUE, true),
176-
List.of(),
177-
false
178-
)
179-
);
180-
suppliers.addAll(
181-
TestCaseSupplier.forBinaryNotCasting(
182-
null,
183-
"field",
184-
"query",
185-
Object::equals,
186-
DataType.BOOLEAN,
187-
TestCaseSupplier.ulongCases(BigInteger.ZERO, NumericUtils.UNSIGNED_LONG_MAX, true),
188-
TestCaseSupplier.doubleCases(Double.MIN_VALUE, Double.MAX_VALUE, true),
189-
List.of(),
190-
false
191-
)
192-
);
193-
}
194-
195-
private static void addQueryAsStringTestCases(List<TestCaseSupplier> suppliers) {
196-
197-
suppliers.addAll(
198-
TestCaseSupplier.forBinaryNotCasting(
199-
null,
200-
"field",
201-
"query",
202-
Object::equals,
203-
DataType.BOOLEAN,
204-
TestCaseSupplier.intCases(Integer.MIN_VALUE, Integer.MAX_VALUE, true),
205-
TestCaseSupplier.stringCases(DataType.KEYWORD),
206-
List.of(),
207-
false
208-
)
209-
);
210-
211-
suppliers.addAll(
212-
TestCaseSupplier.forBinaryNotCasting(
213-
null,
214-
"field",
215-
"query",
216-
Object::equals,
217-
DataType.BOOLEAN,
218-
TestCaseSupplier.intCases(Integer.MIN_VALUE, Integer.MAX_VALUE, true),
219-
TestCaseSupplier.stringCases(DataType.KEYWORD),
220-
List.of(),
221-
false
222-
)
223-
);
224-
225-
suppliers.addAll(
226-
TestCaseSupplier.forBinaryNotCasting(
227-
null,
228-
"field",
229-
"query",
230-
Object::equals,
231-
DataType.BOOLEAN,
232-
TestCaseSupplier.longCases(Integer.MIN_VALUE, Integer.MAX_VALUE, true),
233-
TestCaseSupplier.stringCases(DataType.KEYWORD),
234-
List.of(),
235-
false
236-
)
237-
);
238-
239-
suppliers.addAll(
240-
TestCaseSupplier.forBinaryNotCasting(
241-
null,
242-
"field",
243-
"query",
244-
Object::equals,
245-
DataType.BOOLEAN,
246-
TestCaseSupplier.doubleCases(Double.MIN_VALUE, Double.MAX_VALUE, true),
247-
TestCaseSupplier.stringCases(DataType.KEYWORD),
248-
List.of(),
249-
false
250-
)
251-
);
252-
253-
// Unsigned Long cases
254-
// TODO: These should be integrated into the type cross product above, but are currently broken
255-
// see https://github.com/elastic/elasticsearch/issues/102935
256-
suppliers.addAll(
257-
TestCaseSupplier.forBinaryNotCasting(
258-
null,
259-
"field",
260-
"query",
261-
Object::equals,
262-
DataType.BOOLEAN,
263-
TestCaseSupplier.ulongCases(BigInteger.ZERO, NumericUtils.UNSIGNED_LONG_MAX, true),
264-
TestCaseSupplier.stringCases(DataType.KEYWORD),
265-
List.of(),
266-
false
267-
)
268-
);
269-
270-
suppliers.addAll(
271-
TestCaseSupplier.forBinaryNotCasting(
272-
null,
273-
"field",
274-
"query",
275-
Object::equals,
276-
DataType.BOOLEAN,
277-
TestCaseSupplier.booleanCases(),
278-
TestCaseSupplier.stringCases(DataType.KEYWORD),
279-
List.of(),
280-
false
281-
)
282-
);
283-
suppliers.addAll(
284-
TestCaseSupplier.forBinaryNotCasting(
285-
null,
286-
"field",
287-
"query",
288-
Object::equals,
289-
DataType.BOOLEAN,
290-
TestCaseSupplier.ipCases(),
291-
TestCaseSupplier.stringCases(DataType.KEYWORD),
292-
List.of(),
293-
false
294-
)
295-
);
296-
suppliers.addAll(
297-
TestCaseSupplier.forBinaryNotCasting(
298-
null,
299-
"field",
300-
"query",
301-
Object::equals,
302-
DataType.BOOLEAN,
303-
TestCaseSupplier.versionCases(""),
304-
TestCaseSupplier.stringCases(DataType.KEYWORD),
305-
List.of(),
306-
false
307-
)
308-
);
309-
// Datetime
310-
suppliers.addAll(
311-
TestCaseSupplier.forBinaryNotCasting(
312-
null,
313-
"field",
314-
"query",
315-
Object::equals,
316-
DataType.BOOLEAN,
317-
TestCaseSupplier.dateCases(),
318-
TestCaseSupplier.stringCases(DataType.KEYWORD),
319-
List.of(),
320-
false
321-
)
322-
);
323-
324-
suppliers.addAll(
325-
TestCaseSupplier.forBinaryNotCasting(
326-
null,
327-
"field",
328-
"query",
329-
Object::equals,
330-
DataType.BOOLEAN,
331-
TestCaseSupplier.dateNanosCases(),
332-
TestCaseSupplier.stringCases(DataType.KEYWORD),
333-
List.of(),
334-
false
335-
)
336-
);
337-
}
338-
339-
private static void addStringTestCases(List<TestCaseSupplier> suppliers) {
340-
for (DataType fieldType : DataType.stringTypes()) {
341-
if (DataType.UNDER_CONSTRUCTION.containsKey(fieldType)) {
342-
continue;
343-
}
344-
for (TestCaseSupplier.TypedDataSupplier queryDataSupplier : stringCases(fieldType)) {
345-
suppliers.add(
346-
TestCaseSupplier.testCaseSupplier(
347-
queryDataSupplier,
348-
new TestCaseSupplier.TypedDataSupplier(fieldType.typeName(), () -> randomAlphaOfLength(10), DataType.KEYWORD),
349-
(d1, d2) -> equalTo("string"),
350-
DataType.BOOLEAN,
351-
(o1, o2) -> true
352-
)
353-
);
354-
}
355-
}
356-
}
357-
35836
public final void testLiteralExpressions() {
35937
Expression expression = buildLiteralExpression(testCase);
36038
assertFalse("expected resolved", expression.typeResolved().unresolved());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0; you may not use this file except in compliance with the Elastic License
5+
* 2.0.
6+
*/
7+
8+
package org.elasticsearch.xpack.esql.expression.function.fulltext;
9+
10+
import org.elasticsearch.xpack.esql.core.expression.Expression;
11+
import org.elasticsearch.xpack.esql.core.type.DataType;
12+
import org.elasticsearch.xpack.esql.core.util.NumericUtils;
13+
import org.elasticsearch.xpack.esql.expression.function.AbstractFunctionTestCase;
14+
import org.elasticsearch.xpack.esql.expression.function.TestCaseSupplier;
15+
16+
import java.math.BigInteger;
17+
import java.util.ArrayList;
18+
import java.util.List;
19+
20+
import static org.elasticsearch.xpack.esql.expression.function.TestCaseSupplier.stringCases;
21+
import static org.hamcrest.Matchers.equalTo;
22+
23+
public abstract class AbstractMatchFullTextTextOnlyFunctionTests extends AbstractFunctionTestCase {
24+
25+
protected static List<TestCaseSupplier> testCaseSuppliers() {
26+
List<TestCaseSupplier> suppliers = new ArrayList<>();
27+
FullTextFunctionTestHelpers.addNonNumericCases(suppliers);
28+
FullTextFunctionTestHelpers.addQueryAsStringTestCases(suppliers);
29+
FullTextFunctionTestHelpers.addStringTestCases(suppliers);
30+
return suppliers;
31+
}
32+
}

0 commit comments

Comments
 (0)