Files
eightbf-analysis-go/internal/repo/schema.go
T
gozerosandCursor 0c45b86d67 chore: 初始化 eightbf-analysis-go(对齐 Java 会商作业服务)
Go 实现 /api/v1/analysis 契约、Demo/Live Worker、DeerFlow SSE;含设计文档与冒烟脚本。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-03 00:13:46 +08:00

48 lines
1.1 KiB
Go

package repo
import (
"log"
"strings"
)
// ApplySchema 按语句拆开执行;重复索引等可忽略错误不阻断启动。
func (r *JobRepo) ApplySchema(schemaSQL string) {
for _, stmt := range splitSQL(schemaSQL) {
if _, err := r.DB.Exec(stmt); err != nil {
msg := err.Error()
// 1061 Duplicate key name / 已存在表
if strings.Contains(msg, "1061") || strings.Contains(msg, "1050") ||
strings.Contains(msg, "already exists") {
continue
}
log.Printf("schema 语句失败(已跳过): %v | sql=%.80s…", err, stmt)
}
}
}
func splitSQL(s string) []string {
var out []string
var b strings.Builder
lines := strings.Split(s, "\n")
for _, line := range lines {
trim := strings.TrimSpace(line)
if trim == "" || strings.HasPrefix(trim, "--") {
continue
}
b.WriteString(line)
b.WriteByte('\n')
if strings.HasSuffix(trim, ";") {
stmt := strings.TrimSpace(b.String())
stmt = strings.TrimSuffix(stmt, ";")
if stmt != "" {
out = append(out, stmt)
}
b.Reset()
}
}
if rest := strings.TrimSpace(b.String()); rest != "" {
out = append(out, rest)
}
return out
}