org.apache.cassandra.cql3.selection

## Class Selector

- java.lang.Object
- - org.apache.cassandra.cql3.selection.Selector

All Implemented Interfaces:
  AssignmentTestable

Direct Known Subclasses:
  SimpleSelector

    public abstract class Selector
    extends java.lang.Object
    implements AssignmentTestable

A `Selector` is used to convert the data returned by the storage engine into the data requested by the user. They correspond to the <selector> elements from the select clause.

Since the introduction of aggregation, `Selector`s cannot be called anymore by multiple threads as they have an internal state.

### Nested Class Summary

Nested Classes
`static class` `Selector.Factory` A factory for `Selector` instances.

### Nested classes/interfaces inherited from interface org.apache.cassandra.cql3.AssignmentTestable

`AssignmentTestable.TestResult`

### Constructor Summary

Constructors
Constructor and Description
`Selector()`

### Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
`abstract void` `addInput(int protocolVersion, Selection.ResultSetBuilder rs)` Add the current value from the specified `ResultSetBuilder`.
`abstract java.nio.ByteBuffer` `getOutput(int protocolVersion)` Returns the selector output.
`abstract AbstractType<?>` `getType()` Returns the `Selector` output type.
`boolean` `isAggregate()` Checks if this `Selector` is creating aggregates.
`abstract void` `reset()` Reset the internal state of this `Selector`.
`AssignmentTestable.TestResult` `testAssignment(java.lang.String keyspace, ColumnSpecification receiver)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### Selector

    public Selector()

### Method Detail

#### addInput

    public abstract void addInput(int protocolVersion,
                                  Selection.ResultSetBuilder rs)
                           throws InvalidRequestException

Add the current value from the specified `ResultSetBuilder`.

Parameters:
  `protocolVersion` - protocol version used for serialization
  `rs` - the `ResultSetBuilder`
Throws:
  `InvalidRequestException` - if a problem occurs while add the input value

#### getOutput

    public abstract java.nio.ByteBuffer getOutput(int protocolVersion)
                                           throws InvalidRequestException

Returns the selector output.

Parameters:
  `protocolVersion` - protocol version used for serialization
Returns:
  the selector output
Throws:
  `InvalidRequestException` - if a problem occurs while computing the output value

#### getType

    public abstract AbstractType<?> getType()

Returns the `Selector` output type.

Returns:
  the `Selector` output type.

#### isAggregate

    public boolean isAggregate()

Checks if this `Selector` is creating aggregates.

Returns:
  `true` if this `Selector` is creating aggregates `false` otherwise.

#### reset

    public abstract void reset()

Reset the internal state of this `Selector`.

#### testAssignment

    public final AssignmentTestable.TestResult testAssignment(java.lang.String keyspace,
                                                              ColumnSpecification receiver)

Specified by:
  `testAssignment` in interface `AssignmentTestable`
Returns:
  whether this object can be assigned to the provided receiver. We distinguish between 3 values: - EXACT_MATCH if this object is exactly of the type expected by the receiver - WEAKLY_ASSIGNABLE if this object is not exactly the expected type but is assignable nonetheless - NOT_ASSIGNABLE if it's not assignable Most caller should just call the isAssignable() method on the result, though functions have a use for testing "strong" equality to decide the most precise overload to pick when multiple could match.