Struct mentat_query_projector::CombinedProjection [] [src]

pub struct CombinedProjection {
    pub sql_projection: Projection,
    pub pre_aggregate_projection: Option<Projection>,
    pub datalog_projector: Box<Projector>,
    pub distinct: bool,
    pub group_by_cols: Vec<GroupBy>,
}

Combines the things you need to turn a query into SQL and turn its results into QueryResults: SQL-related projection information (DISTINCT, columns, etc.) and a Datalog projector that turns SQL into structures.

Fields

A SQL projection, mapping columns mentioned in the body of the query to columns in the output.

If a query contains aggregates, we need to generate a nested subquery: an inner query that returns our distinct variable bindings (and any :with vars), and an outer query that applies aggregation. That's so we can put DISTINCT in the inner query and apply aggregation afterwards -- SELECT DISTINCT count(foo) counts then uniques, and we need the opposite to implement Datalog distinct semantics. If this is the case, sql_projection will be the outer query's projection list, and pre_aggregate_projection will be the inner. If the query doesn't use aggregation, this field will be None.

A Datalog projection. This consumes rows of the appropriate shape (as defined by the SQL projection) to yield one of the four kinds of Datalog query result.

True if this query requires the SQL query to include DISTINCT.