39 #define ORAL_FACTORY_SQLITE 1 40 #define ORAL_FACTORY_POSTGRES 2 42 #if ORAL_FACTORY == ORAL_FACTORY_SQLITE 46 constexpr
bool OralBench =
true;
48 #elif ORAL_FACTORY == ORAL_FACTORY_POSTGRES 54 constexpr
bool OralBench =
false;
58 #error "Unknown oral tests factory" 62 template<
typename T,
typename = decltype (T {}.AsTuple ())>
63 auto operator== (
const T& left,
const T& right)
65 return left.AsTuple () == right.AsTuple ();
70 template<
typename T,
typename... Args>
77 #define TOSTRING(n) char* toString (const n& rec) { return toString (#n, rec); } 79 template<
typename T,
typename TupleType = decltype (T {}.AsTuple ())>
84 QByteArray ba { name };
87 std::apply ([&ba] (
const auto&... args) { (ba.append (
toString (args)).append (
", "), ...); }, t.AsTuple ());
89 if (std::tuple_size<TupleType>::value >= 1)
93 return qstrdup (ba.data ());
100 #if ORAL_FACTORY == ORAL_FACTORY_SQLITE 102 db.setDatabaseName (name);
104 throw std::runtime_error {
"cannot create test database" };
109 #elif ORAL_FACTORY == ORAL_FACTORY_POSTGRES 114 db.setHostName (
"localhost");
116 db.setUserName (qgetenv (
"TEST_POSTGRES_USERNAME"));
120 DBLock::DumpError (db.lastError ());
121 throw std::runtime_error {
"cannot create test database" };
QString GenConnectionName(const QString &base)
Generates an unique thread-safe connection name.
detail::PostgreSQL::ImplFactory PostgreSQLImplFactory
detail::SQLite::ImplFactory SQLiteImplFactory
QSqlDatabase MakeDatabase(const QString &name=":memory:")
QSqlQuery RunTextQuery(const QSqlDatabase &db, const QString &text)
Runs the given query text on the given db.
char * toString(const char *name, const T &t)