A projector component is one that projects an attribute signature to the
downstream components in the flow. An example is a datastore source
component projecting it's columns downstream, through some
transformations and into a target.
A selector component is one that does not define a new set of projector
attributes, but instead passes along a set of upstream projector
attributes. Typically the selector would add some kind of clause to the
source query. For example a filter component is a selector that adds a
where clause to the source query, but passes along the set of upstream
projector attributes to it's downstream targets.
A decorator is a selector that can add some attributes of it's own, but
does not define a new projection. For example an expression operator
still passes along the set of upstream projection attributes, like a
selector, but may add some attributes of it's own that represent
expressions that have references to the existing upstream attributes.
A composite component is a component that directly owns other components.
This is to be distinguished from a pluggable component, which is bound to
another interface. The composite is just a container, with no code
generation behavior of it's own, but passes along flow connections from
it's connector points to it's child connector points inside the child