From 00666422afb9cc11d99b0849aedba68e0c418b00 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 15:47:46 -0700
Subject: [PATCH 01/14] fix
---
.../admin/view_variables/debug_variables.dm | 54 ++++++++++---------
1 file changed, 30 insertions(+), 24 deletions(-)
diff --git a/code/modules/admin/view_variables/debug_variables.dm b/code/modules/admin/view_variables/debug_variables.dm
index 5116cd5cd6..ab9f4a534c 100644
--- a/code/modules/admin/view_variables/debug_variables.dm
+++ b/code/modules/admin/view_variables/debug_variables.dm
@@ -16,11 +16,19 @@
header = "
"
var/item
+ var/name_part = VV_HTML_ENCODE(name)
+ if(level > 0 || islist(D)) //handling keys in assoc lists
+ if(istype(name,/datum))
+ name_part = "[VV_HTML_ENCODE(name)] [REF(name)]"
+ else if(islist(name))
+ var/list/L = name
+ name_part = " /list ([length(L)]) [REF(name)]"
+
if (isnull(value))
- item = "[VV_HTML_ENCODE(name)] = null"
+ item = "[name_part] = null"
else if (istext(value))
- item = "[VV_HTML_ENCODE(name)] = \"[VV_HTML_ENCODE(value)]\""
+ item = "[name_part] = \"[VV_HTML_ENCODE(value)]\""
else if (isicon(value))
#ifdef VARSICON
@@ -28,33 +36,31 @@
var/rnd = rand(1,10000)
var/rname = "tmp[REF(I)][rnd].png"
usr << browse_rsc(I, rname)
- item = "[VV_HTML_ENCODE(name)] = ([value])
"
+ item = "[name_part] = ([value])
"
#else
- item = "[VV_HTML_ENCODE(name)] = /icon ([value])"
+ item = "[name_part] = /icon ([value])"
#endif
else if (isfile(value))
- item = "[VV_HTML_ENCODE(name)] = '[value]'"
+ item = "[name_part] = '[value]'"
- else if(istype(value, /matrix)) // Needs to be before datum
+ else if(istype(value,/matrix)) // Needs to be before datum
var/matrix/M = value
- item = {"[VV_HTML_ENCODE(name)] =
-
- | |
-
- | [M.a] | [M.d] | 0 |
- | [M.b] | [M.e] | 0 |
- | [M.c] | [M.f] | 1 |
- |
- |
-
"} //TODO link to modify_transform wrapper for all matrices
-
+ item = {"[name_part] =
+ | |
+
+
+ | [M.a] | [M.d] | 0 |
+ | [M.b] | [M.e] | 0 |
+ | [M.c] | [M.f] | 1 |
+
+ | |
"} //TODO link to modify_transform wrapper for all matrices
else if (istype(value, /datum))
var/datum/DV = value
if ("[DV]" != "[DV.type]") //if the thing as a name var, lets use it.
- item = "[VV_HTML_ENCODE(name)] [REF(value)] = [DV] [DV.type]"
+ item = "[name_part] = [DV] [DV.type] [REF(value)]"
else
- item = "[VV_HTML_ENCODE(name)] [REF(value)] = [DV.type]"
+ item = "[name_part] = [DV.type] [REF(value)]"
else if (islist(value))
var/list/L = value
@@ -72,19 +78,19 @@
items += debug_variable(key, val, level + 1, sanitize = sanitize)
- item = "[VV_HTML_ENCODE(name)] = /list ([L.len])"
+ item = "[name_part] = /list ([L.len])"
else
- item = "[VV_HTML_ENCODE(name)] = /list ([L.len])"
+ item = "[name_part] = /list ([L.len])"
else if (name in GLOB.bitfields)
var/list/flags = list()
for (var/i in GLOB.bitfields[name])
if (value & GLOB.bitfields[name][i])
flags += i
- item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(jointext(flags, ", "))]"
+ item = "[name_part] = [VV_HTML_ENCODE(jointext(flags, ", "))]"
else
- item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(value)]"
+ item = "[name_part] = [VV_HTML_ENCODE(value)]"
return "[header][item]"
-#undef VV_HTML_ENCODE
+#undef VV_HTML_ENCODE
\ No newline at end of file
From 146542b0771521fb78fd15389d30b119bdaec0af Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 16:33:36 -0700
Subject: [PATCH 02/14] sdql2
---
code/__DEFINES/is_helpers.dm | 3 +
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 108 +++++++++++++----------
2 files changed, 64 insertions(+), 47 deletions(-)
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 28ec3383ae..1bd18776af 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -1,3 +1,6 @@
+/// Checks if something is a BYOND object datatype rather than a primitive, or whatever's closest to one.
+#define is_object_datatype(object) (!istext(object) && !isnum(object))
+
// simple is_type and similar inline helpers
#define in_range(source, user) (get_dist(source, user) <= 1 && (get_step(source, 0)?:z) == (get_step(user, 0)?:z))
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index df54df5c7d..e0eb878b68 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -346,7 +346,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
//print the key
if(islist(key))
recursive_list_print(output, key, datum_handler, atom_handler)
- else if(is_proper_datum(key) && (datum_handler || (isatom(key) && atom_handler)))
+ else if(is_object_datatype(key) && (datum_handler || (isatom(key) && atom_handler)))
if(isatom(key) && atom_handler)
output += atom_handler.Invoke(key)
else
@@ -360,7 +360,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
var/value = input[key]
if(islist(value))
recursive_list_print(output, value, datum_handler, atom_handler)
- else if(is_proper_datum(value) && (datum_handler || (isatom(value) && atom_handler)))
+ else if(is_object_datatype(value) && (datum_handler || (isatom(value) && atom_handler)))
if(isatom(value) && atom_handler)
output += atom_handler.Invoke(value)
else
@@ -486,7 +486,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
end_time = REALTIMEOFDAY
state = SDQL2_STATE_IDLE
finished = TRUE
- . = TRUE
+ text_list += TRUE
if(show_next_to_key)
var/client/C = GLOB.directory[show_next_to_key]
if(C)
@@ -511,9 +511,9 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
state = SDQL2_STATE_HALTING
return
if("call")
- . = query_tree["on"]
+ text_list += query_tree["on"]
if("select", "delete", "update")
- . = query_tree[query_tree[1]]
+ text_list += query_tree[query_tree[1]]
state = SDQL2_STATE_SWITCHING
/datum/SDQL2_query/proc/Search(list/tree)
@@ -554,7 +554,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
obj_count_eligible = objs.len
else
obj_count_eligible = obj_count_all
- . = objs
+ text_list += objs
state = SDQL2_STATE_SWITCHING
/datum/SDQL2_query/proc/SDQL_from_objs(list/tree)
@@ -646,7 +646,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
switch(query_tree[1])
if("call")
for(var/i in found)
- if(!is_proper_datum(i))
+ if(!is_object_datatype(i))
continue
world.SDQL_var(i, query_tree["call"][1], null, i, superuser, src)
obj_count_finished++
@@ -664,7 +664,10 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
var/list/text_list = list()
var/print_nulls = !(options & SDQL2_OPTION_SELECT_OUTPUT_SKIP_NULLS)
obj_count_finished = select_refs
+ var/n = 0
for(var/i in found)
+ if(++n == 20000)
+ text_list += "
TRUNCATED - 20000 OBJECT LIMIT HIT"
SDQL_print(i, text_list, print_nulls)
select_refs[REF(i)] = TRUE
SDQL2_TICK_CHECK
@@ -675,7 +678,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
if("set" in query_tree)
var/list/set_list = query_tree["set"]
for(var/d in found)
- if(!is_proper_datum(d))
+ if(!is_object_datatype(d))
continue
SDQL_internal_vv(d, set_list)
obj_count_finished++
@@ -685,47 +688,61 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
obj_count_finished = length(obj_count_finished)
state = SDQL2_STATE_SWITCHING
-/datum/SDQL2_query/proc/SDQL_print(object, list/text_list, print_nulls = TRUE)
- if(is_proper_datum(object))
- text_list += "[REF(object)] : [object]"
- if(istype(object, /atom))
- var/atom/A = object
- var/turf/T = A.loc
- var/area/a
- if(istype(T))
- text_list += " at [T] [ADMIN_COORDJMP(T)]"
- a = T.loc
- else
- var/turf/final = get_turf(T) //Recursive, hopefully?
- if(istype(final))
- text_list += " at [final] [ADMIN_COORDJMP(final)]"
- a = final.loc
+/**
+ * Recursively prints out an object to text list for SDQL2 output to admins, with VV links and all.
+ * Recursion limit: 50
+ * Limit imposed by callers should be around 10000 objects
+ * Seriously, if you hit those limits, you're doing something wrong.
+ */
+/datum/SDQL2_query/proc/SDQL_print(object, list/text_list, print_nulls = TRUE, recursion = 0, linebreak = TRUE)
+ if(recursion > 50)
+ text_list += "RECURSION LIMIT REACHED."
+ if(is_object_datatype(object))
+ if(!islist(object))
+ text_list += "[REF(object)]([object.type]): [object]"
+ if(istype(object, /atom))
+ var/atom/A = object
+ var/atom/container = A.loc
+ if(isturf(container))
+ text_list += " in [container] [ADMIN_COORDJMP(container)] at [container.loc]"
+ else if(container)
+ var/turf/T = get_turf(container)
+ var/cref = REF(container)
+ text_list += " in [container]([cref])"
+ if(T)
+ text_list += " on [T] [ADMIN_COORDJMP(T)] at[T.loc]"
else
- text_list += " at nonexistant location"
- if(a)
- text_list += " in area [a]"
- if(T.loc != a)
- text_list += " inside [T]"
- text_list += "
"
- else if(islist(object))
- var/list/L = object
- var/first = TRUE
- text_list += "\["
- for (var/x in L)
- if (!first)
- text_list += ", "
- first = FALSE
- SDQL_print(x, text_list)
- if (!isnull(x) && !isnum(x) && L[x] != null)
- text_list += " -> "
- SDQL_print(L[L[x]], text_list)
- text_list += "]
"
+ text_list += " in nullspace"
+ if(linebreak)
+ text_list += "
"
+ return
+ else // lists are snowflake and get special treatment.
+ for(var/t in 1 to recursion)
+ text_list += "\t"
+ text_list += "[REF(object)] \["
+ var/first = TRUE
+ var/list/L = object
+ for(var/key in object)
+ if(!first)
+ text_list += ", "
+ first = FALSE
+ SDQL_print(key, text_list, TRUE, recursion + 1, FALSE)
+ if(IS_VALID_ASSOC_KEY(key) && !isnull(L[key]))
+ text_list += " --> "
+ SDQL_print(L[key], text_list, TRUE, recursion + 1, FALSE)
+ text_list += "\]"
else
if(isnull(object))
if(print_nulls)
text_list += "NULL
"
+ else if(istext(object))
+ text_list += "STRING: [object]
"
+ else if(isnum(object))
+ text_list += "NUM: [object]
"
else
- text_list += "[object]
"
+ text_list += "UNKNOWN: [object]
"
+ if(linebreak)
+ text_list += "
"
/datum/SDQL2_query/CanProcCall()
if(!allow_admin_interact)
@@ -957,7 +974,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
var/static/list/exclude = list("usr", "src", "marked", "global")
var/long = start < expression.len
var/datum/D
- if(is_proper_datum(object))
+ if(is_object_datatype(object))
D = object
if (object == world && (!long || expression[start + 1] == ".") && !(expression[start] in exclude)) //3 == length("SS") + 1
@@ -1161,9 +1178,6 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
query_list += word
return query_list
-/proc/is_proper_datum(thing)
- return istype(thing, /datum) || istype(thing, /client)
-
/obj/effect/statclick/SDQL2_delete/Click()
var/datum/SDQL2_query/Q = target
Q.delete_click()
From c7eead3f28f1e4d2f9a78063f35b8576a1f19cb0 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 16:34:54 -0700
Subject: [PATCH 03/14] don't blind find/replace folks
---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index e0eb878b68..b4f7832b44 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -486,7 +486,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
end_time = REALTIMEOFDAY
state = SDQL2_STATE_IDLE
finished = TRUE
- text_list += TRUE
+ . += TRUE
if(show_next_to_key)
var/client/C = GLOB.directory[show_next_to_key]
if(C)
@@ -511,9 +511,9 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
state = SDQL2_STATE_HALTING
return
if("call")
- text_list += query_tree["on"]
+ . += query_tree["on"]
if("select", "delete", "update")
- text_list += query_tree[query_tree[1]]
+ . += query_tree[query_tree[1]]
state = SDQL2_STATE_SWITCHING
/datum/SDQL2_query/proc/Search(list/tree)
@@ -554,7 +554,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
obj_count_eligible = objs.len
else
obj_count_eligible = obj_count_all
- text_list += objs
+ . += objs
state = SDQL2_STATE_SWITCHING
/datum/SDQL2_query/proc/SDQL_from_objs(list/tree)
@@ -694,7 +694,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
* Limit imposed by callers should be around 10000 objects
* Seriously, if you hit those limits, you're doing something wrong.
*/
-/datum/SDQL2_query/proc/SDQL_print(object, list/text_list, print_nulls = TRUE, recursion = 0, linebreak = TRUE)
+/datum/SDQL2_query/proc/SDQL_print(datum/object, list/text_list, print_nulls = TRUE, recursion = 0, linebreak = TRUE)
if(recursion > 50)
text_list += "RECURSION LIMIT REACHED."
if(is_object_datatype(object))
From 6cf18e1d49839882ed80ba43b49beee213370682 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 16:38:28 -0700
Subject: [PATCH 04/14] why did i find replace
---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index b4f7832b44..657da46461 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -486,7 +486,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
end_time = REALTIMEOFDAY
state = SDQL2_STATE_IDLE
finished = TRUE
- . += TRUE
+ . = TRUE
if(show_next_to_key)
var/client/C = GLOB.directory[show_next_to_key]
if(C)
@@ -511,9 +511,9 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
state = SDQL2_STATE_HALTING
return
if("call")
- . += query_tree["on"]
+ . = query_tree["on"]
if("select", "delete", "update")
- . += query_tree[query_tree[1]]
+ . = query_tree[query_tree[1]]
state = SDQL2_STATE_SWITCHING
/datum/SDQL2_query/proc/Search(list/tree)
@@ -554,7 +554,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
obj_count_eligible = objs.len
else
obj_count_eligible = obj_count_all
- . += objs
+ . = objs
state = SDQL2_STATE_SWITCHING
/datum/SDQL2_query/proc/SDQL_from_objs(list/tree)
From 3cf14f4fad54a65d525ef04181c5abdbfb014b2e Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 16:48:22 -0700
Subject: [PATCH 05/14] prettier
---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 26 ++++++++++++++----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index 657da46461..7e4c973e6f 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -701,18 +701,22 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
if(!islist(object))
text_list += "[REF(object)]([object.type]): [object]"
if(istype(object, /atom))
- var/atom/A = object
- var/atom/container = A.loc
- if(isturf(container))
- text_list += " in [container] [ADMIN_COORDJMP(container)] at [container.loc]"
- else if(container)
- var/turf/T = get_turf(container)
- var/cref = REF(container)
- text_list += " in [container]([cref])"
- if(T)
- text_list += " on [T] [ADMIN_COORDJMP(T)] at[T.loc]"
+ if(istype(object, /turf))
+ var/turf/T = object
+ text_list += " at [T.loc]"
else
- text_list += " in nullspace"
+ var/atom/A = object
+ var/atom/container = A.loc
+ if(isturf(container))
+ text_list += " in [container] [ADMIN_COORDJMP(container)] at [container.loc]"
+ else if(container)
+ var/turf/T = get_turf(container)
+ var/cref = REF(container)
+ text_list += " in [container]([cref])"
+ if(T)
+ text_list += " on [T] [ADMIN_COORDJMP(T)] at[T.loc]"
+ else
+ text_list += " in nullspace"
if(linebreak)
text_list += "
"
return
From 52ab6e557bd7de152e7e7b303e85c71ca24ea19e Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 17:00:01 -0700
Subject: [PATCH 06/14] fix
---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index 7e4c973e6f..e59c74ef22 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -699,11 +699,11 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
text_list += "RECURSION LIMIT REACHED."
if(is_object_datatype(object))
if(!islist(object))
- text_list += "[REF(object)]([object.type]): [object]"
+ text_list += "[object.type] [REF(object)]: [object]"
if(istype(object, /atom))
if(istype(object, /turf))
var/turf/T = object
- text_list += " at [T.loc]"
+ text_list += " [ADMIN_COORDJMP(T)] at [T.loc]"
else
var/atom/A = object
var/atom/container = A.loc
@@ -723,7 +723,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
else // lists are snowflake and get special treatment.
for(var/t in 1 to recursion)
text_list += "\t"
- text_list += "[REF(object)] \["
+ text_list += "/list [REF(object)] \[
"
var/first = TRUE
var/list/L = object
for(var/key in object)
@@ -734,17 +734,18 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
if(IS_VALID_ASSOC_KEY(key) && !isnull(L[key]))
text_list += " --> "
SDQL_print(L[key], text_list, TRUE, recursion + 1, FALSE)
- text_list += "\]"
+ text_list += "
+ text_list += "\]
"
else
if(isnull(object))
if(print_nulls)
- text_list += "NULL
"
+ text_list += "NULL"
else if(istext(object))
- text_list += "STRING: [object]
"
+ text_list += "STRING: [object]"
else if(isnum(object))
- text_list += "NUM: [object]
"
+ text_list += "NUM: [object]"
else
- text_list += "UNKNOWN: [object]
"
+ text_list += "UNKNOWN: [object]"
if(linebreak)
text_list += "
"
From c42894ddd96ddffc6c2cd22213620b0e0eee4390 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 17:07:10 -0700
Subject: [PATCH 07/14] css?
---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index e59c74ef22..1a7cd66f3b 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -695,6 +695,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
* Seriously, if you hit those limits, you're doing something wrong.
*/
/datum/SDQL2_query/proc/SDQL_print(datum/object, list/text_list, print_nulls = TRUE, recursion = 0, linebreak = TRUE)
+ text_list += "
if(recursion > 50)
text_list += "RECURSION LIMIT REACHED."
if(is_object_datatype(object))
@@ -717,13 +718,8 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
text_list += " on [T] [ADMIN_COORDJMP(T)] at[T.loc]"
else
text_list += " in nullspace"
- if(linebreak)
- text_list += "
"
- return
else // lists are snowflake and get special treatment.
- for(var/t in 1 to recursion)
- text_list += "\t"
- text_list += "/list [REF(object)] \[
"
+ text_list += "/list [REF(object)] \["
var/first = TRUE
var/list/L = object
for(var/key in object)
@@ -734,8 +730,8 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
if(IS_VALID_ASSOC_KEY(key) && !isnull(L[key]))
text_list += " --> "
SDQL_print(L[key], text_list, TRUE, recursion + 1, FALSE)
- text_list += "
- text_list += "\]
"
+ text_list += "
"
+ text_list += "\]"
else
if(isnull(object))
if(print_nulls)
@@ -746,8 +742,9 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
text_list += "NUM: [object]"
else
text_list += "UNKNOWN: [object]"
- if(linebreak)
- text_list += "
"
+ text_list += "
+ if(linebreak)
+ text_list += "
"
/datum/SDQL2_query/CanProcCall()
if(!allow_admin_interact)
From be6ea51f1936eeb6dbae1617b7e86ed4bdd7de28 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 17:11:29 -0700
Subject: [PATCH 08/14] closing
---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index 1a7cd66f3b..2eb0d64e12 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -695,7 +695,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
* Seriously, if you hit those limits, you're doing something wrong.
*/
/datum/SDQL2_query/proc/SDQL_print(datum/object, list/text_list, print_nulls = TRUE, recursion = 0, linebreak = TRUE)
- text_list += "
+ text_list += ""
if(recursion > 50)
text_list += "RECURSION LIMIT REACHED."
if(is_object_datatype(object))
@@ -742,7 +742,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
text_list += "NUM: [object]"
else
text_list += "UNKNOWN: [object]"
- text_list += "
+ text_list += ""
if(linebreak)
text_list += "
"
From 8e6dee515a790a7001b6bf1557bf846b99f39061 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 17:16:36 -0700
Subject: [PATCH 09/14] null isn't an object
---
code/__DEFINES/is_helpers.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 1bd18776af..ced05633b4 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -1,5 +1,5 @@
/// Checks if something is a BYOND object datatype rather than a primitive, or whatever's closest to one.
-#define is_object_datatype(object) (!istext(object) && !isnum(object))
+#define is_object_datatype(object) (object && !istext(object) && !isnum(object))
// simple is_type and similar inline helpers
From 78e153cbe4889817844c7c107dd62bef4d0404f7 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 17:32:17 -0700
Subject: [PATCH 10/14] is this better
---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index 2eb0d64e12..6e29bc853f 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -498,7 +498,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
if(length(select_text))
var/text = islist(select_text)? select_text.Join() : select_text
var/static/result_offset = 0
- showmob << browse(text, "window=SDQL-result-[result_offset++]")
+ showmob << browse(text, "window=SDQL-result-[result_offset++];size=300x800")
show_next_to_key = null
if(qdel_on_finish)
qdel(src)
@@ -695,7 +695,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
* Seriously, if you hit those limits, you're doing something wrong.
*/
/datum/SDQL2_query/proc/SDQL_print(datum/object, list/text_list, print_nulls = TRUE, recursion = 0, linebreak = TRUE)
- text_list += ""
+ text_list += ""
if(recursion > 50)
text_list += "RECURSION LIMIT REACHED."
if(is_object_datatype(object))
@@ -720,17 +720,17 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
text_list += " in nullspace"
else // lists are snowflake and get special treatment.
text_list += "/list [REF(object)] \["
- var/first = TRUE
var/list/L = object
- for(var/key in object)
- if(!first)
- text_list += ", "
- first = FALSE
- SDQL_print(key, text_list, TRUE, recursion + 1, FALSE)
- if(IS_VALID_ASSOC_KEY(key) && !isnull(L[key]))
- text_list += " --> "
- SDQL_print(L[key], text_list, TRUE, recursion + 1, FALSE)
- text_list += "
"
+ if(length(L))
+ var/lastkey = L[length(L)]
+ for(var/key in object)
+ SDQL_print(key, text_list, TRUE, recursion + 1, FALSE)
+ if(IS_VALID_ASSOC_KEY(key) && !isnull(L[key]))
+ text_list += " --> "
+ SDQL_print(L[key], text_list, TRUE, recursion + 1, FALSE)
+ text_list += "
"
+ if(lastkey != key)
+ text_list += ", "
text_list += "\]"
else
if(isnull(object))
From e1a1dc61f669d5a99389e5c16bdfdff827172bd8 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 17:50:23 -0700
Subject: [PATCH 11/14] this is ugly and i hate it
---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index 6e29bc853f..6977735d54 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -498,7 +498,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
if(length(select_text))
var/text = islist(select_text)? select_text.Join() : select_text
var/static/result_offset = 0
- showmob << browse(text, "window=SDQL-result-[result_offset++];size=300x800")
+ showmob << browse(text, "window=SDQL-result-[result_offset++];size=800x1200")
show_next_to_key = null
if(qdel_on_finish)
qdel(src)
@@ -695,7 +695,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
* Seriously, if you hit those limits, you're doing something wrong.
*/
/datum/SDQL2_query/proc/SDQL_print(datum/object, list/text_list, print_nulls = TRUE, recursion = 0, linebreak = TRUE)
- text_list += ""
+ text_list += ""
if(recursion > 50)
text_list += "RECURSION LIMIT REACHED."
if(is_object_datatype(object))
@@ -729,8 +729,6 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
text_list += " --> "
SDQL_print(L[key], text_list, TRUE, recursion + 1, FALSE)
text_list += "
"
- if(lastkey != key)
- text_list += ", "
text_list += "\]"
else
if(isnull(object))
From e2aab5c1a53bebfd2c882acc539fc2b74c6122a6 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 18:01:53 -0700
Subject: [PATCH 12/14] css is really hard folks
---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index 6977735d54..4bb0c7d76d 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -694,8 +694,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
* Limit imposed by callers should be around 10000 objects
* Seriously, if you hit those limits, you're doing something wrong.
*/
-/datum/SDQL2_query/proc/SDQL_print(datum/object, list/text_list, print_nulls = TRUE, recursion = 0, linebreak = TRUE)
- text_list += ""
+/datum/SDQL2_query/proc/SDQL_print(datum/object, list/text_list, print_nulls = TRUE, recursion = 1, linebreak = TRUE)
if(recursion > 50)
text_list += "RECURSION LIMIT REACHED."
if(is_object_datatype(object))
@@ -719,15 +718,25 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
else
text_list += " in nullspace"
else // lists are snowflake and get special treatment.
- text_list += "/list [REF(object)] \["
+ text_list += "/list [REF(object)] \[
"
var/list/L = object
if(length(L))
- var/lastkey = L[length(L)]
for(var/key in object)
- SDQL_print(key, text_list, TRUE, recursion + 1, FALSE)
+ if(islist(key))
+ text_list += ""
+ SDQL_print(key, text_list, TRUE, recursion + 1, FALSE)
+ text_list += ""
+ else
+ SDQL_print(key, text_list, TRUE, recursion, FALSE)
if(IS_VALID_ASSOC_KEY(key) && !isnull(L[key]))
+ var/value = L[key]
text_list += " --> "
- SDQL_print(L[key], text_list, TRUE, recursion + 1, FALSE)
+ if(islist(value))
+ text_list += ""
+ SDQL_print(value, text_list, TRUE, recursion + 1, FALSE)
+ text_list += ""
+ else
+ SDQL_print(value, text_list, TRUE, recursion, FALSE)
text_list += "
"
text_list += "\]"
else
@@ -740,7 +749,6 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
text_list += "NUM: [object]"
else
text_list += "UNKNOWN: [object]"
- text_list += ""
if(linebreak)
text_list += "
"
From 9a086233080f382e5e454ffbcb90d57ce063d32a Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 18:39:45 -0700
Subject: [PATCH 13/14] sigh
---
code/__DEFINES/is_helpers.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index ced05633b4..c55662e86f 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -1,5 +1,5 @@
/// Checks if something is a BYOND object datatype rather than a primitive, or whatever's closest to one.
-#define is_object_datatype(object) (object && !istext(object) && !isnum(object))
+#define is_object_datatype(object) (object && !ispath(object) && !istext(object) && !isnum(object))
// simple is_type and similar inline helpers
From 3dbfc6ddf23f201d7d5caae265278659053fa3b0 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 12 Jun 2020 18:50:57 -0700
Subject: [PATCH 14/14] better support
---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index 4bb0c7d76d..bff431a6c7 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -696,7 +696,8 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
*/
/datum/SDQL2_query/proc/SDQL_print(datum/object, list/text_list, print_nulls = TRUE, recursion = 1, linebreak = TRUE)
if(recursion > 50)
- text_list += "RECURSION LIMIT REACHED."
+ text_list += "
RECURSION LIMIT REACHED.
"
+ return
if(is_object_datatype(object))
if(!islist(object))
text_list += "[object.type] [REF(object)]: [object]"
@@ -739,18 +740,20 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
SDQL_print(value, text_list, TRUE, recursion, FALSE)
text_list += "
"
text_list += "\]"
+ if(linebreak)
+ text_list += "
"
else
if(isnull(object))
if(print_nulls)
text_list += "NULL"
else if(istext(object))
- text_list += "STRING: [object]"
- else if(isnum(object))
- text_list += "NUM: [object]"
+ text_list += "\"[object]\""
+ else if(isnum(object) || ispath(object))
+ text_list += "[object]"
else
text_list += "UNKNOWN: [object]"
- if(linebreak)
- text_list += "
"
+ if(linebreak)
+ text_list += "
"
/datum/SDQL2_query/CanProcCall()
if(!allow_admin_interact)