Description
Most Streams built on top of other streams require that their incoming stream(s) be ordered in a complimentary way to how this stream is expected to output its results.
For example, if a MergeStream is merging two streams on "fieldA asc, fieldB desc", then both its incoming streams must be ordered in a similar way. That said, the incoming stream could be ordered more strictly, ie "fieldA asc, fieldB desc, fieldC asc" but as long as the the comparator used in the MergeStream can be "derived from" the incoming stream's comparator then we are good to go.
Some comparator A can be "derived from" some other comparator B iff the fields and their order in A is equal to the first fields and their order in B. For example, "fieldA asc, fieldB dec" can be derived from "fieldA asc, fieldB desc, fieldC asc, fieldD asc" but cannot be derived from "field A asc".
This patch is to add this validation support. It requires changes to Comparators, Equalitors, most Streams, and related tests. It adds a way to compare Comparators and Equalitors and in the end is one more required piece before we can add support for Join streams.
It is dependent on SOLR-7513 and SOLR-7528. Other dependencies it has have already been committed to trunk and the 5.2 branch.
It does not change any interfaces to code already released (5.1 and below). It does change interfaces to code in trunk and 5.2.