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()