Repository files navigation
Relational database in rust
Broad testsuite
Persistance to disk
Basic concurrency: table-level locking, multiple readers and one writer per table. connect via tcp.
On a Deadlock, all transactions are rejected
Can run embedded or as a server
ToDo: Vacuuming
write SQL queries in c-in, read the results from c-out
exit saves the database to disk
see help for other commands
see ./java/... for a jdbc driver, which connects to the database via sockets (type 4 driver)
Currently implemented SQL
CREATE TABLE ..., DROP TABLE ...
INSERT INTO ...
SELECT ... / DELETE FROM ... WHERE ... AND / OR / XOR ... IN ( ... )
UPDATE ... SET ... = ... WHERE ...
INNER JOIN (=JOIN) and NATURAL JOIN (also "inner")
Subqueries
CREATE INDEX ... ON ... (...), DROP INDEX ...
Setoperations: UNION, ALL, INTERSECT, EXCEPT (=MINUS)
BEGIN TRANSACTION, ROLLBACK, COMMIT
Java-clients with the included jdbc type 4 driver or other implementation of the TCP protocol
Server
PagerAccessor (virtual transactions per client-thread (or real transactions if the client explicitly starts them))
QueryExecutor (shared pager)
...
Rust-program or RustQL-Shell
QueryExecutor -uses-> Parser and Planner (1st treewalker and optimizer: pushes projections and filters)
Dataframe (lazy evaluation of planned tree. 2nd treewalker)
BTreeCursor
BTree
BTreeNode (interface from the btree to the pagerproxy)
PagerProxy (get and set rows and keys and children of nodes)
PageManager (manages data and overflow pages)
PagerAccessor (frontend to manage read vs write access)
Pager (access control and transaction management, file-io)
You can’t perform that action at this time.