Skip to main content

CodeGenerator

Struct CodeGenerator 

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

Code generator.

Implementations§

Source§

impl CodeGenerator

Source

pub const fn new(optimize: bool) -> Self

Create new code generator.

Source

pub fn generate(&self, ir: &AuthoringIR) -> 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
§Errors

Returns a Result with compilation errors if schema validation fails.

§Examples
use fraiseql_core::compiler::{CodeGenerator, AuthoringIR};
let authoring_ir = AuthoringIR::new();
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
§Errors

Returns FraiseQLError::Validation if the IR contains invalid field types, unknown types, or conflicting definitions. Returns FraiseQLError::Internal for unexpected code-generation failures.

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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