

APIJSON's polyglot database support enables a single server instance to interface with 30+ database systems, including relational databases (MySQL, PostgreSQL, Oracle, SQL Server), analytics engines (ClickHouse, Presto, Snowflake), time-series databases (InfluxDB, TDengine), search engines (Elasticsearch, ManticoreSearch), and NoSQL stores (MongoDB, Redis, Cassandra). All database communication occurs through JDBC or JDBC-compatible drivers. Database-specific behavior is abstracted in the SQLConfig interface (APIJSONORM/src/main/java/apijson/orm/SQLConfig.java18) and implemented in AbstractSQLConfig (APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java27-28).
The core architecture consists of:
@database parameter matched against AbstractSQLConfig.DATABASE_LIST whitelist (APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java146-182).isMySQL(), isPostgreSQL(), etc.) branch SQL generation in AbstractSQLConfig.gainSQL() (APIJSONORM/src/main/java/apijson/orm/SQLConfig.java83-122).@datasource parameter selects named connection pools, while @schema and @catalog target database subdivisions (APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java1344-1400).AbstractSQLExecutor obtains connections and executes dialect-specific SQL via execute(SQLConfig, boolean) (APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java169-295).The default database is MySQL (AbstractSQLConfig.DEFAULT_DATABASE = DATABASE_MYSQL) with schema "sys" (DEFAULT_SCHEMA) (APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java69-72). These can be overridden as static fields during server initialization.
Sources: APIJSONORM/src/main/java/apijson/orm/SQLConfig.java18-122 APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java27-182 APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java169-295
APIJSON supports 35+ database systems, each identified by a String constant in SQLConfig (APIJSONORM/src/main/java/apijson/orm/SQLConfig.java20-57). The constants are registered in AbstractSQLConfig.DATABASE_LIST (APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java146-182), which serves as the validation whitelist for @database request parameter values.
Each database has a corresponding boolean detection method in SQLConfig (e.g., isMySQL(), isPostgreSQL(), isClickHouse()) implemented in AbstractSQLConfig. These methods compare the current configuration's database string against the relevant constant and are used throughout SQL generation to emit database-specific syntax.
| Category | Database | SQLConfig Constant |
|---|---|---|
| Traditional RDBMS | MySQL | DATABASE_MYSQL |
| PostgreSQL | DATABASE_POSTGRESQL | |
| SQL Server | DATABASE_SQLSERVER | |
| Oracle | DATABASE_ORACLE | |
| DB2 | DATABASE_DB2 | |
| MariaDB | DATABASE_MARIADB | |
| SQLite | DATABASE_SQLITE | |
| Cloud Native / Distributed | TiDB | DATABASE_TIDB |
| CockroachDB | DATABASE_COCKROACHDB | |
| openGauss | DATABASE_OPENGAUSS | |
| Analytics / OLAP | ClickHouse | DATABASE_CLICKHOUSE |
| Hive | DATABASE_HIVE | |
| Presto / Trino | DATABASE_PRESTO, DATABASE_TRINO | |
| Snowflake | DATABASE_SNOWFLAKE | |
| Search & NoSQL | Elasticsearch | DATABASE_ELASTICSEARCH |
| Redis | DATABASE_REDIS | |
| MongoDB | DATABASE_MONGODB | |
| Specialized | Milvus (Vector) | DATABASE_MILVUS |
| InfluxDB (TSDB) | DATABASE_INFLUXDB |
For a full list of categorized databases, see Supported Databases.
Sources: APIJSONORM/src/main/java/apijson/orm/SQLConfig.java20-57 APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java146-182
Database Identity: From Request JSON to SQL Generation Code Path
Sources: APIJSONORM/src/main/java/apijson/orm/AbstractParser.java555-575 APIJSONORM/src/main/java/apijson/orm/AbstractObjectParser.java351-370 APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java69-182 APIJSONORM/src/main/java/apijson/orm/SQLConfig.java20-122
Five JSON request parameters control database routing and SQL generation. They may appear at the top level (applying to all table objects) or within a specific table object (applying only to that table). Table-level values take precedence via Map.putIfAbsent() (APIJSONORM/src/main/java/apijson/orm/AbstractObjectParser.java351-370).
| Parameter | JSONMap Key Constant | Default | Purpose |
|---|---|---|---|
@database | KEY_DATABASE | "MYSQL" | Selects SQL dialect. Must match a DATABASE_LIST entry. |
@schema | KEY_SCHEMA | "sys" | Database schema name. Used in schema.table identifiers. |
@datasource | KEY_DATASOURCE | null | Named datasource identifier for multi-datasource routing. |
@namespace | KEY_NAMESPACE | "" | Namespace prefix (e.g., for Elasticsearch index patterns). |
@catalog | KEY_CATALOG | "" | Catalog-level identifier for JDBC drivers. |
Processing Flow:
AbstractParser reads global values and stores them in globalDatabase, globalSchema, etc. (APIJSONORM/src/main/java/apijson/orm/AbstractParser.java555-575).AbstractObjectParser populates sqlRequest for each table, allowing overrides (APIJSONORM/src/main/java/apijson/orm/AbstractObjectParser.java351-370).AbstractSQLConfig reads these from sqlRequest and stores them in instance fields (APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java1344-1400).Sources: APIJSONORM/src/main/java/apijson/orm/AbstractParser.java555-575 APIJSONORM/src/main/java/apijson/orm/AbstractObjectParser.java351-370 APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java1344-1400
Database Parameter Propagation: From JSON to JDBC Connection
Sources: APIJSONORM/src/main/java/apijson/orm/AbstractParser.java555-575 APIJSONORM/src/main/java/apijson/orm/AbstractObjectParser.java351-370 APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java1344-2165 APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java169-295
AbstractSQLConfig uses per-database detection methods and three dialect-group methods to branch SQL generation:
isMSQL() — covers MySQL, MariaDB, TiDB, and compatible engines (APIJSONORM/src/main/java/apijson/orm/SQLConfig.java84).isPSQL() — covers PostgreSQL, CockroachDB, openGauss, and compatible engines (APIJSONORM/src/main/java/apijson/orm/SQLConfig.java85).isTSQL() — covers SQL Server and T-SQL compatible engines (APIJSONORM/src/main/java/apijson/orm/SQLConfig.java83).These groups control identifier quoting (backticks ` vs double quotes " vs brackets []), pagination syntax (LIMIT vs OFFSET...FETCH), and regex operators. Dialect behavior is primarily handled in AbstractSQLConfig.gainSQL() and supporting methods like quote().
For a detailed breakdown of dialect-specific generation, see SQL Dialect Handling.
Sources: APIJSONORM/src/main/java/apijson/orm/SQLConfig.java83-122 APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java69-73
Refresh this wiki