LeechCraft  0.6.70-15082-g543737046d
Modular cross-platform feature rich live environment.
oral.h File Reference
#include <stdexcept>
#include <type_traits>
#include <memory>
#include <optional>
#include <boost/fusion/include/for_each.hpp>
#include <boost/fusion/include/fold.hpp>
#include <boost/fusion/include/filter_if.hpp>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/include/transform.hpp>
#include <boost/fusion/include/zip.hpp>
#include <boost/fusion/container/generation/make_vector.hpp>
#include <QStringList>
#include <QDateTime>
#include <QPair>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QVariant>
#include <QtDebug>
#include <util/sll/qtutil.h>
#include <util/sll/prelude.h>
#include <util/sll/typelist.h>
#include <util/sll/typelevel.h>
#include <util/sll/typegetter.h>
#include <util/sll/detector.h>
#include <util/sll/unreachable.h>
#include <util/sll/void.h>
#include <util/db/dblock.h>
#include <util/db/util.h>
#include "oraltypes.h"
#include "oraldetailfwd.h"
#include "impldefs.h"
#include "sqliteimpl.h"
+ Include dependency graph for oral.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  LC::Util::oral::QueryException
 
struct  LC::Util::oral::detail::GetFieldsNames< S >
 
struct  LC::Util::oral::detail::AddressOf< S >
 
struct  LC::Util::oral::Type2Name< ImplFactory, T, typename >
 
struct  LC::Util::oral::Type2Name< ImplFactory, Unique< T > >
 
struct  LC::Util::oral::Type2Name< ImplFactory, NotNull< T > >
 
struct  LC::Util::oral::Type2Name< ImplFactory, PKey< T, Tags... > >
 
struct  LC::Util::oral::Type2Name< ImplFactory, PKey< int, Tags... > >
 
struct  LC::Util::oral::Type2Name< ImplFactory, References< Ptr > >
 
struct  LC::Util::oral::ToVariant< T, typename >
 
struct  LC::Util::oral::FromVariant< T, typename >
 
struct  LC::Util::oral::detail::IsPKey< T >
 
struct  LC::Util::oral::detail::IsPKey< PKey< U, Tags... > >
 
struct  LC::Util::oral::detail::FindPKey< Seq, MemberIdx >
 
struct  LC::Util::oral::detail::FindPKey< Seq, MemberIdx >::Lazy< T >
 
class  LC::Util::oral::detail::AdaptInsert< Seq >
 
struct  LC::Util::oral::detail::AdaptDelete< Seq, HasPKey >
 
struct  LC::Util::oral::detail::ToSqlState< T >
 
struct  LC::Util::oral::detail::WrapDirect< T >
 
struct  LC::Util::oral::detail::RelationalTypesCheckerBase< Seq, L, R, typename >
 
struct  LC::Util::oral::detail::RelationalTypesCheckerBase< Seq, L, R, std::enable_if_t< AreComparableTypes< Seq, L, R > > >
 
struct  LC::Util::oral::detail::RelationalTypesChecker< Type, Seq, L, R, typename >
 
struct  LC::Util::oral::detail::RelationalTypesChecker< Type, Seq, L, R, std::enable_if_t< IsRelational(Type)> >
 
class  LC::Util::oral::detail::ExprTree< Type, L, R >
 
struct  LC::Util::oral::detail::IsExprTree< T >
 
struct  LC::Util::oral::detail::IsExprTree< ExprTree< Type, L, R > >
 
class  LC::Util::oral::detail::AssignList< L, R >
 
class  LC::Util::oral::detail::ExprTree< Type, L, R >
 
class  LC::Util::oral::detail::ExprTree< ExprType::LeafData, T, void >
 
struct  LC::Util::oral::detail::MemberPtrs< Ptr >
 
class  LC::Util::oral::detail::ExprTree< ExprType::LeafStaticPlaceholder, MemberPtrs< Ptr >, void >
 
class  LC::Util::oral::detail::ExprTree< ExprType::ConstTrue, void, void >
 
struct  LC::Util::oral::detail::InfixBinary< Op >
 
struct  LC::Util::oral::detail::InfixBinaryProxy< L, Op >
 
struct  LC::Util::oral::detail::ExprTreeHandler< F >
 
struct  LC::Util::oral::detail::AggregateType< AggregateFunction, Ptr >
 
struct  LC::Util::oral::detail::CountAll
 
struct  LC::Util::oral::detail::OrderBy< MemberDirectionList >
 
struct  LC::Util::oral::detail::GroupBy< Ptrs >
 
struct  LC::Util::oral::detail::SelectWhole
 
struct  LC::Util::oral::detail::SelectorUnion< L, R >
 
struct  LC::Util::oral::detail::IsSelector< T >
 
struct  LC::Util::oral::detail::IsSelector< SelectWhole >
 
struct  LC::Util::oral::detail::IsSelector< AggregateType< Fun, Ptr > >
 
struct  LC::Util::oral::detail::IsSelector< MemberPtrs< Ptrs... > >
 
struct  LC::Util::oral::detail::IsSelector< SelectorUnion< L, R > >
 
struct  LC::Util::oral::sph::asc< Ptrs >
 
struct  LC::Util::oral::sph::desc< Ptrs >
 
struct  LC::Util::oral::Limit
 
struct  LC::Util::oral::Offset
 
struct  LC::Util::oral::detail::OrderNone
 
struct  LC::Util::oral::detail::GroupNone
 
struct  LC::Util::oral::detail::LimitNone
 
struct  LC::Util::oral::detail::OffsetNone
 
struct  LC::Util::oral::detail::DetectShift< Seq, T >
 
struct  LC::Util::oral::detail::DetectShift< Seq, std::tuple< Args... > >
 
struct  LC::Util::oral::detail::DetectShift< Seq, Seq >
 
struct  LC::Util::oral::detail::ResultBehaviour
 
struct  LC::Util::oral::detail::ResultBehaviour::All
 
struct  LC::Util::oral::detail::ResultBehaviour::First
 
struct  LC::Util::oral::detail::HandleSelectorResult< F, R >
 
class  LC::Util::oral::detail::SelectWrapperCommon
 
class  LC::Util::oral::detail::SelectWrapper< T, SelectBehaviour >
 
class  LC::Util::oral::detail::DeleteByFieldsWrapper< T >
 
class  LC::Util::oral::detail::AdaptUpdate< T, HasPKey >
 
struct  LC::Util::oral::detail::ExtractConstraintFields< T >
 
struct  LC::Util::oral::detail::ExtractConstraintFields< UniqueSubset< Fields... > >
 
struct  LC::Util::oral::detail::ExtractConstraintFields< PrimaryKey< Fields... > >
 
struct  LC::Util::oral::ObjectInfo< T >
 

Namespaces

 LC
 
 LC::Util
 
 LC::Util::oral
 
 LC::Util::oral::detail
 
 LC::Util::oral::infix
 
 LC::Util::oral::sph
 

Typedefs

using LC::Util::oral::QSqlQuery_ptr = std::shared_ptr< QSqlQuery >
 
template<typename U >
using LC::Util::oral::detail::MorpherDetector = decltype(std::declval< U >().FieldNameMorpher(QString {}))
 
template<typename T >
using LC::Util::oral::detail::TypeNameDetector = decltype(T::TypeName)
 
template<typename T >
using LC::Util::oral::detail::BaseTypeDetector = typename T::BaseType
 
template<typename Seq , int Idx>
using LC::Util::oral::detail::ValueAtC_t = typename boost::fusion::result_of::value_at_c< Seq, Idx >::type
 
template<typename Seq , typename Idx >
using LC::Util::oral::detail::ValueAt_t = typename boost::fusion::result_of::value_at< Seq, Idx >::type
 
template<typename Seq >
using LC::Util::oral::detail::FindPKeyDetector = boost::mpl::int_< FindPKey< Seq >::result_type::value >
 
template<typename T , typename... Args>
using LC::Util::oral::detail::AggregateDetector_t = decltype(new T { std::declval< Args >()... })
 
template<typename T >
using LC::Util::oral::detail::UnwrapIndirect_t = typename std::conditional_t< IsIndirect< T > {}, T, WrapDirect< T > >::value_type
 
template<typename Seq , typename L , typename R >
using LC::Util::oral::detail::ComparableDetector = decltype(std::declval< UnwrapIndirect_t< typename L::template ValueType_t< Seq > >>()==std::declval< UnwrapIndirect_t< typename R::template ValueType_t< Seq > >>())
 
template<typename L , typename R >
using LC::Util::oral::detail::EnableRelOp_t = std::enable_if_t< EitherIsExprTree< L, R >()>
 
template<typename T >
using LC::Util::oral::detail::ConstraintsDetector = typename T::Constraints
 
template<typename T >
using LC::Util::oral::detail::ConstraintsType = Util::IsDetected_t< Constraints<>, ConstraintsDetector, T >
 
template<typename T >
using LC::Util::oral::ObjectInfo_ptr = std::shared_ptr< ObjectInfo< T > >
 
template<size_t Idx, typename Tuple >
using LC::Util::oral::detail::UnderlyingObject_t = typename std::decay_t< std::tuple_element_t< Idx, Tuple > >::element_type::ObjectType_t
 

Enumerations

enum  LC::Util::oral::detail::ExprType {
  LC::Util::oral::detail::ExprType::ConstTrue,
  LC::Util::oral::detail::ExprType::LeafStaticPlaceholder,
  LC::Util::oral::detail::ExprType::LeafData,
  LC::Util::oral::detail::ExprType::Greater,
  LC::Util::oral::detail::ExprType::Less,
  LC::Util::oral::detail::ExprType::Equal,
  LC::Util::oral::detail::ExprType::Geq,
  LC::Util::oral::detail::ExprType::Leq,
  LC::Util::oral::detail::ExprType::Neq,
  LC::Util::oral::detail::ExprType::Like,
  LC::Util::oral::detail::ExprType::And,
  LC::Util::oral::detail::ExprType::Or
}
 
enum  LC::Util::oral::detail::AggregateFunction {
  LC::Util::oral::detail::AggregateFunction::Count,
  LC::Util::oral::detail::AggregateFunction::Min,
  LC::Util::oral::detail::AggregateFunction::Max
}
 
enum  LC::Util::oral::detail::SelectBehaviour {
  LC::Util::oral::detail::SelectBehaviour::Some,
  LC::Util::oral::detail::SelectBehaviour::One
}
 

Functions

template<typename T >
QString LC::Util::oral::detail::MorphFieldName (QString str) noexcept
 
template<typename Seq , int Idx>
QString LC::Util::oral::detail::GetFieldName () noexcept
 
template<auto Ptr, size_t Idx = 0>
constexpr size_t LC::Util::oral::detail::FieldIndex () noexcept
 
template<auto Ptr>
QString LC::Util::oral::detail::GetFieldNamePtr () noexcept
 
template<auto Ptr>
QString LC::Util::oral::detail::GetQualifiedFieldNamePtr () noexcept
 
template<typename T >
QVariant LC::Util::oral::detail::ToVariantF (const T &t) noexcept
 
template<typename T >
auto LC::Util::oral::detail::MakeInserter (const CachedFieldsData &data, const QSqlQuery_ptr &insertQuery, bool bindPrimaryKey) noexcept
 
template<typename Seq >
constexpr auto LC::Util::oral::detail::HasAutogenPKey () noexcept
 
template<typename T >
CachedFieldsData LC::Util::oral::detail::BuildCachedFieldsData (const QString &table) noexcept
 
template<typename T >
CachedFieldsData LC::Util::oral::detail::BuildCachedFieldsData () noexcept
 
template<typename T , size_t... Indices>
LC::Util::oral::detail::InitializeFromQuery (const QSqlQuery &q, std::index_sequence< Indices... >, int startIdx) noexcept
 
QString LC::Util::oral::detail::TypeToSql (ExprType type) noexcept
 
constexpr bool LC::Util::oral::detail::IsRelational (ExprType type) noexcept
 
template<typename T >
constexpr auto LC::Util::oral::detail::AsLeafData (const T &node) noexcept
 
template<ExprType Type, typename L , typename R >
auto LC::Util::oral::detail::MakeExprTree (const L &left, const R &right) noexcept
 
template<typename L , typename R >
constexpr bool LC::Util::oral::detail::EitherIsExprTree () noexcept
 
template<typename L , typename R , typename = EnableRelOp_t<L, R>>
auto LC::Util::oral::detail::operator< (const L &left, const R &right) noexcept
 
template<typename L , typename R , typename = EnableRelOp_t<L, R>>
auto LC::Util::oral::detail::operator> (const L &left, const R &right) noexcept
 
template<typename L , typename R , typename = EnableRelOp_t<L, R>>
auto LC::Util::oral::detail::operator== (const L &left, const R &right) noexcept
 
template<typename L , typename R , typename = EnableRelOp_t<L, R>>
auto LC::Util::oral::detail::operator!= (const L &left, const R &right) noexcept
 
template<typename L , ExprType Op>
auto LC::Util::oral::detail::operator| (const L &left, InfixBinary< Op >) noexcept
 
template<typename L , ExprType Op, typename R >
auto LC::Util::oral::detail::operator| (const InfixBinaryProxy< L, Op > &left, const R &right) noexcept
 
template<typename L , typename R , typename = EnableRelOp_t<L, R>>
auto LC::Util::oral::detail::operator&& (const L &left, const R &right) noexcept
 
template<typename L , typename R , typename = EnableRelOp_t<L, R>>
auto LC::Util::oral::detail::operator|| (const L &left, const R &right) noexcept
 
template<typename >
auto LC::Util::oral::detail::HandleExprTree (const ExprTree< ExprType::ConstTrue > &, int lastId=0) noexcept
 
template<typename Seq , typename Tree , typename = decltype (std::declval<Tree> ().ToSql (std::declval<ToSqlState<Seq>&> ()))>
auto LC::Util::oral::detail::HandleExprTree (const Tree &tree, int lastId=0) noexcept
 
template<typename L , typename R , typename = std::enable_if_t<IsSelector<L> {} && IsSelector<R> {}>>
SelectorUnion< L, R > LC::Util::oral::detail::operator+ (L, R) noexcept
 
template<auto... Ptrs, size_t... Idxs>
auto LC::Util::oral::detail::MakeIndexedQueryHandler (MemberPtrs< Ptrs... >, std::index_sequence< Idxs... >) noexcept
 
template<auto Ptr>
auto LC::Util::oral::detail::MakeIndexedQueryHandler () noexcept
 
template<auto... Ptrs>
QStringList LC::Util::oral::detail::BuildFieldNames () noexcept
 
template<size_t RepIdx, size_t TupIdx, typename Tuple , typename NewType >
constexpr decltype(auto) LC::Util::oral::detail::GetReplaceTupleElem (Tuple &&tuple, NewType &&arg) noexcept
 
template<size_t RepIdx, typename NewType , typename Tuple , size_t... TupIdxs>
constexpr auto LC::Util::oral::detail::ReplaceTupleElemImpl (Tuple &&tuple, NewType &&arg, std::index_sequence< TupIdxs... >) noexcept
 
template<size_t RepIdx, typename NewType , typename... TupleArgs>
constexpr auto LC::Util::oral::detail::ReplaceTupleElem (std::tuple< TupleArgs... > &&tuple, NewType &&arg) noexcept
 
template<typename... LArgs, typename... RArgs>
auto LC::Util::oral::detail::Combine (std::tuple< LArgs... > &&left, std::tuple< RArgs... > &&right) noexcept
 
template<typename... LArgs, typename R >
auto LC::Util::oral::detail::Combine (std::tuple< LArgs... > &&left, const R &right) noexcept
 
template<typename L , typename... RArgs>
auto LC::Util::oral::detail::Combine (const L &left, std::tuple< RArgs... > &&right) noexcept
 
template<typename L , typename R >
auto LC::Util::oral::detail::Combine (const L &left, const R &right) noexcept
 
template<typename L , typename R >
constexpr auto LC::Util::oral::detail::CombineBehaviour (L, R) noexcept
 
template<typename ResList >
decltype(auto) LC::Util::oral::detail::HandleResultBehaviour (ResultBehaviour::All, ResList &&list) noexcept
 
template<typename ResList >
auto LC::Util::oral::detail::HandleResultBehaviour (ResultBehaviour::First, ResList &&list) noexcept
 
template<typename F , typename R >
 LC::Util::oral::detail::HandleSelectorResult (QString, F, R) -> HandleSelectorResult< F, R >
 
template<typename... Args>
QStringList LC::Util::oral::detail::GetConstraintsStringList (Constraints< Args... >, const CachedFieldsData &data) noexcept
 
template<typename ImplFactory , typename T , size_t... Indices>
QList< QString > LC::Util::oral::detail::GetTypes (std::index_sequence< Indices... >) noexcept
 
template<typename ImplFactory , typename T >
QString LC::Util::oral::detail::AdaptCreateTable (const CachedFieldsData &data) noexcept
 
template<typename T , typename ImplFactory = detail::SQLite::ImplFactory>
ObjectInfo< T > LC::Util::oral::Adapt (const QSqlDatabase &db)
 
template<typename T , typename ImplFactory = SQLiteImplFactory>
ObjectInfo_ptr< T > LC::Util::oral::AdaptPtr (const QSqlDatabase &db)
 
template<typename ImplFactory , typename Tuple , size_t... Idxs>
void LC::Util::oral::detail::AdaptPtrs (const QSqlDatabase &db, Tuple &tuple, std::index_sequence< Idxs... >)
 
template<typename ImplFactory , typename Tuple >
void LC::Util::oral::AdaptPtrs (const QSqlDatabase &db, Tuple &tuple)
 

Variables

template<typename S >
constexpr auto LC::Util::oral::detail::SeqSize = boost::fusion::result_of::size<S>::type::value
 
template<typename S >
constexpr auto LC::Util::oral::detail::SeqIndices = std::make_index_sequence<SeqSize<S>> {}
 
template<typename T >
constexpr bool LC::Util::oral::detail::TypeNameCustomized = IsDetected_v<TypeNameDetector, T>
 
template<typename T >
constexpr bool LC::Util::oral::detail::BaseTypeCustomized = IsDetected_v<BaseTypeDetector, T>
 
template<typename Seq >
constexpr auto LC::Util::oral::detail::HasPKey = IsDetected_v<FindPKeyDetector, Seq>
 
template<typename Seq , typename L , typename R >
constexpr auto LC::Util::oral::detail::AreComparableTypes = IsDetected_v<ComparableDetector, Seq, L, R> || IsDetected_v<ComparableDetector, Seq, R, L>
 
constexpr auto LC::Util::oral::detail::ConstTrueTree_v = ExprTree<ExprType::ConstTrue> {}
 
constexpr detail::InfixBinary< detail::ExprType::Like > LC::Util::oral::infix::like {}
 
constexpr CountAll * LC::Util::oral::detail::CountAllPtr = nullptr
 
template<auto Ptr>
constexpr detail::ExprTree< detail::ExprType::LeafStaticPlaceholder, detail::MemberPtrs< Ptr > > LC::Util::oral::sph::f {}
 
template<auto... Ptrs>
constexpr detail::MemberPtrs< Ptrs... > LC::Util::oral::sph::fields {}
 
constexpr detail::SelectWhole LC::Util::oral::sph::all {}
 
template<auto Ptr = detail::CountAllPtr>
constexpr detail::AggregateType< detail::AggregateFunction::Count, Ptr > LC::Util::oral::sph::count {}
 
template<auto Ptr>
constexpr detail::AggregateType< detail::AggregateFunction::Min, Ptr > LC::Util::oral::sph::min {}
 
template<auto Ptr>
constexpr detail::AggregateType< detail::AggregateFunction::Max, Ptr > LC::Util::oral::sph::max {}
 
template<typename... Orders>
constexpr detail::OrderBy< Orders... > LC::Util::oral::OrderBy {}
 
template<auto... Ptrs>
constexpr detail::GroupBy< Ptrs... > LC::Util::oral::GroupBy {}