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. // RegisteredTableNames returns the table names of all registered Vikunja tables.
func RegisteredTableNames() []string { func RegisteredTableNames() []string {
mapper := x.GetTableMapper() mapper := x.GetTableMapper()
names := make([]string, 0, len(registeredTables)+1) tableNames := make([]string, 0, len(registeredTables)+1)
for _, bean := range registeredTables { 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() // The xormigrate migration tracking table is not registered via GetTables()
names = append(names, "migration") tableNames = append(tableNames, "migration")
return names return tableNames
} }
// CreateDBEngine initializes a db engine from the config // CreateDBEngine initializes a db engine from the config