From 98f2ab51cb0c381f42698211d24682a06db57ea5 Mon Sep 17 00:00:00 2001 From: dbr Date: Fri, 28 May 2021 12:09:36 +1000 Subject: [PATCH] Functional sqlite backend ..but not too efficient, creating a new connection pretty much per-query --- sync-server/src/storage/sqlite.rs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/sync-server/src/storage/sqlite.rs b/sync-server/src/storage/sqlite.rs index e974e33ef..bce885af1 100644 --- a/sync-server/src/storage/sqlite.rs +++ b/sync-server/src/storage/sqlite.rs @@ -86,7 +86,7 @@ impl SqliteStorage { let queries = vec![ "CREATE TABLE IF NOT EXISTS clients (client_key STRING PRIMARY KEY, latest_version_id STRING);", - "CREATE TABLE IF NOT EXISTS versions (id STRING PRIMARY KEY, client_key STRING, parent STRING, history_segment STRING);", + "CREATE TABLE IF NOT EXISTS versions (version_id STRING PRIMARY KEY, client_key STRING, parent_version_id STRING, history_segment STRING);", ]; for q in queries { txn.execute(q, []).context("Creating table")?; @@ -145,6 +145,7 @@ impl<'t> StorageTxn for Txn<'t> { params![&StoredUuid(client_key), &StoredUuid(latest_version_id)], ) .context("Create client query")?; + t.commit()?; Ok(()) } @@ -162,7 +163,24 @@ impl<'t> StorageTxn for Txn<'t> { client_key: Uuid, parent_version_id: Uuid, ) -> anyhow::Result> { - todo!() + let t = self.get_txn()?; + let r = t.query_row( + "SELECT version_id, parent_version_id, history_segment FROM versions WHERE parent_version_id = ? AND client_key = ?", + params![&StoredUuid(parent_version_id), &StoredUuid(client_key)], + |r| { + let version_id: StoredUuid = r.get("version_id")?; + let parent_version_id: StoredUuid = r.get("parent_version_id")?; + + Ok(Version{ + version_id: version_id.0, + parent_version_id: parent_version_id.0, + history_segment: r.get("history_segment")?, + })} + ) + .optional() + .context("Get version query") + ?; + Ok(r) } fn add_version( @@ -175,7 +193,7 @@ impl<'t> StorageTxn for Txn<'t> { let t = self.get_txn()?; t.execute( - "INSERT INTO versions (id, client_key, parent, history_segment) VALUES(?, ?, ?, ?)", + "INSERT INTO versions (version_id, client_key, parent_version_id, history_segment) VALUES(?, ?, ?, ?)", params![ StoredUuid(version_id), StoredUuid(client_key), @@ -184,7 +202,7 @@ impl<'t> StorageTxn for Txn<'t> { ], ) .context("Add version query")?; - + t.commit()?; Ok(()) }