## org.exist.xquery.value
Class PreorderedValueSequence

    java.lang.Object
      org.exist.xquery.value.AbstractSequence
          org.exist.xquery.value.PreorderedValueSequence

All Implemented Interfaces:
  Sequence

public class PreorderedValueSequence
extends AbstractSequence

A sequence that sorts its items in the order specified by the order specs of an "order by" clause. Used by `ForExpr`. For better performance, the whole input sequence is sorted in one single step. However, this only works if every order expression returns a result of type node.

Author:
  wolf

Field Summary

Fields inherited from interface org.exist.xquery.value.Sequence
`EMPTY_SEQUENCE`

Constructor Summary
`PreorderedValueSequence(OrderSpec[] specs, Sequence input, int contextId)`

Method Summary
`void` `add(Item item)` Add an item to the current sequence.
`void` `clearContext(int contextId)` For every item in the sequence, clear any context-dependant information that is stored during query processing.
`int` `getItemType()` Return the primary type to which all items in this sequence belong.
`int` `getLength()` Returns the number of items contained in the sequence.
`boolean` `hasOne()` Returns whether the sequence has just one item or not.
`boolean` `isEmpty()` Returns whether the sequence is empty or not.
`Item` `itemAt(int pos)` Returns the item located at the specified position within this sequence.
`SequenceIterator` `iterate()` Returns an iterator over all items in the sequence.
`void` `removeDuplicates()` Explicitely remove all duplicate nodes from this sequence.
`NodeSet` `toNodeSet()` Convert the sequence into a NodeSet.
`SequenceIterator` `unorderedIterator()` Returns an iterator over all items in the sequence.

Methods inherited from class org.exist.xquery.value.AbstractSequence
`addAll, conversionPreference, convertTo, effectiveBooleanValue, getCardinality, getDocumentSet, getStringValue, hasMany, isCached, isPersistentSet, setIsCached, setSelfAsContext, toJavaObject, toString`

Methods inherited from class java.lang.Object
`equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Constructor Detail

### PreorderedValueSequence

    public PreorderedValueSequence(OrderSpec[] specs,
                                   Sequence input,
                                   int contextId)
                            throws XPathException

Method Detail

### clearContext

    public void clearContext(int contextId)

  Description copied from interface: `Sequence`
  For every item in the sequence, clear any context-dependant information that is stored during query processing. This feature is used for node sets, which may store information about their context node.

  Specified by:
    `clearContext` in interface `Sequence`
  Overrides:
    `clearContext` in class `AbstractSequence`

### getItemType

    public int getItemType()

  Description copied from interface: `Sequence`
  Return the primary type to which all items in this sequence belong. This is `Type.NODE` for node sets, `Type.ITEM` for other sequences with mixed items.

  Specified by:
    `getItemType` in interface `Sequence`
  Specified by:
    `getItemType` in class `AbstractSequence`

### iterate

    public SequenceIterator iterate()
                             throws XPathException

  Description copied from interface: `Sequence`
  Returns an iterator over all items in the sequence. The items are returned in document order where applicable.

  Specified by:
    `iterate` in interface `Sequence`
  Specified by:
    `iterate` in class `AbstractSequence`
  Throws:
    `XPathException`

### unorderedIterator

    public SequenceIterator unorderedIterator()

  Description copied from interface: `Sequence`
  Returns an iterator over all items in the sequence. The returned items may - but need not - to be in document order.

  Specified by:
    `unorderedIterator` in interface `Sequence`
  Specified by:
    `unorderedIterator` in class `AbstractSequence`

### getLength

    public int getLength()

  Description copied from interface: `Sequence`
  Returns the number of items contained in the sequence. Call this method only when necessary, since it can be resource consuming.

  Specified by:
    `getLength` in interface `Sequence`
  Specified by:
    `getLength` in class `AbstractSequence`

### isEmpty

    public boolean isEmpty()

  Description copied from interface: `Sequence`
  Returns whether the sequence is empty or not.

  Specified by:
    `isEmpty` in interface `Sequence`
  Specified by:
    `isEmpty` in class `AbstractSequence`

### hasOne

    public boolean hasOne()

  Description copied from interface: `Sequence`
  Returns whether the sequence has just one item or not.

  Specified by:
    `hasOne` in interface `Sequence`
  Specified by:
    `hasOne` in class `AbstractSequence`

### add

    public void add(Item item)
             throws XPathException

  Description copied from interface: `Sequence`
  Add an item to the current sequence. An `XPathException` may be thrown if the item's type is incompatible with this type of sequence (e.g. if the sequence is a node set). The sequence may or may not allow duplicate values.

  Specified by:
    `add` in interface `Sequence`
  Specified by:
    `add` in class `AbstractSequence`
  Throws:
    `XPathException`

### itemAt

    public Item itemAt(int pos)

  Description copied from interface: `Sequence`
  Returns the item located at the specified position within this sequence. Items are counted beginning at 0.

  Specified by:
    `itemAt` in interface `Sequence`
  Specified by:
    `itemAt` in class `AbstractSequence`

### toNodeSet

    public NodeSet toNodeSet()
                      throws XPathException

  Description copied from interface: `Sequence`
  Convert the sequence into a NodeSet. If the sequence contains items which are not nodes, an XPathException is thrown.

  Throws:
    `XPathException` - if the sequence contains items which are not nodes.

### removeDuplicates

    public void removeDuplicates()

  Description copied from interface: `Sequence`
  Explicitely remove all duplicate nodes from this sequence.

Copyright (C) Wolfgang Meier. All rights reserved.