From a881c666e1225a6519d357db326a61948a6ef8f8 Mon Sep 17 00:00:00 2001 From: damlayildiz Date: Wed, 17 Dec 2025 18:44:39 +0100 Subject: [PATCH 1/4] refactor: implement dual database connections --- README.md | 293 +++++++++++++++--- examples/sync-demo/src/App.tsx | 17 +- src/SQLiteDbContext.tsx | 3 +- src/SQLiteSyncActionsContext.tsx | 6 +- src/SQLiteSyncProvider.tsx | 99 ++++-- src/hooks/useOnSqliteSync.ts | 6 +- src/hooks/useOnTableUpdate.ts | 17 +- src/hooks/useSqliteExecute.ts | 8 +- src/hooks/useSqliteSyncQuery.ts | 11 +- ...seSyncStatus.ts => useSqliteSyncStatus.ts} | 4 +- src/hooks/useSqliteTransaction.ts | 80 +++++ src/index.tsx | 3 +- src/types/SQLiteDbContextValue.ts | 17 +- src/types/SQLiteSyncActionsContextValue.ts | 2 +- 14 files changed, 451 insertions(+), 115 deletions(-) rename src/hooks/{useSyncStatus.ts => useSqliteSyncStatus.ts} (87%) create mode 100644 src/hooks/useSqliteTransaction.ts diff --git a/README.md b/README.md index ea1dc0f..9f2ac21 100644 --- a/README.md +++ b/README.md @@ -34,12 +34,14 @@ Build real-time, collaborative mobile apps that work seamlessly offline and auto - [SQLiteSyncActionsContext](#sqlitesyncactionscontext) - [Hooks](#hooks) - [useSqliteDb](#usesqlitedb) - - [useSyncStatus](#usesyncstatus) + - [useSqliteSyncStatus](#useSqliteSyncStatus) - [useSqliteSync](#usesqlitesync) - [useTriggerSqliteSync](#usetriggersqlitesync) - [useOnSqliteSync](#useonsqlitesync) - [useSqliteSyncQuery](#usesqlitesyncquery) - [useOnTableUpdate](#useontableupdate) + - [useSqliteTransaction](#usesqlitetransaction) + - [useSqliteExecute](#usesqliteexecute) - [Types](#types) - [Error Handling](#-error-handling) - [Debug Logging](#-debug-logging) @@ -157,6 +159,7 @@ import { useOnTableUpdate, useTriggerSqliteSync, useOnSqliteSync, + useSqliteTransaction, } from '@sqliteai/sqlite-sync-react-native'; interface Task { @@ -191,14 +194,13 @@ function TaskList() { }); // 4. WRITING DATA: Use transactions to trigger reactive queries - const { db } = useSqliteDb(); + const { executeTransaction, isExecuting } = useSqliteTransaction(); const { triggerSync, isSyncing } = useTriggerSqliteSync(); const addTask = useCallback( async (title: string) => { - if (!db) return; // Use transaction to trigger reactive query update - await db.transaction(async (tx) => { + await executeTransaction(async (tx) => { await tx.execute( 'INSERT INTO tasks (id, title) VALUES (cloudsync_uuid(), ?);', [title] @@ -207,7 +209,7 @@ function TaskList() { // Optional: Push changes to cloud immediately triggerSync(); }, - [db, triggerSync] + [executeTransaction, triggerSync] ); if (isLoading) return Loading local DB...; @@ -225,7 +227,11 @@ function TaskList() { {task.title} ))} -