From add6b39aece179a0e0ad425af72b8a043a0d3188 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Fri, 17 Mar 2017 19:57:12 +0100 Subject: History querying --- db.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'db.c') diff --git a/db.c b/db.c index f89e628..983080f 100644 --- a/db.c +++ b/db.c @@ -244,6 +244,41 @@ void db_create_message(i64 roomid,i64 userid,i64 timestamp,const char *message){ SQLITE(finalize,stmt); } +struct db_message_list db_get_messages(i64 roomid,i64 count){ + sqlite3_stmt *stmt; + SQLITE(prepare_v2,database, + "select user, time, message " + "from Messages " + "where room = ? " + "order by time desc " + "limit ?" + ,-1,&stmt,NULL); + SQLITE(bind_int64,stmt,1,roomid); + SQLITE(bind_int64,stmt,2,count); + + struct db_message_list ml; + i64 cap=count; + ml.count=0; + ml.list=malloc(cap,struct db_message); + + int ret; + while((ret=sqlite3_step(stmt))==SQLITE_ROW){ + if(ml.count==cap){ + die("sqlite gave too many rows while 'limit %" PRIi64 "' was present",count); + } + ml.list[ml.count].roomid=roomid; + ml.list[ml.count].userid=sqlite3_column_int64(stmt,0); + ml.list[ml.count].timestamp=sqlite3_column_int64(stmt,1); + ml.list[ml.count].message=strdup((const char*)sqlite3_column_text(stmt,2)); + ml.count++; + } + + if(ret!=SQLITE_DONE)die_sqlite("sqlite3_step"); + SQLITE(finalize,stmt); + + return ml; +} + void db_nullify_name_id(struct db_name_id ni){ if(ni.name)free(ni.name); @@ -264,3 +299,11 @@ void db_nullify_user_list(struct db_user_list ul){ if(ul.list)free(ul.list); ul.list=NULL; } + +void db_nullify_message_list(struct db_message_list ml){ + for(i64 i=0;i