File tree Expand file tree Collapse file tree 2 files changed +19
-0
lines changed
main/java/org/elasticsearch/search/fetch
test/java/org/elasticsearch/search/fetch Expand file tree Collapse file tree 2 files changed +19
-0
lines changed Original file line number Diff line number Diff line change @@ -44,6 +44,10 @@ public StoredFieldsSpec merge(StoredFieldsSpec other) {
4444 }
4545 Set <String > mergedFields ;
4646 if (other .requiredStoredFields .isEmpty ()) {
47+ /*
48+ * In the very very common case that we don't need new stored fields
49+ * let's not clone the existing array.
50+ */
4751 mergedFields = this .requiredStoredFields ;
4852 } else {
4953 mergedFields = new HashSet <>(this .requiredStoredFields );
Original file line number Diff line number Diff line change 1818import org .elasticsearch .search .internal .SearchContext ;
1919import org .elasticsearch .test .ESTestCase ;
2020
21+ import java .util .Set ;
22+
2123import static org .hamcrest .Matchers .hasSize ;
24+ import static org .hamcrest .Matchers .sameInstance ;
2225import static org .mockito .Mockito .mock ;
2326import static org .mockito .Mockito .when ;
2427
@@ -67,6 +70,18 @@ public void testScriptFieldsEnableMetadata() {
6770 assertTrue (spec .requiresMetadata ());
6871 }
6972
73+ public void testNoCloneOnMerge () {
74+ StoredFieldsSpec spec = StoredFieldsSpec .NO_REQUIREMENTS ;
75+ spec = spec .merge (StoredFieldsSpec .NEEDS_SOURCE );
76+ assertThat (spec .requiredStoredFields (), sameInstance (StoredFieldsSpec .NO_REQUIREMENTS .requiredStoredFields ()));
77+
78+ StoredFieldsSpec needsCat = new StoredFieldsSpec (false , false , Set .of ("cat" ));
79+ StoredFieldsSpec withCat = spec .merge (needsCat );
80+ spec = withCat .merge (StoredFieldsSpec .NO_REQUIREMENTS );
81+ assertThat (spec .requiredStoredFields (), sameInstance (withCat .requiredStoredFields ()));
82+ }
83+
84+
7085 private static SearchContext searchContext (SearchSourceBuilder sourceBuilder ) {
7186 SearchContext sc = mock (SearchContext .class );
7287 when (sc .fetchSourceContext ()).thenReturn (sourceBuilder .fetchSource ());
You can’t perform that action at this time.
0 commit comments