feat: introduce a new sql module - #1867
Conversation
# Conflicts: # gradle/libs.versions.toml
Test Results 52 files - 4 52 suites - 4 2m 7s ⏱️ - 1m 36s Results for commit 34ba8d5. ± Comparison against base commit bc4ebcb. This pull request removes 67 and adds 33 tests. Note that renamed tests count towards both.♻️ This comment has been updated with latest results. |
There was a problem hiding this comment.
Pull request overview
This PR replaces the dedicated MySQL database module with a new generic SQL module powered by jOOQ/HikariCP to support multiple SQL backends (MySQL, MariaDB, PostgreSQL, SQLite), and adjusts the core database APIs/providers accordingly.
Changes:
- Replace
database-mysqlwithdatabase-sqland introduce a jOOQ-based provider/database implementation. - Extend the database provider API with
synced()and update provider implementations accordingly. - Add SQL module configuration/types plus a new cross-database test suite (SQLite + Testcontainers for MySQL/MariaDB/Postgres).
Reviewed changes
Copilot reviewed 39 out of 41 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| settings.gradle.kts | Switches the registered database module from database-mysql to database-sql. |
| node/impl/src/main/java/eu/cloudnetservice/node/impl/database/xodus/XodusDatabaseProvider.java | Implements new synced() API for Xodus provider. |
| node/impl/src/main/java/eu/cloudnetservice/node/impl/database/xodus/XodusDatabase.java | Removes now-deleted LocalDatabase.iterate(BiConsumer) override. |
| node/impl/src/main/java/eu/cloudnetservice/node/impl/database/sql/SQLDatabaseProvider.java | Removes deprecated legacy SQL provider abstraction. |
| node/impl/src/main/java/eu/cloudnetservice/node/impl/database/h2/H2DatabaseProvider.java | Refactors H2 provider to no longer depend on removed legacy SQL provider; adds synced(). |
| node/impl/src/main/java/eu/cloudnetservice/node/impl/database/h2/H2Database.java | Moves H2 database implementation onto shared AbstractDatabase; removes old iterate override. |
| node/api/src/main/java/eu/cloudnetservice/node/database/LocalDatabase.java | Removes iterate(BiConsumer) from the LocalDatabase API. |
| modules/database-sql/impl/src/test/resources/logback-test.xml | Adds test logback configuration for SQL module tests. |
| modules/database-sql/impl/src/test/java/eu/cloudnetservice/modules/sql/impl/SQLiteDatabaseTest.java | Adds SQLite variant of the SQL database test suite. |
| modules/database-sql/impl/src/test/java/eu/cloudnetservice/modules/sql/impl/SQLDatabaseTest.java | Adds shared behavior tests for SQL providers/databases. |
| modules/database-sql/impl/src/test/java/eu/cloudnetservice/modules/sql/impl/PostgreSQLDatabaseTest.java | Adds Postgres Testcontainers-based test wiring. |
| modules/database-sql/impl/src/test/java/eu/cloudnetservice/modules/sql/impl/MySQLDBDatabaseTest.java | Adds MySQL Testcontainers-based test wiring. |
| modules/database-sql/impl/src/test/java/eu/cloudnetservice/modules/sql/impl/MariaDBDatabaseTest.java | Adds MariaDB Testcontainers-based test wiring. |
| modules/database-sql/impl/src/test/java/eu/cloudnetservice/modules/sql/impl/junit/EnableServicesInjectExtension.java | Renames test extension package from mysql to sql module namespace. |
| modules/database-sql/impl/src/test/java/eu/cloudnetservice/modules/sql/impl/junit/EnableServicesInject.java | Renames test annotation package from mysql to sql module namespace. |
| modules/database-sql/impl/src/main/java/eu/cloudnetservice/modules/sql/impl/table/TableCreator.java | Introduces abstraction to create per-dialect tables via jOOQ. |
| modules/database-sql/impl/src/main/java/eu/cloudnetservice/modules/sql/impl/table/SQLiteTableCreator.java | Implements SQLite-specific table creation. |
| modules/database-sql/impl/src/main/java/eu/cloudnetservice/modules/sql/impl/table/PostgreSQLTableCreator.java | Implements Postgres-specific table creation (currently contains a compile-breaking incomplete statement). |
| modules/database-sql/impl/src/main/java/eu/cloudnetservice/modules/sql/impl/table/MySQLTableCreator.java | Implements MySQL-specific table creation. |
| modules/database-sql/impl/src/main/java/eu/cloudnetservice/modules/sql/impl/table/MariaDBTableCreator.java | Implements MariaDB-specific table creation. |
| modules/database-sql/impl/src/main/java/eu/cloudnetservice/modules/sql/impl/JooqProvider.java | Adds the new SQL provider implementation (currently bypasses provider cache). |
| modules/database-sql/impl/src/main/java/eu/cloudnetservice/modules/sql/impl/JooqDatabaseType.java | Adds dialect/driver mapping for supported SQL backends. |
| modules/database-sql/impl/src/main/java/eu/cloudnetservice/modules/sql/impl/JooqDatabase.java | Adds new jOOQ-backed database implementation (currently uses HashMap.newHashMap). |
| modules/database-sql/impl/src/main/java/eu/cloudnetservice/modules/sql/impl/DocumentConverter.java | Adds JSONB↔Document conversion for jOOQ mapping. |
| modules/database-sql/impl/src/main/java/eu/cloudnetservice/modules/sql/impl/CloudNetSQLDatabaseModule.java | Registers SQL database providers from module configuration; contains legacy config conversion. |
| modules/database-sql/impl/build.gradle.kts | Updates dependencies/artifact/module metadata for new SQL module (main class currently mismatched). |
| modules/database-sql/api/src/main/java/eu/cloudnetservice/modules/sql/config/SQLModuleConfiguration.java | Introduces SQL module configuration record (list of entries). |
| modules/database-sql/api/src/main/java/eu/cloudnetservice/modules/sql/config/SQLConfigurationEntry.java | Introduces per-provider SQL config entry and JDBC URI builder (currently not SQLite-safe without override). |
| modules/database-sql/api/src/main/java/eu/cloudnetservice/modules/sql/config/DatabaseType.java | Adds enum for supported SQL backends. |
| modules/database-sql/api/build.gradle.kts | Adds API module build definition for the SQL module. |
| modules/database-mysql/impl/src/test/java/eu/cloudnetservice/modules/mysql/impl/MySQLDatabaseTest.java | Removes old MySQL module tests. |
| modules/database-mysql/impl/src/main/java/eu/cloudnetservice/modules/mysql/impl/MySQLDatabaseProvider.java | Removes old MySQL provider implementation. |
| modules/database-mysql/impl/src/main/java/eu/cloudnetservice/modules/mysql/impl/MySQLDatabase.java | Removes old MySQL database implementation. |
| modules/database-mysql/impl/src/main/java/eu/cloudnetservice/modules/mysql/impl/CloudNetMySQLDatabaseModule.java | Removes old MySQL module entrypoint. |
| modules/database-mysql/api/src/main/java/eu/cloudnetservice/modules/mysql/config/MySQLConfiguration.java | Removes old MySQL module configuration type. |
| modules/database-mongodb/impl/src/main/java/eu/cloudnetservice/modules/mongodb/impl/MongoDBDatabaseProvider.java | Implements new synced() API for MongoDB provider. |
| modules/database-mongodb/impl/src/main/java/eu/cloudnetservice/modules/mongodb/impl/MongoDBDatabase.java | Removes now-deleted LocalDatabase.iterate(BiConsumer) override. |
| gradle/libs.versions.toml | Adds jOOQ + additional JDBC drivers; replaces mysql bundle with a new sql bundle. |
| driver/api/src/main/java/eu/cloudnetservice/driver/database/DatabaseProvider.java | Adds synced() API to DatabaseProvider. |
| driver/api/src/main/java/eu/cloudnetservice/driver/database/Database.java | Contains a new malformed/duplicated Javadoc opening near documentCountAsync(). |
| build-extensions/src/main/kotlin/eu/cloudnetservice/cloudnet/gradle/util/Files.kt | Renames database module artifact constant from mysql to sql; removes unused constants. |
Suppressed comments (1)
modules/database-sql/impl/build.gradle.kts:42
- The module descriptor points to a main class that doesn't exist in this PR. The implementation class added is CloudNetSQLDatabaseModule, so the module won't load at runtime with the current value.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Motivation
Currently we only support mariadb and mysql, while we could support more sql based databases. Using jooq we can achieve this support with a single implementation.
Modification
Removed the mysql module and replaced it with a generic sql module.
Result
Postgres, MariaDB, MySQL, SQLite are now supported