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  }