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, selectors cannot be called anymore by multiple threads
* as they have an internal state.
result_set_builder.
*
* @param protocol_version protocol version used for serialization
* @param rs the result_set_builder
* @throws InvalidRequestException if a problem occurs while add the input value
*/
virtual void add_input(cql_serialization_format sf, result_set_builder& rs) = 0;
/**
* Returns the selector output.
*
* @param protocol_version protocol version used for serialization
* @return the selector output
* @throws InvalidRequestException if a problem occurs while computing the output value
*/
virtual bytes_opt get_output(cql_serialization_format sf) = 0;
/**
* Returns the selector output type.
*
* @return the selector output type.
*/
virtual data_type get_type() = 0;
/**
* Checks if this selector is creating aggregates.
*
* @return true if this selector is creating aggregates false
* otherwise.
*/
virtual bool is_aggregate() {
return false;
}
/**
* Reset the internal state of this selector.
*/
virtual void reset() = 0;
virtual assignment_testable::test_result test_assignment(database& db, const sstring& keyspace, ::shared_ptrselector instances.
*/
class selector::factory {
public:
virtual ~factory() {}
virtual bool uses_function(const sstring& ks_name, const sstring& function_name) {
return false;
}
/**
* Returns the column specification corresponding to the output value of the selector instances created by
* this factory.
*
* @param schema the column family schema
* @return a column specification
*/
::shared_ptrselector instance.
*
* @return a new selector instance
*/
virtual ::shared_ptrtrue if this factory creates selectors instances that creates aggregates,
* false otherwise
*/
virtual bool is_aggregate_selector_factory() {
return false;
}
/**
* Checks if this factory creates writetime selectors instances.
*
* @return true if this factory creates writetime selectors instances,
* false otherwise
*/
virtual bool is_write_time_selector_factory() {
return false;
}
/**
* Checks if this factory creates TTL selectors instances.
*
* @return true if this factory creates TTL selectors instances,
* false otherwise
*/
virtual bool is_ttl_selector_factory() {
return false;
}
/**
* Returns the name of the column corresponding to the output value of the selector instances created by
* this factory.
*
* @return a column name
*/
virtual sstring column_name() = 0;
/**
* Returns the type of the values returned by the selector instances created by this factory.
*
* @return the selector output type
*/
virtual data_type get_return_type() = 0;
};
}
}