Bleeding edgy refresh (#303)
* not code stuff * other things * global vars, defines, helpers * onclick hud stuff, orphans, world.dm * controllers and datums * game folder * everything not client/mobs in modules * client folder * stage 1 mob stuff * simple animal things * silicons * carbon things * ayylmaos and monkeys * hyoomahn * icons n shit * sprite fixes * compile fixes * some fixes I cherrypicked. * qdel fixes * forgot brain refractors
This commit is contained in:
@@ -62,7 +62,7 @@
|
||||
|
||||
/datum/SDQL_parser/proc/parse_error(error_message)
|
||||
error = 1
|
||||
usr << "<span class='danger'>SQDL2 Parsing Error: [error_message]</span>"
|
||||
to_chat(usr, "<span class='danger'>SQDL2 Parsing Error: [error_message]</span>")
|
||||
return query.len + 1
|
||||
|
||||
/datum/SDQL_parser/proc/parse()
|
||||
@@ -116,18 +116,7 @@
|
||||
i = select_list(i + 1, select)
|
||||
node += "select"
|
||||
node["select"] = select
|
||||
var/list/from = list()
|
||||
if(tokenl(i) in list("from", "in"))
|
||||
i = from_list(i + 1, from)
|
||||
else
|
||||
from += "world"
|
||||
node += "from"
|
||||
node["from"] = from
|
||||
if(tokenl(i) == "where")
|
||||
var/list/where = list()
|
||||
i = bool_expression(i + 1, where)
|
||||
node += "where"
|
||||
node["where"] = where
|
||||
selectors(i, node)
|
||||
return i
|
||||
|
||||
//delete_query: 'DELETE' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]
|
||||
@@ -136,18 +125,7 @@
|
||||
i = select_list(i + 1, select)
|
||||
node += "delete"
|
||||
node["delete"] = select
|
||||
var/list/from = list()
|
||||
if(tokenl(i) in list("from", "in"))
|
||||
i = from_list(i + 1, from)
|
||||
else
|
||||
from += "world"
|
||||
node += "from"
|
||||
node["from"] = from
|
||||
if(tokenl(i) == "where")
|
||||
var/list/where = list()
|
||||
i = bool_expression(i + 1, where)
|
||||
node += "where"
|
||||
node["where"] = where
|
||||
selectors(i, node)
|
||||
return i
|
||||
|
||||
//update_query: 'UPDATE' select_list [('FROM' | 'IN') from_list] 'SET' assignments ['WHERE' bool_expression]
|
||||
@@ -156,52 +134,28 @@
|
||||
i = select_list(i + 1, select)
|
||||
node += "update"
|
||||
node["update"] = select
|
||||
var/list/from = list()
|
||||
if(tokenl(i) in list("from", "in"))
|
||||
i = from_list(i + 1, from)
|
||||
else
|
||||
from += "world"
|
||||
node += "from"
|
||||
node["from"] = from
|
||||
if(tokenl(i) != "set")
|
||||
i = parse_error("UPDATE has misplaced SET")
|
||||
var/list/set_assignments = list()
|
||||
i = assignments(i + 1, set_assignments)
|
||||
node += "set"
|
||||
node["set"] = set_assignments
|
||||
if(tokenl(i) == "where")
|
||||
var/list/where = list()
|
||||
i = bool_expression(i + 1, where)
|
||||
node += "where"
|
||||
node["where"] = where
|
||||
selectors(i, node)
|
||||
return i
|
||||
|
||||
//call_query: 'CALL' call_function ['ON' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]]
|
||||
/datum/SDQL_parser/proc/call_query(i, list/node)
|
||||
var/list/func = list()
|
||||
var/list/arguments = list()
|
||||
i = call_function(i + 1, func, arguments)
|
||||
i = variable(i + 1, func) // Yes technically does anything variable() matches but I don't care, if admins fuck up this badly then they shouldn't be allowed near SDQL.
|
||||
node += "call"
|
||||
node["call"] = func
|
||||
node["args"] = arguments
|
||||
if(tokenl(i) != "on")
|
||||
return i
|
||||
var/list/select = list()
|
||||
i = select_list(i + 1, select)
|
||||
node += "on"
|
||||
node["on"] = select
|
||||
var/list/from = list()
|
||||
if(tokenl(i) in list("from", "in"))
|
||||
i = from_list(i + 1, from)
|
||||
else
|
||||
from += "world"
|
||||
node += "from"
|
||||
node["from"] = from
|
||||
if(tokenl(i) == "where")
|
||||
var/list/where = list()
|
||||
i = bool_expression(i + 1, where)
|
||||
node += "where"
|
||||
node["where"] = where
|
||||
selectors(i, node)
|
||||
return i
|
||||
|
||||
//select_list: select_item [',' select_list]
|
||||
@@ -211,13 +165,6 @@
|
||||
i = select_list(i + 1, node)
|
||||
return i
|
||||
|
||||
//from_list: from_item [',' from_list]
|
||||
/datum/SDQL_parser/proc/from_list(i, list/node)
|
||||
i = from_item(i, node)
|
||||
if(token(i) == ",")
|
||||
i = from_list(i + 1, node)
|
||||
return i
|
||||
|
||||
//assignments: assignment, [',' assignments]
|
||||
/datum/SDQL_parser/proc/assignments(i, list/node)
|
||||
i = assignment(i, node)
|
||||
@@ -236,13 +183,33 @@
|
||||
i = object_type(i, node)
|
||||
return i
|
||||
|
||||
// Standardized method for handling the IN/FROM and WHERE options.
|
||||
/datum/SDQL_parser/proc/selectors(i, list/node)
|
||||
while (token(i))
|
||||
var/tok = tokenl(i)
|
||||
if(tok in list("from", "in"))
|
||||
var/list/from = list()
|
||||
i = from_item(i + 1, from)
|
||||
node["from"] = from
|
||||
continue
|
||||
if(tok == "where")
|
||||
var/list/where = list()
|
||||
i = bool_expression(i + 1, where)
|
||||
node["where"] = where
|
||||
continue
|
||||
parse_error("Expected either FROM, IN or WHERE token, found [token(i)] instead.")
|
||||
return i + 1
|
||||
if(!node.Find("from"))
|
||||
node["from"] = list("world")
|
||||
return i
|
||||
|
||||
//from_item: 'world' | object_type
|
||||
/datum/SDQL_parser/proc/from_item(i, list/node)
|
||||
if(token(i) == "world")
|
||||
node += "world"
|
||||
i++
|
||||
else
|
||||
i = object_type(i, node)
|
||||
i = expression(i, node)
|
||||
return i
|
||||
|
||||
//bool_expression: expression [bool_operator bool_expression]
|
||||
@@ -280,6 +247,19 @@
|
||||
if(token(i + 1) == ".")
|
||||
L += "."
|
||||
i = variable(i + 2, L)
|
||||
else if(token(i + 1) == "(") // OH BOY PROC
|
||||
var/list/arguments = list()
|
||||
i = call_function(i, null, arguments)
|
||||
L += ":"
|
||||
L[++L.len] = arguments
|
||||
else if(token(i + 1) == "\[")
|
||||
var/list/expression = list()
|
||||
i = expression(i + 2, expression)
|
||||
if (token(i) != "]")
|
||||
parse_error("Missing ] at the end of list access.")
|
||||
L += "\["
|
||||
L[++L.len] = expression
|
||||
i++
|
||||
else
|
||||
i++
|
||||
return i
|
||||
@@ -291,17 +271,36 @@
|
||||
return i + 1
|
||||
node += token(i)
|
||||
var/list/expression_list = list()
|
||||
if(token(i + 1) != "]")
|
||||
i++
|
||||
if(token(i) != "]")
|
||||
var/list/temp_expression_list = list()
|
||||
var/tok
|
||||
do
|
||||
i = expression(i + 1, temp_expression_list)
|
||||
if(token(i) == ",")
|
||||
tok = token(i)
|
||||
if(tok == "," || tok == ":")
|
||||
if(temp_expression_list == null)
|
||||
parse_error("Found ',' or ':' without expression in an array.")
|
||||
return i + 1
|
||||
expression_list[++expression_list.len] = temp_expression_list
|
||||
temp_expression_list = list()
|
||||
temp_expression_list = null
|
||||
if(tok == ":")
|
||||
temp_expression_list = list()
|
||||
i = expression(i + 1, temp_expression_list)
|
||||
expression_list[expression_list[expression_list.len]] = temp_expression_list
|
||||
temp_expression_list = null
|
||||
tok = token(i)
|
||||
if(tok != ",")
|
||||
if(tok == "]")
|
||||
break
|
||||
parse_error("Expected ',' or ']' after array assoc value, but found '[token(i)]'")
|
||||
return i
|
||||
i++
|
||||
continue
|
||||
temp_expression_list = list()
|
||||
i = expression(i, temp_expression_list)
|
||||
while(token(i) && token(i) != "]")
|
||||
expression_list[++expression_list.len] = temp_expression_list
|
||||
else
|
||||
i++
|
||||
if(temp_expression_list)
|
||||
expression_list[++expression_list.len] = temp_expression_list
|
||||
node[++node.len] = expression_list
|
||||
return i + 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user