How peimu/aqphub works
AQPHub is a command-line approximate-query-processing middleware: it accepts a SQL query and configuration, converts the query into an intermediate representation, repeatedly extracts and executes subqueries, then returns the final result. Users can select FK-based relationship-center, entity-center, or min-subquery strategies, or node-based splitting, and choose among DuckDB, PostgreSQL, MariaDB, OpenGauss, and Umbra. The README also documents SQL printing, combined sub-plans, cardinality updates, and correctness/error checking. The graph follows the sampled entry point and splitter; unsampled adapter and strategy internals are represented only where paths and documented behavior support them.
Main entry points: db_adapter.h Engine adapter API · ir_query_splitter.cpp Split orchestrator · fk_based_splitter.cpp FK-based strategies · aqp_middleware.cpp Middleware entry
Components 22
Command-line entry
- Configuration
src/util/param_config.cpp - Middleware entry
src/aqp_middleware.cpp
Query planning
- IR converter
third_party/IR_SQL_Converter - Foreign-key extraction
src/split/foreign_key_extractor.cpp
Query splitting
- Split orchestrator
src/split/ir_query_splitter.cpp - FK-based strategies
src/split/fk_based_splitter.cpp - Node-based strategy
src/split/node_based_splitter.cpp - Top-down strategy
src/split/topdown_splitter.cpp - Subquery selection
src/split/select_sub_ir.cpp - IR utilities
src/split/ir_utils.cpp
Database engines
- Engine adapter API
include/adapters/db_adapter.h - DuckDB adapter
src/adapters/duckdb_adapter.cpp - PostgreSQL adapter
src/adapters/postgres_adapter.cpp - MariaDB adapter
src/adapters/mariadb_adapter.cpp - OpenGauss adapter
src/adapters/opengauss_adapter.cpp - Umbra adapter
src/adapters/umbra_adapter.cpp
Other components
- Query user
- SQL input
- Configured database
- Optional estimator
- Intermediate tables
- Query result
Connections 31
- Query user → Configuration: sets options
- Query user → SQL input: provides SQL
- SQL input → Middleware entry: supplies query
- Configuration → Middleware entry: configures run
- Middleware entry → Engine adapter API: creates adapter
- Middleware entry → Split orchestrator: runs split query
- Split orchestrator → Engine adapter API: parses and executes
- Engine adapter API → IR converter: converts plan
- Split orchestrator → FK-based strategies: dispatches strategy
- Split orchestrator → Node-based strategy: dispatches strategy
- Split orchestrator → Top-down strategy: dispatches strategy
- FK-based strategies → Foreign-key extraction: reads key metadata
- FK-based strategies → Subquery selection: selects cluster IR
- FK-based strategies → IR utilities: uses IR operations
- Node-based strategy → IR utilities: uses IR operations
- Top-down strategy → IR utilities: uses IR operations
- Engine adapter API → DuckDB adapter: implemented by
- Engine adapter API → PostgreSQL adapter: implemented by
- Engine adapter API → MariaDB adapter: implemented by
- Engine adapter API → OpenGauss adapter: implemented by
- Engine adapter API → Umbra adapter: implemented by
- DuckDB adapter → Configured database: executes SQL
- PostgreSQL adapter → Configured database: executes SQL
- MariaDB adapter → Configured database: executes SQL
- OpenGauss adapter → Configured database: executes SQL
- Umbra adapter → Configured database: executes SQL
- Split orchestrator → Intermediate tables: tracks intermediates
- Engine adapter API → Intermediate tables: creates and reads
- MariaDB adapter → Optional estimator: may estimate with
- Split orchestrator → Query result: returns final result
- Query result → Query user: displays rows