reifydb-rql 0.4.12

ReifyDB Query Language (RQL) parser and AST
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2025 ReifyDB

use reifydb_catalog::catalog::Catalog;
use reifydb_transaction::transaction::Transaction;
use tracing::instrument;

use crate::{
	Result,
	ast::ast::AstStatement,
	bump::{Bump, BumpVec},
	expression::Expression,
	plan::{
		logical::{LogicalPlan, compile_logical},
		physical::{PhysicalPlan, compile_physical},
	},
};

pub mod logical;
pub mod physical;

pub type RowToInsert = Vec<Expression>;

#[instrument(name = "rql::plan", level = "trace", skip(bump, catalog, rx, statement))]
pub fn plan<'a>(
	bump: &'a Bump,
	catalog: &Catalog,
	rx: &mut Transaction<'_>,
	statement: AstStatement<'a>,
) -> Result<Option<PhysicalPlan<'a>>> {
	let logical = compile_logical(bump, catalog, rx, statement)?;
	let physical = compile_physical(bump, catalog, rx, logical)?;
	Ok(physical)
}

#[instrument(name = "rql::plan_with_policy", level = "trace", skip(bump, catalog, rx, statement, policy))]
pub fn plan_with_policy<'a>(
	bump: &'a Bump,
	catalog: &Catalog,
	rx: &mut Transaction<'_>,
	statement: AstStatement<'a>,
	policy: impl Fn(
		BumpVec<'a, LogicalPlan<'a>>,
		&'a Bump,
		&Catalog,
		&mut Transaction<'_>,
	) -> Result<BumpVec<'a, LogicalPlan<'a>>>,
) -> Result<Option<PhysicalPlan<'a>>> {
	let logical = compile_logical(bump, catalog, rx, statement)?;
	let logical = policy(logical, bump, catalog, rx)?;
	let physical = compile_physical(bump, catalog, rx, logical)?;
	Ok(physical)
}