C
Folgen Sie zunächst den Anweisungen zum Kompilieren und Installieren von LiteSync aus dem Quellcode oder verwenden Sie die vorkompilierten Binärdateien für Ihre Plattform. Sie können mit der kostenlosen Version beginnen.
Beispielcode
Das LiteSync-Modul hat die gleiche API wie die SQLite3-Bibliothek
#include <sqlite3.h>
char *uri = "file:app.db?node=secondary&connect=tcp://server:port";
int main() {
sqlite3 *db;
sqlite3_open(uri, &db); /* Datenbank öffnen */
/* Prüfen, ob die Datenbank bereit ist */
while(1){
char *json_str = sqlite3_query_value_str(db, "PRAGMA sync_status", NULL);
bool db_is_ready = strstr(json_str, "\"db_is_ready\": true") > 0;
sqlite3_free(json_str);
if (db_is_ready) break;
sleep_ms(250);
}
/* jetzt können wir die Datenbankverbindung verwenden */
...
}
char * sqlite3_query_value_str(sqlite3 *db, char *sql, char **ppErrMsg) {
char *ptr = NULL;
sqlite3_stmt *stmt;
int rc;
if (ppErrMsg) *ppErrMsg = NULL;
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (rc != SQLITE_OK) {
if (ppErrMsg) *ppErrMsg = sqlite3_strdup(sqlite3_errmsg(db));
return NULL;
}
if (sqlite3_step(stmt) == SQLITE_ROW) {
char *text = (char *)sqlite3_column_text(stmt, 0);
if (text) {
ptr = sqlite3_strdup(text);
}
}
sqlite3_finalize(stmt);
return ptr;
}
Aktualisierungsbenachrichtigung
Ihre Anwendung kann benachrichtigt werden, wenn die lokale Datenbank aufgrund der Synchronisation mit entfernten Knoten aktualisiert wird. Die Benachrichtigung erfolgt über eine benutzerdefinierte Funktion.
static void on_db_update(sqlite3_context *context, int argc, sqlite3_value **argv){
char* changes = sqlite3_value_text(argv[0]);
printf("Aktualisierung empfangen: %s\n", changes);
}
sqlite3_create_function(db, "update_notification", 1, SQLITE_UTF8, NULL, &on_db_update, NULL, NULL);
Transaktionsbenachrichtigung
Ihre Anwendung kann benachrichtigt werden, wenn lokale Transaktionen mit entfernten Knoten synchronisiert werden. Die Benachrichtigung erfolgt über eine benutzerdefinierte Funktion. Wenn der Wert im `result`-Argument nicht "OK" ist, enthält er die Fehlermeldung.
static void on_transaction_sync(sqlite3_context *context, int argc, sqlite3_value **argv){
char* sql = sqlite3_value_text(argv[0]);
char* result = sqlite3_value_text(argv[1]);
printf("Transaktion synchronisiert (%s): %s\n", result, sql);
}
sqlite3_create_function(db, "transaction_notification", 2, SQLITE_UTF8, NULL, &on_transaction_sync, NULL, NULL);
Synchronisationsstatus
Ihre Anwendung kann den Synchronisationsstatus der lokalen Datenbank mit den entfernten Knoten überprüfen.
char *json_str = sqlite3_query_value_str(db, "PRAGMA sync_status", NULL);
printf("Synchronisationsstatus: %s\n", json_str);
sqlite3_free(json_str);
ACHTUNG: Die Benachrichtigungsfunktionen werden vom Worker-Thread aufgerufen. Die Anwendung sollte die Datenbankverbindung NICHT innerhalb der Benachrichtigungsfunktionen verwenden und muss so schnell wie möglich zurückkehren! Die Anwendung kann die Benachrichtigung vor der Rückkehr an den Hauptthread übertragen.
Build
gcc -o app app.c -llitesync