diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 8b64328c68..ae6c6d0fd4 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -30,9 +30,6 @@ query_log = "[usr.ckey]([usr]) [query_log]" log_game(query_log) NOTICE(query_log) - var/list/runtime_tracker = list() - var/runtimes_list = "" - var/runtimes = 0 var/objs_all = 0 var/objs_eligible = 0 var/start_time = REALTIMEOFDAY @@ -76,11 +73,7 @@ var/list/objs = list() for(var/type in select_types) - try - objs += SDQL_get_all(type, from_objs) - catch(var/exception/e) - runtime_tracker += SDQL_parse_exception(e) - runtimes++ + objs += SDQL_get_all(type, from_objs) CHECK_TICK objs_all = objs.len @@ -88,53 +81,26 @@ var/objs_temp = objs objs = list() for(var/datum/d in objs_temp) - try - if(SDQL_expression(d, query_tree["where"])) - objs += d - objs_eligible++ - catch(var/exception/e) - runtime_tracker += SDQL_parse_exception(e) - runtimes++ + if(SDQL_expression(d, query_tree["where"])) + objs += d + objs_eligible++ CHECK_TICK switch(query_tree[1]) if("call") for(var/datum/d in objs) - try - world.SDQL_var(d, query_tree["call"][1], source = d) - catch(var/exception/e) - runtime_tracker += SDQL_parse_exception(e) - runtimes++ + world.SDQL_var(d, query_tree["call"][1], source = d) CHECK_TICK - + if("delete") for(var/datum/d in objs) - try - qdel(d) - catch(var/exception/e) - runtime_tracker += SDQL_parse_exception(e) - runtimes++ + SDQL_qdel_datum(d) CHECK_TICK if("select") var/text = "" for(var/datum/t in objs) - try - text += "\ref[t]" - if(istype(t, /atom)) - var/atom/a = t - if(a.x) - text += ": [t] at ([a.x], [a.y], [a.z])
" - - else if(a.loc && a.loc.x) - text += ": [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])
" - else - text += ": [t]
" - else - text += ": [t]
" - catch(var/exception/e) - runtime_tracker += SDQL_parse_exception(e) - runtimes++ + text += SDQL_gen_vv_href(t) CHECK_TICK usr << browse(text, "window=SDQL-result") @@ -142,21 +108,7 @@ if("set" in query_tree) var/list/set_list = query_tree["set"] for(var/datum/d in objs) - try - for(var/list/sets in set_list) - var/datum/temp = d - var/i = 0 - for(var/v in sets) - if(++i == sets.len) - temp.vv_edit_var(v, SDQL_expression(d, set_list[sets])) - break - if(temp.vars.Find(v) && (istype(temp.vars[v], /datum))) - temp = temp.vars[v] - else - break - catch(var/exception/e) - runtime_tracker += SDQL_parse_exception(e) - runtimes++ + SDQL_internal_vv(d, set_list) CHECK_TICK var/end_time = REALTIMEOFDAY @@ -164,18 +116,39 @@ to_chat(usr, "SDQL query results: [query_text]") to_chat(usr, "SDQL query completed: [objs_all] objects selected by path, and [objs_eligible] objects executed on after WHERE filtering if applicable.") to_chat(usr, "SDQL query took [end_time/10] seconds to complete.") - if(runtimes) - to_chat(usr, "SDQL query encountered [runtimes] runtimes!") - to_chat(usr, "Opening runtime tracking window.") - runtimes_list = runtime_tracker.Join() - usr << browse(runtimes_list, "window=SDQL-runtimes") -/proc/SDQL_parse_exception(exception/E) - var/list/returning = list() - returning += "Runtime Error: [E.name]
" - returning += "Occured at line [E.line] file [E.file]
" - returning += "Description: [E.desc]
" - return returning +/proc/SDQL_qdel_datum(datum/d) + qdel(d) + +/proc/SDQL_gen_vv_href(t) + var/text = "" + text += "\ref[t]" + if(istype(t, /atom)) + var/atom/a = t + var/turf/T = a.loc + var/turf/actual = get_turf(a) + if(istype(T)) + text += ": [t] at turf [T] [COORD(T)]
" + else if(a.loc && istype(actual)) + text += ": [t] in [a.loc] at turf [actual] [COORD(actual)]
" + else + text += ": [t]
" + else + text += ": [t]
" + return text + +/proc/SDQL_internal_vv(d, list/set_list) + for(var/list/sets in set_list) + var/datum/temp = d + var/i = 0 + for(var/v in sets) + if(++i == sets.len) + temp.vv_edit_var(v, SDQL_expression(d, set_list[sets])) + break + if(temp.vars.Find(v) && (istype(temp.vars[v], /datum))) + temp = temp.vars[v] + else + break /proc/SDQL_parse(list/query_list) var/datum/SDQL_parser/parser = new()