mentat/query-projector
Richard Newman a74a2deffc
Introduce RelResult rather than Vec<Vec<TypedValue>>. (#639) r=nalexander
* Pre: clean up core/src/lib.rs.
* Pre: use indexmap 1.0 in db and query-projector.
* Change rel results to be a RelResult instance, not a Vec<Vec<TypedValue>>.

This avoids memory fragmentation and improves locality by using a single
heap-allocated vector for all bindings, rather than a separate
heap-allocated vector for each row.

We hide this abstraction behind the `RelResult` type, which tracks the
stride length (width) of each row.

* Don't allocate temporary vectors when projecting RelResults.
2018-04-24 15:04:00 -07:00
..
src Introduce RelResult rather than Vec<Vec<TypedValue>>. (#639) r=nalexander 2018-04-24 15:04:00 -07:00
tests Fix (the ?foo) (#633) r=nalexander 2018-04-10 11:58:58 -07:00
Cargo.toml Introduce RelResult rather than Vec<Vec<TypedValue>>. (#639) r=nalexander 2018-04-24 15:04:00 -07:00
README.md Implement projection and querying. (#353) r=nalexander 2017-03-06 14:40:10 -08:00

This module handles the derivation from an algebrized query of two things:

  • A SQL projection: a mapping from columns mentioned in the body of the query to columns in the output.
  • A Datalog projection: a function that consumes rows of the appropriate shape (as defined by the SQL projection) to yield one of the four kinds of Datalog query result.

These two must naturally coordinate, and so they are both produced here.