Stand: 9. März 2026 Version: 1.5.0 Kategorie: Query Validated: 2026-03-09 (ab3b22a) Status: current
Das Query-Modul implementiert den vollständigen AQL-Abfrage-Stack von ThemisDB: Parser, Optimizer, Execution-Engine und Caching-Infrastruktur. AQL unterstützt relationale, Dokument-, Graph-, Vektor-, Geo- und Zeitreihen-Modelle sowie SQL- und SPARQL-Kompatibilität.
Primäre Dokumentation: src/query/README.md
Architektur: src/query/ARCHITECTURE.md
Roadmap: src/query/ROADMAP.md
Geplante Erweiterungen: src/query/FUTURE_ENHANCEMENTS.md
| Komponente | Header | Source | Beschreibung |
|---|---|---|---|
| AQLParser | aql_parser.h |
aql_parser.cpp |
AQL → AST |
| AQLParser (JSON) | (aql_parser.h) | aql_parser_json.cpp |
JSON-Query → AST |
| AQLTranslator | aql_translator.h |
aql_translator.cpp |
AST → interne Query-Repr. |
| SQLParser | sql_parser.h |
sql_parser.cpp |
SQL SELECT/INSERT/UPDATE/DELETE → AQL |
| SPARQLParser | sparql_parser.h |
sparql_parser.cpp |
SPARQL → AQL (RDF/Knowledge-Graph) |
| QueryOptimizer | query_optimizer.h |
query_optimizer.cpp |
Kosten-basierte Planoptimierung |
| AdaptiveOptimizer | adaptive_optimizer.h |
adaptive_optimizer.cpp |
Lernende Kostenmodell-Anpassung |
| OptimizerCostModel | optimizer_cost_model.h |
optimizer_cost_model.cpp |
Kardinalitäts- und Selektivitätsschätzung |
| RuntimeReoptimizer | runtime_reoptimizer.h |
runtime_reoptimizer.cpp |
Laufzeit-Reoptimierung aus Statistiken |
| QueryEngine | query_engine.h |
query_engine.cpp |
Physische Ausführung (Scan, Filter, Sort, Join) |
| AQLRunner | aql_runner.h |
aql_runner.cpp |
Top-Level-Dispatch (AQL, SQL, RLS, Limits, Abbruch) |
| QueryCanceller | query_canceller.h |
query_canceller.cpp |
Kooperativer Query-Abbruch via Request-ID |
| QueryResourceLimits | query_resource_limits.h |
(header-only) | Max-Rows/Memory/Timeout-Guard |
| QueryPlanVisualizer | query_plan_visualizer.h |
query_plan_visualizer.cpp |
EXPLAIN / EXPLAIN ANALYZE |
| VectorizedExecution | vectorized_execution.h |
vectorized_execution.cpp |
Column-Store-Batch-Verarbeitung (SIMD) |
| ParallelScan | parallel_scan.h |
(header-only) | Paralleler Collection-Scan |
| CrossClusterFederator | cross_cluster_federation.h |
cross_cluster_federation.cpp |
Verteilte Query-Federation über Cluster-Endpoints |
| QueryFederation | query_federation.h |
query_federation.cpp |
Interne Shard-Level-Federation |
| QueryCache | query_cache.h |
query_cache.cpp |
Exakter Query-Result-Cache |
| QueryCacheManager | query_cache_manager.h |
query_cache_manager.cpp |
Cache-Verwaltung und -Metriken |
| SemanticCache | semantic_cache.h |
semantic_cache.cpp |
Embedding-basierter Ähnlichkeits-Cache |
| WorkloadCacheStrategy | workload_cache_strategy.h |
workload_cache_strategy.cpp |
Adaptive Cache-Eviction |
| CTECache | cte_cache.h |
cte_cache.cpp |
CTE-Zwischenergebnis-Cache |
| CTESubquery | cte_subquery.h |
cte_subquery.cpp |
CTE-Auswertung |
| MaterializedCTE | materialized_cte.h |
materialized_cte.cpp |
Inkrementelle CTE-Materialisierung |
| LetEvaluator | let_evaluator.h |
let_evaluator.cpp |
LET-Variable-Auswertung |
| WindowEvaluator | window_evaluator.h |
window_evaluator.cpp |
Window-Funktionen (RANK, LAG, LEAD, …) |
| StatisticalAggregator | statistical_aggregator.h |
statistical_aggregator.cpp |
Statistische Aggregationen |
| ResultStream | result_stream.h |
result_stream.cpp |
Ergebnis-Streaming & Pagination |
| ResultTypeAnnotation | result_type_annotation.h |
result_type_annotation.cpp |
Typ-Inferenz für SDK-Code-Generierung |
| SubqueryOptimizer | subquery_optimizer.h |
(im query_optimizer) | Subquery-Optimierung (header-only) |
| FunctionRegistry | functions/function_registry.h |
functions/function_registry.cpp |
100+ AQL-Funktionen (25+ Kategorien) |
| UDFRegistry | functions/udf_registry.h |
functions/udf_registry.cpp |
User-Defined Functions (C++) |
Gesamt: 30 Header, 26 Source-Dateien in src/query/ + Header-only-Komponenten
enum class ASTNodeType {
// Query Nodes
Query, // Root node
ForNode, // FOR variable IN collection
FilterNode, // FILTER condition
SortNode, // SORT expr [ASC|DESC]
LimitNode, // LIMIT offset, count
ReturnNode, // RETURN expression
LetNode, // LET variable = expression
CollectNode, // COLLECT ... AGGREGATE ...
WithNode, // WITH cteName AS subquery
// Expressions
BinaryOp, // ==, !=, >, <, AND, OR, +, -, *, /
UnaryOp, // NOT, -, +
FunctionCall, // CONCAT, SUM, LOWER, etc.
FieldAccess, // doc.field, doc.nested.field
Literal, // "string", 123, true, false, null
Variable, // doc, user
ArrayLiteral, // [1, 2, 3]
ObjectConstruct, // {name: doc.name}
SimilarityCall, // SIMILARITY(expr, [vector], k?)
ProximityCall, // PROXIMITY(expr, [lon,lat])
SubqueryExpr, // Subquery in expression
AnyExpr, // ANY quantifier
AllExpr // ALL quantifier
};FOR doc IN users
FILTER doc.age > 18
SORT doc.name ASC
LIMIT 0, 10
RETURN docFOR doc IN products
FILTER doc.category == "electronics"
LET score = SIMILARITY(doc.embedding, @queryVector, 10)
SORT score DESC
RETURN {doc, score}FOR v, e, p IN 1..3 OUTBOUND @start GRAPH 'social'
FILTER v.active == true
RETURN {vertex: v, path: p}SELECT name, age FROM users WHERE age > 18 ORDER BY name LIMIT 10Wird intern zu AQL transpiliert via sql_parser.cpp.
// In einem HTTP-Worker-Thread ausführen:
auto result = executeAqlCancellable(aql, engine, "request-42");
// Aus einem anderen Thread abbrechen (z.B. HTTP-Cancel-Handler):
QueryCanceller::instance().cancel("request-42");// Einfache AQL-Ausführung
Result<nlohmann::json> executeAql(const std::string& aql, QueryEngine& engine);
// Mit Ressourcen-Limits (max_rows, max_memory_bytes, timeout_ms)
Result<nlohmann::json> executeAqlWithLimits(
const std::string& aql, QueryEngine& engine,
const QueryResourceLimits& limits);
// Mit kooperativem Abbruch
Result<nlohmann::json> executeAqlCancellable(
const std::string& aql, QueryEngine& engine,
const std::string& request_id,
QueryCanceller& canceller = QueryCanceller::instance());
// SQL-Passthrough
Result<nlohmann::json> executeSQL(const std::string& sql, QueryEngine& engine);
// EXPLAIN / EXPLAIN ANALYZE
Result<nlohmann::json> explainAql(const std::string& aql, QueryEngine& engine,
bool analyze = false);
Result<std::string> explainAqlText(const std::string& aql, QueryEngine& engine,
bool analyze = false);
Result<std::string> explainAqlDot(const std::string& aql, QueryEngine& engine);- Primary Source Docs — vollständige API-Referenz
- Architecture — Komponenten-Diagramm, Datenfluss
- ROADMAP — Implementierungsstand und geplante Features
- AQL Syntax — AQL-Sprachreferenz
- Hybrid Search — Vector + Filter Hybridabfragen
- Filtered Vector Queries — Gefilterte Vektorsuche
- Hybrid Overview — Übersicht Hybrid-Queries
- Query Benchmarks — Performance-Messungen
- Missing Implementations — Bekannte Lücken und geplante Arbeiten