radixdb_sql/statements/
dispatch.rs1use super::*;
16
17impl Parser {
18 pub fn parse_statement(&mut self) -> Option<Statement> {
20 while self.cur_token_is(TokenType::Comment) {
22 self.next_token();
23 }
24
25 if self.cur_token_is(TokenType::Eof) {
26 return None;
27 }
28
29 if self.cur_token_is(TokenType::Keyword) {
30 let keyword = self.cur_token.literal.to_uppercase();
31 match keyword.as_str() {
32 "SELECT" => self.parse_select_statement().map(Statement::Select),
33 "WITH" => self.parse_with_statement(),
34 "INSERT" => self.parse_insert_statement().map(Statement::Insert),
35 "UPDATE" => self.parse_update_statement().map(Statement::Update),
36 "DELETE" => self.parse_delete_statement().map(Statement::Delete),
37 "TRUNCATE" => self.parse_truncate_statement().map(Statement::Truncate),
38 "CREATE" => self.parse_create_statement(),
39 "DROP" => self.parse_drop_statement(),
40 "ALTER" => self.parse_alter_statement(),
41 "BEGIN" => self.parse_begin_statement().map(Statement::Begin),
42 "COMMIT" => self.parse_commit_statement().map(Statement::Commit),
43 "ROLLBACK" => self.parse_rollback_statement().map(Statement::Rollback),
44 "SAVEPOINT" => self.parse_savepoint_statement().map(Statement::Savepoint),
45 "RELEASE" => self
46 .parse_release_savepoint_statement()
47 .map(Statement::ReleaseSavepoint),
48 "SET" => self
49 .parse_set_statement()
50 .map(|s| Statement::Set(Box::new(s))),
51 "PRAGMA" => self.parse_pragma_statement().map(Statement::Pragma),
52 "VACUUM" => self.parse_vacuum_statement().map(Statement::Vacuum),
53 "SHOW" => self.parse_show_statement(),
54 "DESCRIBE" | "DESC" => self.parse_describe_statement().map(Statement::Describe),
55 "EXPLAIN" => self.parse_explain_statement().map(Statement::Explain),
56 "ANALYZE" => self.parse_analyze_statement().map(Statement::Analyze),
57 "COPY" => self.parse_copy_statement().map(Statement::Copy),
58 "CALL" => self
59 .parse_outer_call_statement()
60 .map(|statement| Statement::Call(Box::new(statement))),
61 "GRANT" => self
62 .parse_grant_statement()
63 .map(|statement| Statement::Grant(Box::new(statement))),
64 "REVOKE" => self
65 .parse_revoke_statement()
66 .map(|statement| Statement::Revoke(Box::new(statement))),
67 _ => {
68 self.parse_expression_statement().map(Statement::Expression)
70 }
71 }
72 } else {
73 self.parse_expression_statement().map(Statement::Expression)
75 }
76 }
77}