Additional fix for #1407 (metadata.db is now held in memory, app.db is attached to it -> joins between both databases possible -> book_read_link is joined for getting result)

This commit is contained in:
Ozzieisaacs
2020-05-21 09:28:35 +02:00
parent 81fc1eccd3
commit b75497231e
7 changed files with 37 additions and 23 deletions
+10 -5
View File
@@ -24,7 +24,7 @@ import re
import ast
from datetime import datetime
from sqlalchemy import create_engine
from sqlalchemy import create_engine, event
from sqlalchemy import Table, Column, ForeignKey, CheckConstraint
from sqlalchemy import String, Integer, Boolean, TIMESTAMP, Float
from sqlalchemy.orm import relationship, sessionmaker, scoped_session
@@ -329,7 +329,7 @@ def update_title_sort(config, conn=None):
conn.create_function("title_sort", 1, _title_sort)
def setup_db(config):
def setup_db(config, app_db_path):
dispose()
global engine
@@ -343,10 +343,14 @@ def setup_db(config):
return False
try:
engine = create_engine('sqlite:///{0}'.format(dbpath),
#engine = create_engine('sqlite:///{0}'.format(dbpath),
engine = create_engine('sqlite://',
echo=False,
isolation_level="SERIALIZABLE",
connect_args={'check_same_thread': False})
engine.execute("attach database '{}' as calibre;".format(dbpath))
engine.execute("attach database '{}' as app_settings;".format(app_db_path))
conn = engine.connect()
# conn.text_factory = lambda b: b.decode(errors = 'ignore') possible fix for #1302
except Exception as e:
@@ -438,7 +442,8 @@ def dispose():
if table is not None:
Base.metadata.remove(table)
def reconnect_db(config):
def reconnect_db(config, app_db_path):
session.close()
engine.dispose()
setup_db(config)
setup_db(config, app_db_path)