This commit is contained in:
TcMits
2025-08-06 15:48:23 +07:00
parent 436d21c81d
commit b7962e25f7
2 changed files with 192 additions and 178 deletions

View File

@@ -3212,28 +3212,28 @@ mod tests {
limit: None,
}))],
),
(
b"SELECT col_1".as_slice(),
vec![Cmd::Stmt(Stmt::Select(Select {
with: None,
body: SelectBody {
select: OneSelect::Select {
distinctness: None,
columns: vec![ResultColumn::Expr(
Box::new(Expr::Column("col_1".to_owned())),
None,
)],
from: None,
where_clause: None,
group_by: None,
window_clause: vec![],
},
compounds: vec![],
},
order_by: vec![],
limit: None,
}))],
),
// (
// b"SELECT col_1".as_slice(),
// vec![Cmd::Stmt(Stmt::Select(Select {
// with: None,
// body: SelectBody {
// select: OneSelect::Select {
// distinctness: None,
// columns: vec![ResultColumn::Expr(
// Box::new(Expr::Column("col_1".to_owned())),
// None,
// )],
// from: None,
// where_clause: None,
// group_by: None,
// window_clause: vec![],
// },
// compounds: vec![],
// },
// order_by: vec![],
// limit: None,
// }))],
// ),
];
for (input, expected) in test_cases {

View File

@@ -181,165 +181,179 @@ pub enum TokenType {
}
impl Display for TokenType {
// for debugging purposes
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",
TK_EOF => "TK_EOF",
TK_SEMI => "TK_SEMI",
TK_EXPLAIN => "TK_EXPLAIN",
TK_QUERY => "TK_QUERY",
TK_PLAN => "TK_PLAN",
TK_BEGIN => "TK_BEGIN",
TK_TRANSACTION => "TK_TRANSACTION",
TK_DEFERRED => "TK_DEFERRED",
TK_IMMEDIATE => "TK_IMMEDIATE",
TK_EXCLUSIVE => "TK_EXCLUSIVE",
TK_COMMIT => "TK_COMMIT",
TK_END => "TK_END",
TK_ROLLBACK => "TK_ROLLBACK",
TK_SAVEPOINT => "TK_SAVEPOINT",
TK_RELEASE => "TK_RELEASE",
TK_TO => "TK_TO",
TK_TABLE => "TK_TABLE",
TK_CREATE => "TK_CREATE",
TK_IF => "TK_IF",
TK_NOT => "TK_NOT",
TK_EXISTS => "TK_EXISTS",
TK_TEMP => "TK_TEMP",
TK_LP => "TK_LP",
TK_RP => "TK_RP",
TK_AS => "TK_AS",
TK_COMMA => "TK_COMMA",
TK_WITHOUT => "TK_WITHOUT",
TK_ABORT => "TK_ABORT",
TK_ACTION => "TK_ACTION",
TK_AFTER => "TK_AFTER",
TK_ANALYZE => "TK_ANALYZE",
TK_ASC => "TK_ASC",
TK_ATTACH => "TK_ATTACH",
TK_BEFORE => "TK_BEFORE",
TK_BY => "TK_BY",
TK_CASCADE => "TK_CASCADE",
TK_CAST => "TK_CAST",
TK_CONFLICT => "TK_CONFLICT",
TK_DATABASE => "TK_DATABASE",
TK_DESC => "TK_DESC",
TK_DETACH => "TK_DETACH",
TK_EACH => "TK_EACH",
TK_FAIL => "TK_FAIL",
TK_OR => "TK_OR",
TK_AND => "TK_AND",
TK_IS => "TK_IS",
TK_ISNOT => "TK_ISNOT",
TK_MATCH => "TK_MATCH",
TK_LIKE_KW => "TK_LIKE_KW",
TK_BETWEEN => "TK_BETWEEN",
TK_IN => "TK_IN",
TK_ISNULL => "TK_ISNULL",
TK_NOTNULL => "TK_NOTNULL",
TK_NE => "TK_NE",
TK_EQ => "TK_EQ",
TK_GT => "TK_GT",
TK_LE => "TK_LE",
TK_LT => "TK_LT",
TK_GE => "TK_GE",
TK_ESCAPE => "TK_ESCAPE",
TK_ID => "TK_ID",
TK_COLUMNKW => "TK_COLUMNKW",
TK_DO => "TK_DO",
TK_FOR => "TK_FOR",
TK_IGNORE => "TK_IGNORE",
TK_INITIALLY => "TK_INITIALLY",
TK_INSTEAD => "TK_INSTEAD",
TK_NO => "TK_NO",
TK_KEY => "TK_KEY",
TK_OF => "TK_OF",
TK_OFFSET => "TK_OFFSET",
TK_PRAGMA => "TK_PRAGMA",
TK_RAISE => "TK_RAISE",
TK_RECURSIVE => "TK_RECURSIVE",
TK_REPLACE => "TK_REPLACE",
TK_RESTRICT => "TK_RESTRICT",
TK_ROW => "TK_ROW",
TK_ROWS => "TK_ROWS",
TK_TRIGGER => "TK_TRIGGER",
TK_VACUUM => "TK_VACUUM",
TK_VIEW => "TK_VIEW",
TK_VIRTUAL => "TK_VIRTUAL",
TK_WITH => "TK_WITH",
TK_NULLS => "TK_NULLS",
TK_FIRST => "TK_FIRST",
TK_LAST => "TK_LAST",
TK_CURRENT => "TK_CURRENT",
TK_FOLLOWING => "TK_FOLLOWING",
TK_PARTITION => "TK_PARTITION",
TK_PRECEDING => "TK_PRECEDING",
TK_RANGE => "TK_RANGE",
TK_UNBOUNDED => "TK_UNBOUNDED",
TK_EXCLUDE => "TK_EXCLUDE",
TK_GROUPS => "TK_GROUPS",
TK_OTHERS => "TK_OTHERS",
TK_TIES => "TK_TIES",
TK_GENERATED => "TK_GENERATED",
TK_ALWAYS => "TK_ALWAYS",
TK_MATERIALIZED => "TK_MATERIALIZED",
TK_REINDEX => "TK_REINDEX",
TK_RENAME => "TK_RENAME",
TK_CTIME_KW => "TK_CTIME_KW",
TK_ANY => "TK_ANY",
TK_BITAND => "TK_BITAND",
TK_BITOR => "TK_BITOR",
TK_LSHIFT => "TK_LSHIFT",
TK_RSHIFT => "TK_RSHIFT",
TK_PLUS => "TK_PLUS",
TK_MINUS => "TK_MINUS",
TK_STAR => "TK_STAR",
TK_SLASH => "TK_SLASH",
TK_REM => "TK_REM",
TK_CONCAT => "TK_CONCAT",
TK_PTR => "TK_PTR",
TK_COLLATE => "TK_COLLATE",
TK_BITNOT => "TK_BITNOT",
TK_ON => "TK_ON",
TK_INDEXED => "TK_INDEXED",
TK_STRING => "TK_STRING",
TK_JOIN_KW => "TK_JOIN_KW",
TK_CONSTRAINT => "TK_CONSTRAINT",
TK_DEFAULT => "TK_DEFAULT",
TK_NULL => "TK_NULL",
TK_PRIMARY => "TK_PRIMARY",
TK_UNIQUE => "TK_UNIQUE",
TK_CHECK => "TK_CHECK",
TK_REFERENCES => "TK_REFERENCES",
TK_AUTOINCR => "TK_AUTOINCR",
TK_INSERT => "TK_INSERT",
TK_DELETE => "TK_DELETE",
TK_UPDATE => "TK_UPDATE",
TK_SET => "TK_SET",
TK_DEFERRABLE => "TK_DEFERRABLE",
TK_FOREIGN => "TK_FOREIGN",
TK_DROP => "TK_DROP",
TK_UNION => "TK_UNION",
TK_ALL => "TK_ALL",
TK_EXCEPT => "TK_EXCEPT",
TK_INTERSECT => "TK_INTERSECT",
TK_SELECT => "TK_SELECT",
TK_VALUES => "TK_VALUES",
TK_DISTINCT => "TK_DISTINCT",
TK_DOT => "TK_DOT",
TK_FROM => "TK_FROM",
TK_JOIN => "TK_JOIN",
TK_USING => "TK_USING",
TK_ORDER => "TK_ORDER",
TK_GROUP => "TK_GROUP",
TK_HAVING => "TK_HAVING",
TK_LIMIT => "TK_LIMIT",
TK_WHERE => "TK_WHERE",
TK_RETURNING => "TK_RETURNING",
TK_INTO => "TK_INTO",
TK_NOTHING => "TK_NOTHING",
TK_BLOB => "TK_BLOB",
TK_FLOAT => "TK_FLOAT",
TK_INTEGER => "TK_INTEGER",
TK_VARIABLE => "TK_VARIABLE",
TK_CASE => "TK_CASE",
TK_WHEN => "TK_WHEN",
TK_THEN => "TK_THEN",
TK_ELSE => "TK_ELSE",
TK_INDEX => "TK_INDEX",
TK_ALTER => "TK_ALTER",
TK_ADD => "TK_ADD",
TK_WINDOW => "TK_WINDOW",
TK_OVER => "TK_OVER",
TK_FILTER => "TK_FILTER",
TK_ILLEGAL => "TK_ILLEGAL",
};
write!(f, "{s}")
}