6 #ifndef TURI_SFRAME_QUERY_MANAGER_RANGE_HPP 7 #define TURI_SFRAME_QUERY_MANAGER_RANGE_HPP 8 #include <core/data/flexible_type/flexible_type.hpp> 9 #include <core/storage/query_engine/operators/operator.hpp> 10 #include <core/storage/query_engine/execution/query_context.hpp> 11 #include <core/storage/query_engine/operators/operator_properties.hpp> 14 namespace query_eval {
28 DECL_CORO_STATE(execute);
33 static std::string name() {
return "range"; }
46 ASSERT_LE(m_start, m_end);
49 inline std::shared_ptr<query_operator>
clone()
const {
50 return std::make_shared<operator_impl>(m_start, m_end);
52 inline bool coro_running()
const {
53 return CORO_RUNNING(execute);
64 size_t len = std::min<size_t>(m_end - cur, context.
block_size());
67 for (
auto& value: *(ret->get_columns()[0])) {
78 static std::shared_ptr<planner_node> make_planner_node(
83 {
"end_index", end - start}});
86 static std::shared_ptr<query_operator> from_planner_node(
87 std::shared_ptr<planner_node> pnode) {
88 ASSERT_EQ((
int)pnode->operator_type, (
int)planner_node_type::RANGE_NODE);
89 ASSERT_TRUE(pnode->operator_parameters.count(
"start"));
90 ASSERT_TRUE(pnode->operator_parameters.count(
"begin_index"));
91 ASSERT_TRUE(pnode->operator_parameters.count(
"end_index"));
94 size_t begin_index = pnode->operator_parameters[
"begin_index"];
95 size_t end_index = pnode->operator_parameters[
"end_index"];
96 return std::make_shared<operator_impl>(start + begin_index,
100 static std::vector<flex_type_enum> infer_type(
101 std::shared_ptr<planner_node> pnode) {
102 ASSERT_EQ((
int)pnode->operator_type, (
int)planner_node_type::RANGE_NODE);
107 static int64_t infer_length(std::shared_ptr<planner_node> pnode) {
108 ASSERT_EQ((
int)pnode->operator_type, (
int)planner_node_type::RANGE_NODE);
109 size_t count = pnode->operator_parameters[
"end_index"] -
110 pnode->operator_parameters[
"begin_index"];
114 static std::string repr(std::shared_ptr<planner_node> pnode, pnode_tagger&) {
115 ASSERT_EQ((
int)pnode->operator_type, (
int)planner_node_type::RANGE_NODE);
116 ASSERT_TRUE(pnode->operator_parameters.count(
"start"));
117 ASSERT_TRUE(pnode->operator_parameters.count(
"begin_index"));
118 ASSERT_TRUE(pnode->operator_parameters.count(
"end_index"));
120 flex_int start = pnode->operator_parameters[
"start"];
121 size_t begin_index = pnode->operator_parameters[
"begin_index"];
122 size_t end_index = pnode->operator_parameters[
"end_index"];
124 std::ostringstream ss;
126 ss <<
"Sequence(" << start <<
")[" << begin_index <<
":" << end_index <<
"]";
143 #endif // TURI_SFRAME_QUERY_MANAGER_RANGE_HPP std::shared_ptr< query_operator > clone() const
int num_inputs
Number of inputs expected to the operator.
void execute(query_context &context)
size_t attribute_bitfield
A bitfield of the attribute enum.
void emit(const std::shared_ptr< sframe_rows > &rows)
std::shared_ptr< sframe_rows > get_output_buffer()
#define ASSERT_TRUE(cond)
size_t block_size() const
static std::shared_ptr< planner_node > make_shared(planner_node_type operator_type, const std::map< std::string, flexible_type > &operator_parameters=std::map< std::string, flexible_type >(), const std::map< std::string, any > &any_operator_parameters=std::map< std::string, any >(), const std::vector< std::shared_ptr< planner_node >> &inputs=std::vector< std::shared_ptr< planner_node >>())