Files
butterfliu/db.go
lzw-723 3aa8057648
All checks were successful
Go CI / test-and-build (push) Successful in 10s
实现数据库级联删除
2026-04-06 16:32:10 +08:00

69 lines
1.4 KiB
Go

package main
import (
"butterfliu/migrations"
"database/sql"
"fmt"
"log"
"os"
"path/filepath"
_ "github.com/mattn/go-sqlite3"
)
var DB *sql.DB
func GetDB() *sql.DB {
return DB
}
func InitDB(dbPath string) error {
dir := filepath.Dir(dbPath)
if _, err := os.Stat(dir); os.IsNotExist(err) {
if err := os.MkdirAll(dir, 0755); err != nil {
return fmt.Errorf("failed to create database directory %s: %v", dir, err)
}
}
var err error
DB, err = sql.Open("sqlite3", dbPath)
if err != nil {
return fmt.Errorf("failed to open database: %v", err)
}
// Enable foreign key support in SQLite
_, err = DB.Exec("PRAGMA foreign_keys = ON")
if err != nil {
return fmt.Errorf("failed to enable foreign keys: %v", err)
}
if err = DB.Ping(); err != nil {
return fmt.Errorf("failed to ping database: %v", err)
}
if err = migrations.InitMigrationTable(DB); err != nil {
return fmt.Errorf("failed to initialize migration table: %v", err)
}
// Auto-migrate by default, can be disabled with AUTO_MIGRATE=false
if os.Getenv("AUTO_MIGRATE") != "false" {
log.Println("Auto-migration enabled, applying pending migrations...")
if err = migrations.MigrateUp(DB); err != nil {
log.Printf("Warning: Auto migration failed: %v", err)
} else {
log.Println("Auto-migration completed successfully")
}
} else {
log.Println("Auto-migration disabled")
}
return nil
}
func CloseDB() error {
if DB != nil {
return DB.Close()
}
return nil
}