Skip to content

Commit 8b052ac

Browse files
committed
Whitelist some ScriptDocValues in painless (#22600)
Without this whitelist painless can't use ip or binary doc values. Closes #22584
1 parent 4871ece commit 8b052ac

File tree

4 files changed

+392
-9
lines changed

4 files changed

+392
-9
lines changed

core/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java

+1-6
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
package org.elasticsearch.index.mapper;
2121

22-
import org.apache.lucene.document.Field;
2322
import org.apache.lucene.document.InetAddressPoint;
2423
import org.apache.lucene.document.SortedSetDocValuesField;
2524
import org.apache.lucene.document.StoredField;
@@ -32,7 +31,6 @@
3231
import org.apache.lucene.search.MatchNoDocsQuery;
3332
import org.apache.lucene.search.Query;
3433
import org.apache.lucene.util.BytesRef;
35-
import org.elasticsearch.Version;
3634
import org.elasticsearch.action.fieldstats.FieldStats;
3735
import org.elasticsearch.common.Explicit;
3836
import org.elasticsearch.common.Nullable;
@@ -41,7 +39,6 @@
4139
import org.elasticsearch.common.xcontent.XContentBuilder;
4240
import org.elasticsearch.index.fielddata.IndexFieldData;
4341
import org.elasticsearch.index.fielddata.ScriptDocValues;
44-
import org.elasticsearch.index.fielddata.SortedBinaryDocValues;
4542
import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData;
4643
import org.elasticsearch.index.mapper.LegacyNumberFieldMapper.Defaults;
4744
import org.elasticsearch.index.query.QueryShardContext;
@@ -52,11 +49,9 @@
5249
import java.net.InetAddress;
5350
import java.util.AbstractList;
5451
import java.util.Arrays;
55-
import java.util.Collection;
5652
import java.util.Collections;
5753
import java.util.Iterator;
5854
import java.util.List;
59-
import java.util.ListIterator;
6055
import java.util.Map;
6156

6257
/** A {@link FieldMapper} for ip addresses. */
@@ -238,7 +233,7 @@ public FieldStats.Ip stats(IndexReader reader) throws IOException {
238233
InetAddressPoint.decode(min), InetAddressPoint.decode(max));
239234
}
240235

241-
private static class IpScriptDocValues extends AbstractList<String> implements ScriptDocValues<String> {
236+
public static final class IpScriptDocValues extends AbstractList<String> implements ScriptDocValues<String> {
242237

243238
private final RandomAccessOrds values;
244239

modules/lang-painless/src/main/java/org/elasticsearch/painless/Definition.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -566,11 +566,11 @@ private Map<String,List<String>> addStructs() {
566566
}
567567
if (line.startsWith("class ")) {
568568
String elements[] = line.split("\u0020");
569-
assert elements[2].equals("->");
569+
assert elements[2].equals("->") : "Invalid struct definition [" + String.join(" ", elements) +"]";
570570
if (elements.length == 7) {
571571
hierarchy.put(elements[1], Arrays.asList(elements[5].split(",")));
572572
} else {
573-
assert elements.length == 5;
573+
assert elements.length == 5 : "Invalid struct definition [" + String.join(" ", elements) + "]";
574574
}
575575
String className = elements[1];
576576
String javaPeer = elements[3];
@@ -612,7 +612,7 @@ private Map<String,List<String>> addStructs() {
612612
}
613613
}
614614
} catch (Exception e) {
615-
throw new RuntimeException("syntax error in " + file + ", line: " + currentLine, e);
615+
throw new RuntimeException("error in " + file + ", line: " + currentLine, e);
616616
}
617617
}
618618
return hierarchy;

modules/lang-painless/src/main/resources/org/elasticsearch/painless/org.elasticsearch.txt

+20
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,26 @@ class org.elasticsearch.index.fielddata.ScriptDocValues.Booleans -> org.elastics
114114
List getValues()
115115
}
116116

117+
class org.elasticsearch.index.fielddata.ScriptDocValues.BytesRefs -> org.elasticsearch.index.fielddata.ScriptDocValues$BytesRefs extends List,Collection,Iterable,Object {
118+
BytesRef get(int)
119+
BytesRef getValue()
120+
List getValues()
121+
}
122+
123+
class BytesRef -> org.apache.lucene.util.BytesRef extends Object {
124+
byte[] bytes
125+
int offset
126+
int length
127+
boolean bytesEquals(BytesRef)
128+
String utf8ToString()
129+
}
130+
131+
class org.elasticsearch.index.mapper.IpFieldMapper.IpFieldType.IpScriptDocValues -> org.elasticsearch.index.mapper.IpFieldMapper$IpFieldType$IpScriptDocValues extends List,Collection,Iterable,Object {
132+
String get(int)
133+
String getValue()
134+
List getValues()
135+
}
136+
117137
# for testing.
118138
# currently FeatureTest exposes overloaded constructor, field load store, and overloaded static methods
119139
class org.elasticsearch.painless.FeatureTest -> org.elasticsearch.painless.FeatureTest extends Object {

0 commit comments

Comments
 (0)