github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/istructsmem/internal/qnames/rename.go (about) 1 /* 2 * Copyright (c) 2021-present Sigma-Soft, Ltd. 3 * @author: Nikolay Nikitin 4 */ 5 6 package qnames 7 8 import ( 9 "fmt" 10 11 "github.com/voedger/voedger/pkg/appdef" 12 "github.com/voedger/voedger/pkg/istorage" 13 "github.com/voedger/voedger/pkg/istructsmem/internal/vers" 14 ) 15 16 func renameQName(storage istorage.IAppStorage, oldQName, newQName appdef.QName) error { 17 const ( 18 errFmt = "can not rename QName from «%v» to «%v»: %s" 19 errWrapFmt = errFmt + ": %w" 20 ) 21 22 if oldQName == newQName { 23 return fmt.Errorf(errFmt, oldQName, newQName, "names are equals") 24 } 25 26 vers := vers.New() 27 if err := vers.Prepare(storage); err != nil { 28 return fmt.Errorf(errWrapFmt, oldQName, newQName, "unable to read versions", err) 29 } 30 31 qnames := New() 32 if err := qnames.Prepare(storage, vers, nil, nil); err != nil { 33 return fmt.Errorf(errWrapFmt, oldQName, newQName, "unable to read qnames", err) 34 } 35 36 id, err := qnames.ID(oldQName) 37 if err != nil { 38 return fmt.Errorf(errWrapFmt, oldQName, newQName, "old not found", err) 39 } 40 41 if exists, err := qnames.ID(newQName); err == nil { 42 return fmt.Errorf(errWrapFmt, oldQName, newQName, fmt.Sprintf("new already exists (id=%v)", exists), err) 43 } 44 45 set := func(n appdef.QName, id QNameID) { 46 qnames.qNames[n] = id 47 qnames.ids[id] = n 48 qnames.changes++ 49 } 50 51 set(oldQName, NullQNameID) 52 set(newQName, id) 53 54 if err := qnames.store(storage, vers); err != nil { 55 return fmt.Errorf(errWrapFmt, oldQName, newQName, "unable to write storage", err) 56 } 57 58 return nil 59 }