This updates some of the foundational components of Hustle to provide improvements in performance and functionality. Normally PRs should not be this large; however, these changes would probably break Hustle if implemented in a series of smaller PRs, so it is all included here. The changes are summarized below.
Storage Manager
The API is now primarily iterator-based, in contrast to index-based as before.
Tabular data is stored in column-major format, in contrast to row-major.
Insert and delete behavior has changed. Each block maintains a bitmap with a bit for each row. A row is deleted by turning off the bit for that row. A row is inserted into the first slot in the block with an off bit.
There is no concept of a relation, only blocks.
Execution Engine
Relational operators are rewritten to use the new storage manager API.
A destination router has been implemented to improve query performance (hopeful, not yet benchmarked) and reduce lock contention between threads.
There is no concept of a relation, only operators that operate on blocks.
Type System
Types now use static dispatch for comparisons instead of dynamic dispatch.
There is no typed value, only types that perform operations on raw buffers.
Catalog
The catalog has been moved into its own module. The resolver and execution engine both have a reference to the catalog.
Common
The logical plan has been rewritten to be more organized. Expressions and queries are now their own entities, instead of being grouped in with the plan.
This closes #86, closes #87, closes #89, and closes #90.
This updates some of the foundational components of Hustle to provide improvements in performance and functionality. Normally PRs should not be this large; however, these changes would probably break Hustle if implemented in a series of smaller PRs, so it is all included here. The changes are summarized below.
Storage Manager
Execution Engine
Type System
Catalog
Common
This closes #86, closes #87, closes #89, and closes #90.