diff --git a/DESIGN.md b/DESIGN_OLD.md similarity index 91% rename from DESIGN.md rename to DESIGN_OLD.md index d94f87b..b031efe 100644 --- a/DESIGN.md +++ b/DESIGN_OLD.md @@ -1,3 +1,7 @@ +Note that this is a Historical Document. It is a first attempt at +figuring out basic design requirements. + + # MiniSQL ## Official Description @@ -40,7 +44,7 @@ Possible usage: ```./minisql server start --db path/to/db/my-db.db --port 1433``` which will store the database as a file `path/to/db/my-db.db` and open a TCP server on port `1433` * Then on possibly a different machine you run `./minisql client connect server_ip_address:6666` to start a client. This will open a REPL with which you can send queries/db management commands -* TODO: We should also consider writing a rust library that allows you to spin up a client that connects to the server. +* We should also consider writing a rust library that allows you to spin up a client that connects to the server. How would the interface look like? ``` use mysql::{DB, DBConnection} @@ -69,7 +73,7 @@ which will store the database as a file `path/to/db/my-db.db` and open a TCP ser how will the parsing output look like? Consider something like ``` -// TODO: Parser has access to all table metadata +// Parser has access to all table metadata // Could also be called `SQLAbstractSyntaxTree` enum Operation { @@ -132,7 +136,7 @@ type TableName = String // Note that it is nice to split metadata from the data because // then you can give the metadata to the parser without giving it the data. struct TableMetaData { - name: TableName, // TODO: Is this really necessary? probably not + name: TableName, columns: Vec<(ColumnName, DbType, ColumnPosition)> } @@ -142,7 +146,7 @@ struct Table { meta: TableMetaData, rows: Rows // defined below indexes: - BTree // TODO: Consider generalizing ColumnName to semething that would also apply to a pair of ColumnNames etc + BTree } type Tables = HashMap @@ -183,16 +187,13 @@ Vec> * Interpreter ``` trait SqlConsumer { - // TODO: ??? } fn interpret(operation: Operation, tables: &mut Tables, consumer: T) -> () { - // TODO: lock stuff match operation { Select(table_name, column_selection, maybe_condition) => { let table: Table = ... - // TODO: Wrap this into a response select(table, column_selection, maybe_condition, consumer) }, Insert(table_name, Vec<(ColumnName, DbValue)>) => { @@ -209,7 +210,7 @@ fn interpret(operation: Operation, tables: &mut Tables, consumer enum Response { - Selected(impl Iter) // TODO: How to do this? Some reference to an iterator somehow... slice..? + Selected(impl Iter) // How to do this? Some reference to an iterator somehow... slice..? Inserted(???), Deleted(usize), // how many were deleted } @@ -221,7 +222,7 @@ fn select(table: Table, ColumnName ``` -* TODO: Consider streaming the response to the client and not just dumping 10K rows at once. +* Consider streaming the response to the client and not just dumping 10K rows at once.