From 1e0d29e0908ac9ccb299ff9f2e91610645928b41 Mon Sep 17 00:00:00 2001 From: kolaente Date: Tue, 24 Mar 2026 16:14:00 +0100 Subject: [PATCH] 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 --- pkg/db/db.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pkg/db/db.go b/pkg/db/db.go index f26f94986..7e6fedee4 100644 --- a/pkg/db/db.go +++ b/pkg/db/db.go @@ -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