Explain the role of the DESIGN_OLD.md file
This commit is contained in:
parent
e22b31dc41
commit
a3e3390c85
1 changed files with 10 additions and 9 deletions
|
|
@ -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<ColumnName, Index> // TODO: Consider generalizing ColumnName to semething that would also apply to a pair of ColumnNames etc
|
||||
BTree<ColumnName, Index>
|
||||
}
|
||||
|
||||
type Tables = HashMap<TableName, Table>
|
||||
|
|
@ -183,16 +187,13 @@ Vec<Vec<DbValue>>
|
|||
* Interpreter
|
||||
```
|
||||
trait SqlConsumer {
|
||||
// TODO:
|
||||
???
|
||||
}
|
||||
|
||||
fn interpret<T: SqlConsumer>(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<T: SqlConsumer>(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.
|
||||
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue