Added the adapter config value, to be used in the main system soon. Commented out the debug code for the menus. We're pushing some schema changes in this commit, so we'll see how well the patcher goes and whether it'll need to be patched.
181 lines
4.3 KiB
Go
181 lines
4.3 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"database/sql"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"runtime/debug"
|
|
|
|
"../query_gen/lib"
|
|
"./common"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
)
|
|
|
|
var db *sql.DB
|
|
|
|
func main() {
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
|
|
// Capture panics instead of closing the window at a superhuman speed before the user can read the message on Windows
|
|
defer func() {
|
|
r := recover()
|
|
if r != nil {
|
|
fmt.Println(r)
|
|
debug.PrintStack()
|
|
pressAnyKey(scanner)
|
|
return
|
|
}
|
|
}()
|
|
|
|
if common.DbConfig != "mysql" && common.DbConfig != "" {
|
|
log.Fatal("Only MySQL is supported for upgrades right now, please wait for a newer build of the patcher")
|
|
}
|
|
|
|
err := prepMySQL()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
err = patcher(scanner)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
err = os.Remove("./patcher/config.go")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
err = os.Remove("./patcher/common/site.go")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func pressAnyKey(scanner *bufio.Scanner) {
|
|
fmt.Println("Please press enter to exit...")
|
|
for scanner.Scan() {
|
|
_ = scanner.Text()
|
|
return
|
|
}
|
|
}
|
|
|
|
func prepMySQL() error {
|
|
err := qgen.Builder.Init("mysql", map[string]string{
|
|
"host": common.DbConfig.Host,
|
|
"port": common.DbConfig.Port,
|
|
"name": common.DbConfig.Dbname,
|
|
"username": common.DbConfig.Username,
|
|
"password": common.DbConfig.Password,
|
|
"collation": "utf8mb4_general_ci",
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Ready the query builder
|
|
db = qgen.Builder.GetConn()
|
|
return qgen.Builder.SetAdapter("mysql")
|
|
}
|
|
|
|
func execStmt(stmt *sql.Stmt, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = stmt.Exec()
|
|
return err
|
|
}
|
|
|
|
func patcher(scanner *bufio.Scanner) error {
|
|
err := execStmt(qgen.Builder.CreateTable("menus", "", "",
|
|
[]qgen.DBTableColumn{
|
|
qgen.DBTableColumn{"mid", "int", 0, false, true, ""},
|
|
},
|
|
[]qgen.DBTableKey{
|
|
qgen.DBTableKey{"mid", "primary"},
|
|
},
|
|
))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execStmt(qgen.Builder.CreateTable("menu_items", "", "",
|
|
[]qgen.DBTableColumn{
|
|
qgen.DBTableColumn{"mid", "int", 0, false, false, ""},
|
|
qgen.DBTableColumn{"htmlID", "varchar", 200, false, false, "''"},
|
|
qgen.DBTableColumn{"cssClass", "varchar", 200, false, false, "''"},
|
|
qgen.DBTableColumn{"position", "varchar", 100, false, false, ""},
|
|
qgen.DBTableColumn{"path", "varchar", 200, false, false, "''"},
|
|
qgen.DBTableColumn{"aria", "varchar", 200, false, false, "''"},
|
|
qgen.DBTableColumn{"tooltip", "varchar", 200, false, false, "''"},
|
|
qgen.DBTableColumn{"tmplName", "varchar", 200, false, false, "''"},
|
|
qgen.DBTableColumn{"order", "int", 0, false, false, "0"},
|
|
|
|
qgen.DBTableColumn{"guestOnly", "boolean", 0, false, false, "0"},
|
|
qgen.DBTableColumn{"memberOnly", "boolean", 0, false, false, "0"},
|
|
qgen.DBTableColumn{"staffOnly", "boolean", 0, false, false, "0"},
|
|
qgen.DBTableColumn{"adminOnly", "boolean", 0, false, false, "0"},
|
|
},
|
|
[]qgen.DBTableKey{},
|
|
))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execStmt(qgen.Builder.SimpleInsert("menus", "", ""))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execStmt(qgen.Builder.SimpleInsert("menu_items", "mid, htmlID, position, path, aria, tooltip, order", "1,'menu_forums','left','/forums/','{lang.menu_forums_aria}','{lang.menu_forums_tooltip}',0"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execStmt(qgen.Builder.SimpleInsert("menu_items", "mid, htmlID, cssClass, position, path, aria, tooltip, order", "1,'menu_topics','menu_topics','left','/topics/','{lang.menu_topics_aria}','{lang.menu_topics_tooltip}',1"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
stmt, err = execStmt(qgen.Builder.SimpleInsert("menu_items", "mid, htmlID, cssClass, position, tmplName, order", "1,'general_alerts','menu_alerts','right','menu_alerts',2"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
/*func eachUserQuick(handle func(int)) error {
|
|
stmt, err := qgen.Builder.Select("users").Orderby("uid desc").Limit(1).Prepare()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var topID int
|
|
err := stmt.QueryRow(topID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := 1; i <= topID; i++ {
|
|
err = handle(i)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}*/
|
|
|
|
func eachUser(handle func(int) error) error {
|
|
acc := qgen.Builder.Accumulator()
|
|
err := acc.Select("users").Each(func(rows *sql.Rows) error {
|
|
var uid int
|
|
err := rows.Scan(&uid)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return handle(uid)
|
|
})
|
|
return err
|
|
}
|