aboutsummaryrefslogtreecommitdiff
path: root/db.c
diff options
context:
space:
mode:
authorTom Smeding <tom.smeding@gmail.com>2020-07-28 16:05:47 +0200
committerTom Smeding <tom.smeding@gmail.com>2020-07-28 16:07:43 +0200
commit1d28744e532ac73ddff0c6fa829949497b25d4b6 (patch)
tree78cf2b126a75b39dc5a98b6bde5f0a7eb2e2c8ec /db.c
parenta9413077b5839b98fc791fcadbae4f8fa1c3743f (diff)
server: Implement get_message
Diffstat (limited to 'db.c')
-rw-r--r--db.c37
1 files changed, 31 insertions, 6 deletions
diff --git a/db.c b/db.c
index 416b9d3..d94b13c 100644
--- a/db.c
+++ b/db.c
@@ -460,16 +460,37 @@ struct db_message_list db_get_messages_before(i64 roomid,i64 count,i64 beforeid)
return ml;
}
-bool db_message_exists(i64 roomid, i64 msgid) {
+struct db_message db_get_message(i64 msgid) {
sqlite3_stmt *stmt;
SQLITE(prepare_v2, database,
- "select id from Messages where id = ? and room = ?",
+ "select room, user, time, reply, message "
+ "from Messages where id = ?",
-1, &stmt, NULL);
SQLITE(bind_int64, stmt, 1, msgid);
- SQLITE(bind_int64, stmt, 2, roomid);
- bool success = sqlite3_step(stmt) == SQLITE_ROW;
+
+ struct db_message msg;
+ if (sqlite3_step(stmt) == SQLITE_ROW) {
+ msg.msgid = msgid;
+ msg.roomid = sqlite3_column_int64(stmt,0);
+ msg.userid = sqlite3_column_int64(stmt,1);
+ msg.timestamp = sqlite3_column_int64(stmt,2);
+ if (sqlite3_column_type(stmt, 3) == SQLITE_INTEGER) {
+ msg.replyid = sqlite3_column_int64(stmt, 3);
+ } else {
+ msg.replyid = -1; // NULL, not a reply
+ }
+ msg.message = strdup((const char*)sqlite3_column_text(stmt, 4));
+ } else {
+ msg.msgid = -1;
+ msg.roomid = -1;
+ msg.userid = -1;
+ msg.timestamp = -1;
+ msg.replyid = -1;
+ msg.message = NULL;
+ }
+
SQLITE(finalize, stmt);
- return success;
+ return msg;
}
@@ -493,9 +514,13 @@ void db_nullify_user_list(struct db_user_list ul){
ul.list=NULL;
}
+void db_nullify_message(struct db_message msg){
+ if(msg.message)free(msg.message);
+}
+
void db_nullify_message_list(struct db_message_list ml){
for(i64 i=0;i<ml.count;i++){
- free(ml.list[i].message);
+ db_nullify_message(ml.list[i]);
}
if(ml.list)free(ml.list);
ml.list=NULL;