39 #define ORAL_FACTORY_SQLITE 1 40 #define ORAL_FACTORY_POSTGRES 2 42 #if ORAL_FACTORY == ORAL_FACTORY_SQLITE 46 #elif ORAL_FACTORY == ORAL_FACTORY_POSTGRES 54 #error "Unknown oral tests factory" 58 template<
typename T,
typename = decltype (T {}.AsTuple ())>
59 auto operator== (
const T& left,
const T& right)
61 return left.AsTuple () == right.AsTuple ();
66 template<
typename T,
typename... Args>
73 #if QT_VERSION < QT_VERSION_CHECK(5,12,0) 74 template<
typename... Args>
75 char*
toString (
const std::tuple<Args...>& tuple)
79 QByteArray ba {
"std::tuple { "};
81 std::apply ([&ba] (
const auto&... args) { (ba.append (
toString (args)).append (
", "), ...); }, tuple);
83 if (
sizeof... (Args) >= 1)
87 return qstrdup (ba.data ());
91 #define TOSTRING(n) inline char* toString (const n& rec) { return toString (#n, rec); } 93 template<
typename T,
typename TupleType = decltype (T {}.AsTuple ())>
98 QByteArray ba { name };
101 std::apply ([&ba] (
const auto&... args) { (ba.append (
toString (args)).append (
", "), ...); }, t.AsTuple ());
103 if (std::tuple_size<TupleType>::value >= 1)
107 return qstrdup (ba.data ());
114 #if ORAL_FACTORY == ORAL_FACTORY_SQLITE 116 db.setDatabaseName (name);
118 throw std::runtime_error {
"cannot create test database" };
123 #elif ORAL_FACTORY == ORAL_FACTORY_POSTGRES 128 db.setHostName (
"localhost");
130 db.setUserName (qgetenv (
"TEST_POSTGRES_USERNAME"));
134 DBLock::DumpError (db.lastError ());
135 throw std::runtime_error {
"cannot create test database" };
145 auto adapted = Util::oral::AdaptPtr<T, OralFactory> (db);
146 for (
int i = 0; i <
count; ++i)
147 adapted->Insert ({ i, QString::number (i) });
constexpr detail::AggregateType< detail::AggregateFunction::Count, Ptr > count
QSqlDatabase MakeDatabase(const QString &name=":memory:")
detail::SQLite::ImplFactory SQLiteImplFactory
auto PrepareRecords(QSqlDatabase db, int count=3)
char * toString(const char *name, const T &t)
QSqlQuery RunTextQuery(const QSqlDatabase &db, const QString &text)
Runs the given query text on the given db.
detail::PostgreSQL::ImplFactory PostgreSQLImplFactory
QString GenConnectionName(const QString &base)
Generates an unique thread-safe connection name.