Separate insert_id into titles and entries

This commit is contained in:
Alex Ling 2021-01-19 09:08:31 +00:00
parent 667d390be4
commit c7be0e0e7c
3 changed files with 34 additions and 25 deletions

View File

@ -14,11 +14,10 @@ class Entry
id = storage.get_entry_id @zip_path, File.signature(@zip_path) id = storage.get_entry_id @zip_path, File.signature(@zip_path)
if id.nil? if id.nil?
id = random_str id = random_str
storage.insert_id({ storage.insert_entry_id({
path: @zip_path, path: @zip_path,
id: id, id: id,
title_signature: nil, signature: File.signature(@zip_path).to_s,
entry_signature: File.signature(@zip_path).to_s,
}) })
end end
@id = id @id = id

View File

@ -13,11 +13,10 @@ class Title
id = storage.get_title_id dir, signature id = storage.get_title_id dir, signature
if id.nil? if id.nil?
id = random_str id = random_str
storage.insert_id({ storage.insert_title_id({
path: dir, path: dir,
id: id, id: id,
title_signature: signature.to_s, signature: signature.to_s,
entry_signature: nil,
}) })
end end
@id = id @id = id

View File

@ -15,16 +15,21 @@ def verify_password(hash, pw)
end end
class Storage class Storage
@@insert_ids = [] of IDTuple @@insert_entry_ids = [] of EntryID
@@insert_title_ids = [] of TitleID
@path : String @path : String
@db : DB::Database? @db : DB::Database?
alias IDTuple = NamedTuple( alias EntryID = NamedTuple(
path: String, path: String,
id: String, id: String,
entry_signature: String?, signature: String?)
title_signature: String?)
alias TitleID = NamedTuple(
path: String,
id: String,
signature: String?)
use_default use_default
@ -314,8 +319,12 @@ class Storage
id id
end end
def insert_id(tp : IDTuple) def insert_entry_id(tp)
@@insert_ids << tp @@insert_entry_ids << tp
end
def insert_title_id(tp)
@@insert_title_ids << tp
end end
def bulk_insert_ids def bulk_insert_ids
@ -323,20 +332,22 @@ class Storage
get_db do |db| get_db do |db|
db.transaction do |tran| db.transaction do |tran|
conn = tran.connection conn = tran.connection
@@insert_ids.each do |tp| @@insert_title_ids.each do |tp|
path = Path.new(tp[:path]) path = Path.new(tp[:path])
.relative_to(Config.current.library_path).to_s .relative_to(Config.current.library_path).to_s
if tp[:title_signature] conn.exec "insert into titles values (?, ?, ?)", tp[:id],
conn.exec "insert into titles values (?, ?, ?)", tp[:id], path, tp[:signature].to_s
path, tp[:title_signature].to_s end
else @@insert_entry_ids.each do |tp|
conn.exec "insert into ids values (?, ?, ?)", path, tp[:id], path = Path.new(tp[:path])
tp[:entry_signature].to_s .relative_to(Config.current.library_path).to_s
end conn.exec "insert into ids values (?, ?, ?)", path, tp[:id],
tp[:signature].to_s
end end
end end
end end
@@insert_ids.clear @@insert_entry_ids.clear
@@insert_title_ids.clear
end end
end end