LeechCraft
0.6.70-18450-gabe19ee3b0
Modular cross-platform feature rich live environment.
Toggle main menu visibility
Loading...
Searching...
No Matches
common.h
Go to the documentation of this file.
1
/**********************************************************************
2
* LeechCraft - modular cross-platform feature rich internet client.
3
* Copyright (C) 2006-2014 Georg Rudoy
4
*
5
* Distributed under the Boost Software License, Version 1.0.
6
* (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7
**********************************************************************/
8
9
#pragma once
10
11
#include <tuple>
12
#include <QtTest>
13
#include <QSqlError>
14
#include <
oral/oral.h
>
15
16
namespace
lco
=
LC::Util::oral
;
17
18
using
OralFactory
=
lco::SQLiteImplFactory
;
19
20
template
<
typename
T,
typename
=
decltype
(T {}.AsTuple ())>
21
auto
operator==
(
const
T& left,
const
T& right)
22
{
23
return
left.AsTuple () == right.AsTuple ();
24
}
25
26
namespace
LC::Util::oral
27
{
28
template
<
typename
T,
typename
... Args>
29
char
*
toString
(
const
PKey<T, Args...>
& pkey)
30
{
31
return
QTest::toString (pkey.
Val_
);
32
}
33
}
34
35
#define TOSTRING(n) inline char* toString (const n& rec) { return toString (#n, rec); }
36
37
template
<
typename
T,
typename
TupleType =
decltype
(T {}.AsTuple ())>
38
char
*
toString
(
const
char
*name,
const
T& t)
39
{
40
using
QTest::toString;
41
42
QByteArray ba { name };
43
ba.append (
" { "
);
44
45
std::apply ([&ba] (
const
auto
&... args) { (ba.append (
toString
(args)).append (
", "
), ...); }, t.AsTuple ());
46
47
if
(std::tuple_size<TupleType>::value >= 1)
48
ba.chop (2);
49
ba.append (
" }"
);
50
51
return
qstrdup (ba.data ());
52
}
53
54
namespace
LC::Util
55
{
56
QSqlDatabase
MakeDatabase
(
const
QString& name =
":memory:"
)
57
{
58
auto
db = QSqlDatabase::addDatabase (
"QSQLITE"
,
Util::GenConnectionName
(
"TestConnection"
));
59
db.setDatabaseName (name);
60
if
(!db.open ())
61
throw
std::runtime_error {
"cannot create test database"
};
62
63
RunTextQuery
(db,
"PRAGMA foreign_keys = ON;"
);
64
65
return
db;
66
}
67
68
template
<
typename
T>
69
auto
PrepareRecords
(QSqlDatabase db,
int
count = 3)
70
{
71
auto
adapted =
Util::oral::AdaptPtr<T, OralFactory>
(db);
72
for
(
int
i = 0; i < count; ++i)
73
adapted->Insert ({ i, QString::number (i) });
74
return
adapted;
75
}
76
}
OralFactory
lco::SQLiteImplFactory OralFactory
Definition
common.h:18
toString
char * toString(const char *name, const T &t)
Definition
common.h:38
operator==
auto operator==(const T &left, const T &right)
Definition
common.h:21
LC::Util::RunTextQuery
QSqlQuery RunTextQuery(const QSqlDatabase &db, const QString &text)
Runs the given query text on the given db.
Definition
util.cpp:22
LC::Util::GenConnectionName
QString GenConnectionName(const QString &base)
Generates an unique thread-safe connection name.
Definition
util.cpp:55
LC::Util::oral
Definition
migrate.h:15
LC::Util::oral::AdaptPtr
ObjectInfo_ptr< T > AdaptPtr(const QSqlDatabase &db)
Definition
oral.h:1836
LC::Util::oral::SQLiteImplFactory
detail::SQLite::ImplFactory SQLiteImplFactory
Definition
sqliteimpl.h:83
LC::Util::oral::toString
char * toString(const PKey< T, Args... > &pkey)
Definition
common.h:29
LC::Util
Definition
icoreproxy.h:34
LC::Util::PrepareRecords
auto PrepareRecords(QSqlDatabase db, int count=3)
Definition
common.h:69
LC::Util::MakeDatabase
QSqlDatabase MakeDatabase(const QString &name=":memory:")
Definition
common.h:56
oral.h
LC::Util::oral::IndirectHolderBase::Val_
T Val_
Definition
oraltypes.h:28
LC::Util::oral::PKey
Definition
oraltypes.h:67
src
util
db
tests
common.h
Generated by
1.17.0