diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index ea6cecfbacd..3c573f644ef 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -89,6 +89,10 @@ if (config.log_pda) diary << "\[[time_stamp()]]CHAT: [text]" +/proc/log_sql(text) + if(config.sql_enabled) + diary << "\[[time_stamp()]]SQL: [text]" + //This replaces world.log so it displays both in DD and the file /proc/log_world(text) if(config && config.log_runtimes) diff --git a/code/__HELPERS/bandetect.dm b/code/__HELPERS/bandetect.dm index f7887d32615..9a43f303729 100644 --- a/code/__HELPERS/bandetect.dm +++ b/code/__HELPERS/bandetect.dm @@ -2,14 +2,13 @@ /client/proc/join_date_check(y,m,d) - var/DBQuery/query = dbcon.NewQuery("SELECT DATEDIFF(Now(),'[y]-[m]-[d]')") + var/DBQuery/query_datediff = dbcon.NewQuery("SELECT DATEDIFF(Now(),'[y]-[m]-[d]')") - if(!query.Execute()) - log_world("SQL ERROR doing datediff. Error : \[[query.ErrorMsg()]\]\n") + if(!query_datediff.Execute()) return FALSE - if(query.NextRow()) - var/diff = text2num(query.item[1]) + if(query_datediff.NextRow()) + var/diff = text2num(query_datediff.item[1]) if(config.use_account_age_for_jobs) player_age = max(0,diff) //So job code soesn't freak out if they are time traveling. if(diff < YOUNG) diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index a5aead43aff..c450ec3d1cc 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -71,10 +71,11 @@ computerid = bancid ip = banip - var/DBQuery/query = dbcon.NewQuery("SELECT id FROM [format_table_name("player")] WHERE ckey = '[ckey]'") - query.Execute() + var/DBQuery/query_add_ban_get_id = dbcon.NewQuery("SELECT id FROM [format_table_name("player")] WHERE ckey = '[ckey]'") + if(!query_add_ban_get_id.warn_execute()) + return var/validckey = 0 - if(query.NextRow()) + if(query_add_ban_get_id.NextRow()) validckey = 1 if(!validckey) if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key))) @@ -112,17 +113,19 @@ reason = sanitizeSQL(reason) if(maxadminbancheck) - var/DBQuery/adm_query = dbcon.NewQuery("SELECT count(id) AS num FROM [format_table_name("ban")] WHERE (a_ckey = '[a_ckey]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") - adm_query.Execute() - if(adm_query.NextRow()) - var/adm_bans = text2num(adm_query.item[1]) + var/DBQuery/query_check_adminban_amt = dbcon.NewQuery("SELECT count(id) AS num FROM [format_table_name("ban")] WHERE (a_ckey = '[a_ckey]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") + if(!query_check_adminban_amt.warn_execute()) + return + if(query_check_adminban_amt.NextRow()) + var/adm_bans = text2num(query_check_adminban_amt.item[1]) if(adm_bans >= MAX_ADMIN_BANS_PER_ADMIN) usr << "You already logged [MAX_ADMIN_BANS_PER_ADMIN] admin ban(s) or more. Do not abuse this function!" return var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON('[world.internet_address]'), '[world.port]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')" - var/DBQuery/query_insert = dbcon.NewQuery(sql) - query_insert.Execute() + var/DBQuery/query_add_ban = dbcon.NewQuery(sql) + if(!query_add_ban.warn_execute()) + return usr << "Ban saved to database." message_admins("[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database.",1) @@ -187,10 +190,11 @@ var/ban_id var/ban_number = 0 //failsafe - var/DBQuery/query = dbcon.NewQuery(sql) - query.Execute() - while(query.NextRow()) - ban_id = query.item[1] + var/DBQuery/query_unban_get_id = dbcon.NewQuery(sql) + if(!query_unban_get_id.warn_execute()) + return + while(query_unban_get_id.NextRow()) + ban_id = query_unban_get_id.item[1] ban_number++; if(ban_number == 0) @@ -218,18 +222,19 @@ usr << "Cancelled" return - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") - query.Execute() + var/DBQuery/query_edit_ban_get_details = dbcon.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") + if(!query_edit_ban_get_details.warn_execute()) + return var/eckey = usr.ckey //Editing admin ckey var/pckey //(banned) Player ckey var/duration //Old duration var/reason //Old reason - if(query.NextRow()) - pckey = query.item[1] - duration = query.item[2] - reason = query.item[3] + if(query_edit_ban_get_details.NextRow()) + pckey = query_edit_ban_get_details.item[1] + duration = query_edit_ban_get_details.item[2] + reason = query_edit_ban_get_details.item[3] else usr << "Invalid ban id. Contact the database admin" return @@ -246,8 +251,9 @@ usr << "Cancelled" return - var/DBQuery/update_query = dbcon.NewQuery("UPDATE [format_table_name("ban")] SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
') WHERE id = [banid]") - update_query.Execute() + var/DBQuery/query_edit_ban_reason = dbcon.NewQuery("UPDATE [format_table_name("ban")] SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
') WHERE id = [banid]") + if(!query_edit_ban_reason.warn_execute()) + return message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s reason from [reason] to [value]",1) if("duration") if(!value) @@ -256,9 +262,10 @@ usr << "Cancelled" return - var/DBQuery/update_query = dbcon.NewQuery("UPDATE [format_table_name("ban")] SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
'), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") + var/DBQuery/query_edit_ban_duration = dbcon.NewQuery("UPDATE [format_table_name("ban")] SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
'), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") + if(!query_edit_ban_duration.warn_execute()) + return message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s duration from [duration] to [value]",1) - update_query.Execute() if("unban") if(alert("Unban [pckey]?", "Unban?", "Yes", "No") == "Yes") DB_ban_unban_by_id(banid) @@ -283,10 +290,11 @@ var/ban_number = 0 //failsafe var/pckey - var/DBQuery/query = dbcon.NewQuery(sql) - query.Execute() - while(query.NextRow()) - pckey = query.item[1] + var/DBQuery/query_unban_get_ckey = dbcon.NewQuery(sql) + if(!query_unban_get_ckey.warn_execute()) + return + while(query_unban_get_ckey.NextRow()) + pckey = query_unban_get_ckey.item[1] ban_number++; if(ban_number == 0) @@ -305,12 +313,11 @@ var/unban_ip = src.owner:address var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = INET_ATON('[unban_ip]') WHERE id = [id]" + var/DBQuery/query_unban = dbcon.NewQuery(sql_update) + if(!query_unban.warn_execute()) + return message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.",1) - var/DBQuery/query_update = dbcon.NewQuery(sql_update) - query_update.Execute() - - /client/proc/DB_ban_panel() set category = "Admin" set name = "Banning Panel" @@ -407,23 +414,24 @@ if(playerckey) playersearch = "AND ckey = '[playerckey]' " - var/DBQuery/select_query = dbcon.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits FROM [format_table_name("ban")] WHERE 1 [playersearch] [adminsearch] ORDER BY bantime DESC") - select_query.Execute() + var/DBQuery/query_search_bans = dbcon.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits FROM [format_table_name("ban")] WHERE 1 [playersearch] [adminsearch] ORDER BY bantime DESC") + if(!query_search_bans.warn_execute()) + return - while(select_query.NextRow()) - var/banid = select_query.item[1] - var/bantime = select_query.item[2] - var/bantype = select_query.item[3] - var/reason = select_query.item[4] - var/job = select_query.item[5] - var/duration = select_query.item[6] - var/expiration = select_query.item[7] - var/ckey = select_query.item[8] - var/ackey = select_query.item[9] - var/unbanned = select_query.item[10] - var/unbanckey = select_query.item[11] - var/unbantime = select_query.item[12] - var/edits = select_query.item[13] + while(query_search_bans.NextRow()) + var/banid = query_search_bans.item[1] + var/bantime = query_search_bans.item[2] + var/bantype = query_search_bans.item[3] + var/reason = query_search_bans.item[4] + var/job = query_search_bans.item[5] + var/duration = query_search_bans.item[6] + var/expiration = query_search_bans.item[7] + var/ckey = query_search_bans.item[8] + var/ackey = query_search_bans.item[9] + var/unbanned = query_search_bans.item[10] + var/unbanckey = query_search_bans.item[11] + var/unbantime = query_search_bans.item[12] + var/edits = query_search_bans.item[13] var/lcolor = blcolor var/dcolor = bdcolor diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index b5e6f8f7b53..9e13aa885b9 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -74,18 +74,17 @@ if(computer_id) cidquery = " OR computerid = '[computer_id]' " - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") - - query.Execute() - - while(query.NextRow()) - var/pckey = query.item[1] - var/ackey = query.item[2] - var/reason = query.item[3] - var/expiration = query.item[4] - var/duration = query.item[5] - var/bantime = query.item[6] - var/bantype = query.item[7] + var/DBQuery/query_ban_check = dbcon.NewQuery("SELECT ckey, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") + if(!query_ban_check.Execute()) + return + while(query_ban_check.NextRow()) + var/pckey = query_ban_check.item[1] + var/ackey = query_ban_check.item[2] + var/reason = query_ban_check.item[3] + var/expiration = query_ban_check.item[4] + var/duration = query_ban_check.item[5] + var/bantime = query_ban_check.item[6] + var/bantype = query_ban_check.item[7] if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") //admin bans MUST match on ckey to prevent cid-spoofing attacks // as well as dynamic ip abuse diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index b4816d87eab..7e76c4ad8e7 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -134,11 +134,12 @@ var/list/admin_ranks = list() //list of all admin_rank datums load_admin_ranks() return - var/DBQuery/query = dbcon.NewQuery("SELECT rank, flags FROM [format_table_name("admin_ranks")]") - query.Execute() - while(query.NextRow()) - var/rank_name = ckeyEx(query.item[1]) - var/flags = query.item[2] + var/DBQuery/query_load_admin_ranks = dbcon.NewQuery("SELECT rank, flags FROM [format_table_name("admin_ranks")]") + if(!query_load_admin_ranks.Execute()) + return + while(query_load_admin_ranks.NextRow()) + var/rank_name = ckeyEx(query_load_admin_ranks.item[1]) + var/flags = query_load_admin_ranks.item[2] if(istext(flags)) flags = text2num(flags) var/datum/admin_rank/R = new(rank_name, flags) @@ -208,11 +209,12 @@ var/list/admin_ranks = list() //list of all admin_rank datums load_admins() return - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, rank FROM [format_table_name("admin")]") - query.Execute() - while(query.NextRow()) - var/ckey = ckey(query.item[1]) - var/rank = ckeyEx(query.item[2]) + var/DBQuery/query_load_admins = dbcon.NewQuery("SELECT ckey, rank FROM [format_table_name("admin")]") + if(!query_load_admins.Execute()) + return + while(query_load_admins.NextRow()) + var/ckey = ckey(query_load_admins.item[1]) + var/rank = ckeyEx(query_load_admins.item[2]) if(target && ckey != target) continue @@ -378,5 +380,5 @@ var/list/admin_ranks = list() //list of all admin_rank datums var/sql_ckey = sanitizeSQL(ckey) var/sql_admin_rank = sanitizeSQL(newrank) - var/DBQuery/query_update = dbcon.NewQuery("UPDATE [format_table_name("player")] SET lastadminrank = '[sql_admin_rank]' WHERE ckey = '[sql_ckey]'") - query_update.Execute() + var/DBQuery/query_admin_rank_update = dbcon.NewQuery("UPDATE [format_table_name("player")] SET lastadminrank = '[sql_admin_rank]' WHERE ckey = '[sql_ckey]'") + query_admin_rank_update.Execute() diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index e824428106a..ea4a657f2d2 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -4,12 +4,11 @@ return 0 if(!M.client) //no cache. fallback to a DBQuery - var/DBQuery/query = dbcon.NewQuery("SELECT reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(M.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[sanitizeSQL(rank)]'") - if(!query.Execute()) - log_game("SQL ERROR obtaining jobbans. Error : \[[query.ErrorMsg()]\]\n") + var/DBQuery/query_jobban_check_ban = dbcon.NewQuery("SELECT reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(M.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[sanitizeSQL(rank)]'") + if(!query_jobban_check_ban.warn_execute()) return - if(query.NextRow()) - var/reason = query.item[1] + if(query_jobban_check_ban.NextRow()) + var/reason = query_jobban_check_ban.item[1] return reason ? reason : 1 //we don't want to return "" if there is no ban reason, as that would evaluate to false else return 0 @@ -25,12 +24,11 @@ /proc/jobban_buildcache(client/C) if(C && istype(C)) C.jobbancache = list() - var/DBQuery/query = dbcon.NewQuery("SELECT job, reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(C.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") - if(!query.Execute()) - log_game("SQL ERROR obtaining jobbans. Error : \[[query.ErrorMsg()]\]\n") + var/DBQuery/query_jobban_build_cache = dbcon.NewQuery("SELECT job, reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(C.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") + if(!query_jobban_build_cache.warn_execute()) return - while(query.NextRow()) - C.jobbancache[query.item[1]] = query.item[2] + while(query_jobban_build_cache.NextRow()) + C.jobbancache[query_jobban_build_cache.item[1]] = query_jobban_build_cache.item[2] /proc/ban_unban_log_save(var/formatted_log) text2file(formatted_log,"data/ban_unban_log.txt") diff --git a/code/modules/admin/create_poll.dm b/code/modules/admin/create_poll.dm index 9c03cc4d57a..336a495acd9 100644 --- a/code/modules/admin/create_poll.dm +++ b/code/modules/admin/create_poll.dm @@ -9,15 +9,11 @@ var/returned = create_poll_function() if(returned) var/DBQuery/query_check_option = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [returned]") - if(!query_check_option.Execute()) - var/err = query_check_option.ErrorMsg() - log_game("SQL ERROR obtaining id from poll_option table. Error : \[[err]\]\n") + if(!query_check_option.warn_execute()) return if(query_check_option.NextRow()) var/DBQuery/query_log_get = dbcon.NewQuery("SELECT polltype, question, adminonly FROM [format_table_name("poll_question")] WHERE id = [returned]") - if(!query_log_get.Execute()) - var/err = query_log_get.ErrorMsg() - log_game("SQL ERROR obtaining polltype, question, adminonly from poll_question table. Error : \[[err]\]\n") + if(!query_log_get.warn_execute()) return if(query_log_get.NextRow()) var/polltype = query_log_get.item[1] @@ -28,9 +24,7 @@ else src << "Poll question created without any options, poll will be deleted." var/DBQuery/query_del_poll = dbcon.NewQuery("DELETE FROM [format_table_name("poll_question")] WHERE id = [returned]") - if(!query_del_poll.Execute()) - var/err = query_del_poll.ErrorMsg() - log_game("SQL ERROR deleting poll question [returned]. Error : \[[err]\]\n") + if(!query_del_poll.warn_execute()) return /client/proc/create_poll_function() @@ -58,9 +52,7 @@ return endtime = sanitizeSQL(endtime) var/DBQuery/query_validate_time = dbcon.NewQuery("SELECT STR_TO_DATE('[endtime]','%Y-%c-%d %T')") - if(!query_validate_time.Execute()) - var/err = query_validate_time.ErrorMsg() - log_game("SQL ERROR validating endtime. Error : \[[err]\]\n") + if(!query_validate_time.warn_execute()) return if(query_validate_time.NextRow()) endtime = query_validate_time.item[1] @@ -68,9 +60,7 @@ src << "Datetime entered is invalid." return var/DBQuery/query_time_later = dbcon.NewQuery("SELECT TIMESTAMP('[endtime]') < NOW()") - if(!query_time_later.Execute()) - var/err = query_time_later.ErrorMsg() - log_game("SQL ERROR comparing endtime to NOW(). Error : \[[err]\]\n") + if(!query_time_later.warn_execute()) return if(query_time_later.NextRow()) var/checklate = text2num(query_time_later.item[1]) @@ -99,9 +89,7 @@ return question = sanitizeSQL(question) var/DBQuery/query_polladd_question = dbcon.NewQuery("INSERT INTO [format_table_name("poll_question")] (polltype, starttime, endtime, question, adminonly, multiplechoiceoptions, createdby_ckey, createdby_ip, dontshow) VALUES ('[polltype]', '[starttime]', '[endtime]', '[question]', '[adminonly]', '[choice_amount]', '[sql_ckey]', INET_ATON('[address]'), '[dontshow]')") - if(!query_polladd_question.Execute()) - var/err = query_polladd_question.ErrorMsg() - log_game("SQL ERROR adding new poll question to table. Error : \[[err]\]\n") + if(!query_polladd_question.warn_execute()) return if(polltype == POLLTYPE_TEXT) log_admin("[key_name(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"] - Question: [question]") @@ -109,9 +97,7 @@ return var/pollid = 0 var/DBQuery/query_get_id = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE question = '[question]' AND starttime = '[starttime]' AND endtime = '[endtime]' AND createdby_ckey = '[sql_ckey]' AND createdby_ip = INET_ATON('[address]')") - if(!query_get_id.Execute()) - var/err = query_get_id.ErrorMsg() - log_game("SQL ERROR obtaining id from poll_question table. Error : \[[err]\]\n") + if(!query_get_id.warn_execute()) return if(query_get_id.NextRow()) pollid = query_get_id.item[1] @@ -161,9 +147,7 @@ else if(descmax == null) return pollid var/DBQuery/query_polladd_option = dbcon.NewQuery("INSERT INTO [format_table_name("poll_option")] (pollid, text, percentagecalc, minval, maxval, descmin, descmid, descmax) VALUES ('[pollid]', '[option]', '[percentagecalc]', '[minval]', '[maxval]', '[descmin]', '[descmid]', '[descmax]')") - if(!query_polladd_option.Execute()) - var/err = query_polladd_option.ErrorMsg() - log_game("SQL ERROR adding new poll option to table. Error : \[[err]\]\n") + if(!query_polladd_option.warn_execute()) return pollid switch(alert(" ",,"Add option","Finish", "Cancel")) if("Add option") diff --git a/code/modules/admin/ipintel.dm b/code/modules/admin/ipintel.dm index d6c02ee1e59..d4e354db09b 100644 --- a/code/modules/admin/ipintel.dm +++ b/code/modules/admin/ipintel.dm @@ -34,7 +34,7 @@ return cachedintel if(dbcon.Connect()) - var/DBQuery/query = dbcon.NewQuery({" + var/DBQuery/query_get_ip_intel = dbcon.NewQuery({" SELECT date, intel, TIMESTAMPDIFF(MINUTE,date,NOW()) FROM [format_table_name("ipintel")] WHERE @@ -49,22 +49,22 @@ date + INTERVAL [config.ipintel_save_bad] HOUR > NOW() )) "}) - query.Execute() - if (query.NextRow()) + if(!query_get_ip_intel.Execute()) + return + if (query_get_ip_intel.NextRow()) res.cache = TRUE - res.cachedate = query.item[1] - res.intel = text2num(query.item[2]) - res.cacheminutesago = text2num(query.item[3]) - res.cacherealtime = world.realtime - (text2num(query.item[3])*10*60) + res.cachedate = query_get_ip_intel.item[1] + res.intel = text2num(query_get_ip_intel.item[2]) + res.cacheminutesago = text2num(query_get_ip_intel.item[3]) + res.cacherealtime = world.realtime - (text2num(query_get_ip_intel.item[3])*10*60) SSipintel.cache[ip] = res return res.intel = ip_intel_query(ip) if (updatecache && res.intel >= 0) SSipintel.cache[ip] = res if(dbcon.Connect()) - var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("ipintel")] (ip, intel) VALUES (INET_ATON('[ip]'), [res.intel]) ON DUPLICATE KEY UPDATE intel = VALUES(intel), date = NOW()") - query.Execute() - return + var/DBQuery/query_add_ip_intel = dbcon.NewQuery("INSERT INTO [format_table_name("ipintel")] (ip, intel) VALUES (INET_ATON('[ip]'), [res.intel]) ON DUPLICATE KEY UPDATE intel = VALUES(intel), date = NOW()") + query_add_ip_intel.Execute() diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm index 89a0a5d703e..939fd13f641 100644 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ b/code/modules/admin/permissionverbs/permissionedit.dm @@ -75,27 +75,32 @@ if(!istext(adm_ckey) || !istext(new_rank)) return - var/DBQuery/select_query = dbcon.NewQuery("SELECT id FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'") - select_query.Execute() + var/DBQuery/query_get_admin = dbcon.NewQuery("SELECT id FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'") + if(!query_get_admin.warn_execute()) + return var/new_admin = 1 var/admin_id - while(select_query.NextRow()) + while(query_get_admin.NextRow()) new_admin = 0 - admin_id = text2num(select_query.item[1]) + admin_id = text2num(query_get_admin.item[1]) if(new_admin) - var/DBQuery/insert_query = dbcon.NewQuery("INSERT INTO `[format_table_name("admin")]` (`id`, `ckey`, `rank`, `level`, `flags`) VALUES (null, '[adm_ckey]', '[new_rank]', -1, 0)") - insert_query.Execute() - var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');") - log_query.Execute() + var/DBQuery/query_add_admin = dbcon.NewQuery("INSERT INTO `[format_table_name("admin")]` (`id`, `ckey`, `rank`, `level`, `flags`) VALUES (null, '[adm_ckey]', '[new_rank]', -1, 0)") + if(!query_add_admin.warn_execute()) + return + var/DBQuery/query_add_admin_log = dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');") + if(!query_add_admin_log.warn_execute()) + return usr << "New admin added." else if(!isnull(admin_id) && isnum(admin_id)) - var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `[format_table_name("admin")]` SET rank = '[new_rank]' WHERE id = [admin_id]") - insert_query.Execute() - var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');") - log_query.Execute() + var/DBQuery/query_change_admin = dbcon.NewQuery("UPDATE `[format_table_name("admin")]` SET rank = '[new_rank]' WHERE id = [admin_id]") + if(!query_change_admin.warn_execute()) + return + var/DBQuery/query_change_admin_log = dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');") + if(!query_change_admin_log.warn_execute()) + return usr << "Admin rank changed." @@ -114,17 +119,19 @@ if(!adm_ckey || !istext(adm_ckey) || !isnum(new_permission)) return - var/DBQuery/select_query = dbcon.NewQuery("SELECT id, flags FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'") - select_query.Execute() + var/DBQuery/query_get_perms = dbcon.NewQuery("SELECT id, flags FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'") + if(!query_get_perms.warn_execute()) + return var/admin_id - while(select_query.NextRow()) - admin_id = text2num(select_query.item[1]) + while(query_get_perms.NextRow()) + admin_id = text2num(query_get_perms.item[1]) if(!admin_id) return - var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `[format_table_name("admin")]` SET flags = [new_permission] WHERE id = [admin_id]") - insert_query.Execute() - var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edit permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');") - log_query.Execute() + var/DBQuery/query_change_perms = dbcon.NewQuery("UPDATE `[format_table_name("admin")]` SET flags = [new_permission] WHERE id = [admin_id]") + if(!query_change_perms.warn_execute()) + return + var/DBQuery/query_change_perms_log = dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edit permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');") + query_change_perms_log.warn_execute() diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 99d082feb41..23139ce67b2 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -10,9 +10,7 @@ return new_ckey = sanitizeSQL(new_ckey) var/DBQuery/query_find_ckey = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[new_ckey]'") - if(!query_find_ckey.Execute()) - var/err = query_find_ckey.ErrorMsg() - log_game("SQL ERROR obtaining ckey from player table. Error : \[[err]\]\n") + if(!query_find_ckey.warn_execute()) return if(!query_find_ckey.NextRow()) if(alert(usr, "[new_ckey] has not been seen before, are you sure you want to create a [type] for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes") @@ -47,9 +45,7 @@ else return var/DBQuery/query_create_message = dbcon.NewQuery("INSERT INTO [format_table_name("messages")] (type, targetckey, adminckey, text, timestamp, server, secret) VALUES ('[type]', '[target_ckey]', '[admin_ckey]', '[text]', '[timestamp]', '[server]', '[secret]')") - if(!query_create_message.Execute()) - var/err = query_create_message.ErrorMsg() - log_game("SQL ERROR creating new [type] in messages table. Error : \[[err]\]\n") + if(!query_create_message.warn_execute()) return if(logged) log_admin_private("[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]: [text]") @@ -70,18 +66,14 @@ var/target_ckey var/text var/DBQuery/query_find_del_message = dbcon.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id]") - if(!query_find_del_message.Execute()) - var/err = query_find_del_message.ErrorMsg() - log_game("SQL ERROR obtaining type, targetckey, adminckey text from messages table. Error : \[[err]\]\n") + if(!query_find_del_message.warn_execute()) return if(query_find_del_message.NextRow()) type = query_find_del_message.item[1] target_ckey = query_find_del_message.item[2] text = query_find_del_message.item[4] var/DBQuery/query_del_message = dbcon.NewQuery("DELETE FROM [format_table_name("messages")] WHERE id = [message_id]") - if(!query_del_message.Execute()) - var/err = query_del_message.ErrorMsg() - log_game("SQL ERROR deleting [type] from messages table. Error : \[[err]\]\n") + if(!query_del_message.warn_execute()) return if(logged) log_admin_private("[key_name(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]: [text]") @@ -99,9 +91,7 @@ if(!message_id) return var/DBQuery/query_find_edit_message = dbcon.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id]") - if(!query_find_edit_message.Execute()) - var/err = query_find_edit_message.ErrorMsg() - log_game("SQL ERROR obtaining type, targetckey, adminckey, text from messages table. Error : \[[err]\]\n") + if(!query_find_edit_message.warn_execute()) return if(query_find_edit_message.NextRow()) var/type = query_find_edit_message.item[1] @@ -115,9 +105,7 @@ new_text = sanitizeSQL(new_text) var/edit_text = sanitizeSQL("Edited by [editor_ckey] on [SQLtime()] from
[old_text]
to
[new_text]
") var/DBQuery/query_edit_message = dbcon.NewQuery("UPDATE [format_table_name("messages")] SET text = '[new_text]', lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id]") - if(!query_edit_message.Execute()) - var/err = query_edit_message.ErrorMsg() - log_game("SQL ERROR editing messages table. Error : \[[err]\]\n") + if(!query_edit_message.warn_execute()) return log_admin_private("[key_name(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from [old_text] to [new_text]") message_admins("[key_name_admin(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from
[old_text]
to
[new_text]") @@ -134,9 +122,7 @@ if(!message_id) return var/DBQuery/query_find_message_secret = dbcon.NewQuery("SELECT type, targetckey, adminckey, secret FROM [format_table_name("messages")] WHERE id = [message_id]") - if(!query_find_message_secret.Execute()) - var/err = query_find_message_secret.ErrorMsg() - log_game("SQL ERROR obtaining type, targetckey, adminckey, secret from messages table. Error : \[[err]\]\n") + if(!query_find_message_secret.warn_execute()) return if(query_find_message_secret.NextRow()) var/type = query_find_message_secret.item[1] @@ -146,9 +132,7 @@ var/editor_ckey = sanitizeSQL(usr.ckey) var/edit_text = "Made [secret ? "not secret" : "secret"] by [editor_ckey] on [SQLtime()]
" var/DBQuery/query_message_secret = dbcon.NewQuery("UPDATE [format_table_name("messages")] SET secret = NOT secret, lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id]") - if(!query_message_secret.Execute()) - var/err = query_message_secret.ErrorMsg() - log_game("SQL ERROR toggling message secrecy. Error : \[[err]\]\n") + if(!query_message_secret.warn_execute()) return log_admin_private("[key_name(usr)] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") message_admins("[key_name_admin(usr)] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") @@ -183,9 +167,7 @@ output += "|\[Filter offline clients\]" output += ruler var/DBQuery/query_get_type_messages = dbcon.NewQuery("SELECT id, targetckey, adminckey, text, timestamp, server, lasteditor FROM [format_table_name("messages")] WHERE type = '[type]'") - if(!query_get_type_messages.Execute()) - var/err = query_get_type_messages.ErrorMsg() - log_game("SQL ERROR obtaining id, targetckey, adminckey, text, timestamp, server, lasteditor from messages table. Error : \[[err]\]\n") + if(!query_get_type_messages.warn_execute()) return while(query_get_type_messages.NextRow()) var/id = query_get_type_messages.item[1] @@ -209,9 +191,7 @@ if(target_ckey) target_ckey = sanitizeSQL(target_ckey) var/DBQuery/query_get_messages = dbcon.NewQuery("SELECT type, secret, id, adminckey, text, timestamp, server, lasteditor FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' ORDER BY timestamp") - if(!query_get_messages.Execute()) - var/err = query_get_messages.ErrorMsg() - log_game("SQL ERROR obtaining type, secret, id, adminckey, text, timestamp, server, lasteditor from messages table. Error : \[[err]\]\n") + if(!query_get_messages.warn_execute()) return var/messagedata var/watchdata @@ -286,9 +266,7 @@ else search = "^[index]" var/DBQuery/query_list_messages = dbcon.NewQuery("SELECT DISTINCT targetckey FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey REGEXP '[search]' ORDER BY targetckey") - if(!query_list_messages.Execute()) - var/err = query_list_messages.ErrorMsg() - log_game("SQL ERROR obtaining distinct targetckey from messages table. Error : \[[err]\]\n") + if(!query_list_messages.warn_execute()) return while(query_list_messages.NextRow()) index_ckey = query_list_messages.item[1] @@ -311,9 +289,7 @@ proc/get_message_output(type, target_ckey) if(type == "message" || type == "watchlist entry") query += " AND targetckey = '[target_ckey]'" var/DBQuery/query_get_message_output = dbcon.NewQuery(query) - if(!query_get_message_output.Execute()) - var/err = query_get_message_output.ErrorMsg() - log_game("SQL ERROR obtaining id, adminckey, text, timestamp, lasteditor from messages table. Error : \[[err]\]\n") + if(!query_get_message_output.warn_execute()) return while(query_get_message_output.NextRow()) var/message_id = query_get_message_output.item[1] @@ -326,9 +302,7 @@ proc/get_message_output(type, target_ckey) output += "Admin message left by [admin_ckey] on [timestamp]" output += "
[text]
" var/DBQuery/query_message_read = dbcon.NewQuery("UPDATE [format_table_name("messages")] SET type = 'message sent' WHERE id = [message_id]") - if(!query_message_read.Execute()) - var/err = query_message_read.ErrorMsg() - log_game("SQL ERROR updating message type. Error : \[[err]\]\n") + if(!query_message_read.warn_execute()) return if("watchlist entry") message_admins("Notice: [key_name_admin(target_ckey)] is on the watchlist and has just connected - Reason: [text]") @@ -361,8 +335,6 @@ proc/get_message_output(type, target_ckey) var/admin_ckey = note.group[3] var/DBQuery/query_convert_time = dbcon.NewQuery("SELECT ADDTIME(STR_TO_DATE('[timestamp]','%d-%b-%Y'), '0')") if(!query_convert_time.Execute()) - var/err = query_convert_time.ErrorMsg() - log_game("SQL ERROR converting timestamp. Error : \[[err]\]\n") return if(query_convert_time.NextRow()) timestamp = query_convert_time.item[1] diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 7c4270b4eba..eda413050de 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1101,9 +1101,7 @@ else if(href_list["messageedits"]) var/message_id = sanitizeSQL("[href_list["messageedits"]]") var/DBQuery/query_get_message_edits = dbcon.NewQuery("SELECT edits FROM [format_table_name("messages")] WHERE id = '[message_id]'") - if(!query_get_message_edits.Execute()) - var/err = query_get_message_edits.ErrorMsg() - log_game("SQL ERROR obtaining edits from messages table. Error : \[[err]\]\n") + if(!query_get_message_edits.warn_execute()) return if(query_get_message_edits.NextRow()) var/edit_log = query_get_message_edits.item[1] diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index e798a5cc022..9b89cd17643 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -195,7 +195,7 @@ var/next_external_rsc = 0 sethotkeys(1) //set hoykeys from preferences (from_pref = 1) . = ..() //calls mob.Login() - + connection_time = world.time connection_realtime = world.realtime connection_timeofday = world.timeofday @@ -330,12 +330,12 @@ var/next_external_rsc = 0 var/sql_ckey = sanitizeSQL(src.ckey) - var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") - if (!query.Execute()) + var/DBQuery/query_get_client_age = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") + if(!query_get_client_age.Execute()) return - while (query.NextRow()) - player_age = text2num(query.item[2]) + while(query_get_client_age.NextRow()) + player_age = text2num(query_get_client_age.item[2]) return //no match mark it as a first connection for use in client/New() @@ -351,17 +351,18 @@ var/next_external_rsc = 0 var/sql_ckey = sanitizeSQL(ckey) - var/DBQuery/query_ip = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ip = INET_ATON('[address]') AND ckey != '[sql_ckey]'") - query_ip.Execute() + var/DBQuery/query_get_ip = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ip = INET_ATON('[address]') AND ckey != '[sql_ckey]'") + query_get_ip.Execute() related_accounts_ip = "" - while(query_ip.NextRow()) - related_accounts_ip += "[query_ip.item[1]], " + while(query_get_ip.NextRow()) + related_accounts_ip += "[query_get_ip.item[1]], " - var/DBQuery/query_cid = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE computerid = '[computer_id]' AND ckey != '[sql_ckey]'") - query_cid.Execute() + var/DBQuery/query_get_cid = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE computerid = '[computer_id]' AND ckey != '[sql_ckey]'") + if(!query_get_cid.Execute()) + return related_accounts_cid = "" - while (query_cid.NextRow()) - related_accounts_cid += "[query_cid.item[1]], " + while (query_get_cid.NextRow()) + related_accounts_cid += "[query_get_cid.item[1]], " var/admin_rank = "Player" if (src.holder && src.holder.rank) @@ -375,12 +376,14 @@ var/next_external_rsc = 0 var/sql_admin_rank = sanitizeSQL(admin_rank) - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]') ON DUPLICATE KEY UPDATE lastseen = VALUES(lastseen), ip = VALUES(ip), computerid = VALUES(computerid), lastadminrank = VALUES(lastadminrank)") - query_insert.Execute() + var/DBQuery/query_log_player = dbcon.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]') ON DUPLICATE KEY UPDATE lastseen = VALUES(lastseen), ip = VALUES(ip), computerid = VALUES(computerid), lastadminrank = VALUES(lastadminrank)") + if(!query_log_player.Execute()) + return //Logging player access - var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON('[world.internet_address]'),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]');") - query_accesslog.Execute() + + var/DBQuery/query_log_connection = dbcon.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON('[world.internet_address]'),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')") + query_log_connection.Execute() /client/proc/check_randomizer(topic) . = FALSE @@ -465,19 +468,14 @@ var/next_external_rsc = 0 //check to see if we noted them in the last day. var/DBQuery/query_get_notes = dbcon.NewQuery("SELECT id FROM [format_table_name("messages")] WHERE type = 'note' AND targetckey = '[sql_ckey]' AND adminckey = '[adminckey]' AND timestamp + INTERVAL 1 DAY < NOW()") if(!query_get_notes.Execute()) - var/err = query_get_notes.ErrorMsg() - log_game("SQL ERROR obtaining id from messages table. Error : \[[err]\]\n") return - if (query_get_notes.NextRow()) + if(query_get_notes.NextRow()) return - //regardless of above, make sure their last note is not from us, as no point in repeating the same note over and over. query_get_notes = dbcon.NewQuery("SELECT adminckey FROM [format_table_name("messages")] WHERE targetckey = '[sql_ckey]' ORDER BY timestamp DESC LIMIT 1") if(!query_get_notes.Execute()) - var/err = query_get_notes.ErrorMsg() - log_game("SQL ERROR obtaining adminckey from notes table. Error : \[[err]\]\n") return - if (query_get_notes.NextRow()) + if(query_get_notes.NextRow()) if (query_get_notes.item[1] == adminckey) return create_message("note", sql_ckey, adminckey, "Detected as using a cid randomizer.", null, null, 0, 0) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 16b4ce9bd1e..f3eb9223635 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -746,9 +746,7 @@ var/list/preferences_datums = list() var/job = sanitizeSQL(href_list["jobbancheck"]) var/sql_ckey = sanitizeSQL(user.ckey) var/DBQuery/query_get_jobban = dbcon.NewQuery("SELECT reason, bantime, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[job]'") - if(!query_get_jobban.Execute()) - var/err = query_get_jobban.ErrorMsg() - log_game("SQL ERROR obtaining reason from ban table. Error : \[[err]\]\n") + if(!query_get_jobban.warn_execute()) return if(query_get_jobban.NextRow()) var/reason = query_get_jobban.item[1] diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index b01b5ec7c6b..9beef557779 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -51,14 +51,14 @@ dat += "" dat += "" - var/DBQuery/query = dbcon.NewQuery(SQLquery) - query.Execute() - - while(query.NextRow()) - var/author = query.item[1] - var/title = query.item[2] - var/category = query.item[3] - var/id = query.item[4] + var/DBQuery/query_library_list_books = dbcon.NewQuery(SQLquery) + if(!query_library_list_books.Execute()) + dat += "ERROR: Unable to retrieve book listings. Please contact your system administrator for assistance.
" + while(query_library_list_books.NextRow()) + var/author = query_library_list_books.item[1] + var/title = query_library_list_books.item[2] + var/category = query_library_list_books.item[3] + var/id = query_library_list_books.item[4] dat += "" dat += "
AUTHORTITLECATEGORYSS13BN
[author][title][category][id]

" dat += "\[Go Back\]
" @@ -137,15 +137,15 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums if(!dbcon.Connect()) return cachedbooks = list() - var/DBQuery/query = dbcon.NewQuery("SELECT id, author, title, category FROM [format_table_name("library")] WHERE isnull(deleted)") - query.Execute() - - while(query.NextRow()) + var/DBQuery/query_library_cache = dbcon.NewQuery("SELECT id, author, title, category FROM [format_table_name("library")] WHERE isnull(deleted)") + if(!query_library_cache.Execute()) + return + while(query_library_cache.NextRow()) var/datum/cachedbook/newbook = new() - newbook.id = query.item[1] - newbook.author = query.item[2] - newbook.title = query.item[3] - newbook.category = query.item[4] + newbook.id = query_library_cache.item[1] + newbook.author = query_library_cache.item[2] + newbook.title = query_library_cache.item[3] + newbook.category = query_library_cache.item[4] cachedbooks += newbook @@ -419,9 +419,10 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums var/sqlauthor = sanitizeSQL(scanner.cache.author) var/sqlcontent = sanitizeSQL(scanner.cache.dat) var/sqlcategory = sanitizeSQL(upload_category) - var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("library")] (author, title, content, category, ckey, datetime) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]', '[sqlcategory]', '[usr.ckey]', Now())") - if(!query.Execute()) - usr << query.ErrorMsg() + var/DBQuery/query_library_upload = dbcon.NewQuery("INSERT INTO [format_table_name("library")] (author, title, content, category, ckey, datetime) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]', '[sqlcategory]', '[usr.ckey]', Now())") + if(!query_library_upload.Execute()) + alert("Database error encountered uploading to Archive") + return else log_game("[usr.name]/[usr.key] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs") alert("Upload Complete. Uploaded title will be unavailable for printing for a short period") @@ -454,13 +455,14 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums say("Printer unavailable. Please allow a short time before attempting to print.") else cooldown = world.time + PRINTER_COOLDOWN - var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE id=[sqlid] AND isnull(deleted)") - query.Execute() - - while(query.NextRow()) - var/author = query.item[2] - var/title = query.item[3] - var/content = query.item[4] + var/DBQuery/query_library_print = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE id=[sqlid] AND isnull(deleted)") + if(!query_library_print.Execute()) + say("PRINTER ERROR! Failed to print document (0x0000000F)") + return + while(query_library_print.NextRow()) + var/author = query_library_print.item[2] + var/title = query_library_print.item[3] + var/content = query_library_print.item[4] var/obj/item/weapon/book/B = new(get_turf(src)) B.name = "Book: [title]" B.title = title diff --git a/code/modules/library/random_books.dm b/code/modules/library/random_books.dm index 4685a3f2893..8cafc694d60 100644 --- a/code/modules/library/random_books.dm +++ b/code/modules/library/random_books.dm @@ -43,19 +43,18 @@ if(prob(25)) category = null var/c = category? " AND category='[sanitizeSQL(category)]'" :"" - var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE isnull(deleted)[c] GROUP BY title ORDER BY rand() LIMIT [amount];") // isdeleted copyright (c) not me - if(query.Execute()) - while(query.NextRow()) + var/DBQuery/query_get_random_books = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE isnull(deleted)[c] GROUP BY title ORDER BY rand() LIMIT [amount];") // isdeleted copyright (c) not me + if(query_get_random_books.Execute()) + while(query_get_random_books.NextRow()) var/obj/item/weapon/book/B = new(location) . += B - B.author = query.item[2] - B.title = query.item[3] - B.dat = query.item[4] + B.author = query_get_random_books.item[2] + B.title = query_get_random_books.item[3] + B.dat = query_get_random_books.item[4] B.name = "Book: [B.title]" B.icon_state= "book[rand(1,8)]" else - log_game("SQL ERROR populating library bookshelf. Category: \[[category]\], Count: [amount], Error: \[[query.ErrorMsg()]\]\n") - + return /obj/structure/bookcase/random/fiction name = "bookcase (Fiction)" diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index c9fef3815fd..146b0e6c359 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -48,12 +48,12 @@ var/isadmin = 0 if(src.client && src.client.holder) isadmin = 1 - var/DBQuery/query = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[ckey]\")") - query.Execute() + var/DBQuery/query_get_new_polls = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[ckey]\")") + if(!query_get_new_polls.Execute()) + return var/newpoll = 0 - while(query.NextRow()) + if(query_get_new_polls.NextRow()) newpoll = 1 - break if(newpoll) output += "

Show Player Polls (NEW!)

" diff --git a/code/modules/mob/new_player/poll.dm b/code/modules/mob/new_player/poll.dm index 8d89d64e2cc..52e8346e3fc 100644 --- a/code/modules/mob/new_player/poll.dm +++ b/code/modules/mob/new_player/poll.dm @@ -6,16 +6,14 @@ if(!dbcon.IsConnected()) usr << "Failed to establish database connection." return - var/DBQuery/query_get_poll = dbcon.NewQuery("SELECT id, question FROM [format_table_name("poll_question")] WHERE Now() BETWEEN starttime AND endtime [(client.holder ? "" : "AND adminonly = false")]") - if(!query_get_poll.Execute()) - var/err = query_get_poll.ErrorMsg() - log_game("SQL ERROR obtaining id, question from poll_question table. Error : \[[err]\]\n") + var/DBQuery/query_poll_get = dbcon.NewQuery("SELECT id, question FROM [format_table_name("poll_question")] WHERE Now() BETWEEN starttime AND endtime [(client.holder ? "" : "AND adminonly = false")]") + if(!query_poll_get.warn_execute()) return var/output = "
Player polls
" var/i = 0 - while(query_get_poll.NextRow()) - var/pollid = query_get_poll.item[1] - var/pollquestion = query_get_poll.item[2] + while(query_poll_get.NextRow()) + var/pollid = query_poll_get.item[1] + var/pollquestion = query_poll_get.item[2] output += "" i++ output += "
[pollquestion]
" @@ -27,42 +25,36 @@ if (!dbcon.Connect()) usr << "Failed to establish database connection." return - var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") - if(!select_query.Execute()) - var/err = select_query.ErrorMsg() - log_game("SQL ERROR obtaining starttime, endtime, question, polltype, multiplechoiceoptions from poll_question table. Error : \[[err]\]\n") + var/DBQuery/query_poll_get_details = dbcon.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") + if(!query_poll_get_details.warn_execute()) return var/pollstarttime = "" var/pollendtime = "" var/pollquestion = "" var/polltype = "" var/multiplechoiceoptions = 0 - if(select_query.NextRow()) - pollstarttime = select_query.item[1] - pollendtime = select_query.item[2] - pollquestion = select_query.item[3] - polltype = select_query.item[4] - multiplechoiceoptions = text2num(select_query.item[5]) + if(query_poll_get_details.NextRow()) + pollstarttime = query_poll_get_details[1] + pollendtime = query_poll_get_details[2] + pollquestion = query_poll_get_details[3] + polltype = query_poll_get_details[4] + multiplechoiceoptions = text2num(query_poll_get_details[5]) switch(polltype) if(POLLTYPE_OPTION) - var/DBQuery/voted_query = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") - if(!voted_query.Execute()) - var/err = voted_query.ErrorMsg() - log_game("SQL ERROR obtaining optionid from poll_vote table. Error : \[[err]\]\n") + var/DBQuery/query_option_get_votes = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + if(!query_option_get_votes.warn_execute()) return var/votedoptionid = 0 - if(voted_query.NextRow()) - votedoptionid = text2num(voted_query.item[1]) + if(query_option_get_votes.NextRow()) + votedoptionid = text2num(query_option_get_votes.item[1]) var/list/datum/polloption/options = list() - var/DBQuery/options_query = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") - if(!options_query.Execute()) - var/err = options_query.ErrorMsg() - log_game("SQL ERROR obtaining id, text from poll_option table. Error : \[[err]\]\n") + var/DBQuery/query_option_options = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") + if(!query_option_options.warn_execute()) return - while(options_query.NextRow()) + while(query_option_options.NextRow()) var/datum/polloption/PO = new() - PO.optionid = text2num(options_query.item[1]) - PO.optiontext = options_query.item[2] + PO.optionid = text2num(query_option_options.item[1]) + PO.optiontext = query_option_options.item[2] options += PO var/output = "
Player poll
" output += "Question: [pollquestion]
" @@ -90,14 +82,12 @@ src << browse(null ,"window=playerpolllist") src << browse(output,"window=playerpoll;size=500x250") if(POLLTYPE_TEXT) - var/DBQuery/voted_query = dbcon.NewQuery("SELECT replytext FROM [format_table_name("poll_textreply")] WHERE pollid = [pollid] AND ckey = '[ckey]'") - if(!voted_query.Execute()) - var/err = voted_query.ErrorMsg() - log_game("SQL ERROR obtaining replytext from poll_textreply table. Error : \[[err]\]\n") + var/DBQuery/query_text_get_votes = dbcon.NewQuery("SELECT replytext FROM [format_table_name("poll_textreply")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + if(!query_text_get_votes.warn_execute()) return var/vote_text = "" - if(voted_query.NextRow()) - vote_text = voted_query.item[1] + if(query_text_get_votes.NextRow()) + vote_text = query_text_get_votes.item[1] var/output = "
Player poll
" output += "Question: [pollquestion]
" output += "Feedback gathering runs from [pollstarttime] until [pollendtime]

" @@ -121,18 +111,16 @@ src << browse(null ,"window=playerpolllist") src << browse(output,"window=playerpoll;size=500x500") if(POLLTYPE_RATING) - var/DBQuery/voted_query = dbcon.NewQuery("SELECT o.text, v.rating FROM [format_table_name("poll_option")] o, [format_table_name("poll_vote")] v WHERE o.pollid = [pollid] AND v.ckey = '[ckey]' AND o.id = v.optionid") - if(!voted_query.Execute()) - var/err = voted_query.ErrorMsg() - log_game("SQL ERROR obtaining o.text, v.rating from poll_option and poll_vote tables. Error : \[[err]\]\n") + var/DBQuery/query_rating_get_votes = dbcon.NewQuery("SELECT o.text, v.rating FROM [format_table_name("poll_option")] o, [format_table_name("poll_vote")] v WHERE o.pollid = [pollid] AND v.ckey = '[ckey]' AND o.id = v.optionid") + if(!query_rating_get_votes.warn_execute()) return var/output = "

Player poll
" output += "Question: [pollquestion]
" output += "Poll runs from [pollstarttime] until [pollendtime]

" var/rating - while(voted_query.NextRow()) - var/optiontext = voted_query.item[1] - rating = voted_query.item[2] + while(query_rating_get_votes.NextRow()) + var/optiontext = query_rating_get_votes.item[1] + rating = query_rating_get_votes.item[2] output += "
[optiontext] - [rating]" if(!rating) output += "

" @@ -141,19 +129,17 @@ output += "" var/minid = 999999 var/maxid = 0 - var/DBQuery/option_query = dbcon.NewQuery("SELECT id, text, minval, maxval, descmin, descmid, descmax FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") - if(!option_query.Execute()) - var/err = option_query.ErrorMsg() - log_game("SQL ERROR obtaining id, text, minval, maxval, descmin, descmid, descmax from poll_option table. Error : \[[err]\]\n") + var/DBQuery/query_rating_options = dbcon.NewQuery("SELECT id, text, minval, maxval, descmin, descmid, descmax FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") + if(!query_rating_options.warn_execute()) return - while(option_query.NextRow()) - var/optionid = text2num(option_query.item[1]) - var/optiontext = option_query.item[2] - var/minvalue = text2num(option_query.item[3]) - var/maxvalue = text2num(option_query.item[4]) - var/descmin = option_query.item[5] - var/descmid = option_query.item[6] - var/descmax = option_query.item[7] + while(query_rating_options.NextRow()) + var/optionid = text2num(query_rating_options.item[1]) + var/optiontext = query_rating_options.item[2] + var/minvalue = text2num(query_rating_options.item[3]) + var/maxvalue = text2num(query_rating_options.item[4]) + var/descmin = query_rating_options.item[5] + var/descmid = query_rating_options.item[6] + var/descmax = query_rating_options.item[7] if(optionid < minid) minid = optionid if(optionid > maxid) @@ -177,26 +163,22 @@ src << browse(null ,"window=playerpolllist") src << browse(output,"window=playerpoll;size=500x500") if(POLLTYPE_MULTI) - var/DBQuery/voted_query = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") - if(!voted_query.Execute()) - var/err = voted_query.ErrorMsg() - log_game("SQL ERROR obtaining optionid from poll_vote table. Error : \[[err]\]\n") + var/DBQuery/query_multi_get_votes = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + if(!query_multi_get_votes.warn_execute()) return var/list/votedfor = list() - while(voted_query.NextRow()) - votedfor.Add(text2num(voted_query.item[1])) + while(query_multi_get_votes.NextRow()) + votedfor.Add(text2num(query_multi_get_votes.item[1])) var/list/datum/polloption/options = list() var/maxoptionid = 0 var/minoptionid = 0 - var/DBQuery/options_query = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") - if(!options_query.Execute()) - var/err = options_query.ErrorMsg() - log_game("SQL ERROR obtaining id, text from poll_option table. Error : \[[err]\]\n") + var/DBQuery/query_multi_options = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") + if(!query_multi_options.warn_execute()) return - while(options_query.NextRow()) + while(query_multi_options.NextRow()) var/datum/polloption/PO = new() - PO.optionid = text2num(options_query.item[1]) - PO.optiontext = options_query.item[2] + PO.optionid = text2num(query_multi_options.item[1]) + PO.optiontext = query_multi_options.item[2] if(PO.optionid > maxoptionid) maxoptionid = PO.optionid if(PO.optionid < minoptionid || !minoptionid) @@ -232,27 +214,23 @@ var/datum/asset/irv_assets = get_asset_datum(/datum/asset/simple/IRV) irv_assets.send(src) - var/DBQuery/voted_query = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") - if(!voted_query.Execute()) - var/err = voted_query.ErrorMsg() - log_game("SQL ERROR obtaining optionid from poll_vote table. Error : \[[err]\]\n") + var/DBQuery/query_irv_get_votes = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + if(!query_irv_get_votes.warn_execute()) return var/list/votedfor = list() - while(voted_query.NextRow()) - votedfor.Add(text2num(voted_query.item[1])) + while(query_irv_get_votes.NextRow()) + votedfor.Add(text2num(query_irv_get_votes.item[1])) var/list/datum/polloption/options = list() - var/DBQuery/options_query = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") - if(!options_query.Execute()) - var/err = options_query.ErrorMsg() - log_game("SQL ERROR obtaining id, text from poll_option table. Error : \[[err]\]\n") + var/DBQuery/query_irv_options = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") + if(!query_irv_options.warn_execute()) return - while(options_query.NextRow()) + while(query_irv_options.NextRow()) var/datum/polloption/PO = new() - PO.optionid = text2num(options_query.item[1]) - PO.optiontext = options_query.item[2] + PO.optionid = text2num(query_irv_options.item[1]) + PO.optiontext = query_irv_options.item[2] options["[PO.optionid]"] += PO //if they already voted, use their sort @@ -353,9 +331,7 @@ usr << "Failed to establish database connection." return var/DBQuery/query_hasvoted = dbcon.NewQuery("SELECT id FROM `[format_table_name(table)]` WHERE pollid = [pollid] AND ckey = '[ckey]'") - if(!query_hasvoted.Execute()) - var/err = query_hasvoted.ErrorMsg() - log_game("SQL ERROR obtaining id from [table] table. Error : \[[err]\]\n") + if(!query_hasvoted.warn_execute()) return if(query_hasvoted.NextRow()) usr << "You've already replied to this poll." @@ -386,12 +362,10 @@ if (!pollid || pollid < 0) return 0 //validate the poll is actually the right type of poll and its still active - var/DBQuery/select_query = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime AND polltype = '[type]' [(holder ? "" : "AND adminonly = false")]") - if (!select_query.Execute()) - var/err = select_query.ErrorMsg() - log_game("SQL ERROR validating poll via poll_question table. Error : \[[err]\]\n") + var/DBQuery/query_validate_poll = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime AND polltype = '[type]' [(holder ? "" : "AND adminonly = false")]") + if(!query_validate_poll.warn_execute()) return 0 - if (!select_query.NextRow()) + if (!query_validate_poll.NextRow()) return 0 return 1 @@ -421,14 +395,12 @@ return 0 //lets collect the options - var/DBQuery/options_query = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") - if (!options_query.Execute()) - var/err = options_query.ErrorMsg() - log_game("SQL ERROR obtaining id from poll_option table. Error : \[[err]\]\n") + var/DBQuery/query_irv_id = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") + if(!query_irv_id.warn_execute()) return 0 var/list/optionlist = list() - while (options_query.NextRow()) - optionlist += text2num(options_query.item[1]) + while (query_irv_id.NextRow()) + optionlist += text2num(query_irv_id.item[1]) //validate their votes are actually in the list of options and actually numbers var/list/numberedvotelist = list() @@ -454,18 +426,13 @@ sqlrowlist += "(Now(), [pollid], [vote], '[sanitizeSQL(ckey)]', INET_ATON('[sanitizeSQL(address)]'), '[sanitizeSQL(rank)]')" //now lets delete their old votes (if any) - var/DBQuery/voted_query = dbcon.NewQuery("DELETE FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") - if (!voted_query.Execute()) - var/err = voted_query.ErrorMsg() - log_game("SQL ERROR clearing out old votes. Error : \[[err]\]\n") + var/DBQuery/query_irv_del_old = dbcon.NewQuery("DELETE FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + if(!query_irv_del_old.warn_execute()) return 0 //now to add the new ones. - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES [sqlrowlist]") - if(!query_insert.Execute()) - var/err = query_insert.ErrorMsg() - log_game("SQL ERROR adding vote to table. Error : \[[err]\]\n") - src << "Error adding vote." + var/DBQuery/query_irv_vote = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES [sqlrowlist]") + if(!query_irv_vote.warn_execute()) return 0 src << browse(null,"window=playerpoll") return 1 @@ -485,10 +452,8 @@ var/adminrank = sanitizeSQL(poll_check_voted(pollid)) if(!adminrank) return - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") - if(!query_insert.Execute()) - var/err = query_insert.ErrorMsg() - log_game("SQL ERROR adding vote to table. Error : \[[err]\]\n") + var/DBQuery/query_option_vote = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") + if(!query_option_vote.warn_execute()) return usr << browse(null,"window=playerpoll") return 1 @@ -514,10 +479,8 @@ if(!(length(replytext) > 0) || !(length(replytext) <= 8000)) usr << "The text you entered was invalid or too long. Please correct the text and submit again." return - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (Now(), [pollid], '[ckey]', INET_ATON('[client.address]'), '[replytext]', '[adminrank]')") - if(!query_insert.Execute()) - var/err = query_insert.ErrorMsg() - log_game("SQL ERROR adding text reply to table. Error : \[[err]\]\n") + var/DBQuery/query_text_vote = dbcon.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (Now(), [pollid], '[ckey]', INET_ATON('[client.address]'), '[replytext]', '[adminrank]')") + if(!query_text_vote.warn_execute()) return usr << browse(null,"window=playerpoll") return 1 @@ -533,22 +496,18 @@ //validate the poll if (!vote_valid_check(pollid, client.holder, POLLTYPE_RATING)) return 0 - var/DBQuery/query_hasvoted = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE optionid = [optionid] AND ckey = '[ckey]'") - if(!query_hasvoted.Execute()) - var/err = query_hasvoted.ErrorMsg() - log_game("SQL ERROR obtaining id from poll_vote table. Error : \[[err]\]\n") + var/DBQuery/query_numval_hasvoted = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE optionid = [optionid] AND ckey = '[ckey]'") + if(!query_numval_hasvoted.warn_execute()) return - if(query_hasvoted.NextRow()) + if(query_numval_hasvoted.NextRow()) usr << "You've already replied to this poll." return var/adminrank = "Player" if(client.holder) adminrank = client.holder.rank.name adminrank = sanitizeSQL(adminrank) - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]', [(isnull(rating)) ? "null" : rating])") - if(!query_insert.Execute()) - var/err = query_insert.ErrorMsg() - log_game("SQL ERROR adding vote to table. Error : \[[err]\]\n") + var/DBQuery/query_numval_vote = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]', [(isnull(rating)) ? "null" : rating])") + if(!query_numval_vote.warn_execute()) return usr << browse(null,"window=playerpoll") return 1 @@ -564,21 +523,17 @@ //validate the poll if (!vote_valid_check(pollid, client.holder, POLLTYPE_MULTI)) return 0 - var/DBQuery/query_get_choicelen = dbcon.NewQuery("SELECT multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") - if(!query_get_choicelen.Execute()) - var/err = query_get_choicelen.ErrorMsg() - log_game("SQL ERROR obtaining multiplechoiceoptions from poll_question table. Error : \[[err]\]\n") + var/DBQuery/query_multi_choicelen = dbcon.NewQuery("SELECT multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") + if(!query_multi_choicelen.warn_execute()) return 1 var/i - if(query_get_choicelen.NextRow()) - i = text2num(query_get_choicelen.item[1]) - var/DBQuery/query_hasvoted = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") - if(!query_hasvoted.Execute()) - var/err = query_hasvoted.ErrorMsg() - log_game("SQL ERROR obtaining id from poll_vote table. Error : \[[err]\]\n") + if(query_multi_choicelen.NextRow()) + i = text2num(query_multi_choicelen.item[1]) + var/DBQuery/query_multi_hasvoted = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + if(!query_multi_hasvoted.warn_execute()) return 1 while(i) - if(query_hasvoted.NextRow()) + if(query_multi_hasvoted.NextRow()) i-- else break @@ -588,10 +543,8 @@ if(client.holder) adminrank = client.holder.rank.name adminrank = sanitizeSQL(adminrank) - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") - if(!query_insert.Execute()) - var/err = query_insert.ErrorMsg() - log_game("SQL ERROR adding vote to table. Error : \[[err]\]\n") + var/DBQuery/query_multi_vote = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") + if(!query_multi_vote.warn_execute()) return 1 usr << browse(null,"window=playerpoll") return 0 diff --git a/code/orphaned_procs/dbcore.dm b/code/orphaned_procs/dbcore.dm index 28d3fd5a1a0..54d5402c476 100644 --- a/code/orphaned_procs/dbcore.dm +++ b/code/orphaned_procs/dbcore.dm @@ -72,7 +72,7 @@ DBConnection/proc/Connect() doConnect("dbi:mysql:[db]:[address]:[port]","[user]","[pass]") . = IsConnected() if (!. && config.sql_enabled) - log_world("SQL error: " + ErrorMsg()) + log_sql("Connect() failed | [ErrorMsg()]") ++failed_connections DBConnection/proc/doConnect(dbi_handler=src.dbi,user_handler=src.user,password_handler=src.password,cursor_handler) @@ -122,9 +122,15 @@ DBQuery DBQuery/proc/Connect(DBConnection/connection_handler) src.db_connection = connection_handler -DBQuery/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor) +DBQuery/proc/warn_execute() + if(!Execute()) + usr << "A SQL error occured during this operation, check the server logs." + +DBQuery/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor, log_error = 1) Close() - return _dm_db_execute(_db_query,sql_query,db_connection._db_con,cursor_handler,null) + . = _dm_db_execute(_db_query,sql_query,db_connection._db_con,cursor_handler,null) + if(!. && log_error) + log_sql("[ErrorMsg()] | Query used: [sql]") DBQuery/proc/NextRow() return _dm_db_next_row(_db_query,item,conversions) diff --git a/code/orphaned_procs/statistics.dm b/code/orphaned_procs/statistics.dm index ba45f8b3605..290c8815720 100644 --- a/code/orphaned_procs/statistics.dm +++ b/code/orphaned_procs/statistics.dm @@ -65,10 +65,11 @@ var/datum/feedback/blackbox = new() if (!dbcon.Connect()) return var/round_id - var/DBQuery/query = dbcon.NewQuery("SELECT MAX(round_id) AS round_id FROM [format_table_name("feedback")]") - query.Execute() - while (query.NextRow()) - round_id = query.item[1] + var/DBQuery/query_feedback_max_id = dbcon.NewQuery("SELECT MAX(round_id) AS round_id FROM [format_table_name("feedback")]") + if(!query_feedback_max_id.Execute()) + return + while (query_feedback_max_id.NextRow()) + round_id = query_feedback_max_id.item[1] if (!isnum(round_id)) round_id = text2num(round_id) @@ -85,8 +86,8 @@ var/datum/feedback/blackbox = new() if (sqlrowlist == "") return - var/DBQuery/query_insert = dbcon.NewQuery("INSERT DELAYED IGNORE INTO [format_table_name("feedback")] VALUES " + sqlrowlist) - query_insert.Execute() + var/DBQuery/query_feedback_save = dbcon.NewQuery("INSERT DELAYED IGNORE INTO [format_table_name("feedback")] VALUES " + sqlrowlist) + query_feedback_save.Execute() /proc/feedback_set(variable,value) @@ -216,10 +217,8 @@ var/datum/feedback/blackbox = new() log_game("SQL ERROR during player polling. Failed to connect.") else var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("legacy_population")] (playercount, time) VALUES ([playercount], '[sqltime]')") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during player polling. Error : \[[err]\]\n") + var/DBQuery/query_record_playercount = dbcon.NewQuery("INSERT INTO [format_table_name("legacy_population")] (playercount, time) VALUES ([playercount], '[sqltime]')") + query_record_playercount.Execute() /proc/sql_poll_admins() if(!config.sql_enabled) @@ -229,10 +228,8 @@ var/datum/feedback/blackbox = new() log_game("SQL ERROR during admin polling. Failed to connect.") else var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("legacy_population")] (admincount, time) VALUES ([admincount], '[sqltime]')") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during admin polling. Error : \[[err]\]\n") + var/DBQuery/query_record_admincount = dbcon.NewQuery("INSERT INTO [format_table_name("legacy_population")] (admincount, time) VALUES ([admincount], '[sqltime]')") + query_record_admincount.Execute() /proc/sql_report_round_start() // TODO @@ -272,49 +269,5 @@ var/datum/feedback/blackbox = new() if(!dbcon.Connect()) log_game("SQL ERROR during death reporting. Failed to connect.") else - var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord, mapname, server_ip, server_port) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[L.gender]', [L.getBruteLoss()], [L.getFireLoss()], [L.brainloss], [L.getOxyLoss()], '[coord]', '[map]', INET_ATON('[world.internet_address]'), '[world.port]')") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") - -//This proc is used for feedback. It is executed at round end. -/proc/sql_commit_feedback() - if(!blackbox) - log_game("Round ended without a blackbox recorder. No feedback was sent to the database: This should not happen without admin intervention.") - return - - //content is a list of lists. Each item in the list is a list with two fields, a variable name and a value. Items MUST only have these two values. - var/list/datum/feedback_variable/content = blackbox.get_round_feedback() - - if(!content) - log_game("Round ended without any feedback being generated. No feedback was sent to the database.") - return - - if(!dbcon.Connect()) - log_game("SQL ERROR during feedback reporting. Failed to connect.") - else - - var/DBQuery/max_query = dbcon.NewQuery("SELECT MAX(roundid) AS max_round_id FROM [format_table_name("feedback")]") - max_query.Execute() - - var/newroundid - - while(max_query.NextRow()) - newroundid = max_query.item[1] - - if(!(isnum(newroundid))) - newroundid = text2num(newroundid) - - if(isnum(newroundid)) - newroundid++ - else - newroundid = 1 - - for(var/datum/feedback_variable/item in content) - var/variable = item.get_variable() - var/value = item.get_value() - - var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("feedback")] (id, roundid, time, variable, value) VALUES (null, [newroundid], Now(), '[variable]', '[value]')") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during feedback reporting. Error : \[[err]\]\n") + var/DBQuery/query_report_death = dbcon.NewQuery("INSERT INTO [format_table_name("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord, mapname, server_ip, server_port) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[L.gender]', [L.getBruteLoss()], [L.getFireLoss()], [L.brainloss], [L.getOxyLoss()], '[coord]', '[map]', INET_ATON('[world.internet_address]'), '[world.port]')") + query_report_death.Execute()