anchor.diff:  			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 += "<A HREF='?_src_=vars;Vars=\ref[t]'>\ref[t]</A>"
  -						if(istype(t, /atom))
  -							var/atom/a = t
  -							if(a.x)
  -								text += ": [t] at ([a.x], [a.y], [a.z])<br>"
  -
  -							else if(a.loc && a.loc.x)
  -								text += ": [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])<br>"
  -							else
  -								text += ": [t]<br>"
  -						else
  -							text += ": [t]<br>"
  -					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")
   
  
positive.code: 				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++
  						CHECK_TICK
  
  	var/end_time = REALTIMEOFDAY
  
negative.code: 	to_chat(usr, "<span class='admin'>SDQL query results: [query_text]</span>")
  	to_chat(usr, "<span class='admin'>SDQL query completed: [objs_all] objects selected by path, and [objs_eligible] objects executed on after WHERE filtering if applicable.</span>")
  	to_chat(usr, "<span class='admin'>SDQL query took [end_time/10] seconds to complete.</span>")
  
  /proc/SDQL_qdel_datum(datum/d)
  	qdel(d)
  
  /proc/SDQL_gen_vv_href(t)
  	var/text = ""
  	text += "<A HREF='?_src_=vars;Vars=\ref[t]'>\ref[t]</A>"
  	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)]<br>"
  		else if(a.loc && istype(actual))
  			text += ": [t] in [a.loc] at turf [actual] [COORD(actual)]<br>"
  		else
  			text += ": [t]<br>"
  	else
  		text += ": [t]<br>"
  	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()
  