check if a table exists before making it instead of catching the sqlite

exception
This commit is contained in:
jesopo 2018-08-18 21:53:50 +01:00
parent 33b48f5ea3
commit 8386e45343

View file

@ -265,65 +265,59 @@ class Database(object):
def execute(self, query, params=[]): def execute(self, query, params=[]):
return self._execute_fetch(query, lambda cursor: None, params) return self._execute_fetch(query, lambda cursor: None, params)
def has_table(self, table_name):
result = self.execute_fetchone("""SELECT COUNT(*) FROM
sqlite_master WHERE type='table' AND name=?""",
[table_name])
return result[0] == 1
def make_servers_table(self): def make_servers_table(self):
try: if not self.has_table("servers"):
self.execute("""CREATE TABLE servers self.execute("""CREATE TABLE servers
(server_id INTEGER PRIMARY KEY, (server_id INTEGER PRIMARY KEY,
hostname TEXT, port INTEGER, password TEXT, hostname TEXT, port INTEGER, password TEXT,
ipv4 BOOLEAN, tls BOOLEAN, nickname TEXT, ipv4 BOOLEAN, tls BOOLEAN, nickname TEXT,
username TEXT, realname TEXT)""") username TEXT, realname TEXT)""")
except sqlite3.Error as e:
pass
def make_bot_settings_table(self): def make_bot_settings_table(self):
try: if not self.has_table("bot_settings"):
self.execute("""CREATE TABLE bot_settings self.execute("""CREATE TABLE bot_settings
(setting TEXT PRIMARY KEY, value TEXT)""") (setting TEXT PRIMARY KEY, value TEXT)""")
except sqlite3.Error as e: self.execute("""CREATE INDEX bot_settings_index
return ON bot_settings (setting)""")
self.execute("""CREATE INDEX bot_settings_index ON
bot_settings (setting)""")
def make_server_settings_table(self): def make_server_settings_table(self):
try: if not self.has_table("server_settings"):
self.execute("""CREATE TABLE server_settings self.execute("""CREATE TABLE server_settings
(server_id INTEGER, setting TEXT, value TEXT, (server_id INTEGER, setting TEXT, value TEXT,
FOREIGN KEY(server_id) REFERENCES FOREIGN KEY(server_id) REFERENCES
servers(server_id) ON DELETE CASCADE, servers(server_id) ON DELETE CASCADE,
PRIMARY KEY (server_id, setting))""") PRIMARY KEY (server_id, setting))""")
except sqlite3.Error as e: self.execute("""CREATE INDEX server_settings_index
return ON server_settings (server_id, setting)""")
self.execute("""CREATE INDEX server_settings_index ON
server_settings (server_id, setting)""")
def make_channel_settings_table(self): def make_channel_settings_table(self):
try: if not self.has_table("channel_settings"):
self.execute("""CREATE TABLE channel_settings self.execute("""CREATE TABLE channel_settings
(server_id INTEGER, channel TEXT, setting TEXT, (server_id INTEGER, channel TEXT, setting TEXT,
value TEXT, FOREIGN KEY (server_id) REFERENCES value TEXT, FOREIGN KEY (server_id) REFERENCES
servers(server_id) ON DELETE CASCADE, servers(server_id) ON DELETE CASCADE,
PRIMARY KEY (server_id, channel, setting))""") PRIMARY KEY (server_id, channel, setting))""")
except sqlite3.Error as e: self.execute("""CREATE INDEX channel_settings_index
return ON channel_settings (server_id, channel, setting)""")
self.execute("""CREATE INDEX channel_settings_index ON
channel_settings (server_id, channel, setting)""")
def make_user_settings_table(self): def make_user_settings_table(self):
try: if not self.has_table("user_settings"):
self.execute("""CREATE TABLE user_settings self.execute("""CREATE TABLE user_settings
(server_id INTEGER, nickname TEXT, setting TEXT, (server_id INTEGER, nickname TEXT, setting TEXT,
value TEXT, FOREIGN KEY (server_id) REFERENCES value TEXT, FOREIGN KEY (server_id) REFERENCES
servers(server_id) ON DELETE CASCADE, servers(server_id) ON DELETE CASCADE,
PRIMARY KEY (server_id, nickname, setting))""") PRIMARY KEY (server_id, nickname, setting))""")
except sqlite3.Error as e: self.execute("""CREATE INDEX user_settings_index ON
return user_settings (server_id, nickname, setting)""")
self.execute("""CREATE INDEX user_settings_index ON
user_settings (server_id, nickname, setting)""")
def make_user_channel_settings_table(self): def make_user_channel_settings_table(self):
try: if not self.has_table("user_channel_settings"):
self.execute("""CREATE TABLE user_channel_settings self.execute("""CREATE TABLE user_channel_settings
(server_id INTEGER, channel TEXT, nickname TEXT, (server_id INTEGER, channel TEXT, nickname TEXT,
setting TEXT, value TEXT, FOREIGN KEY (server_id) setting TEXT, value TEXT, FOREIGN KEY (server_id)
REFERENCES servers(server_id) ON DELETE CASCADE, REFERENCES servers(server_id) ON DELETE CASCADE,
PRIMARY KEY (server_id, nickname, channel, setting))""") PRIMARY KEY (server_id, nickname, channel, setting))""")
except sqlite3.Error as e: self.execute("""CREATE INDEX user_channel_settings_index
return ON user_channel_settings (server_id, nickname, channel,
self.execute("""CREATE INDEX user_channel_settings_index setting)""")
ON user_channel_settings (server_id, nickname, channel,
setting)""")