spark-server/internal/infrastructure/mysql/mysql.go
2026-09-16 19:08:06 +08:00

46 lines
889 B
Go

package mysql
import (
"context"
"database/sql"
"fmt"
"time"
// registers the MySQL driver with database/sql
_ "github.com/go-sql-driver/mysql"
)
type DB struct {
sql *sql.DB
}
func Open(dsn string) (*DB, error) {
if dsn == "" {
return &DB{}, nil
}
sqlDB, err := sql.Open("mysql", dsn)
if err != nil {
return nil, fmt.Errorf("mysql open: %w", err)
}
sqlDB.SetMaxOpenConns(64)
sqlDB.SetConnMaxLifetime(30 * time.Minute)
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
if err := sqlDB.PingContext(ctx); err != nil {
_ = sqlDB.Close()
return nil, fmt.Errorf("mysql ping: %w", err)
}
return &DB{sql: sqlDB}, nil
}
func (d *DB) SQL() *sql.DB { return d.sql }
func (d *DB) Close() error {
if d == nil || d.sql == nil {
return nil
}
return d.sql.Close()
}
func (d *DB) Ready() bool { return d != nil && d.sql != nil }