# AQuery++ DB ## Introduction AQuery++ Database is a cross-platform, In-Memory Column-Store Database that incorporates compiled query execution. ## Architecture ### AQuery Compiler - The query is first processed by the AQuery Compiler which is composed of a frontend that parses the query into AST and a backend that generates target code that delivers the query. - Front end of AQuery++ Compiler is built on top of [mo-sql-parsing](https://github.com/klahnakoski/mo-sql-parsing) with modifications to handle AQuery dialect and extension. - Backend of AQuery++ Compiler generates target code dependent on the Execution Engine. It can either be the C++ code for AQuery Execution Engine or sql and C++ post-processor for Hybrid Engine or k9 for the k9 Engine. ### Execution Engines - AQuery++ supports different execution engines thanks to the decoupled compiler structure. - AQuery Execution Engine: executes query by compiling the query plan to C++ code. Doesn't support joins and udf functions. - Hybrid Execution Engine: decouples the query into two parts. The sql-compliant part is executed by an Embedded version of Monetdb and everything else is executed by a post-process module which is generated by AQuery++ Compiler in C++ and then compiled and executed. - K9 Execution Engine (discontinued). ## Roadmap - [x] SQL Parser -> AQuery Parser (Front End) - [ ] AQuery-C++ Compiler (Back End) - [x] Schema and Data Model - [x] Data acquisition/output from/to csv file - [x] Single table queries - [x] Projections and Single Table Aggregations - [x] Group by Aggregations - [x] Filters - [x] Order by - [x] Assumption - [x] Flatten - [x] Multi-table - [x] Join - [ ] Subqueries - [ ] -> Optimizing Compiler ## TODO: - [ ] User Module load syntax parsing (fn definition/registration) - [ ] User Module test - [ ] Interval based triggers - [ ] C++ Meta-Programming: Eliminate template recursions as much as possible. - [ ] IPC: Better ways to communicate between Interpreter (Python) and Executer (C++). - [ ] Sockets? stdin/stdout capture? ## Requirements Recent version of Linux, Windows or MacOS, with recent C++ compiler that has C++17 (1z) support. - GCC: 9.0 or above (g++ 7.x, 8.x fail to handle variadic template expansion due to compiler bug) - Clang: 6.0 or above (Recommended) - MSVC: 2019 or later ## Usage `python3 prompt.py` will launch the interactive command prompt. The server binary will be autometically rebuilt and started. #### Commands: - ``: parse sql statement - `f `: parse all sql statements in file - `dbg` start debugging session - `print`: printout parsed sql statements - `exec`: execute last parsed statement(s) with AQuery Execution Engine. AQuery Execution Engine executes query by compiling it to C++ code and then executing it. - `xexec`: execute last parsed statement(s) with Hybrid Execution Engine. Hybrid Execution Engine decouples the query into two parts. The sql-compliant part is executed by an Embedded version of Monetdb and everything else is executed by a post-process module which is generated by AQuery++ Compiler in C++ and then compiled and executed. - `r`: run the last generated code snippet - `save `: save current code snippet. will use random filename if not specified. - `exit`: quit the prompt #### Example: `f moving_avg.a`
`xexec`