mirror of
https://github.com/fabianonline/telegram_backup.git
synced 2024-11-22 16:56:16 +00:00
Queries in Database now go through a custom function executeQuery which throws better (read: informative) Exceptions.
This commit is contained in:
parent
1ff540977e
commit
b199dc335f
@ -84,7 +84,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
try {
|
try {
|
||||||
val missing = LinkedList<Int>()
|
val missing = LinkedList<Int>()
|
||||||
val max = getTopMessageID()
|
val max = getTopMessageID()
|
||||||
val rs = stmt.executeQuery("SELECT message_id FROM messages WHERE source_type IN ('group', 'dialog') ORDER BY id")
|
val rs = executeQuery("SELECT message_id FROM messages WHERE source_type IN ('group', 'dialog') ORDER BY id")
|
||||||
rs.next()
|
rs.next()
|
||||||
var id = rs.getInt(1)
|
var id = rs.getInt(1)
|
||||||
for (i in 1..max) {
|
for (i in 1..max) {
|
||||||
@ -114,7 +114,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
val list = LinkedList<TLMessage?>()
|
val list = LinkedList<TLMessage?>()
|
||||||
var query = "SELECT data FROM messages WHERE has_media=1 ORDER BY id"
|
var query = "SELECT data FROM messages WHERE has_media=1 ORDER BY id"
|
||||||
if (limit > 0) query += " LIMIT ${limit} OFFSET ${offset}"
|
if (limit > 0) query += " LIMIT ${limit} OFFSET ${offset}"
|
||||||
val rs = stmt.executeQuery(query)
|
val rs = executeQuery(query)
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
list.add(bytesToTLMessage(rs.getBytes(1)))
|
list.add(bytesToTLMessage(rs.getBytes(1)))
|
||||||
}
|
}
|
||||||
@ -136,7 +136,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
fun getMessageSourceTypeWithCount(): HashMap<String, Int> {
|
fun getMessageSourceTypeWithCount(): HashMap<String, Int> {
|
||||||
val map = HashMap<String, Int>()
|
val map = HashMap<String, Int>()
|
||||||
try {
|
try {
|
||||||
val rs = stmt.executeQuery("SELECT COUNT(id), source_type FROM messages GROUP BY source_type ORDER BY source_type")
|
val rs = executeQuery("SELECT COUNT(id), source_type FROM messages GROUP BY source_type ORDER BY source_type")
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
val source_type = rs.getString(2) ?: "null"
|
val source_type = rs.getString(2) ?: "null"
|
||||||
map.put("count.messages.source_type.${source_type}", rs.getInt(1))
|
map.put("count.messages.source_type.${source_type}", rs.getInt(1))
|
||||||
@ -151,7 +151,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
fun getMessageApiLayerWithCount(): HashMap<String, Int> {
|
fun getMessageApiLayerWithCount(): HashMap<String, Int> {
|
||||||
val map = HashMap<String, Int>()
|
val map = HashMap<String, Int>()
|
||||||
try {
|
try {
|
||||||
val rs = stmt.executeQuery("SELECT COUNT(id), api_layer FROM messages GROUP BY api_layer ORDER BY api_layer")
|
val rs = executeQuery("SELECT COUNT(id), api_layer FROM messages GROUP BY api_layer ORDER BY api_layer")
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
var layer = rs.getInt(2)
|
var layer = rs.getInt(2)
|
||||||
map.put("count.messages.api_layer.$layer", rs.getInt(1))
|
map.put("count.messages.api_layer.$layer", rs.getInt(1))
|
||||||
@ -172,7 +172,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
fun getListOfChatsForExport(): LinkedList<Chat> {
|
fun getListOfChatsForExport(): LinkedList<Chat> {
|
||||||
val list = LinkedList<Chat>()
|
val list = LinkedList<Chat>()
|
||||||
|
|
||||||
val rs = stmt.executeQuery("SELECT chats.id, chats.name, COUNT(messages.id) as c " +
|
val rs = executeQuery("SELECT chats.id, chats.name, COUNT(messages.id) as c " +
|
||||||
"FROM chats, messages WHERE messages.source_type IN('group', 'supergroup', 'channel') AND messages.source_id=chats.id " +
|
"FROM chats, messages WHERE messages.source_type IN('group', 'supergroup', 'channel') AND messages.source_id=chats.id " +
|
||||||
"GROUP BY chats.id ORDER BY c DESC")
|
"GROUP BY chats.id ORDER BY c DESC")
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
@ -185,7 +185,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
|
|
||||||
fun getListOfDialogsForExport(): LinkedList<Dialog> {
|
fun getListOfDialogsForExport(): LinkedList<Dialog> {
|
||||||
val list = LinkedList<Dialog>()
|
val list = LinkedList<Dialog>()
|
||||||
val rs = stmt.executeQuery(
|
val rs = executeQuery(
|
||||||
"SELECT users.id, first_name, last_name, username, COUNT(messages.id) as c " +
|
"SELECT users.id, first_name, last_name, username, COUNT(messages.id) as c " +
|
||||||
"FROM users, messages WHERE messages.source_type='dialog' AND messages.source_id=users.id " +
|
"FROM users, messages WHERE messages.source_type='dialog' AND messages.source_id=users.id " +
|
||||||
"GROUP BY users.id ORDER BY c DESC")
|
"GROUP BY users.id ORDER BY c DESC")
|
||||||
@ -229,8 +229,17 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
ps.close()
|
ps.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun executeQuery(query: String): ResultSet {
|
||||||
|
logger.trace("Query: {}", query)
|
||||||
|
try {
|
||||||
|
return stmt.executeQuery(query)
|
||||||
|
} catch (e: SQLException) {
|
||||||
|
throw RuntimeException("An SQL error happened. Query: ${query} Error message: ${e.message}", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun queryInt(query: String): Int {
|
fun queryInt(query: String): Int {
|
||||||
val rs = stmt.executeQuery(query)
|
val rs = executeQuery(query)
|
||||||
rs.next()
|
rs.next()
|
||||||
val result = rs.getInt(1)
|
val result = rs.getInt(1)
|
||||||
rs.close()
|
rs.close()
|
||||||
@ -238,7 +247,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun queryString(query: String): String {
|
fun queryString(query: String): String {
|
||||||
val rs = stmt.executeQuery(query)
|
val rs = executeQuery(query)
|
||||||
rs.next()
|
rs.next()
|
||||||
val result = rs.getString(1)
|
val result = rs.getString(1)
|
||||||
rs.close()
|
rs.close()
|
||||||
@ -247,7 +256,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
|
|
||||||
fun queryStringMap(query: String): Map<String, String> {
|
fun queryStringMap(query: String): Map<String, String> {
|
||||||
val map = mutableMapOf<String, String>()
|
val map = mutableMapOf<String, String>()
|
||||||
val rs = stmt.executeQuery(query)
|
val rs = executeQuery(query)
|
||||||
while(rs.next()) {
|
while(rs.next()) {
|
||||||
map.put(rs.getString(1), rs.getString(2))
|
map.put(rs.getString(1), rs.getString(2))
|
||||||
}
|
}
|
||||||
@ -519,7 +528,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
|
|
||||||
fun getIdsFromQuery(query: String): LinkedList<Int> {
|
fun getIdsFromQuery(query: String): LinkedList<Int> {
|
||||||
val list = LinkedList<Int>()
|
val list = LinkedList<Int>()
|
||||||
val rs = stmt.executeQuery(query)
|
val rs = executeQuery(query)
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
list.add(rs.getInt(1))
|
list.add(rs.getInt(1))
|
||||||
}
|
}
|
||||||
@ -529,7 +538,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
|
|
||||||
fun getMessageTypesWithCount(c: AbstractChat): HashMap<String, Int> {
|
fun getMessageTypesWithCount(c: AbstractChat): HashMap<String, Int> {
|
||||||
val map = HashMap<String, Int>()
|
val map = HashMap<String, Int>()
|
||||||
val rs = stmt.executeQuery("SELECT message_type, COUNT(message_id) FROM messages WHERE " + c.query + " GROUP BY message_type")
|
val rs = executeQuery("SELECT message_type, COUNT(message_id) FROM messages WHERE " + c.query + " GROUP BY message_type")
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
map.put("count.messages.type." + rs.getString(1), rs.getInt(2))
|
map.put("count.messages.type." + rs.getString(1), rs.getInt(2))
|
||||||
}
|
}
|
||||||
@ -540,7 +549,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
fun getMessageMediaTypesWithCount(c: AbstractChat): HashMap<String, Int> {
|
fun getMessageMediaTypesWithCount(c: AbstractChat): HashMap<String, Int> {
|
||||||
val map = HashMap<String, Int>()
|
val map = HashMap<String, Int>()
|
||||||
var count = 0
|
var count = 0
|
||||||
val rs = stmt.executeQuery("SELECT media_type, COUNT(message_id) FROM messages WHERE " + c.query + " GROUP BY media_type")
|
val rs = executeQuery("SELECT media_type, COUNT(message_id) FROM messages WHERE " + c.query + " GROUP BY media_type")
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
var type = rs.getString(1) ?: "null"
|
var type = rs.getString(1) ?: "null"
|
||||||
if (type != "null") count += rs.getInt(2)
|
if (type != "null") count += rs.getInt(2)
|
||||||
@ -558,7 +567,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
// Set a default value for 'me' to fix the charts for channels - cause I
|
// Set a default value for 'me' to fix the charts for channels - cause I
|
||||||
// possibly didn't send any messages there.
|
// possibly didn't send any messages there.
|
||||||
map.put("authors.count.me", 0)
|
map.put("authors.count.me", 0)
|
||||||
val rs = stmt.executeQuery("SELECT users.id, users.first_name, users.last_name, users.username, COUNT(messages.id) " +
|
val rs = executeQuery("SELECT users.id, users.first_name, users.last_name, users.username, COUNT(messages.id) " +
|
||||||
"FROM messages " +
|
"FROM messages " +
|
||||||
"LEFT JOIN users ON users.id=messages.sender_id " +
|
"LEFT JOIN users ON users.id=messages.sender_id " +
|
||||||
"WHERE " + c.query + " GROUP BY sender_id")
|
"WHERE " + c.query + " GROUP BY sender_id")
|
||||||
@ -590,7 +599,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
|
|
||||||
fun getMessageTimesMatrix(c: AbstractChat): Array<IntArray> {
|
fun getMessageTimesMatrix(c: AbstractChat): Array<IntArray> {
|
||||||
val result = Array(7) { IntArray(24) }
|
val result = Array(7) { IntArray(24) }
|
||||||
val rs = stmt.executeQuery("SELECT STRFTIME('%w', time, 'unixepoch') as DAY, " +
|
val rs = executeQuery("SELECT STRFTIME('%w', time, 'unixepoch') as DAY, " +
|
||||||
"STRFTIME('%H', time, 'unixepoch') AS hour, " +
|
"STRFTIME('%H', time, 'unixepoch') AS hour, " +
|
||||||
"COUNT(id) FROM messages WHERE " + c.query + " GROUP BY hour, day " +
|
"COUNT(id) FROM messages WHERE " + c.query + " GROUP BY hour, day " +
|
||||||
"ORDER BY hour, day")
|
"ORDER BY hour, day")
|
||||||
@ -616,7 +625,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
query = query + " LIMIT ${limit} OFFSET ${offset}"
|
query = query + " LIMIT ${limit} OFFSET ${offset}"
|
||||||
}
|
}
|
||||||
|
|
||||||
val rs = stmt.executeQuery(query)
|
val rs = executeQuery(query)
|
||||||
|
|
||||||
val format_time = SimpleDateFormat("HH:mm:ss")
|
val format_time = SimpleDateFormat("HH:mm:ss")
|
||||||
val format_date = SimpleDateFormat("d MMM yy")
|
val format_date = SimpleDateFormat("d MMM yy")
|
||||||
|
Loading…
Reference in New Issue
Block a user