Category: 📚 References
Version: v1.3.0
Status: 🚧 Analysis Document
Datum: 22. Dezember 2025
- 📋 Übersicht
- ✨ Features & Highlights
- 🚀 Schnellstart
- 📖 Detaillierte Dokumentation
- 💡 Best Practices
- 🔧 Troubleshooting
- 📚 Siehe auch
- 📝 Changelog
Analysedatum: 8. Dezember 2024
Frage: "Im Dokument sind noch offene Phasen für die Implementierung von AQL Sprachumfang dokumentiert. Was ist im Sourcecode bereits vorhanden und was können wir tatsächlich noch implementieren?"
Die ursprüngliche Dokumentation aql_language_scope.md war irreführend - viele als "✅ vollständig implementiert" markierte Funktionen sind tatsächlich NICHT im Sourcecode vorhanden.
Diese Analyse basiert auf einer detaillierten Code-Überprüfung der folgenden Dateien:
/src/query/let_evaluator.cpp(Funktionsauswertung)/src/query/window_evaluator.cpp(Window Functions)/src/query/aql_translator.cpp(Query-Übersetzung)/include/query/aql_parser.h(Parser-Definitionen)
Quelle: /src/query/let_evaluator.cpp (Zeilen 363-494)
LENGTH()- Länge von Array/StringCONCAT()- String-VerkettungSUBSTRING()- TeilstringUPPER(),LOWER()- Groß-/KleinschreibungABS(),CEIL(),FLOOR(),ROUND()- MathematikMIN(),MAX()- Min/Max in Array
Quelle: /src/query/let_evaluator.cpp (Zeilen 500-1200+)
ST_Point(),ST_Distance(),ST_Within(),ST_Contains()ST_Intersects(),ST_DWithin(),ST_Buffer(),ST_Union()ST_GeomFromText(),ST_GeomFromGeoJSON()ST_AsGeoJSON(),ST_AsText()ST_3DDistance(),ST_Z(),ST_ZMin(),ST_ZMax()- Zusätzlich:
ST_Force2D(),ST_HasZ(),ST_ZBetween()
Quelle: /src/query/aql_translator.cpp (Zeilen 84-188)
SIMILARITY(field, vector, k)- Vektor-Ähnlichkeitssuche mit HNSWPROXIMITY(field, point)- Geo-Nähe-Suche
Quelle: /include/query/aql_parser.h (Zeilen 456-492)
FOR v IN 1..n OUTBOUND start edges- Ausgehende TraversierungFOR v IN 1..n INBOUND start edges- Eingehende TraversierungFOR v IN 1..n ANY start edges- Bidirektionale TraversierungSHORTEST_PATH start TO end edges- Kürzester Pfad
Quelle: /include/query/aql_parser.h (Zeilen 383-409)
COLLECT x = expr- GruppierungAGGREGATE COUNT()- ZählenAGGREGATE SUM(field)- SummierenAGGREGATE AVG(field)- Durchschnitt
Quelle: /src/query/window_evaluator.cpp, /include/query/window_evaluator.h
ROW_NUMBER()- Fortlaufende NummerierungRANK(),DENSE_RANK()- Ranking mit/ohne LückenLAG(expr, offset)- Zugriff auf vorherige ZeileLEAD(expr, offset)- Zugriff auf nächste ZeileFIRST_VALUE(expr)- Erster Wert im FensterLAST_VALUE(expr)- Letzter Wert im Fenster
DOCUMENT()- Dokument per ID ladenMERGE()- Objekte zusammenführenUNSET()- Felder entfernenKEEP()- Nur bestimmte Felder behaltenHAS()- Feld-Existenz prüfenATTRIBUTES()- Alle FeldnamenVALUES()- Alle Feldwerte
Implementierungs-Aufwand: NIEDRIG - JSON-Manipulation mit nlohmann/json
FLATTEN()- Arrays flachenUNIQUE()- Duplikate entfernenUNION(),INTERSECTION(),MINUS()- Set-OperationenFIRST(),LAST(),NTH()- Array-ZugriffSLICE()- TeilarrayREVERSE()- UmkehrenSORTED(),SORTED_UNIQUE()- SortierenCONTAINS_ARRAY()- Element-Test
Implementierungs-Aufwand: NIEDRIG - Standard STL-Algorithmen
DATE_NOW(),DATE_ISO8601(),DATE_TIMESTAMP()DATE_YEAR(),DATE_MONTH(),DATE_DAY()DATE_HOUR(),DATE_MINUTE(),DATE_SECOND()DATE_ADD(),DATE_SUBTRACT(),DATE_DIFF()DATE_TRUNC(),DATE_FORMAT(),DATE_COMPARE()
Implementierungs-Aufwand: NIEDRIG - Standard C++ chrono oder date-Bibliothek
- Language Scope - Feature-Vergleich mit anderen DBs
- Functions Reference - Alle implementierten Funktionen
- AQL Syntax - Vollständige Sprachreferenz
- Query Engine - Implementierungs-Architektur
- ✅ Template-Update: Standardisierung auf v1.3.0 Dokumentationsformat
- ✅ Struktur: 8-Abschnitte-Format mit Emojis und TOC
- Initial Release mit Source-Code Analyse
- Aufdeckung paralleler Funktionsimplementierung (Legacy vs Registry)
- Identifikation fehlender Features
FULLTEXT()- VolltextsucheTOKENS()- TokenisierungPHRASE()- PhrasensucheLEVENSHTEIN_DISTANCE()- Edit-DistanzSOUNDEX(),METAPHONE()- Phonetische SucheNGRAM_MATCH()- N-Gram MatchingREGEX_TEST(),REGEX_MATCHES(),REGEX_REPLACE()LIKEmit Wildcards
Implementierungs-Aufwand:
- REGEX: NIEDRIG - Standard C++ regex
- LEVENSHTEIN: NIEDRIG - Einfacher Algorithmus
- FULLTEXT: HOCH - Benötigt Text-Indexierung
ALL_SHORTEST_PATHS()- Alle kürzesten PfadeK_SHORTEST_PATHS()- K kürzeste PfadeWEIGHTED_SHORTEST_PATH()- Gewichteter PfadPATH_LENGTH(),PATH_VERTICES(),PATH_EDGES()- Graph-Algorithmen:
LOUVAIN_COMMUNITIES(),BETWEENNESS_CENTRALITY(),CLOSENESS_CENTRALITY()
Implementierungs-Aufwand: HOCH - Benötigt Graph-Algorithmen-Bibliothek (z.B. Boost Graph)
COSINE_SIMILARITY(),EUCLIDEAN_DISTANCE()- Erweiterte MetrikenL2_NORMALIZE()- Vektor-NormalisierungHYBRID_SEARCH()- Kombination Vektor + TextEMBED()- Text zu VektorCLASSIFY()- TextklassifikationEXTRACT_ENTITIES()- Named Entity Recognition
Implementierungs-Aufwand: SEHR HOCH - Benötigt ML-Framework (TensorFlow, ONNX)
GEO_DISTANCE(),GEO_AREA(),GEO_LENGTH()GEO_CENTROID(),GEO_SIMPLIFY()H3_TO_GEO(),GEO_TO_H3()- H3 HexagonsISOCHRONE()- Erreichbarkeitsanalyse
Implementierungs-Aufwand: MITTEL-HOCH - PostGIS oder H3-Bibliothek
JSON_EXTRACT(),JSON_SET(),JSON_REMOVE()JSON_TYPE(),JSON_KEYS(),JSON_VALUES()JSON_ARRAY_LENGTH(),JSON_CONTAINS(),JSON_OVERLAPS()
Implementierungs-Aufwand: NIEDRIG - nlohmann/json hat bereits viele Features
MODE(),STDDEV(),VARIANCE(),IQR()CORRELATION(),LINEAR_REGRESSION()HISTOGRAM(),SAMPLE()RANDOM(),RANDOM_INT()MEDIAN(),PERCENTILE()
Implementierungs-Aufwand: MITTEL - Numerische Bibliothek (Eigen, Boost Math)
UPSERT- Insert or UpdateMERGE INTO- SQL-Style MergeEXISTS/NOT EXISTSSubqueriesBEGIN TRANSACTION/COMMIT/ROLLBACK
Implementierungs-Aufwand: VARIABEL (UPSERT: MITTEL, Transaktionen: SEHR HOCH)
Warum: Basis-Funktionalität für jede Dokument-Datenbank
Aufwand: ~2-3 Wochen
Implementierung: In let_evaluator.cpp mit STL-Algorithmen
// Beispiel: FLATTEN
if (funcName == "FLATTEN") {
nlohmann::json result = nlohmann::json::array();
for (const auto& item : args[0]) {
if (item.is_array()) {
for (const auto& sub : item) result.push_back(sub);
} else {
result.push_back(item);
}
}
return result;
}Warum: Essentiell für Dokument-Manipulation
Aufwand: ~1-2 Wochen
Implementierung: In let_evaluator.cpp mit nlohmann/json
// Beispiel: MERGE
if (funcName == "MERGE") {
nlohmann::json result = args[0];
for (size_t i = 1; i < args.size(); i++) {
result.merge_patch(args[i]);
}
return result;
}Warum: Standard-Funktionalität
Aufwand: ~2-3 Wochen
Implementierung: In let_evaluator.cpp mit C++ chrono oder Howard Hinnant's date library
// Beispiel: DATE_NOW
if (funcName == "DATE_NOW") {
auto now = std::chrono::system_clock::now();
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
now.time_since_epoch()
).count();
return ms;
}Aufwand: ~1 Woche
Implementierung: C++ std::regex
Aufwand: ~2-3 Tage
Implementierung: Standard-Algorithmus
Aufwand: ~4-6 Wochen
Implementierung: Boost Graph Library
Aufwand: ~8-12 Wochen
Benötigt: Text-Indexierung, Tokenizer, Inverted Index
Aufwand: ~12-16 Wochen
Benötigt: ONNX Runtime oder TensorFlow Lite
Aufwand: ~16+ Wochen
Benötigt: ACID-Implementierung, WAL, Lock-Manager
- Array-Funktionen (FLATTEN, UNIQUE, FIRST, LAST, NTH, SLICE, REVERSE, SORTED)
- Dokument-Funktionen (MERGE, UNSET, KEEP, HAS, ATTRIBUTES, VALUES)
- Basis-String-Funktionen (REGEX_TEST, REGEX_REPLACE)
Impact: Hoch - Schließt große Lücken in der Basis-Funktionalität
- Alle DATE_* Funktionen
- RANDOM(), RANDOM_INT()
Impact: Hoch - Standard-Funktionalität
- LEVENSHTEIN_DISTANCE()
- LIKE mit Wildcards
- SOUNDEX(), METAPHONE()
Impact: Mittel - Nützlich für Text-Matching
- FULLTEXT (benötigt Text-Index)
- Erweiterte Graph-Algorithmen
- AI/ML-Funktionen
- Transaktionale Kontrolle
Impact: Variabel - Nice-to-have, aber komplex
Das Dokument aql_language_scope.md wurde aktualisiert mit:
- Neuer Abschnitt am Anfang: Klare Übersicht über tatsächlich implementierte Features
- Korrigierte Statusindikatoren: ✅ → ❌ für nicht implementierte Funktionen
- Quellen-Verweise: Verweis auf tatsächliche Sourcecode-Dateien
- Aktualisierte Roadmap: Realistische Phasen basierend auf tatsächlichem Stand
- Korrigierte Kompatibilitäts-Matrix: Vergleich alt vs. neu
Was ist vorhanden:
- ✅ Solide Basis: FOR/FILTER/RETURN, Aggregation, Graph-Traversierung
- ✅ Exzellente Geo/Spatial-Unterstützung (besser als viele Konkurrenten!)
- ✅ Vollständige Window Functions (besser als ArangoDB!)
- ✅ Basis-Vektor-Suche funktioniert
Was fehlt (aber als implementiert dokumentiert war):
- ❌ Alle Array-Funktionen
- ❌ Alle Datum/Zeit-Funktionen
- ❌ Alle Dokument-Funktionen
- ❌ Alle Text/Volltext-Funktionen
- ❌ Erweiterte Graph-Algorithmen
- ❌ AI/ML-Features
Was kann implementiert werden:
- 🎯 Array-, Dokument- und Datum/Zeit-Funktionen: EINFACH (2-3 Monate)
- 🎯 Text-Funktionen (ohne FULLTEXT): MITTEL (1 Monat)
- 🎯 FULLTEXT, Graph-Algorithmen: KOMPLEX (3-6 Monate)
- 🎯 AI/ML-Features: SEHR KOMPLEX (6+ Monate)
Empfehlung: Fokus auf Phase 1 (Array, Dokument, Datum/Zeit) - diese sind essentiell, einfach zu implementieren und schließen die größten Lücken im Vergleich zu ArangoDB/MongoDB.