LeechCraft 0.6.70-18450-gabe19ee3b0
Modular cross-platform feature rich live environment.
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
16namespace lco = LC::Util::oral;
17
19
20template<typename T, typename = decltype (T {}.AsTuple ())>
21auto operator== (const T& left, const T& right)
22{
23 return left.AsTuple () == right.AsTuple ();
24}
25
26namespace 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
37template<typename T, typename TupleType = decltype (T {}.AsTuple ())>
38char* 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
54namespace 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}
lco::SQLiteImplFactory OralFactory
Definition common.h:18
char * toString(const char *name, const T &t)
Definition common.h:38
auto operator==(const T &left, const T &right)
Definition common.h:21
QSqlQuery RunTextQuery(const QSqlDatabase &db, const QString &text)
Runs the given query text on the given db.
Definition util.cpp:22
QString GenConnectionName(const QString &base)
Generates an unique thread-safe connection name.
Definition util.cpp:55
ObjectInfo_ptr< T > AdaptPtr(const QSqlDatabase &db)
Definition oral.h:1836
detail::SQLite::ImplFactory SQLiteImplFactory
Definition sqliteimpl.h:83
char * toString(const PKey< T, Args... > &pkey)
Definition common.h:29
auto PrepareRecords(QSqlDatabase db, int count=3)
Definition common.h:69
QSqlDatabase MakeDatabase(const QString &name=":memory:")
Definition common.h:56