reifydb-rql 0.4.6

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

use reifydb_core::sort::{SortDirection, SortKey};

use crate::{
	Result,
	ast::ast::AstSort,
	plan::logical::{Compiler, LogicalPlan, OrderNode},
};

impl<'bump> Compiler<'bump> {
	pub(crate) fn compile_sort(&self, ast: AstSort<'bump>) -> Result<LogicalPlan<'bump>> {
		Ok(LogicalPlan::Order(OrderNode {
			by: ast.columns
				.into_iter()
				.zip(ast.directions)
				.map(|(column, direction)| {
					let direction = direction
						.map(|direction| match direction.text().to_lowercase().as_str() {
							"asc" => SortDirection::Asc,
							_ => SortDirection::Desc,
						})
						.unwrap_or(SortDirection::Desc);

					SortKey {
						column: column.name.to_owned(),
						direction,
					}
				})
				.collect(),
			rql: ast.rql.to_string(),
		}))
	}
}