26#ifdef PACS_WITH_DATABASE_SYSTEM
33#include <kcenon/common/patterns/result.h>
49using VoidResult = kcenon::common::VoidResult;
57using query_record = std::variant<storage::patient_record, storage::study_record,
58 storage::series_record, storage::instance_record>;
91class database_cursor {
104 database_cursor(
const database_cursor&) =
delete;
105 auto operator=(
const database_cursor&) -> database_cursor& =
delete;
108 database_cursor(database_cursor&& other)
noexcept;
109 auto operator=(database_cursor&& other)
noexcept -> database_cursor&;
122 [[nodiscard]]
static auto create_patient_cursor(
123 std::shared_ptr<storage::pacs_database_adapter> db,
124 const storage::patient_query& query) -> Result<std::unique_ptr<database_cursor>>;
133 [[nodiscard]]
static auto create_study_cursor(
134 std::shared_ptr<storage::pacs_database_adapter> db,
135 const storage::study_query& query) -> Result<std::unique_ptr<database_cursor>>;
144 [[nodiscard]]
static auto create_series_cursor(
145 std::shared_ptr<storage::pacs_database_adapter> db,
146 const storage::series_query& query) -> Result<std::unique_ptr<database_cursor>>;
155 [[nodiscard]]
static auto create_instance_cursor(
156 std::shared_ptr<storage::pacs_database_adapter> db,
157 const storage::instance_query& query) -> Result<std::unique_ptr<database_cursor>>;
169 [[nodiscard]]
auto has_more() const noexcept ->
bool;
178 [[nodiscard]] auto fetch_next() -> std::optional<query_record>;
188 [[nodiscard]] auto fetch_batch(
size_t batch_size) -> std::vector<query_record>;
195 [[nodiscard]] auto position() const noexcept ->
size_t;
202 [[nodiscard]] auto type() const noexcept -> record_type;
211 [[nodiscard]] auto reset() -> VoidResult;
225 [[nodiscard]] auto serialize() const -> std::
string;
231 database_cursor(std::vector<query_record> results, record_type type);
236 [[nodiscard]] static auto parse_patient_row(
237 const storage::database_row& row) -> storage::patient_record;
242 [[nodiscard]] static auto parse_study_row(
243 const storage::database_row& row) -> storage::study_record;
248 [[nodiscard]] static auto parse_series_row(
249 const storage::database_row& row) -> storage::series_record;
254 [[nodiscard]] static auto parse_instance_row(
255 const storage::database_row& row) -> storage::instance_record;
263 static
void add_dicom_condition(
264 database::query_builder& builder,
265 const std::
string& field,
266 const std::
string& value);
269 std::vector<query_record> results_;
277 [[nodiscard]] static auto to_like_pattern(std::string_view pattern) -> std::
string;
282 [[nodiscard]] static auto contains_dicom_wildcards(std::string_view pattern) ->
bool;
291 bool has_more_{
true};
294 bool stepped_{
false};
Instance record data structures for database operations.
kcenon::common::Result< T > Result
Result type alias for operations returning a value.
Unified database adapter for PACS system.
Patient record data structures for database operations.
Series record data structures for database operations.
Study record data structures for database operations.