GCC Code Coverage Report


Directory: libimgdoc2/
File: libimgdoc2/src/doc/documentMetadataReader.h
Date: 2025-02-03 12:41:04
Exec Total Coverage
Lines: 2 2 100.0%
Functions: 2 2 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 // SPDX-FileCopyrightText: 2023 Carl Zeiss Microscopy GmbH
2 //
3 // SPDX-License-Identifier: MIT
4
5 #pragma once
6
7 #include <memory>
8 #include <utility>
9 #include <string>
10 #include "IDocumentMetadata.h"
11 #include "document.h"
12 #include "documentMetadataBase.h"
13
14 /// Implementation of the IDocumentMetadataRead interface.
15 class DocumentMetadataReader : public DocumentMetadataBase, public imgdoc2::IDocumentMetadataRead
16 {
17 public:
18 DocumentMetadataReader() = delete;
19 80 explicit DocumentMetadataReader(std::shared_ptr<Document> document) : DocumentMetadataBase(std::move(document)) {}
20 160 ~DocumentMetadataReader() override = default;
21
22 imgdoc2::DocumentMetadataItem GetItem(imgdoc2::dbIndex primary_key, imgdoc2::DocumentMetadataItemFlags flags) override;
23 imgdoc2::DocumentMetadataItem GetItemForPath(const std::string& path, imgdoc2::DocumentMetadataItemFlags flags) override;
24 void EnumerateItems(
25 std::optional<imgdoc2::dbIndex> parent,
26 bool recursive,
27 imgdoc2::DocumentMetadataItemFlags flags,
28 const std::function<bool(imgdoc2::dbIndex, const imgdoc2::DocumentMetadataItem& item)>& func) override;
29 void EnumerateItemsForPath(
30 const std::string& path,
31 bool recursive,
32 imgdoc2::DocumentMetadataItemFlags flags,
33 const std::function<bool(imgdoc2::dbIndex, const imgdoc2::DocumentMetadataItem& item)>& func) override;
34
35 private:
36 void InternalEnumerateItems(
37 std::optional<imgdoc2::dbIndex> parent,
38 const std::string& path_of_parent,
39 bool recursive,
40 imgdoc2::DocumentMetadataItemFlags flags,
41 const std::function<bool(imgdoc2::dbIndex, const imgdoc2::DocumentMetadataItem& item)>& func);
42
43 std::shared_ptr<IDbStatement> CreateStatementForRetrievingItem(imgdoc2::DocumentMetadataItemFlags flags);
44
45 /// Creates statement which gives the items for which the given item is an ancestor. If recursive is false, then
46 /// only items for which the given item is the direct parent are returned. If recursive is true, then all items
47 /// for which the given item is an ancestor are returned.
48 /// The result of this statements gives in column 0 the primary key of the item, in column 1 the name of the item, in column 2 the type discriminator,
49 /// in column 3 the value double, in column 4 the value integer and in column 5 the value string.
50 /// If the include_path flag is true, then the complete path of the item is included in the result as column 6.
51 ///
52 /// \param recursive True to query only items for the 'parent' is the direct ancestor, false to include all items (for which the 'parent' is direct or indirect ancestor).
53 /// \param include_path True to include a sixth column containing the complete path of the item; false otherwise.
54 /// \param parent The node to search for (being an ancestor). If nullopt, this means "root node".
55 ///
56 /// \returns The statement.
57 std::shared_ptr<IDbStatement> CreateStatementForEnumerateAllItemsWithAncestorAndDataBind(bool recursive, bool include_path, std::optional<imgdoc2::dbIndex> parent);
58
59 /// Retrieves a document-metadata-item object from a statement. The precondition is that the statement has been executed and the result is ready.
60 /// We expect at column 0 the primary key, column 1 the Name, at column 2 the TypeDiscriminator, at column 3 the ValueDouble, at column 4 the ValueInteger and
61 /// at column 5 the ValueString.
62 ///
63 /// \param statement The statement.
64 /// \param flags The flags.
65 /// \param path_to_prepend Used only in case where 'flags' includes 'DocumentMetadataItemFlags::kCompletePath' - a path to be prepended
66 /// (because the query gives only the path relative to the parent node).
67 ///
68 /// \returns The document-metadata-item object populated with the information from the statement, as indicated by the flags.
69 imgdoc2::DocumentMetadataItem RetrieveDocumentMetadataItemFromStatement(const std::shared_ptr<IDbStatement>& statement, imgdoc2::DocumentMetadataItemFlags flags, const string& path_to_prepend);
70
71 /// Retrieve the full path for the specified node. The returned boolean indicates whether the path could be retrieved.
72 /// If e.g. the node does not exist, the path is not set and the function returns false.
73 ///
74 /// \param node_id Primary key of the node for which the path should be retrieved.
75 /// \param [out] path If successful, the path for the specified node.
76 ///
77 /// \returns True if it succeeds, false if it fails.
78 bool GetPathForNode(imgdoc2::dbIndex node_id, std::string& path);
79 };
80