remove config table and add version table

This commit is contained in:
2021-05-05 21:17:48 +08:00
parent 2f7be8f233
commit 5f21169afe

View File

@@ -23,6 +23,16 @@ from hashl import sha256WithBase64
from time import time from time import time
VERSION_TABLE = '''CREATE TABLE version (
id TEXT,
v1 INT,
v2 INT,
v3 INT,
v4 INT,
PRIMARY KEY (id)
);'''
def dealtext(s: str): def dealtext(s: str):
return s.replace("'", "''") return s.replace("'", "''")
@@ -35,41 +45,30 @@ class userStatus(Enum):
class database: class database:
def __check_database(self): def __check_database(self):
cur = self._db.execute('SELECT * FROM main.sqlite_master;') self.__updateExistsTable()
self._exist_tables = {}
for i in cur:
if i[0] == 'table':
self._exist_tables[i[1]] = i
for i in ['config', 'RSSList', 'chatList', 'userStatus', 'hashList']:
if i not in self._exist_tables:
return False
v = self.__read_version() v = self.__read_version()
if v is None: if v is None:
return False return False
if v < self._version: if v < self._version:
if v == [1, 0, 0, 0]: if v == [1, 0, 0, 0]:
self._db.execute('ALTER TABLE RSSList ADD lasterrortime INT;') self._db.execute('ALTER TABLE RSSList ADD lasterrortime INT;')
self._db.commit()
if v < [1, 0, 0, 2]: if v < [1, 0, 0, 2]:
self._db.execute( self._db.execute(
'ALTER TABLE RSSList ADD forceupdate BOOLEAN;') 'ALTER TABLE RSSList ADD forceupdate BOOLEAN;')
self._db.execute('UPDATE RSSList SET forceupdate=false;') self._db.execute('UPDATE RSSList SET forceupdate=false;')
self._db.commit()
if v < [1, 0, 0, 3]: if v < [1, 0, 0, 3]:
self._db.execute('ALTER TABLE RSSList ADD errorcount INT;') self._db.execute('ALTER TABLE RSSList ADD errorcount INT;')
self._db.execute('UPDATE RSSList SET errorcount=0;') self._db.execute('UPDATE RSSList SET errorcount=0;')
self._db.commit() if v < [1, 0, 0, 4]:
self._db.execute('DROP TABLE config;')
self._db.execute(VERSION_TABLE)
self.__updateExistsTable()
self.__write_version() self.__write_version()
return True return True
def __create_table(self): def __create_table(self):
if 'config' not in self._exist_tables: if 'version' not in self._exist_tables:
self._db.execute(f'''CREATE TABLE config ( self._db.execute(VERSION_TABLE)
version1 INT,
version2 INT,
version3 INT,
version4 INT
);''')
self.__write_version() self.__write_version()
if 'RSSList' not in self._exist_tables: if 'RSSList' not in self._exist_tables:
self._db.execute(f'''CREATE TABLE RSSList ( self._db.execute(f'''CREATE TABLE RSSList (
@@ -106,7 +105,7 @@ PRIMARY KEY (hash)
self._db.commit() self._db.commit()
def __init__(self, m, loc: str): def __init__(self, m, loc: str):
self._version = [1, 0, 0, 3] self._version = [1, 0, 0, 4]
self._value_lock = Lock() self._value_lock = Lock()
self._db = sqlite3.connect(loc, check_same_thread=False) self._db = sqlite3.connect(loc, check_same_thread=False)
ok = self.__check_database() ok = self.__check_database()
@@ -115,6 +114,12 @@ PRIMARY KEY (hash)
from rssbot import main from rssbot import main
self._main: main = m self._main: main = m
def __isNewVersionType(self):
if 'version' in self._exist_tables:
return True
else:
return False
def __removeRSSEntry(self, id: str) -> bool: def __removeRSSEntry(self, id: str) -> bool:
try: try:
self._db.execute(f'DELETE FROM RSSList WHERE id="{id}"') self._db.execute(f'DELETE FROM RSSList WHERE id="{id}"')
@@ -125,15 +130,31 @@ PRIMARY KEY (hash)
return False return False
def __write_version(self): def __write_version(self):
self._db.execute('DELETE FROM config;') if self.__read_version() is None:
self._db.execute( self._db.execute('INSERT INTO version VALUES (?, ?, ?, ?, ?);',
f'INSERT INTO config VALUES ({self._version[0]}, {self._version[1]}, {self._version[2]}, {self._version[3]});') tuple(['main'] + self._version))
else:
self._db.execute(
"UPDATE version SET v1=?, v2=?, v3=?, v4=? WHERE id='main';",
tuple(self._version))
self._db.commit() self._db.commit()
def __read_version(self) -> List[int]: def __read_version(self) -> List[int]:
cur = self._db.execute(f'SELECT * FROM config;') if self.__isNewVersionType():
cur = self._db.execute("SELECT * FROM version WHERE id='main';")
for i in cur:
return [k for k in i if isinstance(k, int)]
else:
cur = self._db.execute(f'SELECT * FROM config;')
for i in cur:
return [k for k in i]
def __updateExistsTable(self):
cur = self._db.execute('SELECT * FROM main.sqlite_master;')
self._exist_tables = {}
for i in cur: for i in cur:
return [k for k in i] if i[0] == 'table':
self._exist_tables[i[1]] = i
def addRSSList(self, title: str, url: str, chatId: int, config: RSSConfig, ttl: int = None, hashEntries: HashEntries = None): def addRSSList(self, title: str, url: str, chatId: int, config: RSSConfig, ttl: int = None, hashEntries: HashEntries = None):
with self._value_lock: with self._value_lock: