Skip to content

Commit 175e8d9

Browse files
feat(kv-ir): Add QueryHandler API declarations for handling KV-pair IR stream queries. (#863)
Co-authored-by: Kirk Rodrigues <[email protected]>
1 parent d40ecf0 commit 175e8d9

4 files changed

Lines changed: 161 additions & 0 deletions

File tree

components/core/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,10 @@ set(SOURCE_FILES_unitTest
474474
src/clp/ffi/ir_stream/Serializer.cpp
475475
src/clp/ffi/ir_stream/Serializer.hpp
476476
src/clp/ffi/ir_stream/search/AstEvaluationResult.hpp
477+
src/clp/ffi/ir_stream/search/ErrorCode.cpp
478+
src/clp/ffi/ir_stream/search/ErrorCode.hpp
477479
src/clp/ffi/ir_stream/search/NewProjectedSchemaTreeNodeCallbackReq.hpp
480+
src/clp/ffi/ir_stream/search/QueryHandler.hpp
478481
src/clp/ffi/ir_stream/utils.cpp
479482
src/clp/ffi/ir_stream/utils.hpp
480483
src/clp/ffi/KeyValuePairLogEvent.cpp
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include "ErrorCode.hpp"
2+
3+
#include <string>
4+
5+
#include <ystdlib/error_handling/ErrorCode.hpp>
6+
7+
namespace {
8+
using clp::ffi::ir_stream::search::ErrorCodeEnum;
9+
using ErrorCategory = ystdlib::error_handling::ErrorCategory<ErrorCodeEnum>;
10+
} // namespace
11+
12+
template <>
13+
auto ErrorCategory::name() const noexcept -> char const* {
14+
return "clp::ffi::ir_stream::search::Error";
15+
}
16+
17+
template <>
18+
auto ErrorCategory::message(ErrorCodeEnum error_enum) const -> std::string {
19+
switch (error_enum) {
20+
case ErrorCodeEnum::MethodNotImplemented:
21+
return "The requested method is not implemented.";
22+
default:
23+
return "Unknown error code enum.";
24+
}
25+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#ifndef CLP_FFI_IR_STREAM_SEARCH_ERRORCODE_HPP
2+
#define CLP_FFI_IR_STREAM_SEARCH_ERRORCODE_HPP
3+
4+
#include <cstdint>
5+
6+
#include <ystdlib/error_handling/ErrorCode.hpp>
7+
8+
namespace clp::ffi::ir_stream::search {
9+
/**
10+
* Represents all possible error codes related to KV-pair IR stream search.
11+
*/
12+
enum class ErrorCodeEnum : uint8_t {
13+
MethodNotImplemented,
14+
};
15+
16+
using ErrorCode = ystdlib::error_handling::ErrorCode<ErrorCodeEnum>;
17+
} // namespace clp::ffi::ir_stream::search
18+
19+
YSTDLIB_ERROR_HANDLING_MARK_AS_ERROR_CODE_ENUM(clp::ffi::ir_stream::search::ErrorCodeEnum);
20+
21+
#endif // CLP_FFI_IR_STREAM_SEARCH_ERRORCODE_HPP
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#ifndef CLP_FFI_IR_STREAM_SEARCH_QUERYHANDLER_HPP
2+
#define CLP_FFI_IR_STREAM_SEARCH_QUERYHANDLER_HPP
3+
4+
#include <outcome/outcome.hpp>
5+
6+
#include "../../KeyValuePairLogEvent.hpp"
7+
#include "../../SchemaTree.hpp"
8+
#include "AstEvaluationResult.hpp"
9+
#include "ErrorCode.hpp"
10+
#include "NewProjectedSchemaTreeNodeCallbackReq.hpp"
11+
12+
namespace clp::ffi::ir_stream::search {
13+
/**
14+
* Handler for KV-pair IR stream search queries.
15+
*
16+
* Each query handler stores a KQL query represented as an AST. The handler is responsible for:
17+
* - resolving column descriptors for schema-tree nodes within the stream.
18+
* - evaluating the query against deserialized node-ID-value pairs.
19+
*
20+
* @tparam NewProjectedSchemaTreeNodeCallbackType Type of the callback to handle new projected
21+
* schema-tree nodes.
22+
*/
23+
template <NewProjectedSchemaTreeNodeCallbackReq NewProjectedSchemaTreeNodeCallbackType>
24+
class QueryHandler {
25+
public:
26+
// Factory function
27+
/**
28+
* @param new_projected_schema_tree_node_callback
29+
* @return A result containing the newly constructed `QueryHandler` on success, or an error code
30+
* indicating the failure:
31+
* - TODO
32+
*/
33+
[[nodiscard]] static auto create(
34+
NewProjectedSchemaTreeNodeCallbackType new_projected_schema_tree_node_callback
35+
) -> outcome_v2::std_result<QueryHandler>;
36+
37+
// Delete copy constructor and assignment operator
38+
QueryHandler(QueryHandler const&) = delete;
39+
auto operator=(QueryHandler const&) -> QueryHandler& = delete;
40+
41+
// Default move constructor and assignment operator
42+
QueryHandler(QueryHandler&&) = default;
43+
auto operator=(QueryHandler&&) -> QueryHandler& = default;
44+
45+
// Destructor
46+
~QueryHandler() = default;
47+
48+
/**
49+
* Updates any partially-resolved column descriptors by processing a newly inserted schema-tree
50+
* node.
51+
* @param is_auto_generated
52+
* @param node_locator
53+
* @param node_id
54+
* @return A void result on success, or an error code indicating the failure:
55+
* - TODO
56+
*/
57+
[[nodiscard]] auto update_partially_resolved_columns(
58+
bool is_auto_generated,
59+
SchemaTree::NodeLocator const& node_locator,
60+
SchemaTree::Node::id_t node_id
61+
) -> outcome_v2::std_result<void>;
62+
63+
/**
64+
* Evaluates the given node-ID-value pairs against the underlying query.
65+
* @param auto_gen_node_id_value_pairs
66+
* @param user_gen_node_id_value_pairs
67+
* @return A result containing the evaluation result on success, or an error code indicating
68+
* the failure:
69+
* - TODO
70+
*/
71+
[[nodiscard]] auto evaluate_node_id_value_pairs(
72+
KeyValuePairLogEvent::NodeIdValuePairs const& auto_gen_node_id_value_pairs,
73+
KeyValuePairLogEvent::NodeIdValuePairs const& user_gen_node_id_value_pairs
74+
) -> outcome_v2::std_result<AstEvaluationResult>;
75+
76+
private:
77+
// Constructor
78+
explicit QueryHandler(
79+
NewProjectedSchemaTreeNodeCallbackType new_projected_schema_tree_node_callback
80+
)
81+
: m_new_projected_schema_tree_node_callback{new_projected_schema_tree_node_callback} {}
82+
83+
NewProjectedSchemaTreeNodeCallbackType m_new_projected_schema_tree_node_callback;
84+
};
85+
86+
template <NewProjectedSchemaTreeNodeCallbackReq NewProjectedSchemaTreeNodeCallbackType>
87+
auto QueryHandler<NewProjectedSchemaTreeNodeCallbackType>::create(
88+
[[maybe_unused]] NewProjectedSchemaTreeNodeCallbackType
89+
new_projected_schema_tree_node_callback
90+
) -> outcome_v2::std_result<QueryHandler<NewProjectedSchemaTreeNodeCallbackType>> {
91+
return ErrorCode{ErrorCodeEnum::MethodNotImplemented};
92+
}
93+
94+
template <NewProjectedSchemaTreeNodeCallbackReq NewProjectedSchemaTreeNodeCallbackType>
95+
auto QueryHandler<NewProjectedSchemaTreeNodeCallbackType>::update_partially_resolved_columns(
96+
[[maybe_unused]] bool is_auto_generated,
97+
[[maybe_unused]] SchemaTree::NodeLocator const& node_locator,
98+
[[maybe_unused]] SchemaTree::Node::id_t node_id
99+
) -> outcome_v2::std_result<void> {
100+
return ErrorCode{ErrorCodeEnum::MethodNotImplemented};
101+
}
102+
103+
template <NewProjectedSchemaTreeNodeCallbackReq NewProjectedSchemaTreeNodeCallbackType>
104+
auto QueryHandler<NewProjectedSchemaTreeNodeCallbackType>::evaluate_node_id_value_pairs(
105+
[[maybe_unused]] KeyValuePairLogEvent::NodeIdValuePairs const& auto_gen_node_id_value_pairs,
106+
[[maybe_unused]] KeyValuePairLogEvent::NodeIdValuePairs const& user_gen_node_id_value_pairs
107+
) -> outcome_v2::std_result<AstEvaluationResult> {
108+
return ErrorCode{ErrorCodeEnum::MethodNotImplemented};
109+
}
110+
} // namespace clp::ffi::ir_stream::search
111+
112+
#endif // CLP_FFI_IR_STREAM_SEARCH_QUERYHANDLER_HPP

0 commit comments

Comments
 (0)