reddb-io-rql 1.15.0

RedDB Query Language (RQL) front-end + conformance authority (ADR 0053). Owns the sqllogictest-format conformance suite whose truth comes from the public SQLite corpus; depends only on reddb-io-types.
Documentation
//! `reddb-io-rql` — the RedDB Query Language (RQL) front-end + conformance
//! authority (ADR 0053).
//!
//! This crate owns the RQL language front-end: lexer, parser, AST, mode
//! translators, analyzer, typing, storage-agnostic optimizer, and the
//! sqllogictest-format conformance corpus whose truth comes from the public
//! SQLite corpus plus RedDB-authored extensions.
//!
//! The crate sits near the bottom of the workspace graph: it depends only on
//! [`reddb_types`] (the neutral keystone, ADR 0052) and on nothing else in the
//! workspace. Server-backed conformance drivers live in the umbrella package's
//! integration tests and execute this crate's corpus against the current
//! in-server engine, so pure `reddb-io-rql` coverage never pulls
//! `reddb-server` or gRPC into the crate graph.
//!
//! The one piece of conformance machinery that is genuinely storage-agnostic —
//! and therefore lives in the library rather than the test harness — is the
//! rendering of an engine [`reddb_types::Value`] into the textual cell the
//! sqllogictest comparator sees. [`conformance`] owns that rendering.

// The parser family (#1103) and the AST cluster (#1113) were re-homed
// byte-faithfully from `reddb-server`, which carries a crate-level
// `#![allow(dead_code, unused_imports, unused_variables)]`. Carrying the same
// blanket here keeps the relocation a pure move — the parser's helper methods,
// keyword-import lists, and parse-loop bindings stay exactly as authored
// (matching the precedent set by `reddb-io-types`, ADR 0052).
#![allow(clippy::unwrap_used)]
#![allow(dead_code, unused_imports, unused_variables)]
// The parser dispatch carries deep recursive-descent signatures the source
// crate already opted out of linting; mirror that subset so the move stays a
// pure relocation rather than a refactor.
#![allow(
    clippy::too_many_arguments,
    clippy::type_complexity,
    clippy::should_implement_trait,
    clippy::new_without_default,
    // Legacy allow for the too_many_lines ratchet (PRD #1252): pre-existing
    // parser/lexer functions exceed the 120-line threshold. The lint bites on
    // new/changed code; remove once these functions are split up.
    clippy::too_many_lines,
    // Legacy allow for the cast_possible_truncation ratchet (PRD #1252):
    // pre-existing truncating `as` casts on lengths/offsets. The lint bites on
    // new/changed code; remove once those casts become checked conversions.
    clippy::cast_possible_truncation
)]

pub mod analyzer;
pub mod ast;
pub mod conformance;
pub mod expr_typing;
pub mod filter_optimizer;
pub mod lexer;
pub mod limits;
pub mod modes;
pub mod optimizer;
pub mod parser;
pub mod planner;
pub mod renderer;
pub mod sql;
pub mod sql_lowering;

pub use conformance::{render_cell, CellType};
pub use lexer::{Lexer, LexerError, Position, Spanned, Token};
pub use limits::ParserLimits;
pub use parser::{parse, ParseError, ParseErrorKind, Parser, SafeTokenDisplay};
pub use sql::{parse_frontend, FrontendStatement, SqlCommand, SqlStatement};