12#ifdef PACS_WITH_DATABASE_SYSTEM
22streaming_query_handler::streaming_query_handler(storage::index_database* db)
29void streaming_query_handler::set_page_size(
size_t size)
noexcept {
33auto streaming_query_handler::page_size() const noexcept ->
size_t {
37void streaming_query_handler::set_max_results(
size_t max)
noexcept {
41auto streaming_query_handler::max_results() const noexcept ->
size_t {
49auto streaming_query_handler::create_stream(query_level level,
50 const core::dicom_dataset& query_keys,
51 [[maybe_unused]]
const std::string& calling_ae)
54 config.page_size = page_size_;
56 return query_result_stream::create(db_, level, query_keys, config);
59auto streaming_query_handler::resume_stream(
const std::string& cursor_state,
61 const core::dicom_dataset& query_keys)
64 config.page_size = page_size_;
66 return query_result_stream::from_cursor(db_, cursor_state, level, query_keys, config);
73auto streaming_query_handler::as_query_handler() ->
query_handler {
76 auto page_size = page_size_;
77 auto max_results = max_results_;
79 return [db, page_size, max_results](query_level level,
80 const core::dicom_dataset& query_keys,
81 [[maybe_unused]]
const std::string& calling_ae)
82 -> std::vector<core::dicom_dataset> {
84 config.page_size = page_size;
86 auto stream_result = query_result_stream::create(db, level, query_keys, config);
87 if (stream_result.is_err()) {
92 auto stream = std::move(stream_result.value());
93 std::vector<core::dicom_dataset> results;
96 while (stream->has_more()) {
97 auto batch = stream->next_batch();
98 if (!batch.has_value()) {
102 for (
auto& ds : batch.value()) {
103 results.push_back(std::move(ds));
106 if (max_results > 0 && results.size() >= max_results) {
PACS index database for metadata storage and retrieval.
std::function< std::vector< core::dicom_dataset >( query_level level, const core::dicom_dataset &query_keys, const std::string &calling_ae)> query_handler
Query handler function type.
Streaming query handler for memory-efficient C-FIND processing.