42 bool MatchesSchema (
const QString& baseName,
const QString& schema, QSqlDatabase& db)
45 QString {
"SELECT sql FROM sqlite_master WHERE type = 'table' AND name = '%1'" }
50 const auto& existingDDL = result.value (0).toString ();
52 auto figureOutFields = [] (
const QString& str)
54 auto firstOpen = str.indexOf (
'(');
55 auto lastClose = str.lastIndexOf (
')');
56 return str.midRef (firstOpen, lastClose - firstOpen);
58 auto existing = figureOutFields (existingDDL);
59 auto suggested = figureOutFields (schema);
60 return existing == suggested;
64 template<
typename Record>
67 const auto& baseName = Record::ClassName ();
69 const auto& thisName =
"copy" + baseName;
70 const auto& schema = detail::AdaptCreateTable<Record> (detail::BuildCachedFieldsData<Record> (thisName));
74 qDebug () << Q_FUNC_INFO
76 << db.connectionName ();
80 qDebug () << Q_FUNC_INFO
82 << db.connectionName ();
92 QString {
"INSERT INTO %2 (%1) SELECT %1 FROM %3;" }
98 QString {
"DROP TABLE %1;" }
101 QString {
"ALTER TABLE %1 RENAME TO %2;" }
void Migrate(QSqlDatabase &db)
bool MatchesSchema(const QString &baseName, const QString &schema, QSqlDatabase &db)
QSqlQuery RunTextQuery(const QSqlDatabase &db, const QString &text)
Runs the given query text on the given db.
constexpr detail::MemberPtrs< Ptrs... > fields
Provides database transaction lock.
UTIL_DB_API void Init()
Initializes the transaction.