diff --git a/doc/README.md b/doc/README.md index 7713141..1939d0c 100644 --- a/doc/README.md +++ b/doc/README.md @@ -228,6 +228,63 @@ tag_id is a slash-separated list of numeric IDs that roughly describe all effect - 614 base stat threshold passive - 615 mood passive +unrelated, query to get all condition types: +```sql +WITH RECURSIVE condition AS ( + SELECT DISTINCT precondition_1 AS c FROM skill_data + UNION + SELECT DISTINCT condition_1 AS c FROM skill_data + UNION + SELECT DISTINCT precondition_2 AS c FROM skill_data + UNION + SELECT DISTINCT condition_2 AS c FROM skill_data +), disj AS ( + SELECT + IIF(INSTR(c, '@') != 0, SUBSTR(c, 1, INSTR(c, '@')-1), c) AS c, + IIF(INSTR(c, '@') != 0, SUBSTR(c, 1 + INSTR(c, '@')), '') AS rest + FROM condition + UNION + SELECT + IIF(INSTR(rest, '@') != 0, SUBSTR(rest, 1, INSTR(rest, '@')-1), rest) AS c, + IIF(INSTR(rest, '@') != 0, SUBSTR(rest, 1 + INSTR(rest, '@')), '') AS rest + FROM disj + WHERE rest != '' +), term AS ( + SELECT + IIF(INSTR(c, '&') != 0, SUBSTR(c, 1, INSTR(c, '&')-1), c) AS term, + IIF(INSTR(c, '&') != 0, SUBSTR(c, 1 + INSTR(c, '&')), '') AS rest + FROM disj + UNION + SELECT + IIF(INSTR(rest, '&') != 0, SUBSTR(rest, 1, INSTR(rest, '&')-1), rest) AS term, + IIF(INSTR(rest, '&') != 0, SUBSTR(rest, 1 + INSTR(rest, '&')), '') AS rest + FROM term + WHERE rest != '' +), op AS ( + SELECT + term, + CASE + WHEN INSTR(term, '==') != 0 THEN '==' + WHEN INSTR(term, '!=') != 0 THEN '!=' + WHEN INSTR(term, '<=') != 0 THEN '<=' + WHEN INSTR(term, '>=') != 0 THEN '>=' + WHEN INSTR(term, '<') != 0 THEN '<' + WHEN INSTR(term, '>') != 0 THEN '>' + END AS op + FROM term WHERE term != '' +), type_op_arg AS ( + SELECT DISTINCT + term, + SUBSTR(term, 1, INSTR(term, op) - 1) AS "type", + op, + CAST(SUBSTR(term, INSTR(term, op) + LENGTH(op)) AS INTEGER) AS arg + FROM op +) +SELECT DISTINCT CONCAT(type, op), arg FROM type_op_arg +``` + +final select can be adjusted to get different info, but type+op together seems most useful + # races - group 1, grade: g1 100, g2 200, g3 300, op 400, pre-op 700