Include sizes in references to blocks in each file's data list.
[cumulus.git] / localdb.cc
index 1509b61..17337f0 100644 (file)
@@ -46,7 +46,7 @@ void LocalDb::ReportError(int rc)
 }
 
 void LocalDb::Open(const char *path, const char *snapshot_name,
-                   const char *snapshot_scheme)
+                   const char *snapshot_scheme, double intent)
 {
     int rc;
 
@@ -69,8 +69,8 @@ void LocalDb::Open(const char *path, const char *snapshot_name,
     /* Insert this snapshot into the database, and determine the integer key
      * which will be used to identify it. */
     sqlite3_stmt *stmt = Prepare("insert into "
-                                 "snapshots(name, scheme, timestamp) "
-                                 "values (?, ?, julianday('now'))");
+                                 "snapshots(name, scheme, timestamp, intent) "
+                                 "values (?, ?, julianday('now'), ?)");
     sqlite3_bind_text(stmt, 1, snapshot_name, strlen(snapshot_name),
                       SQLITE_TRANSIENT);
     if (snapshot_scheme == NULL)
@@ -78,6 +78,7 @@ void LocalDb::Open(const char *path, const char *snapshot_name,
     else
         sqlite3_bind_text(stmt, 2, snapshot_scheme, strlen(snapshot_scheme),
                           SQLITE_TRANSIENT);
+    sqlite3_bind_double(stmt, 3, intent);
 
     rc = sqlite3_step(stmt);
     if (rc != SQLITE_DONE) {
@@ -257,6 +258,7 @@ ObjectReference LocalDb::FindObject(const string &checksum, int64_t size)
     } else if (rc == SQLITE_ROW) {
         ref = ObjectReference(IdToSegment(sqlite3_column_int64(stmt, 0)),
                               (const char *)sqlite3_column_text(stmt, 1));
+        ref.set_range(0, size);
     } else {
         fprintf(stderr, "Could not execute SELECT statement!\n");
         ReportError(rc);