From c7be0e0e7c738152db647df577104ffed2e3ffbd Mon Sep 17 00:00:00 2001 From: Alex Ling Date: Tue, 19 Jan 2021 09:08:31 +0000 Subject: [PATCH] Separate `insert_id` into titles and entries --- src/library/entry.cr | 9 ++++----- src/library/title.cr | 9 ++++----- src/storage.cr | 41 ++++++++++++++++++++++++++--------------- 3 files changed, 34 insertions(+), 25 deletions(-) diff --git a/src/library/entry.cr b/src/library/entry.cr index e3599a8..7a4e753 100644 --- a/src/library/entry.cr +++ b/src/library/entry.cr @@ -14,11 +14,10 @@ class Entry id = storage.get_entry_id @zip_path, File.signature(@zip_path) if id.nil? id = random_str - storage.insert_id({ - path: @zip_path, - id: id, - title_signature: nil, - entry_signature: File.signature(@zip_path).to_s, + storage.insert_entry_id({ + path: @zip_path, + id: id, + signature: File.signature(@zip_path).to_s, }) end @id = id diff --git a/src/library/title.cr b/src/library/title.cr index 69441c9..001e9af 100644 --- a/src/library/title.cr +++ b/src/library/title.cr @@ -13,11 +13,10 @@ class Title id = storage.get_title_id dir, signature if id.nil? id = random_str - storage.insert_id({ - path: dir, - id: id, - title_signature: signature.to_s, - entry_signature: nil, + storage.insert_title_id({ + path: dir, + id: id, + signature: signature.to_s, }) end @id = id diff --git a/src/storage.cr b/src/storage.cr index d437387..97f6a66 100644 --- a/src/storage.cr +++ b/src/storage.cr @@ -15,16 +15,21 @@ def verify_password(hash, pw) end class Storage - @@insert_ids = [] of IDTuple + @@insert_entry_ids = [] of EntryID + @@insert_title_ids = [] of TitleID @path : String @db : DB::Database? - alias IDTuple = NamedTuple( + alias EntryID = NamedTuple( path: String, id: String, - entry_signature: String?, - title_signature: String?) + signature: String?) + + alias TitleID = NamedTuple( + path: String, + id: String, + signature: String?) use_default @@ -314,8 +319,12 @@ class Storage id end - def insert_id(tp : IDTuple) - @@insert_ids << tp + def insert_entry_id(tp) + @@insert_entry_ids << tp + end + + def insert_title_id(tp) + @@insert_title_ids << tp end def bulk_insert_ids @@ -323,20 +332,22 @@ class Storage get_db do |db| db.transaction do |tran| conn = tran.connection - @@insert_ids.each do |tp| + @@insert_title_ids.each do |tp| path = Path.new(tp[:path]) .relative_to(Config.current.library_path).to_s - if tp[:title_signature] - conn.exec "insert into titles values (?, ?, ?)", tp[:id], - path, tp[:title_signature].to_s - else - conn.exec "insert into ids values (?, ?, ?)", path, tp[:id], - tp[:entry_signature].to_s - end + conn.exec "insert into titles values (?, ?, ?)", tp[:id], + path, tp[:signature].to_s + end + @@insert_entry_ids.each do |tp| + path = Path.new(tp[:path]) + .relative_to(Config.current.library_path).to_s + conn.exec "insert into ids values (?, ?, ?)", path, tp[:id], + tp[:signature].to_s end end end - @@insert_ids.clear + @@insert_entry_ids.clear + @@insert_title_ids.clear end end