feat: 添更新配置选项支持添加SQL导入功能
This commit is contained in:
104
src/framework/database/db/expand.go
Normal file
104
src/framework/database/db/expand.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"be.ems/src/framework/config"
|
||||
)
|
||||
|
||||
// ImportSQL 导入SQL
|
||||
func ImportSQL() {
|
||||
sqlPath := config.Get("sqlPath").(string)
|
||||
if sqlPath == "" {
|
||||
return
|
||||
}
|
||||
sqlSource := config.Get("sqlSource").(string)
|
||||
if sqlSource == "" {
|
||||
sqlSource = config.Get("database.defaultDataSourceName").(string)
|
||||
}
|
||||
|
||||
// 数据源
|
||||
db := DB(sqlSource)
|
||||
if db == nil {
|
||||
log.Fatalln("not database source")
|
||||
return
|
||||
}
|
||||
|
||||
// 获取路径信息
|
||||
fileInfo, err := os.Stat(sqlPath)
|
||||
if err != nil {
|
||||
log.Fatalln(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 处理目录或文件
|
||||
if fileInfo.IsDir() {
|
||||
// 处理目录
|
||||
files, err := os.ReadDir(sqlPath)
|
||||
if err != nil {
|
||||
log.Fatalln(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
if file.IsDir() {
|
||||
continue
|
||||
}
|
||||
if !strings.HasSuffix(file.Name(), ".sql") {
|
||||
continue
|
||||
}
|
||||
processSQLFile(db, filepath.Join(sqlPath, file.Name()))
|
||||
}
|
||||
} else {
|
||||
// 处理单个文件
|
||||
processSQLFile(db, sqlPath)
|
||||
}
|
||||
|
||||
log.Println("Import SQL End")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// 处理单个SQL文件的通用函数
|
||||
func processSQLFile(db *gorm.DB, filePath string) {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
log.Fatalln(err.Error())
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// 逐行读取 SQL 文件
|
||||
scanner := bufio.NewScanner(file)
|
||||
var sqlBuilder strings.Builder
|
||||
for scanner.Scan() {
|
||||
line := strings.TrimSpace(scanner.Text())
|
||||
// 跳过注释和空行
|
||||
if strings.HasPrefix(line, "--") || strings.TrimSpace(line) == "" {
|
||||
continue
|
||||
}
|
||||
// 跳过配置语句
|
||||
if strings.HasPrefix(line, "/*!") {
|
||||
continue
|
||||
}
|
||||
|
||||
sqlBuilder.WriteString(line + "\n")
|
||||
|
||||
// 当遇到分号时,执行 SQL 语句
|
||||
if strings.HasSuffix(line, ";") {
|
||||
// 执行 SQL 语句
|
||||
if err := db.Exec(sqlBuilder.String()).Error; err != nil {
|
||||
log.Fatalln(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
sqlBuilder.Reset()
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user