mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-08-17 10:56:24 -07:00
Fix prefix not being applied in DB update
This commit is contained in:
parent
912fad3473
commit
9352f0b611
8 changed files with 34 additions and 23 deletions
|
@ -8,6 +8,7 @@ import (
|
|||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/gochan-org/gochan/pkg/config"
|
||||
"github.com/gochan-org/gochan/pkg/gcsql"
|
||||
"github.com/gochan-org/gochan/pkg/gcutil"
|
||||
)
|
||||
|
@ -18,12 +19,14 @@ var (
|
|||
|
||||
// ColumnType returns a string representation of the column's data type. It does not return an error
|
||||
// if the column does not exist, instead returning an empty string.
|
||||
func ColumnType(db *gcsql.GCDB, tx *sql.Tx, columnName string, tableName string, dbName string, dbType string) (string, error) {
|
||||
func ColumnType(db *gcsql.GCDB, tx *sql.Tx, columnName string, tableName string, criticalCfg *config.SystemCriticalConfig) (string, error) {
|
||||
var query string
|
||||
var dataType string
|
||||
var err error
|
||||
var params []any
|
||||
switch dbType {
|
||||
tableName = strings.ReplaceAll(tableName, "DBPREFIX", criticalCfg.DBprefix)
|
||||
dbName := criticalCfg.DBname
|
||||
switch criticalCfg.DBtype {
|
||||
case "mysql":
|
||||
query = `SELECT DATA_TYPE FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND COLUMN_NAME = ? LIMIT 1`
|
||||
|
|
|
@ -56,8 +56,6 @@ func (dbu *GCDatabaseUpdater) MigrateDB() (bool, error) {
|
|||
}
|
||||
|
||||
criticalConfig := config.GetSystemCriticalConfig()
|
||||
dbName := criticalConfig.DBname
|
||||
dbType := criticalConfig.DBtype
|
||||
ctx := context.Background()
|
||||
tx, err := dbu.db.BeginTx(ctx, &sql.TxOptions{
|
||||
Isolation: 0,
|
||||
|
@ -70,11 +68,11 @@ func (dbu *GCDatabaseUpdater) MigrateDB() (bool, error) {
|
|||
|
||||
switch criticalConfig.DBtype {
|
||||
case "mysql":
|
||||
err = updateMysqlDB(dbu.db, tx, dbName, dbType)
|
||||
err = updateMysqlDB(dbu.db, tx, &criticalConfig)
|
||||
case "postgres":
|
||||
err = updatePostgresDB(dbu.db, tx, dbName, dbType)
|
||||
err = updatePostgresDB(dbu.db, tx, &criticalConfig)
|
||||
case "sqlite3":
|
||||
err = updateSqliteDB(dbu.db, tx, dbName, dbType)
|
||||
err = updateSqliteDB(dbu.db, tx, &criticalConfig)
|
||||
}
|
||||
if err != nil {
|
||||
return false, err
|
||||
|
|
|
@ -4,13 +4,15 @@ import (
|
|||
"database/sql"
|
||||
|
||||
"github.com/gochan-org/gochan/cmd/gochan-migration/internal/common"
|
||||
"github.com/gochan-org/gochan/pkg/config"
|
||||
"github.com/gochan-org/gochan/pkg/gcsql"
|
||||
"github.com/gochan-org/gochan/pkg/gcutil"
|
||||
)
|
||||
|
||||
func updateMysqlDB(db *gcsql.GCDB, tx *sql.Tx, dbName string, dbType string) error {
|
||||
func updateMysqlDB(db *gcsql.GCDB, tx *sql.Tx, criticalCfg *config.SystemCriticalConfig) error {
|
||||
var numConstraints int
|
||||
var err error
|
||||
dbName := criticalCfg.DBname
|
||||
query := `SELECT COUNT(*) FROM information_schema.TABLE_CONSTRAINTS
|
||||
WHERE CONSTRAINT_NAME = 'wordfilters_board_id_fk'
|
||||
AND TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'DBPREFIXwordfilters'`
|
||||
|
@ -23,7 +25,7 @@ func updateMysqlDB(db *gcsql.GCDB, tx *sql.Tx, dbName string, dbType string) err
|
|||
} else {
|
||||
query = ""
|
||||
}
|
||||
dataType, err := common.ColumnType(db, tx, "board_dirs", "DBPREFIXwordfilters", dbName, dbType)
|
||||
dataType, err := common.ColumnType(db, tx, "board_dirs", "DBPREFIXwordfilters", criticalCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -62,11 +64,11 @@ func updateMysqlDB(db *gcsql.GCDB, tx *sql.Tx, dbName string, dbType string) err
|
|||
if err = rows.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
dataType, err = common.ColumnType(db, tx, "ip", "DBPREFIXip_ban", dbName, dbType)
|
||||
dataType, err = common.ColumnType(db, tx, "ip", "DBPREFIXip_ban", criticalCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if dataType == "" {
|
||||
if dataType != "" {
|
||||
// add range_start and range_end columns
|
||||
query = `ALTER TABLE DBPREFIXip_ban
|
||||
ADD COLUMN IF NOT EXISTS range_start VARBINARY(16) NOT NULL,
|
||||
|
@ -104,7 +106,7 @@ func updateMysqlDB(db *gcsql.GCDB, tx *sql.Tx, dbName string, dbType string) err
|
|||
}
|
||||
|
||||
// Convert DBPREFIXposts.ip to from varchar to varbinary
|
||||
dataType, err = common.ColumnType(db, tx, "ip", "DBPREFIXposts", dbName, dbType)
|
||||
dataType, err = common.ColumnType(db, tx, "ip", "DBPREFIXposts", criticalCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -134,7 +136,7 @@ func updateMysqlDB(db *gcsql.GCDB, tx *sql.Tx, dbName string, dbType string) err
|
|||
}
|
||||
|
||||
// Convert DBPREFIXreports.ip to from varchar to varbinary
|
||||
dataType, err = common.ColumnType(db, tx, "ip", "DBPREFIXreports", dbName, dbType)
|
||||
dataType, err = common.ColumnType(db, tx, "ip", "DBPREFIXreports", criticalCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -4,10 +4,11 @@ import (
|
|||
"database/sql"
|
||||
|
||||
"github.com/gochan-org/gochan/cmd/gochan-migration/internal/common"
|
||||
"github.com/gochan-org/gochan/pkg/config"
|
||||
"github.com/gochan-org/gochan/pkg/gcsql"
|
||||
)
|
||||
|
||||
func updatePostgresDB(db *gcsql.GCDB, tx *sql.Tx, dbName string, dbType string) error {
|
||||
func updatePostgresDB(db *gcsql.GCDB, tx *sql.Tx, criticalCfg *config.SystemCriticalConfig) error {
|
||||
query := `ALTER TABLE DBPREFIXwordfilters
|
||||
DROP CONSTRAINT IF EXISTS board_id_fk`
|
||||
_, err := db.ExecSQL(query)
|
||||
|
@ -20,7 +21,7 @@ func updatePostgresDB(db *gcsql.GCDB, tx *sql.Tx, dbName string, dbType string)
|
|||
return err
|
||||
}
|
||||
|
||||
dataType, err := common.ColumnType(db, tx, "ip", "DBPREFIXposts", dbName, dbType)
|
||||
dataType, err := common.ColumnType(db, tx, "ip", "DBPREFIXposts", criticalCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -50,7 +51,7 @@ func updatePostgresDB(db *gcsql.GCDB, tx *sql.Tx, dbName string, dbType string)
|
|||
}
|
||||
}
|
||||
|
||||
dataType, err = common.ColumnType(db, tx, "ip", "DBPREFIXip_ban", dbName, dbType)
|
||||
dataType, err = common.ColumnType(db, tx, "ip", "DBPREFIXip_ban", criticalCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -4,15 +4,16 @@ import (
|
|||
"database/sql"
|
||||
|
||||
"github.com/gochan-org/gochan/cmd/gochan-migration/internal/common"
|
||||
"github.com/gochan-org/gochan/pkg/config"
|
||||
"github.com/gochan-org/gochan/pkg/gcsql"
|
||||
)
|
||||
|
||||
func updateSqliteDB(db *gcsql.GCDB, tx *sql.Tx, dbName string, dbType string) error {
|
||||
func updateSqliteDB(db *gcsql.GCDB, tx *sql.Tx, criticalCfg *config.SystemCriticalConfig) error {
|
||||
_, err := db.ExecSQL(`PRAGMA foreign_keys = ON`)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dataType, err := common.ColumnType(db, tx, "DBPREFIXwordfilters", "board_dirs", dbName, dbType)
|
||||
dataType, err := common.ColumnType(db, tx, "DBPREFIXwordfilters", "board_dirs", criticalCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
# Shell script that downloads a pre-migration gochan release for testing gochan-migration
|
||||
# This should only be used in a development environment
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
TESTING_VERSION="v2.12.0"
|
||||
RELEASE_DIR="gochan-${TESTING_VERSION}_linux"
|
||||
RELEASE_GZ="$RELEASE_DIR.tar.gz"
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
# Shell script that downloads a previous gochan release for testing gochan-migration -updatedb
|
||||
# This should only be used in a development environment
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
TESTING_VERSION="v3.7.0"
|
||||
RELEASE_DIR="gochan-${TESTING_VERSION}_linux"
|
||||
RELEASE_GZ="$RELEASE_DIR.tar.gz"
|
||||
|
@ -21,14 +23,18 @@ echo "Extracting $RELEASE_GZ"
|
|||
tar -xf gochan-${TESTING_VERSION}_linux.tar.gz
|
||||
cd $RELEASE_DIR
|
||||
|
||||
cp examples/configs/gochan.example.json gochan.json
|
||||
cp sample-configs/gochan.example.json gochan.json
|
||||
echo "Modifying $PWD/gochan.json for testing migration"
|
||||
sed -i gochan.json \
|
||||
-e 's/"Port": .*/"Port": 9000,/' \
|
||||
-e 's/"UseFastCGI": false/"UseFastCGI": true/' \
|
||||
-e "s/\"DBtype\": .*/\"DBtype\": \""$DBTYPE"\",/" \
|
||||
-e 's/"DBpassword": ""/"DBpassword": "gochan"/' \
|
||||
-e 's/"LogDir": .*/"LogDir": "log"/' \
|
||||
-e 's/"TemplateDir": .*/"TemplateDir": "templates"/' \
|
||||
-e 's/"DocumentRoot": .*/"DocumentRoot": "html"/' \
|
||||
-e 's/"DBname": "gochan"/"DBname": "gochan_37"/' \
|
||||
-e 's/"DBprefix": .*/"DBprefix": ""/' \
|
||||
-e 's/"SiteName": "Gochan"/"SiteName": "Gochan Migration Test"/' \
|
||||
-e 's/"SiteSlogan": ""/"SiteSlogan": "Gochan instance used for testing gochan-migrate -updatedb"/' \
|
||||
-e 's/"DebugMode": false/"DebugMode": true/' \
|
||||
|
@ -56,4 +62,5 @@ else
|
|||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p log
|
||||
sudo ./gochan
|
|
@ -105,10 +105,7 @@ func CheckAndInitializeDatabase(dbType string) error {
|
|||
default:
|
||||
err = ErrInvalidDBVersion
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return err
|
||||
}
|
||||
|
||||
func buildNewDatabase(dbType string) error {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue