SelectElaborator

A compiler phase which translates Select nodes to be directly interpretable.

This phase,

  1. types bindings according to the schema: i) untyped enums are validated and typed according to their declared type. ii) String and Int bindings are translated to ID bindings where appropriate. iii) default values are supplied for missing arguments. iv) arguments are permuted into the order declared in the schema.

  2. eliminates Select arguments by delegating to a model-specific PartialFunction which is responsible for translating Select nodes into a form which is directly interpretable, replacing them with a Filter or Unique node with a Predicate which is parameterized by the arguments, eg.

  Select("character", List(IDBinding("id", "1000")), child)

might be translated to,

  Filter(FieldEquals("id", "1000"), child)
  1. types narrowing coercions by resolving the target type against the schema.

  2. verifies that leaves have an empty subselection set and that structured types have a non-empty subselection set.

  3. eliminates Skipped nodes.

trait Phase
class Object
trait Matchable
class Any

Value members

Concrete methods

def elaborateArgs(tpe: Type, fieldName: String, args: List[Binding]): Result[List[Binding]]
override def transform(query: Query, vars: Vars, schema: Schema, tpe: Type): Result[Query]
Definition Classes