fix: use custom TableName() for dump/restore table resolution

RegisteredTableNames() was using the xorm name mapper to derive table
names from Go struct type names, ignoring custom TableName() methods.
This caused `vikunja dump` to look for `database_notification` instead
of the actual table `notifications`, resulting in a fatal error.

Fixes go-vikunja/vikunja#2464
This commit is contained in:
kolaente 2026-03-24 16:14:00 +01:00 committed by kolaente
parent 6d2bf1f084
commit 1e0d29e090
1 changed files with 8 additions and 4 deletions

View File

@ -60,13 +60,17 @@ func RegisterTables(tables []interface{}) {
// RegisteredTableNames returns the table names of all registered Vikunja tables.
func RegisteredTableNames() []string {
mapper := x.GetTableMapper()
names := make([]string, 0, len(registeredTables)+1)
tableNames := make([]string, 0, len(registeredTables)+1)
for _, bean := range registeredTables {
names = append(names, mapper.Obj2Table(reflect.Indirect(reflect.ValueOf(bean)).Type().Name()))
if tn, ok := bean.(interface{ TableName() string }); ok {
tableNames = append(tableNames, tn.TableName())
} else {
tableNames = append(tableNames, mapper.Obj2Table(reflect.Indirect(reflect.ValueOf(bean)).Type().Name()))
}
}
// The xormigrate migration tracking table is not registered via GetTables()
names = append(names, "migration")
return names
tableNames = append(tableNames, "migration")
return tableNames
}
// CreateDBEngine initializes a db engine from the config