C++

まず、ソースコードからコンパイルとインストールの手順に従うか、お使いのプラットフォーム用のプリコンパイル済みバイナリを使用してください。無料版から始めることができます。


サンプルコード
#include <sqlite_modern_cpp.h>
#include <thread>
#include <chrono>
#include <iostream>

using namespace sqlite;

int main() {
  try {
    // データベースを開く
    database db("file:app.db?node=secondary&connect=tcp://server:port");

    // データベースの準備が完了するまで待機
    while(1) {
      string status;
      db << "pragma sync_status" >> status;
      std::cout << "ステータス : " << status << std::endl;
      if (status.find("\"db_is_ready\": true") != string::npos) break;
      std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    // これでdbコネクションを使用できます
    ...
  }
  catch (std::exception& e) {
    std::cerr << e.what() << std::endl;
  }
}


更新通知

リモートノードとの同期によってローカルデータベースが更新された場合、アプリケーションに通知することができます。通知はユーザー定義関数を通じて行われます。

db.define("update_notification", [](std::string changes) {
  std::cout << "更新を受信: " << changes << std::endl;
});


トランザクション通知

ローカルトランザクションがリモートノードと同期された時、アプリケーションに通知することができます。通知はユーザー定義関数を通じて行われます。`result`引数の値が"OK"でない場合、エラーメッセージが含まれています。

db.define("transaction_notification", [](std::string sql, std::string result) {
  std::cout << "トランザクション同期完了 (" << result << "): " << sql << std::endl;
});


同期ステータス

アプリケーションでローカルデータベースとリモートノード間の同期状態を確認することができます。

std::string status;
db << "pragma sync_status" >> status;
std::cout << "同期ステータス: " << status << std::endl;


注意: 通知関数はワーカースレッドによって呼び出されます。アプリケーションは通知関数内でデータベース接続を使用してはいけません。また、できるだけ早く処理を返す必要があります!アプリケーションは通知を返す前にメインスレッドに転送することができます。




ビルド

g++ -o app app.cpp -std=c++14 -llitesync