1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-08 02:56:24 -07:00
gochan/pkg/gcsql/connect.go

78 lines
2.1 KiB
Go

package gcsql
import (
"os"
"regexp"
"strings"
)
var (
tcpHostIsolator = regexp.MustCompile(`\b(tcp\()?([^\(\)]*)\b`)
)
// ConnectToDB initializes the database connection and exits if there are any errors
func ConnectToDB(host, driver, dbName, username, password, prefix string) error {
var err error
gcdb, err = Open(host, driver, dbName, username, password, prefix)
return err
}
// RunSQLFile cuts a given sql file into individual statements and runs it.
func RunSQLFile(path string) error {
sqlBytes, err := os.ReadFile(path)
if err != nil {
return err
}
sqlStr := regexp.MustCompile("--.*\n?").ReplaceAllString(string(sqlBytes), " ")
sqlArr := strings.Split(gcdb.replacer.Replace(sqlStr), ";")
for _, statement := range sqlArr {
statement = strings.Trim(statement, " \n\r\t")
if len(statement) > 0 {
if _, err = gcdb.db.Exec(statement); err != nil {
return err
}
}
}
return nil
}
// TODO: get gochan-migration working so this doesn't have to sit here
func tmpSqlAdjust() error {
// first update the crappy wordfilter table structure
var err error
var query string
switch gcdb.driver {
case "mysql":
query = `SELECT COUNT(*) FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'wordfilters_staff_id_fk'
AND TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'DBPREFIXwordfilters'`
numConstraints := 3
if err = gcdb.QueryRowSQL(query,
interfaceSlice(),
interfaceSlice(&numConstraints)); err != nil {
return err
}
if numConstraints > 0 {
query = `ALTER TABLE DBPREFIXwordfilters DROP FOREIGN KEY IF EXISTS wordfilters_board_id_fk`
} else {
query = ""
}
case "postgres":
query = `ALTER TABLE DBPREFIXwordfilters DROP CONSTRAINT IF EXISTS board_id_fk`
case "sqlite3":
_, err = ExecSQL(`PRAGMA foreign_keys = ON`)
return err
}
if _, err = gcdb.ExecSQL(query); err != nil {
return err
}
query = `ALTER TABLE DBPREFIXwordfilters DROP COLUMN IF EXISTS board_id`
if _, err = gcdb.ExecSQL(query); err != nil {
return err
}
query = `ALTER TABLE DBPREFIXwordfilters ADD COLUMN IF NOT EXISTS board_dirs varchar(255) DEFAULT '*'`
_, err = gcdb.ExecSQL(query)
return err
}