oxibase 0.4.10

Autonomous relational database management system with MVCC, time-travel queries, and full ACID compliance
Documentation
--- src/parser/statements.rs
+++ src/parser/statements.rs
@@ -35,7 +35,7 @@
                 "CREATE" => self.parse_create_statement(),
                 "DROP" => self.parse_drop_statement(),
                 "CALL" => self.parse_call_statement().map(Statement::Call),
-                "ALTER" => self.parse_alter_statement().map(Statement::AlterTable),
+                "ALTER" => self.parse_alter_statement(),
                 "USE" => self.parse_use_statement().map(Statement::UseSchema),
                 "BEGIN" => self.parse_begin_statement().map(Statement::Begin),
                 "COMMIT" => self.parse_commit_statement().map(Statement::Commit),
@@ -1313,6 +1313,10 @@
             self.next_token();
             self.parse_create_schema_statement()
                 .map(Statement::CreateSchema)
+        } else if self.peek_token_is_keyword("SEQUENCE") {
+            self.next_token();
+            self.parse_create_sequence_statement()
+                .map(Statement::CreateSequence)
         } else if self.peek_token_is_keyword("FUNCTION") {
             self.next_token();
             self.parse_create_function_statement()
@@ -2537,6 +2541,10 @@
             self.next_token();
             self.parse_drop_schema_statement()
                 .map(Statement::DropSchema)
+        } else if self.peek_token_is_keyword("SEQUENCE") {
+            self.next_token();
+            self.parse_drop_sequence_statement()
+                .map(Statement::DropSequence)
         } else if self.peek_token_is_keyword("FUNCTION") {
             self.next_token();
             self.parse_drop_function_statement()
@@ -2583,14 +2591,24 @@
         }
     }
 
-    fn parse_alter_statement(&mut self) -> Option<AlterTableStatement> {
+    fn parse_alter_statement(&mut self) -> Option<Statement> {
         let token = self.cur_token.clone();
 
+        if self.peek_token_is_keyword("SEQUENCE") {
+            self.next_token(); // CONSUME 'SEQUENCE'
+            return self.parse_alter_sequence_statement().map(Statement::AlterSequence);
+        }
+
         // Expect TABLE
         if !self.expect_keyword("TABLE") {
             return None;
         }
 
+        self.parse_alter_table_statement(token).map(Statement::AlterTable)
+    }
+
+    fn parse_alter_table_statement(&mut self, token: Token) -> Option<AlterTableStatement> {
         // Parse table name
         if !self.expect_peek(TokenType::Identifier) {
             return None;