Extract ~200 lines of duplicate database connection code from api/ntpdb/ and monitor/ntpdb/ into common/database/ package. Creates foundation for database consolidation while maintaining zero breaking changes. Files added: - config.go: Unified configuration with package-specific defaults - connector.go: Dynamic connector pattern from Boostport - pool.go: Configurable connection pool management - metrics.go: Optional Prometheus metrics integration - interfaces.go: Shared database interfaces for consistent patterns Key features: - Configuration-driven approach (API: 25/10 connections + metrics, Monitor: 10/5 connections, no metrics) - Optional Prometheus metrics when registerer provided - Backward compatibility via convenience functions - Flexible config file loading (explicit paths + search-based) Dependencies: Added mysql driver and yaml parsing for database configuration.
35 lines
1.2 KiB
Go
35 lines
1.2 KiB
Go
package database
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
)
|
|
|
|
// DBTX matches the interface expected by SQLC-generated code
|
|
// This interface is implemented by both *sql.DB and *sql.Tx
|
|
type DBTX interface {
|
|
ExecContext(context.Context, string, ...interface{}) (sql.Result, error)
|
|
PrepareContext(context.Context, string) (*sql.Stmt, error)
|
|
QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error)
|
|
QueryRowContext(context.Context, string, ...interface{}) *sql.Row
|
|
}
|
|
|
|
// BaseQuerier provides basic query functionality
|
|
// This interface should be implemented by package-specific Queries types
|
|
type BaseQuerier interface {
|
|
WithTx(tx *sql.Tx) BaseQuerier
|
|
}
|
|
|
|
// BaseQuerierTx provides transaction functionality
|
|
// This interface should be implemented by package-specific Queries types
|
|
type BaseQuerierTx interface {
|
|
BaseQuerier
|
|
Begin(ctx context.Context) (BaseQuerierTx, error)
|
|
Commit(ctx context.Context) error
|
|
Rollback(ctx context.Context) error
|
|
}
|
|
|
|
// TransactionFunc represents a function that operates within a database transaction
|
|
// This is used by the shared transaction helpers in transaction.go
|
|
type TransactionFunc[Q any] func(ctx context.Context, q Q) error
|