func getKeysForDatabaseDescriptor( dbDesc *sqlbase.DatabaseDescriptor, ) (zoneKey roachpb.Key, nameKey roachpb.Key, descKey roachpb.Key) { zoneKey = sqlbase.MakeZoneKey(dbDesc.ID) nameKey = sqlbase.MakeNameMetadataKey(keys.RootNamespaceID, dbDesc.GetName()) descKey = sqlbase.MakeDescMetadataKey(dbDesc.ID) return }
// renameDatabase implements the DatabaseAccessor interface. func (p *planner) renameDatabase(oldDesc *sqlbase.DatabaseDescriptor, newName string) error { onAlreadyExists := func() error { return fmt.Errorf("the new database name %q already exists", newName) } if isVirtualDatabase(newName) { return onAlreadyExists() } oldName := oldDesc.Name oldDesc.SetName(newName) if err := oldDesc.Validate(); err != nil { return err } oldKey := databaseKey{oldName}.Key() newKey := databaseKey{newName}.Key() descID := oldDesc.GetID() descKey := sqlbase.MakeDescMetadataKey(descID) descDesc := sqlbase.WrapDescriptor(oldDesc) b := &client.Batch{} b.CPut(newKey, descID, nil) b.Put(descKey, descDesc) b.Del(oldKey) if err := p.txn.Run(b); err != nil { if _, ok := err.(*roachpb.ConditionFailedError); ok { return onAlreadyExists() } return err } p.setTestingVerifyMetadata(func(systemConfig config.SystemConfig) error { if err := expectDescriptorID(systemConfig, newKey, descID); err != nil { return err } if err := expectDescriptor(systemConfig, descKey, descDesc); err != nil { return err } return expectDeleted(systemConfig, oldKey) }) return nil }