Guest User

shared.c

a guest
Oct 6th, 2015
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.92 KB | None | 0 0
  1. // cc -o shared shared.c -lsqlite3 && ./shared
  2.  
  3. #include <stdio.h>
  4. #include <sqlite3.h>
  5.  
  6. #if 0
  7. #define path ":memory:"
  8. #elif 0
  9. #define path "file:memdb?cache=shared"
  10. #elif 1
  11. #define path "file:memdb?mode=memory&cache=shared"
  12. #endif
  13.  
  14. int main(int argc, char** argv) {
  15.   sqlite3* db = NULL;
  16.   int rc = sqlite3_open_v2(path, &db,
  17.                            SQLITE_OPEN_URI|SQLITE_OPEN_SHAREDCACHE|
  18.                            SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, NULL);
  19.   if (rc != SQLITE_OK) {
  20.     fprintf(stderr, "sqlite3_open_v2() -> %d\n", rc);
  21.     return 1;
  22.   }
  23.  
  24.   char* errmsg = NULL;
  25. #if 0
  26.   rc = sqlite3_exec(db, "CREATE TABLE t (c TEXT)", NULL, NULL, &errmsg);
  27. #else
  28.   rc = sqlite3_exec(db, "CREATE VIRTUAL TABLE t USING fts3(c TEXT)", NULL, NULL, &errmsg);
  29. #endif
  30.   if (rc != SQLITE_OK) {
  31.     fprintf(stderr, "CREATE -> %d:%s\n", rc, errmsg);
  32.     return 1;
  33.   }
  34.  
  35.   rc = sqlite3_exec(db, "INSERT INTO t VALUES ('hello')", NULL, NULL, &errmsg);
  36.   if (rc != SQLITE_OK) {
  37.     fprintf(stderr, "INSERT -> %d:%s\n", rc, errmsg);
  38.     return 1;
  39.   }
  40.  
  41.   sqlite3* odb = NULL;
  42.   rc = sqlite3_open_v2(path, &odb,
  43.                        SQLITE_OPEN_URI|SQLITE_OPEN_SHAREDCACHE|
  44.                        SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, NULL);
  45.   if (rc != SQLITE_OK) {
  46.     fprintf(stderr, "other sqlite3_open_v2() -> %d\n", rc);
  47.     return 1;
  48.   }
  49.  
  50.   sqlite3_stmt* s = NULL;
  51.   rc = sqlite3_prepare(odb, "SELECT c FROM t", -1, &s, NULL);
  52.   if (rc != SQLITE_OK) {
  53.     fprintf(stderr, "prepare -> %d\n", rc);
  54.     return 1;
  55.   }
  56.  
  57.   rc = sqlite3_step(s);
  58.   if (rc != SQLITE_ROW) {
  59.     fprintf(stderr, "first step -> %d\n", rc);
  60.     return 1;
  61.   }
  62.  
  63.   const unsigned char* t = sqlite3_column_text(s, 0);
  64.   fprintf(stderr, "Got %s\n", t);
  65.  
  66.   rc = sqlite3_step(s);
  67.   if (rc != SQLITE_DONE) {
  68.     fprintf(stderr, "last step -> %d\n", rc);
  69.     return 1;
  70.   }
  71.  
  72.   fprintf(stderr, "Success\n");
  73.   return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment