Page MenuHomePhorge

D10835.1765129303.diff
No OneTemporary

Size
22 KB
Referenced Files
None
Subscribers
None

D10835.1765129303.diff

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

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)

Event Timeline