1 unstable release
| 0.1.0 | Mar 11, 2026 |
|---|
#2677 in Database interfaces
Used in 2 crates
85KB
1.5K
SLoC
cai-query
SQL-like query engine for CAI entries.
Overview
cai-query provides a SQL parser and execution engine for querying AI coding interactions stored via cai-storage. Supports SELECT statements with WHERE, ORDER BY, LIMIT, and custom aggregate functions.
Usage
Basic Query
use cai_query::{QueryEngine, sql};
use cai_storage::MemoryStorage;
#[tokio::main]
async fn main() -> cai_core::Result<()> {
let storage = MemoryStorage::new();
let engine = QueryEngine::new(storage);
// Execute a query
let results = engine.execute(
"SELECT * FROM entries LIMIT 10"
).await?;
Ok(())
}
Convenience Function
use cai_query::sql;
let results = sql(
"SELECT * FROM entries WHERE source = 'Claude'",
&storage
).await?;
Query Language
SELECT
SELECT * FROM entries LIMIT 10
SELECT source, COUNT(*) FROM entries GROUP BY source
WHERE
SELECT * FROM entries WHERE source = 'Claude'
SELECT * FROM entries WHERE timestamp > '2024-01-01'
Aggregate Functions
SELECT COUNT(*) FROM entries
SELECT source, COUNT(*), AVG(length(prompt)) FROM entries GROUP BY source
Date Functions
-- Date range filter
SELECT * FROM entries
WHERE date_range(timestamp, '2024-01-01', '2024-01-31')
-- Time bucket grouping
SELECT time_bucket(timestamp, 'day') as day, COUNT(*)
FROM entries
GROUP BY day
Built-in Functions
- COUNT: Count entries
- SUM: Sum numeric values
- AVG: Average of values
- MIN/MAX: Minimum/Maximum values
- date_range: Filter by date range
- time_bucket: Group by time periods
Usage
Add to your Cargo.toml:
[dependencies]
cai-query = { path = "../cai-query" }
Design Decisions
- sqlparser-rust: Compatible SQL syntax
- Custom executor: Optimized for CAI's data model
- Extensible functions: Easy to add custom functions
Testing
cargo test -p cai-query
License
MIT OR Apache-2.0
Dependencies
~6–8MB
~145K SLoC