You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: v264.go
    path of file: ./repos/gitea/models/migrations/v1_21
    
    the code of the file until where you have to start completion: // Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package v1_21 //nolint

import (
	"context"
	"fmt"

	"code.gitea.io/gitea/models/db"
	"code.gitea.io/gitea/modules/timeutil"

	"xorm.io/xorm"
)

func AddBranchTable(x *xorm.Engine) error {
	type Branch struct {
		ID            int64
		RepoID        int64  `xorm:"UNIQUE(s)"`
		Name          string `xorm:"UNIQUE(s) NOT NULL"`
		CommitID      string
		CommitMessage string `xorm:"TEXT"`
		PusherID      int64
		IsDeleted     bool `xorm:"index"`
		DeletedByID   int64
		DeletedUnix   timeutil.TimeStamp `xorm:"index"`
		CommitTime    timeutil.TimeStamp // The commit
		CreatedUnix   timeutil.TimeStamp `xorm:"created"`
		UpdatedUnix   timeutil.TimeStamp `xorm:"updated"`
	}

	if err := x.Sync(new(Branch)); err != nil {
		return err
	}

	if exist, err := x.IsTableExist("deleted_branches"); err != nil {
		return err
	} else if !exist {
		return nil
	}

	type DeletedBranch struct {
		ID          int64
		RepoID      int64  `xorm:"index UNIQUE(s)"`
		Name        string `xorm:"UNIQUE(s) NOT NULL"`
		Commit      string
		DeletedByID int64
		DeletedUnix timeutil.TimeStamp
	}

	var adminUserID int64
	has, err := x.Table("user").
		Select("id").
		Where("is_admin=?", true).
		Asc("id"). // Reliably get the admin with the lowest ID.
		Get(&adminUserID)
	if err != nil {
		return err
	} else if !has {
		return fmt.Errorf("no admin user found")
	}

	branches := make([]Branch, 0, 100)
	if err := db.Iterate(context.Background(), nil, func(ctx context.Context, deletedBranch *DeletedBranch) error {
		branches = append(branches, Branch{
			RepoID:      deletedBranch.RepoID,
			Name:        deletedBranch.Name,
			CommitID:    deletedBranch.Commit,
			PusherID:    adminUserID,
			IsDel
    
func AddBranchTable(x *xorm.Engine) error {
	type Branch struct {
		ID            int64
		RepoID        int64  `xorm:"UNIQUE(s)"`
		Name          string `xorm:"UNIQUE(s) NOT NULL"`
		CommitID      string
		CommitMessage string `xorm:"TEXT"`
		PusherID      int64
		IsDeleted     bool `xorm:"index"`
		DeletedByID   int64
		DeletedUnix   timeutil.TimeStamp `xorm:"index"`
		CommitTime    timeutil.TimeStamp // The commit
		CreatedUnix   timeutil.TimeStamp `xorm:"created"`
		UpdatedUnix   timeutil.TimeStamp `xorm:"updated"`
	}

	if err := x.Sync(new(Branch)); err != nil {
		return err
	}

	if exist, err := x.IsTableExist("deleted_branches"); err != nil {
		return err
	} else if !exist {
		return nil
	}

	type DeletedBranch struct {
		ID          int64
		RepoID      int64  `xorm:"index UNIQUE(s)"`
		Name        string `xorm:"UNIQUE(s) NOT NULL"`
		Commit      string
		DeletedByID int64
		DeletedUnix timeutil.TimeStamp
	}

	var adminUserID int64
	has, err := x.Table("user").
		Select("id").
		Where("is_admin=?", true).
		Asc("id"). // Reliably get the admin with the lowest ID.
		Get(&adminUserID)
	if err != nil {
		return err
	} else if !has {
		return fmt.Errorf("no admin user found")
	}

	branches := make([]Branch, 0, 100)
	if err := db.Iterate(context.Background(), nil, func(ctx context.Context, deletedBranch *DeletedBranch) error {
		branches = append(branches, Branch{
			RepoID:      deletedBranch.RepoID,
			Name:        deletedBranch.Name,
			CommitID:    deletedBranch.Commit,
			PusherID:    adminUserID,
			IsDeleted:   true,
			DeletedByID: deletedBranch.DeletedByID,
			DeletedUnix: deletedBranch.DeletedUnix,
		})
		if len(branches) >= 100 {
			_, err := x.Insert(&branches)
			if err != nil {
				return err
			}
			branches = branches[:0]
		}
		return nil
	}); err != nil {
		return err
	}

	if len(branches) > 0 {
		if _, err := x.Insert(&branches); err != nil {
			return err
		}
	}

	return x.DropTables(new(DeletedBranch))
}