diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt index 885c47d2..225510b4 100644 --- a/android/CMakeLists.txt +++ b/android/CMakeLists.txt @@ -52,7 +52,7 @@ add_library( ) if (USE_SQLCIPHER) - target_sources(${PACKAGE_NAME} PRIVATE ../cpp/sqlcipher/sqlite3.h ../cpp/sqlcipher/sqlite3.c ../cpp/bridge.cpp ../cpp/bridge.h) + target_sources(${PACKAGE_NAME} PRIVATE ../cpp/sqlcipher/sqlite3.h ../cpp/sqlcipher/sqlite3.c ../cpp/bridge.cpp ../cpp/bridge.hpp) add_definitions( -DOP_SQLITE_USE_SQLCIPHER=1 diff --git a/cpp/DBHostObject.cpp b/cpp/DBHostObject.cpp index 5dfa3e28..3c11d634 100644 --- a/cpp/DBHostObject.cpp +++ b/cpp/DBHostObject.cpp @@ -1,9 +1,9 @@ -#include "DBHostObject.h" -#include "PreparedStatementHostObject.h" +#include "DBHostObject.hpp" +#include "PreparedStatementHostObject.hpp" #if OP_SQLITE_USE_LIBSQL #include "libsql/bridge.hpp" #else -#include "bridge.h" +#include "bridge.hpp" #endif #include "logs.h" #include diff --git a/cpp/DBHostObject.h b/cpp/DBHostObject.hpp similarity index 99% rename from cpp/DBHostObject.h rename to cpp/DBHostObject.hpp index 45ed8d21..9d7d6792 100644 --- a/cpp/DBHostObject.h +++ b/cpp/DBHostObject.hpp @@ -1,6 +1,6 @@ #pragma once -#include "OPThreadPool.h" +#include "OPThreadPool.hpp" #include "types.hpp" #include #include diff --git a/cpp/DumbHostObject.cpp b/cpp/DumbHostObject.cpp index 9b799f26..ec26f080 100644 --- a/cpp/DumbHostObject.cpp +++ b/cpp/DumbHostObject.cpp @@ -1,5 +1,5 @@ -#include "DumbHostObject.h" -#include "SmartHostObject.h" +#include "DumbHostObject.hpp" +#include "SmartHostObject.hpp" #include "utils.hpp" #include diff --git a/cpp/DumbHostObject.h b/cpp/DumbHostObject.hpp similarity index 96% rename from cpp/DumbHostObject.h rename to cpp/DumbHostObject.hpp index 5781bfa8..d4a5eb92 100644 --- a/cpp/DumbHostObject.h +++ b/cpp/DumbHostObject.hpp @@ -1,6 +1,6 @@ #pragma once -#include "SmartHostObject.h" +#include "SmartHostObject.hpp" #include "types.hpp" #include #include diff --git a/cpp/OPSqlite.cpp b/cpp/OPSqlite.cpp index a5647cb8..4cc78326 100644 --- a/cpp/OPSqlite.cpp +++ b/cpp/OPSqlite.cpp @@ -1,11 +1,11 @@ #include "OPSqlite.hpp" -#include "DBHostObject.h" -#include "DumbHostObject.h" -#include "OPThreadPool.h" +#include "DBHostObject.hpp" +#include "DumbHostObject.hpp" +#include "OPThreadPool.hpp" #ifdef OP_SQLITE_USE_LIBSQL #include "libsql/bridge.hpp" #else -#include "bridge.h" +#include "bridge.hpp" #endif #include "logs.h" #include "macros.hpp" diff --git a/cpp/OPThreadPool.cpp b/cpp/OPThreadPool.cpp index a4e9d1d3..e9b06857 100644 --- a/cpp/OPThreadPool.cpp +++ b/cpp/OPThreadPool.cpp @@ -1,4 +1,4 @@ -#include "OPThreadPool.h" +#include "OPThreadPool.hpp" namespace opsqlite { diff --git a/cpp/OPThreadPool.h b/cpp/OPThreadPool.hpp similarity index 100% rename from cpp/OPThreadPool.h rename to cpp/OPThreadPool.hpp diff --git a/cpp/PreparedStatementHostObject.cpp b/cpp/PreparedStatementHostObject.cpp index f6ea1349..0bbe0a17 100644 --- a/cpp/PreparedStatementHostObject.cpp +++ b/cpp/PreparedStatementHostObject.cpp @@ -1,8 +1,8 @@ -#include "PreparedStatementHostObject.h" +#include "PreparedStatementHostObject.hpp" #if OP_SQLITE_USE_LIBSQL #include "libsql/bridge.hpp" #else -#include "bridge.h" +#include "bridge.hpp" #endif #include "macros.hpp" #include "utils.hpp" diff --git a/cpp/PreparedStatementHostObject.h b/cpp/PreparedStatementHostObject.hpp similarity index 97% rename from cpp/PreparedStatementHostObject.h rename to cpp/PreparedStatementHostObject.hpp index 5621d4e5..38790471 100644 --- a/cpp/PreparedStatementHostObject.h +++ b/cpp/PreparedStatementHostObject.hpp @@ -13,7 +13,7 @@ #include #endif #endif -#include "OPThreadPool.h" +#include "OPThreadPool.hpp" #include #include diff --git a/cpp/SmartHostObject.cpp b/cpp/SmartHostObject.cpp index b56e385c..deac3c8c 100644 --- a/cpp/SmartHostObject.cpp +++ b/cpp/SmartHostObject.cpp @@ -1,4 +1,4 @@ -#include "SmartHostObject.h" +#include "SmartHostObject.hpp" #include "utils.hpp" namespace opsqlite { diff --git a/cpp/SmartHostObject.h b/cpp/SmartHostObject.hpp similarity index 100% rename from cpp/SmartHostObject.h rename to cpp/SmartHostObject.hpp diff --git a/cpp/bridge.cpp b/cpp/bridge.cpp index a5adaec8..5731e546 100644 --- a/cpp/bridge.cpp +++ b/cpp/bridge.cpp @@ -2,10 +2,10 @@ // Allows a clear defined boundary between the JSI and the SQLite operations // so that threading operations are safe and contained within DBHostObject -#include "bridge.h" -#include "DBHostObject.h" -#include "DumbHostObject.h" -#include "SmartHostObject.h" +#include "bridge.hpp" +#include "DBHostObject.hpp" +#include "DumbHostObject.hpp" +#include "SmartHostObject.hpp" #include "logs.h" #include "utils.hpp" #include diff --git a/cpp/bridge.h b/cpp/bridge.hpp similarity index 98% rename from cpp/bridge.h rename to cpp/bridge.hpp index f82720bd..d153637b 100644 --- a/cpp/bridge.h +++ b/cpp/bridge.hpp @@ -1,7 +1,7 @@ #pragma once -#include "DumbHostObject.h" -#include "SmartHostObject.h" +#include "DumbHostObject.hpp" +#include "SmartHostObject.hpp" #include "types.hpp" #include "utils.hpp" #ifdef __ANDROID__ diff --git a/cpp/libsql/bridge.cpp b/cpp/libsql/bridge.cpp index 0b096262..c545244e 100644 --- a/cpp/libsql/bridge.cpp +++ b/cpp/libsql/bridge.cpp @@ -1,6 +1,6 @@ #include "bridge.hpp" -#include "DumbHostObject.h" -#include "SmartHostObject.h" +#include "DumbHostObject.hpp" +#include "SmartHostObject.hpp" #include "libsql.h" #include "logs.h" #include "utils.hpp" diff --git a/cpp/libsql/bridge.hpp b/cpp/libsql/bridge.hpp index cbe55eed..d870459d 100644 --- a/cpp/libsql/bridge.hpp +++ b/cpp/libsql/bridge.hpp @@ -1,7 +1,7 @@ #pragma once -#include "DumbHostObject.h" -#include "SmartHostObject.h" +#include "DumbHostObject.hpp" +#include "SmartHostObject.hpp" #include "libsql.h" #include "types.hpp" #include "utils.hpp" diff --git a/cpp/turso_bridge.cpp b/cpp/turso_bridge.cpp index 9f4aa245..96e086b3 100644 --- a/cpp/turso_bridge.cpp +++ b/cpp/turso_bridge.cpp @@ -1,7 +1,7 @@ -#include "DBHostObject.h" -#include "DumbHostObject.h" -#include "SmartHostObject.h" -#include "bridge.h" +#include "DBHostObject.hpp" +#include "DumbHostObject.hpp" +#include "SmartHostObject.hpp" +#include "bridge.hpp" #include "utils.hpp" #ifdef __APPLE__ diff --git a/cpp/utils.cpp b/cpp/utils.cpp index 62a3e4fe..1f2ad590 100644 --- a/cpp/utils.cpp +++ b/cpp/utils.cpp @@ -1,11 +1,11 @@ #include "utils.hpp" -#include "SmartHostObject.h" +#include "SmartHostObject.hpp" #include "types.hpp" #ifndef OP_SQLITE_USE_LIBSQL -#include "bridge.h" +#include "bridge.hpp" #endif -#include "OPThreadPool.h" +#include "OPThreadPool.hpp" #include "macros.hpp" #include #include diff --git a/cpp/utils.hpp b/cpp/utils.hpp index 12627aa3..9b9dda3d 100644 --- a/cpp/utils.hpp +++ b/cpp/utils.hpp @@ -1,7 +1,7 @@ #pragma once -#include "DumbHostObject.h" -#include "SmartHostObject.h" +#include "DumbHostObject.hpp" +#include "SmartHostObject.hpp" #include "types.hpp" #include #ifdef __ANDROID__ @@ -12,7 +12,7 @@ #include #include #include -#include "OPThreadPool.h" +#include "OPThreadPool.hpp" namespace opsqlite { diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 0085d5fd..b0670900 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -2161,7 +2161,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: FBLazyVector: b3e7ad108f0d882e30445c5527d774e3fd432f3d hermes-engine: d9c82b910641f3bb8d520dbd9d5f193582515958 - op-sqlite: 4df330bec6c23e6d9c9a5e256831869c58a618ea + op-sqlite: 2863e0409a4782b557388b6893c34ebe5068e889 RCTDeprecation: 2a74a2c57675e64419bd89078efde81f7c1de90b RCTRequired: 30451112e6fef4e6f31b4e7eee0845156e35e4b0 RCTSwiftUI: 5aaf0b07e747ba749dc6acc94d8bd41eea4b570f diff --git a/example/src/App.tsx b/example/src/App.tsx index db519711..43bc84ca 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -36,16 +36,16 @@ export default function App() { console.log("OPSQLITE_TEST_RESULT:FAIL"); } - // setTimeout(() => { - // try { - // global?.gc?.(); - // // let perfRes = performanceTest(); - // let perfRes = insertTest(); - // setPerfResult(perfRes); - // } catch (e) { - // // intentionally left blank - // } - // }, 4000); + setTimeout(() => { + try { + global?.gc?.(); + // let perfRes = performanceTest(); + let perfRes = insertTest(); + setPerfResult(perfRes); + } catch (e) { + // intentionally left blank + } + }, 4000); }; work(); diff --git a/op-sqlite.podspec b/op-sqlite.podspec index 8452cc2b..ce0b2497 100644 --- a/op-sqlite.podspec +++ b/op-sqlite.podspec @@ -17,7 +17,7 @@ if is_user_app current_dir = File.expand_path(__dir__) # Move one level up to the parent directory current_dir = File.dirname(current_dir) - + # Find the package.json by searching up through parent directories loop do package_path = File.join(current_dir, "package.json") @@ -30,7 +30,7 @@ if is_user_app break if parent_dir == current_dir # reached filesystem root current_dir = parent_dir end - + raise "package.json not found" if package_json_path.nil? else package_json_path = File.join(__dir__, "example", "package.json") @@ -109,13 +109,16 @@ Pod::Spec.new do |s| log_message.call("[OP-SQLITE] Configuration found at #{package_json_path}") install_modules_dependencies(s) - + # Base source files source_files = Dir.glob("ios/**/*.{h,hpp,m,mm}") + Dir.glob("cpp/**/*.{hpp,h,cpp,c}") # Backend bridges are selected explicitly by flags and should not be compiled by default. source_files.reject! { |path| path == "cpp/turso_bridge.cpp" } unless use_turso + # Strictly blocks all headers from being public + s.public_header_files = ["ios/OPSQLite.h", "cpp/sqlite3.h", "cpp/bridge.hpp"] + # Set the path to the `c_sources` directory based on environment if is_user_app c_sources_dir = File.join("..", "..", "..", "c_sources") @@ -136,23 +139,23 @@ Pod::Spec.new do |s| # Assign the collected source files to `s.source_files` s.source_files = source_files - + xcconfig = { :GCC_PREPROCESSOR_DEFINITIONS => "", - :CLANG_CXX_LANGUAGE_STANDARD => "c++20", + :CLANG_CXX_LANGUAGE_STANDARD => "c++23", :GCC_OPTIMIZATION_LEVEL => "2", } - + exclude_files = [] - + if use_sqlcipher then log_message.call("[OP-SQLITE] using SQLCipher") - exclude_files += ["cpp/sqlite3.c", "cpp/sqlite3.h", "cpp/libsql/bridge.c", "cpp/libsql/bridge.h", "cpp/libsql/bridge.cpp", "cpp/libsql/libsql.h", "ios/libsql.xcframework/**/*"] + exclude_files += ["cpp/sqlite3.c", "cpp/sqlite3.h", "cpp/libsql/bridge.cpp", "cpp/libsql/bridge.hpp", "ios/libsql.xcframework/**/*"] xcconfig[:GCC_PREPROCESSOR_DEFINITIONS] += " OP_SQLITE_USE_SQLCIPHER=1 HAVE_FULLFSYNC=1 SQLITE_HAS_CODEC SQLITE_TEMP_STORE=3 SQLITE_EXTRA_INIT=sqlcipher_extra_init SQLITE_EXTRA_SHUTDOWN=sqlcipher_extra_shutdown" - s.dependency "OpenSSL-Universal" + s.dependency "OpenSSL-Universal" elsif use_turso then log_message.call("[OP-SQLITE] using Turso SDK kit") - exclude_files += ["cpp/sqlite3.c", "cpp/sqlite3.h", "cpp/bridge.h", "cpp/bridge.cpp", "cpp/sqlcipher/sqlite3.c", "cpp/sqlcipher/sqlite3.h", "cpp/libsql/bridge.h", "cpp/libsql/bridge.cpp", "cpp/libsql/libsql.h", "ios/libsql_experimental.xcframework/**/*"] + exclude_files += ["cpp/sqlite3.c", "cpp/sqlite3.h", "cpp/bridge.hpp", "cpp/bridge.cpp", "cpp/sqlcipher/sqlite3.c", "cpp/sqlcipher/sqlite3.h", "cpp/libsql/bridge.hpp", "cpp/libsql/bridge.cpp", "ios/libsql_experimental.xcframework/**/*"] elsif use_libsql then log_message.call("[OP-SQLITE] ⚠️ Using libsql. If you have libsql questions please ask in the Turso Discord server.") exclude_files += ["cpp/sqlite3.c", "cpp/sqlite3.h", "cpp/sqlcipher/sqlite3.c", "cpp/sqlcipher/sqlite3.h", "cpp/bridge.h", "cpp/bridge.cpp", "ios/turso_sdk_kit.xcframework/**/*"] @@ -169,7 +172,7 @@ Pod::Spec.new do |s| if !use_sqlite_vec then exclude_files += ["ios/sqlitevec.xcframework/**/*"] end - + other_cflags = '$(inherited) -DSQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION=1 -DHAVE_USLEEP=1 -DSQLITE_ENABLE_LOCKING_STYLE=0' optimizedCflags = ' -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS=1 -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_OMIT_DEPRECATED=1 -DSQLITE_OMIT_PROGRESS_CALLBACK=1 -DSQLITE_OMIT_SHARED_CACHE=1 -DSQLITE_USE_ALLOCA=1 -DSQLITE_STRICT_SUBTYPE=1 -DSQLITE_THREADSAFE=2' frameworks = [] @@ -181,7 +184,7 @@ Pod::Spec.new do |s| if rtree then xcconfig[:GCC_PREPROCESSOR_DEFINITIONS] += " SQLITE_ENABLE_RTREE=1" end - + if phone_version then log_message.call("[OP-SQLITE] using iOS embedded SQLite 📱") xcconfig[:GCC_PREPROCESSOR_DEFINITIONS] += " OP_SQLITE_USE_PHONE_VERSION=1" @@ -229,7 +232,7 @@ Pod::Spec.new do |s| log_message.call("[OP_SQLITE] Tokenizers enabled: #{tokenizers}") if is_user_app then other_cflags += " -DTOKENIZERS_HEADER_PATH=\\\"../c_sources/tokenizers.h\\\"" - else + else other_cflags += " -DTOKENIZERS_HEADER_PATH=\\\"../example/c_sources/tokenizers.h\\\"" end end