4#ifndef _Stroika_Foundation_Database_Document_Projection_h_
5#define _Stroika_Foundation_Database_Document_Projection_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
10#include "Stroika/Foundation/Containers/Set.h"
19namespace Stroika::Foundation::Database::Document {
21 using Characters::String;
22 using Containers::Set;
35 using MyVariant_ = variant<Set<String>,
Set<String>>;
54 nonvirtual tuple<Flag, Set<String>> GetFields ()
const;
77 nonvirtual
bool operator== (
const Projection&)
const =
default;
79#if qCompilerAndStdLib_explicitly_defaulted_threeway_warning_Buggy
80 DISABLE_COMPILER_CLANG_WARNING_START (
"clang diagnostic ignored \"-Wdefaulted-function-deleted\"")
85 nonvirtual
auto operator<=> (
const Projection&)
const =
default;
86#if qCompilerAndStdLib_explicitly_defaulted_threeway_warning_Buggy
87 DISABLE_COMPILER_CLANG_WARNING_END (
"clang diagnostic ignored \"-Wdefaulted-function-deleted\"")
100#if qCompilerAndStdLib_inline_const_order_wrong_sometimes_Buggy
103 inline const Projection kOmitIDs = Projection{Projection::eOmit, {kID}};
108 inline const Projection kOnlyIDs = Projection{Projection::eInclude, get<Set<String>> (kOmitIDs.GetFields ())};
117#include "Projection.inl"
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Set<T> is a container of T, where once an item is added, additionally adds () do nothing.
define a (simple) projection on a document, subsetting the fields of that document.
nonvirtual bool Includes(const String &fieldName) const
nonvirtual Database::Document::Document Apply(const Database::Document::Document &d) const
nonvirtual String ToString() const