1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#include "dbsqlitecipherinstance.h"
#include "dbsqlitecipher.h"
#include <QDebug>
DbSqliteCipherInstance::DbSqliteCipherInstance(const QString& name, const QString& path, const QHash<QString, QVariant>& connOptions) :
AbstractDb3<SqlCipher>(name, path, connOptions)
{
}
Db* DbSqliteCipherInstance::clone() const
{
return new DbSqliteCipherInstance(name, path, connOptions);
}
QString DbSqliteCipherInstance::getTypeClassName() const
{
return "DbSqliteCipherInstance";
}
void DbSqliteCipherInstance::initAfterOpen()
{
SqlQueryPtr res;
QString key = connOptions[DbSqliteCipher::PASSWORD_OPT].toString();
if (!key.isEmpty())
{
res = exec(QString("PRAGMA key = '%1';").arg(escapeString(key)), Flag::NO_LOCK);
if (res->isError())
qWarning() << "Error while defining SQLCipher key:" << res->getErrorText();
}
QString pragmas = connOptions[DbSqliteCipher::PRAGMAS_OPT].toString();
QStringList pragmaList = quickSplitQueries(pragmas);
for (const QString& pragma : pragmaList)
{
res = exec(pragma, Flag::NO_LOCK);
if (res->isError())
qWarning() << "Error while defining SQLCipher pragma" << pragma << ":" << res->getErrorText();
}
AbstractDb3<SqlCipher>::initAfterOpen();
}
QString DbSqliteCipherInstance::getAttachSql(Db* otherDb, const QString& generatedAttachName)
{
QString pass = "";
if (otherDb->getConnectionOptions().contains(DbSqliteCipher::PASSWORD_OPT))
pass = otherDb->getConnectionOptions()[DbSqliteCipher::PASSWORD_OPT].toString().replace("'", "''");
return QString("ATTACH '%1' AS %2 KEY '%3';").arg(otherDb->getPath(), generatedAttachName, pass);
}
|