| Crates.io | wardenclyffe |
| lib.rs | wardenclyffe |
| version | 0.1.1 |
| created_at | 2025-11-22 14:32:05.16936+00 |
| updated_at | 2025-11-23 04:15:50.061776+00 |
| description | A tiny Rust query engine that supports SQL-like filters, CSV scanning, projections, and a custom DSL powered by Pest. |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1945396 |
| size | 49,527 |
Wardenclyffe is a fast, lightweight command-line query engine written in Rust, capable of scanning CSV files (and soon Parquet) with a simple SQL-like filter language.
It includes:
A custom query DSL
A Pest-powered parser
An AST (Abstract Syntax Tree)
An expression evaluator
A CSV + Parquet datasource abstraction
Projection (SELECT)
Execution timing
Row/column filtering
✨ Features ✔ SQL-like filtering
wardenclyffe --file data.csv
wardenclyffe --file data.csv --filter "age > 25"
wardenclyffe --file data.csv \
--filter "country = 'IN'" \
--select "name,salary"
wardenclyffe --file data.csv \
--filter "age > 25 AND salary > 40000"
The grammar is defined using Pest in src/query.pest.
expr = or_expr
or_expr = and_expr ( "OR" and_expr )*
and_expr = cmp_expr ( "AND" cmp_expr )*
cmp_expr = field op value
op = ">" | "<" | "="
value = number | 'string'
This DSL is transformed into an AST, then evaluated per row.
enum DataSource {
Csv(CsvSource),
Parquet(ParquetSource),
}
Converts the filter string into an AST.
enum Expr {
Cmp { field, op, value },
And(Box<Expr>, Box<Expr>),
Or(Box<Expr>, Box<Expr>),
}
Executes the AST against each row.
Coordinates:
Row scanning
Filter evaluation
Projection
Timing
run :
wardenclyffe --file data.csv --filter "age > 25"
Row { age: Some(30), name: Some("John"), country: Some("US"), salary: Some(60000) }
Row { age: Some(28), name: Some("Ravi"), country: Some("IN"), salary: Some(52000) }
...
Scanned 10 rows, matched 7 rows in 0.838 ms
MIT License © 2025.
PRs, issues, and feature requests are welcome.