Skip to main content

Crate inillucent_sql

Crate inillucent_sql 

Source
Expand description

First-party lexer, parser, AST, binder, semantic rewrites, and logical and physical plans.

Invariant: the SQL front end is pure. It parses, binds, plans and compiles; it opens no file, reads no page, and holds no connection. Everything it needs to know about a schema arrives through catalog_view::CatalogView, which is a read-only view someone else has already built.

That interface is why this crate sits below inillucent-catalog rather than above it. The catalog has to parse the CREATE text stored in sqlite_schema with this parser, and a crate cannot be both above and below another; the parser is the more fundamental half, so it goes underneath and the catalog implements the view.

Module map, in the order SQL moves through them:

  • keyword - the pinned release’s keyword table and its fallback rule;
  • lexer - bytes to tokens, zero copy, with spans;
  • precedence - the operator table, as data;
  • ast - the arena and every node kind;
  • diagnostic - syntax failures, with offsets;
  • parser - recursive descent for statements, Pratt for expressions;
  • catalog_view - what the binder is allowed to know about a schema;
  • bind - names to columns, and the bound relational tree;
  • plan - the logical and physical plans the compiler walks.

Re-exports§

pub use ast::Ast;
pub use ast::Statement;
pub use diagnostic::ParseError;
pub use diagnostic::ParseErrorKind;
pub use lexer::Lexer;
pub use lexer::Span;
pub use lexer::Token;
pub use lexer::TokenKind;
pub use parser::classify_statement;
pub use parser::parse_expression;
pub use parser::parse_next_statement;
pub use parser::ParameterMap;
pub use parser::ParsedStatement;
pub use parser::StatementClass;

Modules§

ast
The arena-backed abstract syntax tree.
bind
The binder: names to columns, and the bound relational tree.
catalog_view
What the binder is allowed to know about a schema.
correlated_in
Lowering a correlated IN subquery to EXISTS.
cost
What a plan costs, and which order to visit the FROM terms in.
declare
Reading a virtual table’s declaration and a pragma’s argument.
diagnostic
Syntax diagnostics: what was wrong, and exactly where.
directive
Statements the session carries out itself rather than compiling.
dml
Binding INSERT, UPDATE and DELETE.
foreign_key
Foreign keys, as the triggers they are.
function
The built-in function registry: names, arities, and identities.
keyword
The keyword table of the pinned SQLite release, and the fallback rule.
lexer
The zero-copy lexer: SQL bytes in, tokens with spans out.
lift
Turning the literal values of an INSERT ... VALUES into parameters, so statements that differ only in those values share one compiled plan.
parser
The recursive-descent statement parser.
plan
The logical and physical plans.
pragma_register
PRAGMA: the register of names, the columns each answers, and whether it takes an argument.
precedence
The operator precedence table, as data.
rewrite
Rewriting a bound tree in place, exhaustively.
vtab
What the front end has to know about a virtual table.

Constants§

IMPLEMENTATION_PHASE
The implementation phase that filled this crate in, as named by the TDD.