alopex-sql
alopex-sql は Alopex の SQL 解析・計画・実行レイヤーを提供します。
Quick Start
use ;
use MemoryKV;
use MemoryCatalog;
use AlopexDialect;
use ;
use Parser;
use Planner;
let sql = r#"
CREATE TABLE sales (region TEXT, amount INT);
INSERT INTO sales (region, amount) VALUES ('us', 10), ('us', 20), ('eu', 7);
SELECT region, SUM(amount) FROM sales GROUP BY region;
"#;
let dialect = AlopexDialect;
let statements = parse_sql.unwrap;
let catalog = new;
let store = new;
let mut executor = new;
for stmt in statements
GROUP BY / HAVING
SELECT category, COUNT(*) FROM products GROUP BY category;
SELECT category, COUNT(*) FROM products GROUP BY category HAVING COUNT(*) > 10;
SELECT category, COUNT(*) FROM products GROUP BY category ORDER BY COUNT(*) DESC;
Supported Aggregate Functions
COUNT(*)COUNT(column)COUNT(DISTINCT column)SUM(column)(numeric)TOTAL(column)(numeric, returns 0.0 for all-NULL)AVG(column)(numeric)MIN(column)/MAX(column)(comparable types)GROUP_CONCAT(column)/GROUP_CONCAT(column, separator)STRING_AGG(column, separator)
Recursive CTE
直接自己再帰する単一 CTE を UNION または UNION ALL で実行できます。列名リストを省略した場合は、anchor term の出力名が公開スキーマになります。
WITH RECURSIVE counter(n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM counter WHERE n < 5
)
SELECT n FROM counter ORDER BY n;
実行は delta working table による固定点反復です。既定上限は 1,000 iterations、100,000 accumulated rows で、保持する working/result/accumulated/dedup key は query memory policy の対象です。
Recursive CTE Limitations
- 相互再帰、複数の直接自己参照、recursive term 内の subquery・nested
WITH・set operation は fail-closed で拒否します。 - 再帰 CTE のリモート分散 read は未対応です。
- 各 inner operator の独自 buffer は同じ memory policy を検査しますが、現在の policy API は retained recursive sets と transient buffer の合算 high-water tracker を共有しません。
Error Scenarios
| Code | Contract |
|---|---|
ALOPEX-E001 |
Transaction conflict during execution. |
ALOPEX-E002 |
A write was attempted through a read-only transaction. |
ALOPEX-E003 |
実行時の resource exhaustion。再帰 CTE の iteration/row/memory limit と既存の aggregate/memory limit が対象。 |
ColumnNotFound: 存在しないカラムをGROUP BYで参照した場合。TypeMismatch:SUM/AVGに非数値型、GROUP_CONCATに非 TEXT を指定した場合。InvalidExpression:HAVINGやSELECTで GROUP BY に含まれない非集約列を参照した場合。ResourceExhausted: resource limit を超えた場合。公開 SQL error code はALOPEX-E003。