db

package
v0.0.0-...-495e01f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 12, 2023 License: Apache-2.0 Imports: 25 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultMaxInSize represents default variables number on IN () in SQL
	DefaultMaxInSize = 50
)
View Source
const (
	// Which means a condition to filter the records which don't match any id.
	// It's different from zero which means the condition could be ignored.
	NoConditionID = -1
)

Variables

View Source
var (
	// ErrResouceOutdated represents an error when request resource outdated
	ErrResouceOutdated = errors.New("resource outdated")
	// ErrGetResourceIndexFailed represents an error when resource index retries 3 times
	ErrGetResourceIndexFailed = errors.New("get resource index failed")
)
View Source
var (
	// ErrNameEmpty name is empty error
	ErrNameEmpty = util.SilentWrap{Message: "name is empty", Err: util.ErrInvalidArgument}

	// AlphaDashDotPattern characters prohibited in a user name (anything except A-Za-z0-9_.-)
	AlphaDashDotPattern = regexp.MustCompile(`[^\w-\.]`)
)
View Source
var DefaultContext context.Context

DefaultContext is the default context to run xorm queries in will be overwritten by Init with HammerContext

View Source
var (

	// HasEngine specifies if we have a xorm.Engine
	HasEngine bool
)

Functions

func BuildCaseInsensitiveIn

func BuildCaseInsensitiveIn(key string, values []string) builder.Cond

BuildCaseInsensitiveIn returns a condition to check if the given value is in the given values case-insensitively. Handles especially SQLite correctly as UPPER there only transforms ASCII letters.

func BuildCaseInsensitiveLike

func BuildCaseInsensitiveLike(key, value string) builder.Cond

BuildCaseInsensitiveLike returns a condition to check if the given value is like the given key case-insensitively. Handles especially SQLite correctly as UPPER there only transforms ASCII letters.

func BuilderDialect

func BuilderDialect() string

BuilderDialect returns the xorm.Builder dialect of the engine

func Cell2Int64

func Cell2Int64(val xorm.Cell) int64

Cell2Int64 converts a xorm.Cell type to int64, and handles possible irregular cases.

func ConvertUtf8ToUtf8mb4

func ConvertUtf8ToUtf8mb4() error

ConvertUtf8ToUtf8mb4 converts database and tables from utf8 to utf8mb4 if it's mysql and set ROW_FORMAT=dynamic

func ConvertVarcharToNVarchar

func ConvertVarcharToNVarchar() error

ConvertVarcharToNVarchar converts database and tables from varchar to nvarchar if it's mssql

func Count

func Count[T any](ctx context.Context, opts FindOptions, object T) (int64, error)

Count represents a common count function which accept an options interface

func CountBadSequences

func CountBadSequences(_ context.Context) (int64, error)

CountBadSequences looks for broken sequences from recreate-table mistakes

func CountByBean

func CountByBean(ctx context.Context, bean any) (int64, error)

CountByBean counts the number of database records according non-empty fields of the bean as conditions.

func CountOrphanedObjects

func CountOrphanedObjects(ctx context.Context, subject, refobject, joinCond string) (int64, error)

CountOrphanedObjects count subjects with have no existing refobject anymore

func DecrByIDs

func DecrByIDs(ctx context.Context, ids []int64, decrCol string, bean any) error

DecrByIDs decreases the given column for entities of the "bean" type with one of the given ids by one Timestamps of the entities won't be updated

func DeleteAllRecords

func DeleteAllRecords(tableName string) error

DeleteAllRecords will delete all the records of this table

func DeleteBeans

func DeleteBeans(ctx context.Context, beans ...any) (err error)

DeleteBeans deletes all given beans, beans must contain delete conditions.

func DeleteByBean

func DeleteByBean(ctx context.Context, bean any) (int64, error)

DeleteByBean deletes all records according non-empty fields of the bean as conditions.

func DeleteByID

func DeleteByID(ctx context.Context, id int64, bean any) (int64, error)

DeleteByID deletes the given bean with the given ID

func DeleteOrphanedObjects

func DeleteOrphanedObjects(ctx context.Context, subject, refobject, joinCond string) error

DeleteOrphanedObjects delete subjects with have no existing refobject anymore

func DeleteResourceIndex

func DeleteResourceIndex(ctx context.Context, tableName string, groupID int64) error

DeleteResourceIndex delete resource index

func DumpDatabase

func DumpDatabase(filePath, dbType string) error

DumpDatabase dumps all data from database according the special database SQL syntax to file system.

func DumpTables

func DumpTables(tables []*schemas.Table, w io.Writer, tp ...schemas.DBType) error

DumpTables dump tables information

func ErrCancelledf

func ErrCancelledf(format string, args ...any) error

ErrCancelledf returns an ErrCancelled for the provided format and args

func Exec

func Exec(ctx context.Context, sqlAndArgs ...any) (sql.Result, error)

Exec executes a sql with args

func Find

func Find[T any](ctx context.Context, opts FindOptions, objects *[]T) error

Find represents a common find function which accept an options interface

func FindAndCount

func FindAndCount[T any](ctx context.Context, opts FindOptions, objects *[]T) (int64, error)

FindAndCount represents a common findandcount function which accept an options interface

func FindIDs

func FindIDs(ctx context.Context, tableName, idCol string, cond builder.Cond) ([]int64, error)

FindIDs finds the IDs for the given table name satisfying the given condition By passing a different value than "id" for "idCol", you can query for foreign IDs, i.e. the repo IDs which satisfy the condition

func FixBadSequences

func FixBadSequences(_ context.Context) error

FixBadSequences fixes for broken sequences from recreate-table mistakes

func GetByBean

func GetByBean(ctx context.Context, bean any) (bool, error)

GetByBean filled empty fields of the bean according non-empty fields to query in database.

func GetMaxID

func GetMaxID(beanOrTableName any) (maxID int64, err error)

GetMaxID will return max id of the table

func GetNextResourceIndex

func GetNextResourceIndex(ctx context.Context, tableName string, groupID int64) (int64, error)

GetNextResourceIndex generates a resource index, it must run in the same transaction where the resource is created

func GetPaginatedSession

func GetPaginatedSession(p Paginator) *xorm.Session

GetPaginatedSession creates a paginated database session

func InTransaction

func InTransaction(ctx context.Context) bool

InTransaction returns true if the engine is in a transaction otherwise return false

func InitEngine

func InitEngine(ctx context.Context) error

InitEngine initializes the xorm.Engine and sets it as db.DefaultContext

func InitEngineWithMigration

func InitEngineWithMigration(ctx context.Context, migrateFunc func(*xorm.Engine) error) (err error)

InitEngineWithMigration initializes a new xorm.Engine and sets it as the db.DefaultContext This function must never call .Sync() if the provided migration function fails. When called from the "doctor" command, the migration function is a version check that prevents the doctor from fixing anything in the database if the migration level is different from the expected value.

func Insert

func Insert(ctx context.Context, beans ...any) error

Insert inserts records into database

func IsErrCancelled

func IsErrCancelled(err error) bool

IsErrCancelled checks if an error is a ErrCancelled.

func IsErrNameCharsNotAllowed

func IsErrNameCharsNotAllowed(err error) bool

IsErrNameCharsNotAllowed checks if an error is an ErrNameCharsNotAllowed.

func IsErrNamePatternNotAllowed

func IsErrNamePatternNotAllowed(err error) bool

IsErrNamePatternNotAllowed checks if an error is an ErrNamePatternNotAllowed.

func IsErrNameReserved

func IsErrNameReserved(err error) bool

IsErrNameReserved checks if an error is a ErrNameReserved.

func IsErrNotExist

func IsErrNotExist(err error) bool

IsErrNotExist checks if an error is an ErrNotExist

func IsErrSSHDisabled

func IsErrSSHDisabled(err error) bool

IsErrSSHDisabled checks if an error is a ErrSSHDisabled.

func IsTableNotEmpty

func IsTableNotEmpty(tableName string) (bool, error)

IsTableNotEmpty returns true if table has at least one record

func IsUsableName

func IsUsableName(names, patterns []string, name string) error

IsUsableName checks if name is reserved or pattern of name is not allowed based on given reserved names and patterns. Names are exact match, patterns can be prefix or suffix match with placeholder '*'.

func Iterate

func Iterate[Bean any](ctx context.Context, cond builder.Cond, f func(ctx context.Context, bean *Bean) error) error

Iterate iterate all the Bean object

func MaxBatchInsertSize

func MaxBatchInsertSize(bean any) int

MaxBatchInsertSize returns the table's max batch insert size

func NamesToBean

func NamesToBean(names ...string) ([]any, error)

NamesToBean return a list of beans or an error

func NewXORMLogger

func NewXORMLogger(showSQL bool) xormlog.Logger

NewXORMLogger inits a log bridge for xorm

func RegisterModel

func RegisterModel(bean any, initFunc ...func() error)

RegisterModel registers model, if initfunc provided, it will be invoked after data model sync

func SetDefaultEngine

func SetDefaultEngine(ctx context.Context, eng *xorm.Engine)

SetDefaultEngine sets the default engine for db

func SetLogSQL

func SetLogSQL(ctx context.Context, on bool)

func SetSessionPagination

func SetSessionPagination(sess Engine, p Paginator) *xorm.Session

SetSessionPagination sets pagination for a database session

func SyncAllTables

func SyncAllTables() error

SyncAllTables sync the schemas of all tables, is required by unit test code

func SyncMaxResourceIndex

func SyncMaxResourceIndex(ctx context.Context, tableName string, groupID, maxIndex int64) (err error)

SyncMaxResourceIndex sync the max index with the resource

func TableInfo

func TableInfo(v any) (*schemas.Table, error)

TableInfo returns table's information via an object

func TableName

func TableName(bean any) string

TableName returns the table name according a bean object

func TruncateBeans

func TruncateBeans(ctx context.Context, beans ...any) (err error)

TruncateBeans deletes all given beans, beans may contain delete conditions.

func TxContext

func TxContext(parentCtx context.Context) (*Context, Committer, error)

TxContext represents a transaction Context, it will reuse the existing transaction in the parent context or create a new one.

func UnsetDefaultEngine

func UnsetDefaultEngine()

UnsetDefaultEngine closes and unsets the default engine We hope the SetDefaultEngine and UnsetDefaultEngine can be paired, but it's impossible now, there are many calls to InitEngine -> SetDefaultEngine directly to overwrite the `x` and DefaultContext without close Global database engine related functions are all racy and there is no graceful close right now.

func WithTx

func WithTx(parentCtx context.Context, f func(ctx context.Context) error) error

WithTx represents executing database operations on a transaction, if the transaction exist, this function will reuse it otherwise will create a new one and close it when finished.

Types

type AbsoluteListOptions

type AbsoluteListOptions struct {
	// contains filtered or unexported fields
}

AbsoluteListOptions absolute options to paginate results

func NewAbsoluteListOptions

func NewAbsoluteListOptions(skip, take int) *AbsoluteListOptions

NewAbsoluteListOptions creates a list option with applied limits

func (*AbsoluteListOptions) GetSkipTake

func (opts *AbsoluteListOptions) GetSkipTake() (skip, take int)

GetSkipTake returns the skip and take values

func (*AbsoluteListOptions) GetStartEnd

func (opts *AbsoluteListOptions) GetStartEnd() (start, end int)

GetStartEnd returns the start and end values

func (*AbsoluteListOptions) IsListAll

func (opts *AbsoluteListOptions) IsListAll() bool

IsListAll will always return false

type Committer

type Committer interface {
	Commit() error
	Close() error
}

Committer represents an interface to Commit or Close the Context

type Context

type Context struct {
	context.Context
	// contains filtered or unexported fields
}

Context represents a db context

func (*Context) Engine

func (ctx *Context) Engine() Engine

Engine returns db engine

func (*Context) InTransaction

func (ctx *Context) InTransaction() bool

InTransaction if context is in a transaction

func (*Context) Value

func (ctx *Context) Value(key any) any

Value shadows Value for context.Context but allows us to get ourselves and an Engined object

func (*Context) WithContext

func (ctx *Context) WithContext(other context.Context) *Context

WithContext returns this engine tied to this context

type Engine

type Engine interface {
	Table(tableNameOrBean any) *xorm.Session
	Count(...any) (int64, error)
	Decr(column string, arg ...any) *xorm.Session
	Delete(...any) (int64, error)
	Truncate(...any) (int64, error)
	Exec(...any) (sql.Result, error)
	Find(any, ...any) error
	Get(beans ...any) (bool, error)
	ID(any) *xorm.Session
	In(string, ...any) *xorm.Session
	Incr(column string, arg ...any) *xorm.Session
	Insert(...any) (int64, error)
	Iterate(any, xorm.IterFunc) error
	Join(joinOperator string, tablename, condition any, args ...any) *xorm.Session
	SQL(any, ...any) *xorm.Session
	Where(any, ...any) *xorm.Session
	Asc(colNames ...string) *xorm.Session
	Desc(colNames ...string) *xorm.Session
	Limit(limit int, start ...int) *xorm.Session
	NoAutoTime() *xorm.Session
	SumInt(bean any, columnName string) (res int64, err error)
	Sync(...any) error
	Select(string) *xorm.Session
	NotIn(string, ...any) *xorm.Session
	OrderBy(any, ...any) *xorm.Session
	Exist(...any) (bool, error)
	Distinct(...string) *xorm.Session
	Query(...any) ([]map[string][]byte, error)
	Cols(...string) *xorm.Session
	Context(ctx context.Context) *xorm.Session
	Ping() error
}

Engine represents a xorm engine or session.

func GetEngine

func GetEngine(ctx context.Context) Engine

GetEngine will get a db Engine from this context or return an Engine restricted to this context

func SetEnginePagination

func SetEnginePagination(e Engine, p Paginator) Engine

SetEnginePagination sets pagination for a database engine

type Engined

type Engined interface {
	Engine() Engine
}

Engined structs provide an Engine

type ErrCancelled

type ErrCancelled struct {
	Message string
}

ErrCancelled represents an error due to context cancellation

func (ErrCancelled) Error

func (err ErrCancelled) Error() string

type ErrNameCharsNotAllowed

type ErrNameCharsNotAllowed struct {
	Name string
}

ErrNameCharsNotAllowed represents a "character not allowed in name" error.

func (ErrNameCharsNotAllowed) Error

func (err ErrNameCharsNotAllowed) Error() string

func (ErrNameCharsNotAllowed) Unwrap

func (err ErrNameCharsNotAllowed) Unwrap() error

Unwrap unwraps this as a ErrInvalid err

type ErrNamePatternNotAllowed

type ErrNamePatternNotAllowed struct {
	Pattern string
}

ErrNamePatternNotAllowed represents a "pattern not allowed" error.

func (ErrNamePatternNotAllowed) Error

func (err ErrNamePatternNotAllowed) Error() string

func (ErrNamePatternNotAllowed) Unwrap

func (err ErrNamePatternNotAllowed) Unwrap() error

Unwrap unwraps this as a ErrInvalid err

type ErrNameReserved

type ErrNameReserved struct {
	Name string
}

ErrNameReserved represents a "reserved name" error.

func (ErrNameReserved) Error

func (err ErrNameReserved) Error() string

func (ErrNameReserved) Unwrap

func (err ErrNameReserved) Unwrap() error

Unwrap unwraps this as a ErrInvalid err

type ErrNotExist

type ErrNotExist struct {
	Resource string
	ID       int64
}

ErrNotExist represents a non-exist error.

func (ErrNotExist) Error

func (err ErrNotExist) Error() string

func (ErrNotExist) Unwrap

func (err ErrNotExist) Unwrap() error

Unwrap unwraps this as a ErrNotExist err

type ErrSSHDisabled

type ErrSSHDisabled struct{}

ErrSSHDisabled represents an "SSH disabled" error.

func (ErrSSHDisabled) Error

func (err ErrSSHDisabled) Error() string

type FindOptions

type FindOptions interface {
	Paginator
	ToConds() builder.Cond
}

FindOptions represents a find options

type ListOptions

type ListOptions struct {
	PageSize int
	Page     int  // start from 1
	ListAll  bool // if true, then PageSize and Page will not be taken
}

ListOptions options to paginate results

func (*ListOptions) GetSkipTake

func (opts *ListOptions) GetSkipTake() (skip, take int)

GetSkipTake returns the skip and take values

func (*ListOptions) GetStartEnd

func (opts *ListOptions) GetStartEnd() (start, end int)

GetStartEnd returns the start and end of the ListOptions

func (*ListOptions) IsListAll

func (opts *ListOptions) IsListAll() bool

IsListAll indicates PageSize and Page will be ignored

func (*ListOptions) SetDefaultValues

func (opts *ListOptions) SetDefaultValues()

SetDefaultValues sets default values

type Paginator

type Paginator interface {
	GetSkipTake() (skip, take int)
	GetStartEnd() (start, end int)
	IsListAll() bool
}

Paginator is the base for different ListOptions types

type ResourceIndex

type ResourceIndex struct {
	GroupID  int64 `xorm:"pk"`
	MaxIndex int64 `xorm:"index"`
}

ResourceIndex represents a resource index which could be used as issue/release and others We can create different tables i.e. issue_index, release_index, etc.

type SearchOrderBy

type SearchOrderBy string

SearchOrderBy is used to sort the result

const (
	SearchOrderByAlphabetically        SearchOrderBy = "name ASC"
	SearchOrderByAlphabeticallyReverse SearchOrderBy = "name DESC"
	SearchOrderByLeastUpdated          SearchOrderBy = "updated_unix ASC"
	SearchOrderByRecentUpdated         SearchOrderBy = "updated_unix DESC"
	SearchOrderByOldest                SearchOrderBy = "created_unix ASC"
	SearchOrderByNewest                SearchOrderBy = "created_unix DESC"
	SearchOrderBySize                  SearchOrderBy = "size ASC"
	SearchOrderBySizeReverse           SearchOrderBy = "size DESC"
	SearchOrderByGitSize               SearchOrderBy = "git_size ASC"
	SearchOrderByGitSizeReverse        SearchOrderBy = "git_size DESC"
	SearchOrderByLFSSize               SearchOrderBy = "lfs_size ASC"
	SearchOrderByLFSSizeReverse        SearchOrderBy = "lfs_size DESC"
	SearchOrderByID                    SearchOrderBy = "id ASC"
	SearchOrderByIDReverse             SearchOrderBy = "id DESC"
	SearchOrderByStars                 SearchOrderBy = "num_stars ASC"
	SearchOrderByStarsReverse          SearchOrderBy = "num_stars DESC"
	SearchOrderByForks                 SearchOrderBy = "num_forks ASC"
	SearchOrderByForksReverse          SearchOrderBy = "num_forks DESC"
)

Strings for sorting result

func (SearchOrderBy) String

func (s SearchOrderBy) String() string

type XORMLogBridge

type XORMLogBridge struct {
	// contains filtered or unexported fields
}

XORMLogBridge a logger bridge from Logger to xorm

func (*XORMLogBridge) Debug

func (l *XORMLogBridge) Debug(v ...any)

Debug show debug log

func (*XORMLogBridge) Debugf

func (l *XORMLogBridge) Debugf(format string, v ...any)

Debugf show debug log

func (*XORMLogBridge) Error

func (l *XORMLogBridge) Error(v ...any)

Error show error log

func (*XORMLogBridge) Errorf

func (l *XORMLogBridge) Errorf(format string, v ...any)

Errorf show error log

func (*XORMLogBridge) Info

func (l *XORMLogBridge) Info(v ...any)

Info show information level log

func (*XORMLogBridge) Infof

func (l *XORMLogBridge) Infof(format string, v ...any)

Infof show information level log

func (*XORMLogBridge) IsShowSQL

func (l *XORMLogBridge) IsShowSQL() bool

IsShowSQL if record SQL

func (*XORMLogBridge) Level

func (l *XORMLogBridge) Level() xormlog.LogLevel

Level get logger level

func (*XORMLogBridge) Log

func (l *XORMLogBridge) Log(skip int, level log.Level, format string, v ...any)

Log a message with defined skip and at logging level

func (*XORMLogBridge) SetLevel

func (l *XORMLogBridge) SetLevel(lvl xormlog.LogLevel)

SetLevel set the logger level

func (*XORMLogBridge) ShowSQL

func (l *XORMLogBridge) ShowSQL(show ...bool)

ShowSQL set if record SQL

func (*XORMLogBridge) Warn

func (l *XORMLogBridge) Warn(v ...any)

Warn show warning log

func (*XORMLogBridge) Warnf

func (l *XORMLogBridge) Warnf(format string, v ...any)

Warnf show warnning log

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL