Files
code-utils/tools/applyinit/main.go
2026-08-14 07:52:01 +08:00

83 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Applies init.sql to the local MySQL using the app's built-in default connection.
package main
import (
"database/sql"
"fmt"
"os"
"strings"
_ "github.com/go-sql-driver/mysql"
)
func main() {
if len(os.Args) > 1 && os.Args[1] == "inspect" {
inspect()
return
}
raw, err := os.ReadFile("init.sql")
if err != nil {
panic(err)
}
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/?multiStatements=false&charset=utf8mb4")
if err != nil {
panic(err)
}
defer db.Close()
// init.sql 的升级段依赖会话变量SET @sql / PREPARE必须固定在同一连接上执行。
db.SetMaxOpenConns(1)
var kept []string
for _, line := range strings.Split(string(raw), "\n") {
if t := strings.TrimSpace(line); strings.HasPrefix(t, "--") {
continue
}
kept = append(kept, line)
}
for _, stmt := range strings.Split(strings.Join(kept, "\n"), ";") {
s := strings.TrimSpace(stmt)
if s == "" {
continue
}
if _, err := db.Exec(s); err != nil {
fmt.Println("ERR:", err, "stmt:", s[:min(80, len(s))])
os.Exit(1)
}
}
var n int
if err := db.QueryRow("SELECT COUNT(*) FROM code_count.sync_settings").Scan(&n); err != nil {
fmt.Println("verify failed:", err)
os.Exit(1)
}
fmt.Println("ok, sync_settings rows:", n)
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func inspect() {
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/code_count?charset=utf8mb4")
if err != nil {
panic(err)
}
defer db.Close()
rows, err := db.Query("SELECT user_id, name, LENGTH(value), updated_at FROM sync_settings ORDER BY user_id, name")
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var uid int64
var name, at string
var n int
if err := rows.Scan(&uid, &name, &n, &at); err != nil {
panic(err)
}
fmt.Printf("user=%d name=%-12s bytes=%-6d at=%s\n", uid, name, n, at)
}
}