Skip to main content

CodeGenerator

Struct CodeGenerator 

Source
pub struct CodeGenerator { /* private fields */ }
Expand description

Code generator.

Implementations§

Source§

impl CodeGenerator

Source

pub fn new(optimize: bool) -> Self

Create new code generator.

Source

pub fn generate( &self, ir: &AuthoringIR, _templates: &[SqlTemplate], ) -> Result<CompiledSchema>

Generate a compiled schema from the intermediate representation.

§Architecture: Schema vs. Templates vs. Metadata

FraiseQL separates schema definition from execution artifacts:

§What This Function Generates

The CompiledSchema contains the schema definition - types, fields, enums, interfaces, unions, and query/mutation/subscription signatures. This is what GraphQL introspection tools query and what the runtime uses for query validation.

§What This Function Does NOT Generate
§1. SQL Templates

SQL templates are managed separately by the compilation pipeline. They are:

  • Generated in a separate compiler pass after schema validation
  • Kept separate to allow schema reuse across database backends
  • Passed to the runtime executor independently

Why: Allows updating SQL generation strategy without recompiling schema definitions. For example, you could optimize SQL templates without changing type definitions.

§2. Fact Tables

Fact table metadata is populated by the compiler from ir.fact_tables in a separate initialization pass. This maintains:

  • Clean separation of concerns (schema def vs. analytics metadata)
  • Ability to update fact table configuration independently
  • Clear data flow through compilation pipeline

Why: Fact tables are configuration-driven metadata. Keeping them separate allows analytics tuning without affecting core schema.

§Parameters
  • ir - The intermediate representation generated by the compiler
  • _templates - SQL templates (currently unused; kept for API compatibility)
§Errors

Returns a Result with compilation errors if schema validation fails.

§Examples
use fraiseql_core::compiler::*;

// Given an AuthoringIR from the compiler pipeline:
let codegen = CodeGenerator::new(true);
let compiled_schema = codegen.generate(&authoring_ir, &[])?;

// Runtime uses compiled_schema for query execution
§See Also
  • (Compilation): SQL template generation
  • Compiler module documentation for pipeline overview
Source

pub const fn optimize(&self) -> bool

Check if optimization is enabled.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more