Files
pnoker 769d1cb977 style: apply repository-wide formatting
- expand single-line Javadocs to multi-line blocks, rewrap Markdown prose, and reflow POM, YAML, and TypeScript formatting
- formatting only: no Java code lines changed, no build-file semantics changed
- verified: backend compile and check_documentation.py pass, pnpm check and pnpm lint:check pass, and the dc3 YAML files parse
2026-08-25 13:35:00 +08:00

74 lines
3.9 KiB
Markdown

# DC3 Common SQL
## Overview
`dc3-common-sql` is the shared base for the database (JDBC) drivers of the IoT DC3 platform. It provides
`AbstractJdbcDriverCustomService`, a common driver-service base that handles JDBC connection management (via HikariCP)
and query execution, so each database driver only supplies its dialect/connection specifics.
## Module Information
- **Group ID**: io.github.pnoker
- **Artifact ID**: dc3-common-sql
## Key Components
| Component | Purpose |
|-----------------------------------|---------------------------------------------------------------------|
| `AbstractJdbcDriverCustomService` | Base driver service for JDBC sources — pooled connections + queries |
## Dependencies
- `dc3-common-driver` — Driver SDK that the base service plugs into
- `HikariCP` — JDBC connection pool
## Connection Management
One HikariCP pool is cached per device (`ConcurrentHashMap<Long, HikariDataSource>`), created lazily on first access and
configured with a maximum of 5 connections and a minimum idle of 1. Pools are evicted when:
- the device is deleted or updated (device metadata event),
- the driver configuration is updated or the driver is deleted (driver metadata event — every pool is closed),
- a read/write fails at the connection level, so the next access rebuilds the pool from current configuration.
## Driver Attributes
| Attribute | Default | Semantics |
|--------------|------------------|---------------------------------------------------------------------------------------------------------------|
| host | `localhost` | Database host |
| port | dialect-specific | Database port |
| database | — | Database name (MySQL, PostgreSQL, SQL Server; Oracle uses SID/ServiceName instead) |
| username | `root` | Login name |
| password | — | Login password |
| queryTimeout | `30` | SQL statement timeout in **seconds**, applied via `PreparedStatement.setQueryTimeout` to every read and write |
## Point Attributes
| Attribute | Semantics |
|--------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| `readQuery` | SQL SELECT executed on read; must not contain `?` placeholders because reads bind no parameters |
| `writeQuery` | SQL UPDATE/INSERT/DELETE executed on write; must contain exactly one `?` placeholder — the point value is bound via `setString`, preventing SQL injection |
`validatePoint` derives which queries are required from the point's read/write flag: read-only points require
`readQuery`, write-only points require `writeQuery`, and read-write points require both. A point with an unknown flag is
treated as read-only.
## Build Instructions
```bash
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-sql -am package
```
## Testing
Run the module tests from the repository root:
```bash
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-sql -am test
```
## Related Modules
- `dc3-driver-mysql`, `dc3-driver-oracle`, `dc3-driver-postgresql`, `dc3-driver-sqlserver` — JDBC drivers that extend
`AbstractJdbcDriverCustomService`