From: pk910 Date: Sun, 30 Oct 2011 12:40:29 +0000 (+0100) Subject: cache user_id for most used DBHelper functions X-Git-Tag: v5.3~238 X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=commitdiff_plain;h=288f1c2e43f8322e99947a521190170153ba56c4 cache user_id for most used DBHelper functions --- diff --git a/src/DBHelper.c b/src/DBHelper.c index a55b8c6..43b984b 100644 --- a/src/DBHelper.c +++ b/src/DBHelper.c @@ -28,7 +28,7 @@ void _loadUserSettings(struct UserNode *user) { MYSQL_RES *res; MYSQL_ROW row; - printf_mysql_query("SELECT `user_lang`, `user_reply_privmsg`, `user_god` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth)); + printf_mysql_query("SELECT `user_lang`, `user_reply_privmsg`, `user_god`, `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth)); res = mysql_use(); if ((row = mysql_fetch_row(res)) != NULL) { user->language = get_language_by_tag(row[0]); @@ -37,6 +37,8 @@ void _loadUserSettings(struct UserNode *user) { user->flags |= USERFLAG_REPLY_PRIVMSG; if(strcmp(row[2], "0")) user->flags |= USERFLAG_GOD_MODE; + user->user_id = atoi(row[3]); + user->flags |= USERFLAG_HAS_USERID; } else user->language = get_default_language(); user->flags |= USERFLAG_LOADED_SETTINGS; @@ -54,19 +56,27 @@ int getChannelAccess(struct UserNode *user, struct ChanNode *chan) { MYSQL_RES *res; MYSQL_ROW row; int caccess = 0; - printf_mysql_query("SELECT `user_id`, `user_access`, `user_god` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth)); - res = mysql_use(); - if ((row = mysql_fetch_row(res)) != NULL) { - printf_mysql_query("SELECT `chanuser_access`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_uid` = '%s' AND `chanuser_cid` = '%d'", row[0], chan->channel_id); + int userid; + if(user->flags & USERFLAG_HAS_USERID) + userid = user->user_id; + else { + printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth)); res = mysql_use(); if ((row = mysql_fetch_row(res)) != NULL) { - int cflags = atoi(row[1]); - if(!(cflags & DB_CHANUSER_SUSPENDED) && atoi(row[0]) > caccess) - caccess = atoi(row[0]); - } - return caccess; + userid = atoi(row[0]); + user->user_id = userid; + user->flags |= USERFLAG_HAS_USERID; + } else + return 0; } - return 0; + printf_mysql_query("SELECT `chanuser_access`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_uid` = '%d' AND `chanuser_cid` = '%d'", userid, chan->channel_id); + res = mysql_use(); + if ((row = mysql_fetch_row(res)) != NULL) { + int cflags = atoi(row[1]); + if(!(cflags & DB_CHANUSER_SUSPENDED) && atoi(row[0]) > caccess) + caccess = atoi(row[0]); + } + return caccess; } char *getChanDefault(char *channel_setting) { @@ -91,10 +101,21 @@ int checkChannelAccess(struct UserNode *user, struct ChanNode *chan, char *chann if(require_access == 0) return 1; if(!(user->flags & USERFLAG_ISAUTHED)) return 0; int caccess = 0; - printf_mysql_query("SELECT `user_id`, `user_access`, `user_god` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth)); - res = mysql_use(); - if ((row = mysql_fetch_row(res)) != NULL) { - printf_mysql_query("SELECT `chanuser_access`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_uid` = '%s' AND `chanuser_cid` = '%d'", row[0], chan->channel_id); + int userid; + if(user->flags & USERFLAG_HAS_USERID) + userid = user->user_id; + else { + printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth)); + res = mysql_use(); + if ((row = mysql_fetch_row(res)) != NULL) { + userid = atoi(row[0]); + user->user_id = userid; + user->flags |= USERFLAG_HAS_USERID; + } else + userid = -1; + } + if(userid > -1) { + printf_mysql_query("SELECT `chanuser_access`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_uid` = '%d' AND `chanuser_cid` = '%d'", userid, chan->channel_id); res = mysql_use(); if ((row = mysql_fetch_row(res)) != NULL) { int cflags = atoi(row[1]); diff --git a/src/UserNode.h b/src/UserNode.h index 688fb38..7bc752c 100644 --- a/src/UserNode.h +++ b/src/UserNode.h @@ -27,6 +27,7 @@ #define USERFLAG_LOADED_SETTINGS 0x0040 #define USERFLAG_REPLY_PRIVMSG 0x0080 #define USERFLAG_GOD_MODE 0x0100 +#define USERFLAG_HAS_USERID 0x0200 #define USERFLAG_SCRIPTFLAG1 0x40000000 #define USERFLAG_SCRIPTFLAG2 0x80000000 @@ -45,6 +46,8 @@ struct UserNode { struct ChanUser *channel; struct language *language; + int user_id; + struct UserNode *next; };