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)
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

View File

@ -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

View File

@ -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