32#include <kcenon/common/patterns/result.h>
43#ifdef PACS_WITH_DATABASE_SYSTEM
58using VoidResult = kcenon::common::VoidResult;
71#ifdef PACS_WITH_DATABASE_SYSTEM
108class query_result_stream {
113 ~query_result_stream() =
default;
116 query_result_stream(
const query_result_stream&) =
delete;
117 auto operator=(
const query_result_stream&) -> query_result_stream& =
delete;
120 query_result_stream(query_result_stream&&)
noexcept =
default;
121 auto operator=(query_result_stream&&)
noexcept -> query_result_stream& =
default;
139 ->
Result<std::unique_ptr<query_result_stream>>;
154 const std::string& cursor_state,
157 const stream_config& config = {})
158 -> Result<std::unique_ptr<query_result_stream>>;
169 [[nodiscard]]
auto has_more() const noexcept ->
bool;
178 [[nodiscard]] auto next_batch() -> std::optional<std::vector<core::dicom_dataset>>;
188 [[nodiscard]] auto total_count() const -> std::optional<
size_t>;
195 [[nodiscard]] auto position() const noexcept ->
size_t;
202 [[nodiscard]] auto level() const noexcept -> query_level;
216 [[nodiscard]] auto cursor() const -> std::
string;
222 query_result_stream(std::unique_ptr<database_cursor> cursor, query_level level,
223 const core::dicom_dataset& query_keys, stream_config config);
228 [[nodiscard]] auto patient_to_dataset(const storage::patient_record& record) const
229 -> core::dicom_dataset;
234 [[nodiscard]] auto study_to_dataset(const storage::study_record& record) const
235 -> core::dicom_dataset;
240 [[nodiscard]] auto series_to_dataset(const storage::series_record& record) const
241 -> core::dicom_dataset;
246 [[nodiscard]] auto instance_to_dataset(const storage::instance_record& record) const
247 -> core::dicom_dataset;
252 [[nodiscard]] auto record_to_dataset(const query_record& record) const
253 -> core::dicom_dataset;
258 [[nodiscard]] static auto extract_patient_query(const core::dicom_dataset& keys)
259 -> storage::patient_query;
264 [[nodiscard]] static auto extract_study_query(const core::dicom_dataset& keys)
265 -> storage::study_query;
270 [[nodiscard]] static auto extract_series_query(const core::dicom_dataset& keys)
271 -> storage::series_query;
276 [[nodiscard]] static auto extract_instance_query(const core::dicom_dataset& keys)
277 -> storage::instance_query;
280 std::unique_ptr<database_cursor> cursor_;
286 core::dicom_dataset query_keys_;
289 stream_config config_;
292 mutable std::optional<
size_t> total_count_;
Database cursor for streaming query results.
DICOM Dataset - ordered collection of Data Elements.
Instance record data structures for database operations.
kcenon::common::Result< T > Result
Result type alias for operations returning a value.
query_level
DICOM Query/Retrieve level enumeration.
Patient record data structures for database operations.
DICOM Query SCP service (C-FIND handler)
Series record data structures for database operations.
Configuration for query result streaming.
bool include_total_count
Whether to include total count (may be expensive for large datasets)
size_t page_size
Default page size for batched fetching.
Study record data structures for database operations.