From 0f1d1099f61c198ad2c0733ca701b1d45280f8f8 Mon Sep 17 00:00:00 2001 From: Alex Ling Date: Wed, 30 Dec 2020 07:24:32 +0000 Subject: [PATCH] Add unique constraint to tags and error handling --- src/storage.cr | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/storage.cr b/src/storage.cr index 63ac460..d145181 100644 --- a/src/storage.cr +++ b/src/storage.cr @@ -36,7 +36,7 @@ class Storage DB.open "sqlite3://#{@path}" do |db| begin # v0.18.0 - db.exec "create table tags (id text, tag text)" + db.exec "create table tags (id text, tag text, unique (id, tag))" db.exec "create index tags_id_idx on tags (id)" db.exec "create index tags_tag_idx on tags (tag)" @@ -347,11 +347,17 @@ class Storage end def add_tag(id : String, tag : String) + err = nil MainFiber.run do - get_db do |db| - db.exec "insert into tags values (?, ?)", id, tag + begin + get_db do |db| + db.exec "insert into tags values (?, ?)", id, tag + end + rescue e + err = e end end + raise err.not_nil! if err end def delete_tag(id : String, tag : String)