Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32210069
D10835.1765129303.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
22 KB
Referenced Files
None
Subscribers
None
D10835.1765129303.diff
View Options
diff --git a/native/android/app/CMakeLists.txt b/native/android/app/CMakeLists.txt
--- a/native/android/app/CMakeLists.txt
+++ b/native/android/app/CMakeLists.txt
@@ -217,6 +217,8 @@
-DSQLITE_HAS_CODEC
-DSQLITE_TEMP_STORE=2
-DSQLCIPHER_CRYPTO_OPENSSL
+ -DSQLITE_ENABLE_SESSION
+ -DSQLITE_ENABLE_PREUPDATE_HOOK
)
target_link_libraries(
diff --git a/native/cpp/CommonCpp/DatabaseManagers/CMakeLists.txt b/native/cpp/CommonCpp/DatabaseManagers/CMakeLists.txt
--- a/native/cpp/CommonCpp/DatabaseManagers/CMakeLists.txt
+++ b/native/cpp/CommonCpp/DatabaseManagers/CMakeLists.txt
@@ -7,6 +7,8 @@
"DatabaseManager.h"
"DatabaseQueryExecutor.h"
"SQLiteQueryExecutor.h"
+ "SQLiteConnectionManager.h"
+ "NativeSQLiteConnectionManager.h"
"entities/SQLiteStatementWrapper.h"
"entities/EntityQueryHelpers.h"
"entities/SQLiteDataConverters.h"
@@ -21,6 +23,8 @@
set(DBM_SRCS
"SQLiteQueryExecutor.cpp"
+ "SQLiteConnectionManager.cpp"
+ "NativeSQLiteConnectionManager.cpp"
"entities/SQLiteDataConverters.cpp"
"entities/SQLiteStatementWrapper.cpp"
)
diff --git a/native/cpp/CommonCpp/DatabaseManagers/DatabaseQueryExecutor.h b/native/cpp/CommonCpp/DatabaseManagers/DatabaseQueryExecutor.h
--- a/native/cpp/CommonCpp/DatabaseManagers/DatabaseQueryExecutor.h
+++ b/native/cpp/CommonCpp/DatabaseManagers/DatabaseQueryExecutor.h
@@ -100,6 +100,7 @@
virtual NullableString getOlmPersistAccountDataWeb() const = 0;
#else
virtual void createMainCompaction(std::string backupID) const = 0;
+ virtual void captureBackupLogs() const = 0;
#endif
};
diff --git a/native/cpp/CommonCpp/DatabaseManagers/NativeSQLiteConnectionManager.h b/native/cpp/CommonCpp/DatabaseManagers/NativeSQLiteConnectionManager.h
new file mode 100644
--- /dev/null
+++ b/native/cpp/CommonCpp/DatabaseManagers/NativeSQLiteConnectionManager.h
@@ -0,0 +1,28 @@
+#pragma once
+
+#include "SQLiteConnectionManager.h"
+
+namespace comm {
+class NativeSQLiteConnectionManager : public SQLiteConnectionManager {
+private:
+ sqlite3_session *backupLogsSession;
+
+ void attachSession();
+ void detachSession();
+ void persistLog(
+ std::string backupID,
+ std::string logID,
+ std::uint8_t *patchsetPtr,
+ int patchsetSize);
+
+public:
+ NativeSQLiteConnectionManager();
+ void setLogsMonitoring(bool enabled);
+ void initializeConnection(
+ std::string sqliteFilePath,
+ std::function<void(sqlite3 *)> on_db_open_callback) override;
+ void closeConnection() override;
+ ~NativeSQLiteConnectionManager();
+ bool captureLogs(std::string backupID, std::string logID);
+};
+} // namespace comm
diff --git a/native/cpp/CommonCpp/DatabaseManagers/NativeSQLiteConnectionManager.cpp b/native/cpp/CommonCpp/DatabaseManagers/NativeSQLiteConnectionManager.cpp
new file mode 100644
--- /dev/null
+++ b/native/cpp/CommonCpp/DatabaseManagers/NativeSQLiteConnectionManager.cpp
@@ -0,0 +1,126 @@
+#include "NativeSQLiteConnectionManager.h"
+#include "PlatformSpecificTools.h"
+
+#include <fstream>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <system_error>
+
+namespace comm {
+
+void NativeSQLiteConnectionManager::attachSession() {
+ int sessionCreationResult =
+ sqlite3session_create(dbConnection, "main", &backupLogsSession);
+ handleSQLiteError(sessionCreationResult, "Failed to create sqlite3 session.");
+
+ static const std::vector<std::string> tablesToMonitor = {
+ "drafts",
+ "messages",
+ "media",
+ "threads",
+ "message_store_threads",
+ "reports",
+ "keyservers",
+ "users"};
+
+ for (const auto &table : tablesToMonitor) {
+ int sessionAttachResult =
+ sqlite3session_attach(backupLogsSession, table.c_str());
+ handleSQLiteError(
+ sessionAttachResult,
+ "Failed to attach sqlite3 session to " + table + " table.");
+ }
+}
+
+void NativeSQLiteConnectionManager::detachSession() {
+ if (!backupLogsSession) {
+ return;
+ }
+ sqlite3session_delete(backupLogsSession);
+ backupLogsSession = nullptr;
+}
+
+void NativeSQLiteConnectionManager::persistLog(
+ std::string backupID,
+ std::string logID,
+ std::uint8_t *patchsetPtr,
+ int patchsetSize) {
+ std::string finalFilePath =
+ PlatformSpecificTools::getBackupLogFilePath(backupID, logID, false);
+ std::string tempFilePath = finalFilePath + "_tmp";
+
+ std::ofstream tempFile(
+ tempFilePath, std::ofstream::out | std::ofstream::trunc);
+
+ if (!tempFile.is_open()) {
+ throw std::runtime_error("Failed to open temporary log file.");
+ }
+ tempFile.write(reinterpret_cast<const char *>(patchsetPtr), patchsetSize);
+ tempFile.close();
+ if (std::rename(tempFilePath.c_str(), finalFilePath.c_str())) {
+ throw std::runtime_error(
+ "Failed to rename complete log file from temporary path to target "
+ "path.");
+ }
+}
+
+NativeSQLiteConnectionManager::NativeSQLiteConnectionManager()
+ : backupLogsSession(nullptr) {
+}
+
+void NativeSQLiteConnectionManager::setLogsMonitoring(bool enabled) {
+ if (!backupLogsSession) {
+ return;
+ }
+ sqlite3session_enable(backupLogsSession, enabled);
+}
+
+void NativeSQLiteConnectionManager::initializeConnection(
+ std::string sqliteFilePath,
+ std::function<void(sqlite3 *)> on_db_open_callback) {
+ SQLiteConnectionManager::initializeConnection(
+ sqliteFilePath, on_db_open_callback);
+ attachSession();
+ setLogsMonitoring(false);
+}
+
+void NativeSQLiteConnectionManager::closeConnection() {
+ detachSession();
+ SQLiteConnectionManager::closeConnectionInternal();
+}
+
+NativeSQLiteConnectionManager::~NativeSQLiteConnectionManager() {
+ detachSession();
+}
+
+bool NativeSQLiteConnectionManager::captureLogs(
+ std::string backupID,
+ std::string logID) {
+ int patchsetSize;
+ std::uint8_t *patchsetPtr;
+ int getPatchsetResult = sqlite3session_patchset(
+ backupLogsSession, &patchsetSize, (void **)&patchsetPtr);
+ handleSQLiteError(getPatchsetResult, "Failed to get patchset from session.");
+
+ if (!patchsetPtr) {
+ return false;
+ }
+
+ if (patchsetSize == 0) {
+ sqlite3_free(patchsetPtr);
+ return false;
+ }
+
+ persistLog(backupID, logID, patchsetPtr, patchsetSize);
+ sqlite3_free(patchsetPtr);
+
+ // The session is not "zeroed" after capturing log.
+ // See: https://www.sqlite.org/sessionintro.html
+ // So we need to delete and recreate session each
+ // time we capture log.
+ detachSession();
+ attachSession();
+ return true;
+}
+} // namespace comm
diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteConnectionManager.h b/native/cpp/CommonCpp/DatabaseManagers/SQLiteConnectionManager.h
new file mode 100644
--- /dev/null
+++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteConnectionManager.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#ifndef SQLITE_ENABLE_SESSION
+#define SQLITE_ENABLE_SESSION
+#endif
+
+#include <sqlite3.h>
+#include <functional>
+#include <vector>
+
+namespace comm {
+class SQLiteConnectionManager {
+protected:
+ sqlite3 *dbConnection;
+ static void handleSQLiteError(
+ int errorCode,
+ const std::string &errorMessagePrefix,
+ int expectedResultCode = SQLITE_OK);
+ void closeConnectionInternal();
+
+public:
+ SQLiteConnectionManager();
+ sqlite3 *getConnection();
+ virtual void initializeConnection(
+ std::string sqliteFilePath,
+ std::function<void(sqlite3 *)> on_db_open_callback);
+ virtual void closeConnection();
+ virtual ~SQLiteConnectionManager();
+};
+} // namespace comm
diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteConnectionManager.cpp b/native/cpp/CommonCpp/DatabaseManagers/SQLiteConnectionManager.cpp
new file mode 100644
--- /dev/null
+++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteConnectionManager.cpp
@@ -0,0 +1,56 @@
+#include "SQLiteConnectionManager.h"
+
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <system_error>
+
+namespace comm {
+
+SQLiteConnectionManager::SQLiteConnectionManager() : dbConnection(nullptr) {
+}
+
+sqlite3 *SQLiteConnectionManager::getConnection() {
+ return dbConnection;
+}
+
+void SQLiteConnectionManager::handleSQLiteError(
+ int errorCode,
+ const std::string &errorMessagePrefix,
+ int expectedResultCode) {
+ if (errorCode != expectedResultCode) {
+ throw std::runtime_error(
+ errorMessagePrefix + " Details: " + sqlite3_errstr(errorCode));
+ }
+}
+
+void SQLiteConnectionManager::initializeConnection(
+ std::string sqliteFilePath,
+ std::function<void(sqlite3 *)> on_db_open_callback) {
+ if (dbConnection) {
+ return;
+ }
+
+ int connectResult = sqlite3_open(sqliteFilePath.c_str(), &dbConnection);
+ handleSQLiteError(connectResult, "Failed to open database connection.");
+ on_db_open_callback(dbConnection);
+}
+
+void SQLiteConnectionManager::closeConnectionInternal() {
+ if (!dbConnection) {
+ return;
+ }
+
+ int closeResult = sqlite3_close(dbConnection);
+ handleSQLiteError(closeResult, "Failed to close database connection.");
+ dbConnection = nullptr;
+}
+
+void SQLiteConnectionManager::closeConnection() {
+ closeConnectionInternal();
+}
+
+SQLiteConnectionManager::~SQLiteConnectionManager() {
+ closeConnectionInternal();
+}
+} // namespace comm
diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h
--- a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h
+++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h
@@ -2,6 +2,7 @@
#include "../CryptoTools/Persist.h"
#include "DatabaseQueryExecutor.h"
+#include "NativeSQLiteConnectionManager.h"
#include "entities/Draft.h"
#include "entities/KeyserverInfo.h"
#include "entities/UserInfo.h"
@@ -19,10 +20,12 @@
static std::once_flag initialized;
static int sqlcipherEncryptionKeySize;
static std::string secureStoreEncryptionKeyID;
- static sqlite3 *dbConnection;
#ifndef EMSCRIPTEN
+ static NativeSQLiteConnectionManager connectionManager;
static void assign_encryption_key();
+#else
+ static SQLiteConnectionManager connectionManager;
#endif
public:
@@ -109,6 +112,7 @@
static void clearSensitiveData();
static void initialize(std::string &databasePath);
void createMainCompaction(std::string backupID) const override;
+ void captureBackupLogs() const override;
#endif
};
diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp
--- a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp
+++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp
@@ -12,6 +12,7 @@
#ifndef EMSCRIPTEN
#include "CommSecureStore.h"
#include "PlatformSpecificTools.h"
+#include "StaffUtils.h"
#endif
#define ACCOUNT_ID 1
@@ -24,7 +25,12 @@
int SQLiteQueryExecutor::sqlcipherEncryptionKeySize = 64;
std::string SQLiteQueryExecutor::secureStoreEncryptionKeyID =
"comm.encryptionKey";
-sqlite3 *SQLiteQueryExecutor::dbConnection = nullptr;
+
+#ifndef EMSCRIPTEN
+NativeSQLiteConnectionManager SQLiteQueryExecutor::connectionManager;
+#else
+SQLiteConnectionManager SQLiteQueryExecutor::connectionManager;
+#endif
bool create_table(sqlite3 *db, std::string query, std::string tableName) {
char *error;
@@ -650,28 +656,6 @@
return false;
}
-void trace_queries(sqlite3 *db) {
- int error_code = sqlite3_trace_v2(
- db,
- SQLITE_TRACE_PROFILE,
- [](unsigned, void *, void *preparedStatement, void *) {
- sqlite3_stmt *statement = (sqlite3_stmt *)preparedStatement;
- char *sql = sqlite3_expanded_sql(statement);
- if (sql != nullptr) {
- std::string sqlStr(sql);
- // TODO: send logs to backup here
- }
- return 0;
- },
- NULL);
- if (error_code != SQLITE_OK) {
- std::ostringstream error_message;
- error_message << "Failed to set trace callback, error code: " << error_code;
- throw std::system_error(
- ECANCELED, std::generic_category(), error_message.str());
- }
-}
-
// We don't want to run `PRAGMA key = ...;`
// on main web database. The context is here:
// https://linear.app/comm/issue/ENG-6398/issues-with-sqlcipher-on-web
@@ -679,7 +663,6 @@
#ifndef EMSCRIPTEN
set_encryption_key(db);
#endif
- trace_queries(db);
}
// This is a temporary solution. In future we want to keep
@@ -981,6 +964,13 @@
SQLiteQueryExecutor::SQLiteQueryExecutor() {
SQLiteQueryExecutor::migrate();
+#ifndef EMSCRIPTEN
+ std::string currentBackupID = this->getMetadata("backupID");
+ if (!StaffUtils::isStaffRelease() || !currentBackupID.size()) {
+ return;
+ }
+ SQLiteQueryExecutor::connectionManager.setLogsMonitoring(true);
+#endif
}
SQLiteQueryExecutor::SQLiteQueryExecutor(std::string sqliteFilePath) {
@@ -989,31 +979,16 @@
}
sqlite3 *SQLiteQueryExecutor::getConnection() {
- if (SQLiteQueryExecutor::dbConnection) {
- return SQLiteQueryExecutor::dbConnection;
- }
-
- int connectResult = sqlite3_open(
- SQLiteQueryExecutor::sqliteFilePath.c_str(),
- &SQLiteQueryExecutor::dbConnection);
-
- if (connectResult != SQLITE_OK) {
- std::stringstream error_message;
- error_message << "Failed to open database connection. Details: "
- << sqlite3_errstr(connectResult) << std::endl;
- throw std::runtime_error(error_message.str());
+ if (SQLiteQueryExecutor::connectionManager.getConnection()) {
+ return SQLiteQueryExecutor::connectionManager.getConnection();
}
-
- default_on_db_open_callback(SQLiteQueryExecutor::dbConnection);
- return SQLiteQueryExecutor::dbConnection;
+ SQLiteQueryExecutor::connectionManager.initializeConnection(
+ SQLiteQueryExecutor::sqliteFilePath, default_on_db_open_callback);
+ return SQLiteQueryExecutor::connectionManager.getConnection();
}
void SQLiteQueryExecutor::closeConnection() {
- if (!SQLiteQueryExecutor::dbConnection) {
- return;
- }
- sqlite3_close(SQLiteQueryExecutor::dbConnection);
- SQLiteQueryExecutor::dbConnection = nullptr;
+ SQLiteQueryExecutor::connectionManager.closeConnection();
}
SQLiteQueryExecutor::~SQLiteQueryExecutor() {
@@ -1774,6 +1749,12 @@
finalAttachmentsPath,
"Failed to rename complete temporary attachments file to final "
"attachments file.");
+
+ this->setMetadata("backupID", backupID);
+ this->clearMetadata("logID");
+ if (StaffUtils::isStaffRelease()) {
+ SQLiteQueryExecutor::connectionManager.setLogsMonitoring(true);
+ }
}
void SQLiteQueryExecutor::assign_encryption_key() {
@@ -1783,6 +1764,25 @@
SQLiteQueryExecutor::secureStoreEncryptionKeyID, encryptionKey);
SQLiteQueryExecutor::encryptionKey = encryptionKey;
}
+
+void SQLiteQueryExecutor::captureBackupLogs() const {
+ std::string backupID = this->getMetadata("backupID");
+ if (!backupID.size()) {
+ return;
+ }
+
+ std::string logID = this->getMetadata("logID");
+ if (!logID.size()) {
+ logID = "0";
+ }
+
+ bool newLogCreated =
+ SQLiteQueryExecutor::connectionManager.captureLogs(backupID, logID);
+ if (!newLogCreated) {
+ return;
+ }
+ this->setMetadata("logID", std::to_string(std::stoi(logID) + 1));
+}
#endif
void SQLiteQueryExecutor::restoreFromMainCompaction(
diff --git a/native/ios/Comm.xcodeproj/project.pbxproj b/native/ios/Comm.xcodeproj/project.pbxproj
--- a/native/ios/Comm.xcodeproj/project.pbxproj
+++ b/native/ios/Comm.xcodeproj/project.pbxproj
@@ -71,6 +71,7 @@
CB3C0A3B2A125C8F009BD4DA /* NotificationsCryptoModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB24361729A39A2500FEC4E1 /* NotificationsCryptoModule.cpp */; };
CB3C621127CE4A320054F24C /* Logger.mm in Sources */ = {isa = PBXBuildFile; fileRef = 71CA4A63262DA8E500835C89 /* Logger.mm */; };
CB3C621227CE65030054F24C /* CommSecureStoreIOSWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 71142A7626C2650A0039DCBD /* CommSecureStoreIOSWrapper.mm */; };
+ CB3CCB012B72470700793640 /* NativeSQLiteConnectionManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB3CCB002B7246F400793640 /* NativeSQLiteConnectionManager.cpp */; };
CB4821A927CFB153001AB7E1 /* WorkerThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 718DE99C2653D41C00365824 /* WorkerThread.cpp */; };
CB4821AA27CFB153001AB7E1 /* Tools.mm in Sources */ = {isa = PBXBuildFile; fileRef = 71CA4AEB262F236100835C89 /* Tools.mm */; };
CB4821AC27CFB17C001AB7E1 /* Session.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71BF5B6F26B3FF0900EDE27D /* Session.cpp */; };
@@ -81,6 +82,7 @@
CB7EF17E295C674300B17035 /* CommIOSNotifications.mm in Sources */ = {isa = PBXBuildFile; fileRef = CB7EF17D295C5D1800B17035 /* CommIOSNotifications.mm */; };
CB7EF180295C674300B17035 /* CommIOSNotificationsBridgeQueue.mm in Sources */ = {isa = PBXBuildFile; fileRef = CB7EF17B295C580500B17035 /* CommIOSNotificationsBridgeQueue.mm */; };
CB90951F29534B32002F2A7F /* CommSecureStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 71D4D7CB26C50B1000FCDBCD /* CommSecureStore.mm */; };
+ CBA5F8852B6979F7005BE700 /* SQLiteConnectionManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBA5F8842B6979ED005BE700 /* SQLiteConnectionManager.cpp */; };
CBAAA4702B459181007599DA /* BackupOperationsExecutor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBAAA46E2B459181007599DA /* BackupOperationsExecutor.cpp */; };
CBCA09062A8E0E7400F75B3E /* StaffUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBCA09052A8E0E6B00F75B3E /* StaffUtils.cpp */; };
CBCA09072A8E0E7D00F75B3E /* StaffUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBCA09052A8E0E6B00F75B3E /* StaffUtils.cpp */; };
@@ -275,6 +277,8 @@
CB38F2BE286C6C980010535C /* DeleteEntryMessageSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeleteEntryMessageSpec.h; path = PersistentStorageUtilities/MessageOperationsUtilities/MessageSpecs/DeleteEntryMessageSpec.h; sourceTree = "<group>"; };
CB38F2BF286C6C980010535C /* UpdateRelationshipMessageSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UpdateRelationshipMessageSpec.h; path = PersistentStorageUtilities/MessageOperationsUtilities/MessageSpecs/UpdateRelationshipMessageSpec.h; sourceTree = "<group>"; };
CB3C621327CE66540054F24C /* libEXSecureStore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libEXSecureStore.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ CB3CCAFF2B7246F400793640 /* NativeSQLiteConnectionManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NativeSQLiteConnectionManager.h; sourceTree = "<group>"; };
+ CB3CCB002B7246F400793640 /* NativeSQLiteConnectionManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NativeSQLiteConnectionManager.cpp; sourceTree = "<group>"; };
CB74AB1B2B2AFF6E00CBB494 /* CommServicesAuthMetadataEmitter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = CommServicesAuthMetadataEmitter.mm; path = Comm/CommServicesAuthMetadataEmitter.mm; sourceTree = "<group>"; };
CB74AB1E2B2B0C0900CBB494 /* RustCSAMetadataEmitter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RustCSAMetadataEmitter.cpp; sourceTree = "<group>"; };
CB74AB1F2B2B0C0900CBB494 /* RustCSAMetadataEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RustCSAMetadataEmitter.h; sourceTree = "<group>"; };
@@ -282,6 +286,8 @@
CB7EF17C295C580500B17035 /* CommIOSNotificationsBridgeQueue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CommIOSNotificationsBridgeQueue.h; path = Comm/CommIOSNotifications/CommIOSNotificationsBridgeQueue.h; sourceTree = "<group>"; };
CB7EF17D295C5D1800B17035 /* CommIOSNotifications.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = CommIOSNotifications.mm; path = Comm/CommIOSNotifications/CommIOSNotifications.mm; sourceTree = "<group>"; };
CB90951929531663002F2A7F /* CommIOSNotifications.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommIOSNotifications.h; path = Comm/CommIOSNotifications/CommIOSNotifications.h; sourceTree = "<group>"; };
+ CBA5F8832B6979ED005BE700 /* SQLiteConnectionManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SQLiteConnectionManager.h; sourceTree = "<group>"; };
+ CBA5F8842B6979ED005BE700 /* SQLiteConnectionManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SQLiteConnectionManager.cpp; sourceTree = "<group>"; };
CBA784382B28AC4300E9F419 /* CommServicesAuthMetadataEmitter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CommServicesAuthMetadataEmitter.h; sourceTree = "<group>"; };
CBAAA46E2B459181007599DA /* BackupOperationsExecutor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BackupOperationsExecutor.cpp; path = PersistentStorageUtilities/BackupOperationsUtilities/BackupOperationsExecutor.cpp; sourceTree = "<group>"; };
CBAAA46F2B459181007599DA /* BackupOperationsExecutor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BackupOperationsExecutor.h; path = PersistentStorageUtilities/BackupOperationsUtilities/BackupOperationsExecutor.h; sourceTree = "<group>"; };
@@ -474,6 +480,10 @@
71BE843F2636A944002849D2 /* DatabaseManagers */ = {
isa = PBXGroup;
children = (
+ CB3CCB002B7246F400793640 /* NativeSQLiteConnectionManager.cpp */,
+ CB3CCAFF2B7246F400793640 /* NativeSQLiteConnectionManager.h */,
+ CBA5F8842B6979ED005BE700 /* SQLiteConnectionManager.cpp */,
+ CBA5F8832B6979ED005BE700 /* SQLiteConnectionManager.h */,
8E86A6D229537EBB000BBE7D /* DatabaseManager.cpp */,
71BE84402636A944002849D2 /* DatabaseQueryExecutor.h */,
71BE84412636A944002849D2 /* SQLiteQueryExecutor.cpp */,
@@ -1097,6 +1107,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ CB3CCB012B72470700793640 /* NativeSQLiteConnectionManager.cpp in Sources */,
+ CBA5F8852B6979F7005BE700 /* SQLiteConnectionManager.cpp in Sources */,
CB01F0C42B67F3A10089E1F9 /* SQLiteStatementWrapper.cpp in Sources */,
CB01F0C22B67EF5A0089E1F9 /* SQLiteDataConverters.cpp in Sources */,
CBAAA4702B459181007599DA /* BackupOperationsExecutor.cpp in Sources */,
diff --git a/web/database/_generated/comm_query_executor.wasm b/web/database/_generated/comm_query_executor.wasm
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/web/scripts/run_emscripten.sh b/web/scripts/run_emscripten.sh
--- a/web/scripts/run_emscripten.sh
+++ b/web/scripts/run_emscripten.sh
@@ -144,6 +144,7 @@
)
INPUT_FILES=(
+ "${INPUT_DIR}SQLiteConnectionManager.cpp"
"${WEB_CPP_DIR}SQLiteQueryExecutorBindings.cpp"
"${WEB_CPP_DIR}Logger.cpp"
"${ENTITIES_DIR}SQLiteDataConverters.cpp"
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Dec 7, 5:41 PM (19 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5845264
Default Alt Text
D10835.1765129303.diff (22 KB)
Attached To
Mode
D10835: Implement unencrypted log capture without attachments
Attached
Detach File
Event Timeline
Log In to Comment