mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-28 13:34:24 +01:00
369 lines
10 KiB
Rust
369 lines
10 KiB
Rust
use std::fmt::Display;
|
|
|
|
/// Token classes
|
|
// Generated by lemon (parse.h).
|
|
// Renamed manually.
|
|
// To be keep in sync.
|
|
#[non_exhaustive]
|
|
#[allow(non_camel_case_types, missing_docs)]
|
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd)]
|
|
#[repr(u16)]
|
|
pub enum TokenType {
|
|
TK_EOF = 0,
|
|
TK_SEMI = 1,
|
|
TK_EXPLAIN = 2,
|
|
TK_QUERY = 3,
|
|
TK_PLAN = 4,
|
|
TK_BEGIN = 5,
|
|
TK_TRANSACTION = 6,
|
|
TK_DEFERRED = 7,
|
|
TK_IMMEDIATE = 8,
|
|
TK_EXCLUSIVE = 9,
|
|
TK_COMMIT = 10,
|
|
TK_END = 11,
|
|
TK_ROLLBACK = 12,
|
|
TK_SAVEPOINT = 13,
|
|
TK_RELEASE = 14,
|
|
TK_TO = 15,
|
|
TK_TABLE = 16,
|
|
TK_CREATE = 17,
|
|
TK_IF = 18,
|
|
TK_NOT = 19,
|
|
TK_EXISTS = 20,
|
|
TK_TEMP = 21,
|
|
TK_LP = 22,
|
|
TK_RP = 23,
|
|
TK_AS = 24,
|
|
TK_COMMA = 25,
|
|
TK_WITHOUT = 26,
|
|
TK_ABORT = 27,
|
|
TK_ACTION = 28,
|
|
TK_AFTER = 29,
|
|
TK_ANALYZE = 30,
|
|
TK_ASC = 31,
|
|
TK_ATTACH = 32,
|
|
TK_BEFORE = 33,
|
|
TK_BY = 34,
|
|
TK_CASCADE = 35,
|
|
TK_CAST = 36,
|
|
TK_CONFLICT = 37,
|
|
TK_DATABASE = 38,
|
|
TK_DESC = 39,
|
|
TK_DETACH = 40,
|
|
TK_EACH = 41,
|
|
TK_FAIL = 42,
|
|
TK_OR = 43,
|
|
TK_AND = 44,
|
|
TK_IS = 45,
|
|
TK_ISNOT = 46,
|
|
TK_MATCH = 47,
|
|
TK_LIKE_KW = 48,
|
|
TK_BETWEEN = 49,
|
|
TK_IN = 50,
|
|
TK_ISNULL = 51,
|
|
TK_NOTNULL = 52,
|
|
TK_NE = 53,
|
|
TK_EQ = 54,
|
|
TK_GT = 55,
|
|
TK_LE = 56,
|
|
TK_LT = 57,
|
|
TK_GE = 58,
|
|
TK_ESCAPE = 59,
|
|
TK_ID = 60,
|
|
TK_COLUMNKW = 61,
|
|
TK_DO = 62,
|
|
TK_FOR = 63,
|
|
TK_IGNORE = 64,
|
|
TK_INITIALLY = 65,
|
|
TK_INSTEAD = 66,
|
|
TK_NO = 67,
|
|
TK_KEY = 68,
|
|
TK_OF = 69,
|
|
TK_OFFSET = 70,
|
|
TK_PRAGMA = 71,
|
|
TK_RAISE = 72,
|
|
TK_RECURSIVE = 73,
|
|
TK_REPLACE = 74,
|
|
TK_RESTRICT = 75,
|
|
TK_ROW = 76,
|
|
TK_ROWS = 77,
|
|
TK_TRIGGER = 78,
|
|
TK_VACUUM = 79,
|
|
TK_VIEW = 80,
|
|
TK_VIRTUAL = 81,
|
|
TK_WITH = 82,
|
|
TK_NULLS = 83,
|
|
TK_FIRST = 84,
|
|
TK_LAST = 85,
|
|
TK_CURRENT = 86,
|
|
TK_FOLLOWING = 87,
|
|
TK_PARTITION = 88,
|
|
TK_PRECEDING = 89,
|
|
TK_RANGE = 90,
|
|
TK_UNBOUNDED = 91,
|
|
TK_EXCLUDE = 92,
|
|
TK_GROUPS = 93,
|
|
TK_OTHERS = 94,
|
|
TK_TIES = 95,
|
|
TK_GENERATED = 96,
|
|
TK_ALWAYS = 97,
|
|
TK_MATERIALIZED = 98,
|
|
TK_REINDEX = 99,
|
|
TK_RENAME = 100,
|
|
TK_CTIME_KW = 101,
|
|
TK_ANY = 102,
|
|
TK_BITAND = 103,
|
|
TK_BITOR = 104,
|
|
TK_LSHIFT = 105,
|
|
TK_RSHIFT = 106,
|
|
TK_PLUS = 107,
|
|
TK_MINUS = 108,
|
|
TK_STAR = 109,
|
|
TK_SLASH = 110,
|
|
TK_REM = 111,
|
|
TK_CONCAT = 112,
|
|
TK_PTR = 113,
|
|
TK_COLLATE = 114,
|
|
TK_BITNOT = 115,
|
|
TK_ON = 116,
|
|
TK_INDEXED = 117,
|
|
TK_STRING = 118,
|
|
TK_JOIN_KW = 119,
|
|
TK_CONSTRAINT = 120,
|
|
TK_DEFAULT = 121,
|
|
TK_NULL = 122,
|
|
TK_PRIMARY = 123,
|
|
TK_UNIQUE = 124,
|
|
TK_CHECK = 125,
|
|
TK_REFERENCES = 126,
|
|
TK_AUTOINCR = 127,
|
|
TK_INSERT = 128,
|
|
TK_DELETE = 129,
|
|
TK_UPDATE = 130,
|
|
TK_SET = 131,
|
|
TK_DEFERRABLE = 132,
|
|
TK_FOREIGN = 133,
|
|
TK_DROP = 134,
|
|
TK_UNION = 135,
|
|
TK_ALL = 136,
|
|
TK_EXCEPT = 137,
|
|
TK_INTERSECT = 138,
|
|
TK_SELECT = 139,
|
|
TK_VALUES = 140,
|
|
TK_DISTINCT = 141,
|
|
TK_DOT = 142,
|
|
TK_FROM = 143,
|
|
TK_JOIN = 144,
|
|
TK_USING = 145,
|
|
TK_ORDER = 146,
|
|
TK_GROUP = 147,
|
|
TK_HAVING = 148,
|
|
TK_LIMIT = 149,
|
|
TK_WHERE = 150,
|
|
TK_RETURNING = 151,
|
|
TK_INTO = 152,
|
|
TK_NOTHING = 153,
|
|
TK_BLOB = 154,
|
|
TK_FLOAT = 155,
|
|
TK_INTEGER = 156,
|
|
TK_VARIABLE = 157,
|
|
TK_CASE = 158,
|
|
TK_WHEN = 159,
|
|
TK_THEN = 160,
|
|
TK_ELSE = 161,
|
|
TK_INDEX = 162,
|
|
TK_ALTER = 163,
|
|
TK_ADD = 164,
|
|
TK_WINDOW = 165,
|
|
TK_OVER = 166,
|
|
TK_FILTER = 167,
|
|
TK_ILLEGAL = 185,
|
|
}
|
|
|
|
impl Display for TokenType {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
use TokenType::*;
|
|
let s = match self {
|
|
TK_ABORT => "ABORT",
|
|
TK_ACTION => "ACTION",
|
|
TK_ADD => "ADD",
|
|
TK_AFTER => "AFTER",
|
|
TK_ALL => "ALL",
|
|
TK_ALTER => "ALTER",
|
|
TK_ANALYZE => "ANALYZE",
|
|
TK_ALWAYS => "ALWAYS",
|
|
TK_AND => "AND",
|
|
TK_AS => "AS",
|
|
TK_ASC => "ASC",
|
|
TK_ATTACH => "ATTACH",
|
|
TK_AUTOINCR => "AUTOINCREMENT",
|
|
TK_BEFORE => "BEFORE",
|
|
TK_BEGIN => "BEGIN",
|
|
TK_BETWEEN => "BETWEEN",
|
|
TK_BY => "BY",
|
|
TK_CASCADE => "CASCADE",
|
|
TK_CASE => "CASE",
|
|
TK_CAST => "CAST",
|
|
TK_CHECK => "CHECK",
|
|
TK_COLLATE => "COLLATE",
|
|
TK_COLUMNKW => "COLUMN",
|
|
TK_COMMIT => "COMMIT",
|
|
TK_CONFLICT => "CONFLICT",
|
|
TK_CONSTRAINT => "CONSTRAINT",
|
|
TK_CREATE => "CREATE",
|
|
TK_CURRENT => "CURRENT",
|
|
TK_DATABASE => "DATABASE",
|
|
TK_DEFAULT => "DEFAULT",
|
|
TK_DEFERRABLE => "DEFERRABLE",
|
|
TK_DEFERRED => "DEFERRED",
|
|
TK_DELETE => "DELETE",
|
|
TK_DESC => "DESC",
|
|
TK_DETACH => "DETACH",
|
|
TK_DISTINCT => "DISTINCT",
|
|
TK_DO => "DO",
|
|
TK_DROP => "DROP",
|
|
TK_EACH => "EACH",
|
|
TK_ELSE => "ELSE",
|
|
TK_END => "END",
|
|
TK_ESCAPE => "ESCAPE",
|
|
TK_EXCEPT => "EXCEPT",
|
|
TK_EXCLUDE => "EXCLUDE",
|
|
TK_EXCLUSIVE => "EXCLUSIVE",
|
|
TK_EXISTS => "EXISTS",
|
|
TK_EXPLAIN => "EXPLAIN",
|
|
TK_FAIL => "FAIL",
|
|
TK_FILTER => "FILTER",
|
|
TK_FIRST => "FIRST",
|
|
TK_FOLLOWING => "FOLLOWING",
|
|
TK_FOR => "FOR",
|
|
TK_FOREIGN => "FOREIGN",
|
|
TK_FROM => "FROM",
|
|
TK_GENERATED => "GENERATED",
|
|
TK_GROUP => "GROUP",
|
|
TK_GROUPS => "GROUPS",
|
|
TK_HAVING => "HAVING",
|
|
TK_IF => "IF",
|
|
TK_IGNORE => "IGNORE",
|
|
TK_IMMEDIATE => "IMMEDIATE",
|
|
TK_IN => "IN",
|
|
TK_INDEX => "INDEX",
|
|
TK_INDEXED => "INDEXED",
|
|
TK_INITIALLY => "INITIALLY",
|
|
TK_INSERT => "INSERT",
|
|
TK_INSTEAD => "INSTEAD",
|
|
TK_INTERSECT => "INTERSECT",
|
|
TK_INTO => "INTO",
|
|
TK_IS => "IS",
|
|
TK_ISNULL => "ISNULL",
|
|
TK_JOIN => "JOIN",
|
|
TK_KEY => "KEY",
|
|
TK_LAST => "LAST",
|
|
TK_LIMIT => "LIMIT",
|
|
TK_MATCH => "MATCH",
|
|
TK_MATERIALIZED => "MATERIALIZED",
|
|
TK_NO => "NO",
|
|
TK_NOT => "NOT",
|
|
TK_NOTHING => "NOTHING",
|
|
TK_NOTNULL => "NOTNULL",
|
|
TK_NULL => "NULL",
|
|
TK_NULLS => "NULLS",
|
|
TK_OF => "OF",
|
|
TK_OFFSET => "OFFSET",
|
|
TK_ON => "ON",
|
|
TK_OR => "OR",
|
|
TK_ORDER => "ORDER",
|
|
TK_OTHERS => "OTHERS",
|
|
TK_OVER => "OVER",
|
|
TK_PARTITION => "PARTITION",
|
|
TK_PLAN => "PLAN",
|
|
TK_PRAGMA => "PRAGMA",
|
|
TK_PRECEDING => "PRECEDING",
|
|
TK_PRIMARY => "PRIMARY",
|
|
TK_QUERY => "QUERY",
|
|
TK_RAISE => "RAISE",
|
|
TK_RANGE => "RANGE",
|
|
TK_RECURSIVE => "RECURSIVE",
|
|
TK_REFERENCES => "REFERENCES",
|
|
TK_REINDEX => "REINDEX",
|
|
TK_RELEASE => "RELEASE",
|
|
TK_RENAME => "RENAME",
|
|
TK_REPLACE => "REPLACE",
|
|
TK_RETURNING => "RETURNING",
|
|
TK_RESTRICT => "RESTRICT",
|
|
TK_ROLLBACK => "ROLLBACK",
|
|
TK_ROW => "ROW",
|
|
TK_ROWS => "ROWS",
|
|
TK_SAVEPOINT => "SAVEPOINT",
|
|
TK_SELECT => "SELECT",
|
|
TK_SET => "SET",
|
|
TK_TABLE => "TABLE",
|
|
TK_TEMP => "TEMP", // or TEMPORARY
|
|
TK_TIES => "TIES",
|
|
TK_THEN => "THEN",
|
|
TK_TO => "TO",
|
|
TK_TRANSACTION => "TRANSACTION",
|
|
TK_TRIGGER => "TRIGGER",
|
|
TK_UNBOUNDED => "UNBOUNDED",
|
|
TK_UNION => "UNION",
|
|
TK_UNIQUE => "UNIQUE",
|
|
TK_UPDATE => "UPDATE",
|
|
TK_USING => "USING",
|
|
TK_VACUUM => "VACUUM",
|
|
TK_VALUES => "VALUES",
|
|
TK_VIEW => "VIEW",
|
|
TK_VIRTUAL => "VIRTUAL",
|
|
TK_WHEN => "WHEN",
|
|
TK_WHERE => "WHERE",
|
|
TK_WINDOW => "WINDOW",
|
|
TK_WITH => "WITH",
|
|
TK_WITHOUT => "WITHOUT",
|
|
TK_BITAND => "&",
|
|
TK_BITNOT => "~",
|
|
TK_BITOR => "|",
|
|
TK_COMMA => ",",
|
|
TK_CONCAT => "||",
|
|
TK_DOT => ".",
|
|
TK_EQ => "=", // or ==
|
|
TK_GT => ">",
|
|
TK_GE => ">=",
|
|
TK_LP => "(",
|
|
TK_LSHIFT => "<<",
|
|
TK_LE => "<=",
|
|
TK_LT => "<",
|
|
TK_MINUS => "-",
|
|
TK_NE => "!=", // or <>
|
|
TK_PLUS => "+",
|
|
TK_REM => "%",
|
|
TK_RP => ")",
|
|
TK_RSHIFT => ">>",
|
|
TK_SEMI => ";",
|
|
TK_SLASH => "/",
|
|
TK_STAR => "*",
|
|
_ => "unknown",
|
|
};
|
|
write!(f, "{s}")
|
|
}
|
|
}
|
|
|
|
impl TokenType {
|
|
/// if your parsing process expects next token to be TK_ID, remember to call this function !!!
|
|
pub fn fallback_id_if_ok(self) -> Self {
|
|
use TokenType::*;
|
|
match self {
|
|
TK_ABORT | TK_ACTION | TK_AFTER | TK_ANALYZE | TK_ASC | TK_ATTACH | TK_BEFORE
|
|
| TK_BEGIN | TK_BY | TK_CASCADE | TK_CAST | TK_COLUMNKW | TK_CONFLICT | TK_DATABASE
|
|
| TK_DEFERRED | TK_DESC | TK_DETACH | TK_DO | TK_EACH | TK_END | TK_EXCLUSIVE
|
|
| TK_EXPLAIN | TK_FAIL | TK_FOR | TK_IGNORE | TK_IMMEDIATE | TK_INITIALLY
|
|
| TK_INSTEAD | TK_LIKE_KW | TK_MATCH | TK_NO | TK_PLAN | TK_QUERY | TK_KEY | TK_OF
|
|
| TK_OFFSET | TK_PRAGMA | TK_RAISE | TK_RECURSIVE | TK_RELEASE | TK_REPLACE
|
|
| TK_RESTRICT | TK_ROW | TK_ROWS | TK_ROLLBACK | TK_SAVEPOINT | TK_TEMP
|
|
| TK_TRIGGER | TK_VACUUM | TK_VIEW | TK_VIRTUAL | TK_WITH | TK_WITHOUT | TK_NULLS
|
|
| TK_FIRST | TK_LAST | TK_EXCEPT | TK_INTERSECT | TK_UNION | TK_CURRENT
|
|
| TK_FOLLOWING | TK_PARTITION | TK_PRECEDING | TK_RANGE | TK_UNBOUNDED | TK_EXCLUDE
|
|
| TK_GROUPS | TK_OTHERS | TK_TIES | TK_GENERATED | TK_ALWAYS | TK_MATERIALIZED
|
|
| TK_REINDEX | TK_RENAME | TK_CTIME_KW | TK_IF => TK_ID,
|
|
_ => self,
|
|
}
|
|
}
|
|
}
|