diff options
Diffstat (limited to 'db.c')
-rw-r--r-- | db.c | 31 |
1 files changed, 31 insertions, 0 deletions
@@ -85,6 +85,37 @@ bool db_is_member(i64 roomid,i64 userid){ return success; } +struct db_user_list db_get_members(i64 roomid){ + sqlite3_stmt *stmt; + SQLITE(prepare_v2,database, + "select U.id, U.name " + "from Users as U, Members as M " + "where M.room = ? and M.user = U.id" + ,-1,&stmt,NULL); + SQLITE(bind_int64,stmt,1,roomid); + + struct db_user_list ul; + i64 cap=4; + ul.count=0; + ul.list=malloc(cap,struct db_name_id); + + int ret; + while((ret=sqlite3_step(stmt))==SQLITE_ROW){ + if(ul.count==cap){ + cap*=2; + ul.list=realloc(ul.list,cap,struct db_name_id); + } + ul.list[ul.count].id=sqlite3_column_int64(stmt,0); + ul.list[ul.count].name=strdup((const char*)sqlite3_column_text(stmt,1)); + ul.count++; + } + + if(ret!=SQLITE_DONE)die_sqlite("sqlite3_step"); + SQLITE(finalize,stmt); + + return ul; +} + i64 db_find_room(const char *name){ sqlite3_stmt *stmt; SQLITE(prepare_v2,database,"select id from Rooms where name = ?",-1,&stmt,NULL); |