This commit is contained in:
parent
8e9efaca63
commit
1e819b3a24
72
src/main.rs
72
src/main.rs
@ -6,6 +6,44 @@ struct InputBuffer {
|
|||||||
buffer: Option<String>,
|
buffer: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum MetaCommandResult {
|
||||||
|
Success,
|
||||||
|
Unrecognized,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PrepareResult {
|
||||||
|
Success,
|
||||||
|
Unrecognized,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum StatementType {
|
||||||
|
Insert,
|
||||||
|
Select,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Statement {
|
||||||
|
statement_type: StatementType,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Statement {
|
||||||
|
fn new(statement_type: StatementType) -> Self {
|
||||||
|
Self {
|
||||||
|
statement_type
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn execute(&self) {
|
||||||
|
match self.statement_type {
|
||||||
|
StatementType::Insert => {
|
||||||
|
println!("This is where you do an insert")
|
||||||
|
}
|
||||||
|
StatementType::Select => {
|
||||||
|
println!("This is where you do an select")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl InputBuffer {
|
impl InputBuffer {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
return Self {
|
return Self {
|
||||||
@ -38,18 +76,40 @@ impl InputBuffer {
|
|||||||
pub(crate) fn parse(&self) {
|
pub(crate) fn parse(&self) {
|
||||||
match &self.buffer {
|
match &self.buffer {
|
||||||
Some(command) => {
|
Some(command) => {
|
||||||
match command.as_str().replace("\n", "").trim() {
|
if command.starts_with(".") {
|
||||||
".exit" => {
|
Self::handle_meta_statement(command);
|
||||||
exit(0);
|
} else {
|
||||||
}
|
if let Ok(statement) = Self::prepare_statement(command) {
|
||||||
cmd => {
|
statement.execute()
|
||||||
println!("Could not handle command: {cmd}")
|
} else {
|
||||||
|
println!("could not recognize statement");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => {}
|
None => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn prepare_statement(command: &String) -> Result<Statement, String> {
|
||||||
|
if command.starts_with("insert") {
|
||||||
|
Ok(Statement::new(StatementType::Insert))
|
||||||
|
} else if command.starts_with("select") {
|
||||||
|
Ok(Statement::new(StatementType::Select))
|
||||||
|
} else {
|
||||||
|
Err(String::from("Unrecognized statement"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_meta_statement(command: &String) {
|
||||||
|
match command.replace("\n", "").trim() {
|
||||||
|
".exit" => {
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
cmd => {
|
||||||
|
println!("Could not handle command: {cmd}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user