22 #include "util/strongtype.h"
32 #include <QRegularExpression>
41 #define SQLITE_HAS_CODEC
42 #define SQLITE_TEMP_STORE 2
44 #pragma GCC diagnostic push
45 #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
47 #pragma GCC diagnostic pop
49 using RowId = NamedType<int64_t, struct RowIdTag, Orderable>;
60 Query(QString query, QVector<QByteArray> blobs = {},
61 const std::function<void(
RowId)>& insertCallback = {})
62 : query{query.toUtf8()}
64 , insertCallback{insertCallback}
67 Query(QString query,
const std::function<
void(
RowId)>& insertCallback)
68 : query{query.toUtf8()}
69 , insertCallback{insertCallback}
72 Query(QString query,
const std::function<
void(
const QVector<QVariant>&)>& rowCallback)
73 : query{query.toUtf8()}
74 , rowCallback{rowCallback}
100 RawDatabase(
const QString& path,
const QString& password,
const QByteArray& salt);
104 bool execNow(
const QString& statement);
105 bool execNow(
const Query& statement);
106 bool execNow(
const QVector<Query>& statements);
108 void execLater(
const QString& statement);
109 void execLater(
const Query& statement);
110 void execLater(
const QVector<Query>& statements);
118 case SqlCipherParams::p3_0:
119 return "3.0 default";
120 case SqlCipherParams::halfUpgradedTo4:
121 return "3.x max compatible";
122 case SqlCipherParams::p4_0:
123 return "4.0 default";
130 bool setPassword(
const QString& password);
131 bool rename(
const QString& newPath);
135 bool open(
const QString& path,
const QString& hexKey = {});
140 QString anonymizeQuery(
const QByteArray& query);
141 bool openEncryptedDatabaseAtLatestSupportedVersion(
const QString& hexKey);
142 bool updateSavedCipherParameters(
const QString& hexKey, SqlCipherParams newParams);
143 bool setCipherParameters(SqlCipherParams params,
const QString& database = {});
144 SqlCipherParams highestSupportedParams();
145 SqlCipherParams readSavedCipherParams(
const QString& hexKey, SqlCipherParams newParams);
146 bool setKey(
const QString& hexKey);
147 int getUserVersion();
148 bool encryptDatabase(
const QString& newHexKey);
149 bool decryptDatabase();
150 bool commitDbSwap(
const QString& hexKey);
154 static QString deriveKey(
const QString& password,
const QByteArray& salt);
155 static QString deriveKey(
const QString& password);
156 static QVariant extractData(sqlite3_stmt* stmt,
int col);
157 static void regexpInsensitive(sqlite3_context* ctx,
int argc, sqlite3_value** argv);
158 static void regexpSensitive(sqlite3_context* ctx,
int argc, sqlite3_value** argv);
161 static void regexp(sqlite3_context* ctx,
int argc, sqlite3_value** argv,
const QRegularExpression::PatternOptions cs);
166 std::atomic_bool* success =
nullptr;
167 std::atomic_bool* done =
nullptr;