Skip to main content

SchemaGraph

Struct SchemaGraph 

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

A semantic graph of SurrealQL schema definitions.

Built from .surql files, provides fast lookups for tables, fields, functions, and their relationships.

Implementations§

Source§

impl SchemaGraph

Source

pub fn from_source(input: &str) -> Result<Self>

Build a schema graph from a SurrealQL string.

Source

pub fn from_files(dir: &Path) -> Result<Self>

Build a schema graph by walking all .surql files in a directory.

Source locations are tracked per file for go-to-definition support.

Source

pub fn from_files_per_file(dir: &Path) -> Result<HashMap<PathBuf, Self>>

Build per-file schema graphs by walking all .surql files in a directory.

Returns a map from file path to its individual SchemaGraph. Used for incremental rebuilding: on save, only the changed file is re-parsed, then all per-file graphs are merged.

Source

pub fn from_single_file(path: &Path) -> Option<Self>

Build a schema graph from a single .surql file.

Returns None if the file cannot be read or parsed.

Source

pub fn attach_source_locations(&mut self, source: &str, file: &Path)

Scan source text via the lexer for DEFINE statement positions.

Source

pub fn merge(&mut self, other: SchemaGraph)

Merge another schema graph into this one.

Fields, indexes, and events are deduplicated by name. SCHEMAFULL wins over SCHEMALESS (once a table is marked SCHEMAFULL, it stays).

Source

pub fn from_definitions(defs: &SchemaDefinitions) -> Self

Source

pub fn scoped(&self, ns: Option<&str>, db: Option<&str>) -> Self

Return a filtered schema containing only tables matching the given NS/DB scope. Tables with no NS/DB (None) are included in all scopes (default context).

Source

pub fn table_names(&self) -> impl Iterator<Item = &str>

Iterate over all table names in the schema.

Source

pub fn table(&self, name: &str) -> Option<&TableDef>

Get table definition by name.

Source

pub fn fields_of(&self, table: &str) -> &[FieldDef]

Fields defined on a table.

Source

pub fn indexes_of(&self, table: &str) -> &[IndexDef]

Indexes defined on a table.

Source

pub fn events_of(&self, table: &str) -> &[EventDef]

Events defined on a table.

Source

pub fn function(&self, name: &str) -> Option<&FunctionDef>

Get function definition by name (without the fn:: prefix).

Source

pub fn function_names(&self) -> impl Iterator<Item = &str>

Iterate over all function names (without fn:: prefix).

Source

pub fn param_names(&self) -> impl Iterator<Item = &str>

Iterate over all defined param names.

Source

pub fn find_field(&self, field_name: &str) -> Vec<(&str, &FieldDef)>

Find a field by name across all tables. Returns (table_name, field_def).

Uses a pre-built HashMap index for O(1) lookup by field name, instead of scanning all tables.

Source

pub fn field_on(&self, table: &str, field_name: &str) -> Option<&FieldDef>

Find a field on a specific table.

Source

pub fn tables_reachable_from( &self, start: &str, max_depth: usize, ) -> Vec<(String, usize, Vec<String>)>

Tables reachable from start within max_depth hops via record<> links.

Uses BFS with cycle detection. Returns (table_name, depth, path) where path is the chain of table.field segments traversed to reach each table.

The starting table itself is not included in the results.

Source

pub fn tables_referencing(&self, target: &str) -> Vec<(String, String)>

Tables that reference target via record<target> fields (reverse dependencies).

Returns (referencing_table, field_name) pairs. Useful for answering: “What would break if I drop or rename this table?”

Source

pub fn siblings_of(&self, table: &str) -> Vec<(String, String, String)>

Tables that share a common record<> target with table (siblings).

Answers: “Which other tables also link to the same targets as this table?” Returns (sibling_table, shared_target, via_field) triples.

Source

pub fn dependency_tree(&self, root: &str, max_depth: usize) -> DependencyNode

Build a full dependency tree rooted at root, following record<> links.

Cycles are detected: if a table appears as its own ancestor, the node is marked with is_cycle = true and has no children (the recursion stops).

A max_nodes safety cap (1000) prevents exponential blowup on diamond-shaped graphs where the same table is reachable through many paths.

Source

pub fn build_graph_tree_markdown(&self) -> String

Generate a markdown graph tree for all tables in the schema.

Builds a dependency tree for each table and formats it as an indented markdown tree view. Used by the LSP to cache graph.md.

Source

pub fn build_docs_markdown(&self) -> String

Generate markdown documentation from schema definitions.

Includes tables with fields (type, default, comment), indexes, events, and function signatures with parameters and return types.

Trait Implementations§

Source§

impl Clone for SchemaGraph

Source§

fn clone(&self) -> SchemaGraph

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SchemaGraph

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SchemaGraph

Source§

fn default() -> SchemaGraph

Returns the “default value” for a type. Read more

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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
Source§

impl<G1, G2> Within<G2> for G1
where G2: Contains<G1>,

Source§

fn is_within(&self, b: &G2) -> bool