Middleware for adding remapping and other dimension related projections. This remaps Fields that have a corresponding
Dimension object (which defines a remapping) in two different ways, depending on the :type
attribute of the
Dimension:
external
type Dimensions mean the Field's values will be replaced with corresponding values from a column on a
different table, joined via a foreign key. A common use-case would be to replace FK IDs with the name of whatever it
references, for example replacing a values of venue.category_id
with values of category.name
. Actual replacement
of values happens on the frontend, so this middleware simply adds the column to be used for replacement (e.g.
category.name
) to the :fields
clause in pre-processing, so the Field will be fetched. Recall that Fields
referenced via with :fk->
clauses imply that JOINs will take place, which are automatically handled later in the
Query Processor pipeline. Additionally, this middleware will swap out and :order-by
clauses referencing the
original Field with ones referencing the remapped Field (for example, so we would sort by category.name
instead of
category_id
).
internal
type Dimensions mean the Field's values are replaced by a user-defined map of values, stored in the
human_readable_values
column of a corresponding FieldValues
object. A common use-case for this scenario would be
to replace integer enum values with something more descriptive, for example replacing values of an enum can_type
-- 0
becomes Toucan
, 1
becomes Pelican
, and so forth. This is handled exclusively in post-processing by
adding extra columns and values to the results.
In both cases, to accomplish values replacement on the frontend, the post-processing part of this middleware adds
appropriate :remapped_from
and :remapped_to
attributes in the result :cols
in post-processing.
:remapped_from
and :remapped_to
are the names of the columns, e.g. category_id
is :remapped_to
name
, and
name
is :remapped_from
:category_id
.
Middleware for adding remapping and other dimension related projections. This remaps Fields that have a corresponding Dimension object (which defines a remapping) in two different ways, depending on the `:type` attribute of the Dimension: `external` type Dimensions mean the Field's values will be replaced with corresponding values from a column on a different table, joined via a foreign key. A common use-case would be to replace FK IDs with the name of whatever it references, for example replacing a values of `venue.category_id` with values of `category.name`. Actual replacement of values happens on the frontend, so this middleware simply adds the column to be used for replacement (e.g. `category.name`) to the `:fields` clause in pre-processing, so the Field will be fetched. Recall that Fields referenced via with `:fk->` clauses imply that JOINs will take place, which are automatically handled later in the Query Processor pipeline. Additionally, this middleware will swap out and `:order-by` clauses referencing the original Field with ones referencing the remapped Field (for example, so we would sort by `category.name` instead of `category_id`). `internal` type Dimensions mean the Field's values are replaced by a user-defined map of values, stored in the `human_readable_values` column of a corresponding `FieldValues` object. A common use-case for this scenario would be to replace integer enum values with something more descriptive, for example replacing values of an enum `can_type` -- `0` becomes `Toucan`, `1` becomes `Pelican`, and so forth. This is handled exclusively in post-processing by adding extra columns and values to the results. In both cases, to accomplish values replacement on the frontend, the post-processing part of this middleware adds appropriate `:remapped_from` and `:remapped_to` attributes in the result `:cols` in post-processing. `:remapped_from` and `:remapped_to` are the names of the columns, e.g. `category_id` is `:remapped_to` `name`, and `name` is `:remapped_from` `:category_id`.
(add-remapping qp)
Query processor middleware. qp
is the query processor, returns a function that works on a query
map. Delgates to
add-fk-remaps
for making remapping changes to the query (before executing the query). Then delegates to
remap-results
to munge the results after query execution.
Query processor middleware. `qp` is the query processor, returns a function that works on a `query` map. Delgates to `add-fk-remaps` for making remapping changes to the query (before executing the query). Then delegates to `remap-results` to munge the results after query execution.
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close