base

package
v1.0.5 Latest Latest
Warning

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

Go to latest
Published: Jul 2, 2020 License: BSD-3-Clause Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SESS_FOR_EVER   = -1 // 无限
	SESS_NOT_EXISTS = -2 // 不存在
	SESS_ERR_REDIS  = -3 // redis错误

	SESS_PREFIX     = "sess" // 会话缓存前缀
	SESS_LIST_SEP   = ";"    // 角色名之间的分隔符
	SESS_TOKEN_KEY  = "_token_"
	SESS_ONLINE_KEY = "onlines" // 在线用户

	MAX_TIMEOUT = 86400 * 30 // 接近无限时间
)

Variables

View Source
var NESTED_EDGE_OFFSET = 2

Functions

func Authorize

func Authorize(auth IUserAuth, access enums.Permit, url string) error

用户鉴权

func CalcPage

func CalcPage(pageno, pagesize, total int) (int, int)

计算翻页

func ClusterInsertMulti

func ClusterInsertMulti(xi xorm.Interface, objs []IResetTable, reset, trunc bool) (total int64, err error)

*

  • 写入多行到分布式表中

func CreateTableLike

func CreateTableLike(engine *xorm.Engine, curr, orig string) (bool, error)

复制表结构,只用于MySQL

func FindTables

func FindTables(engine *xorm.Engine, prefix string, fullName bool) []string

找出符合前缀的表名

func GetPrimarykey

func GetPrimarykey(engine *xorm.Engine, m interface{}) *schemas.Column

获取Model的主键

func JoinQuery

func JoinQuery(engine *xorm.Engine, query *xorm.Session,
	table, fkey string, foreign ForeignTable) (*xorm.Session, []string)

联表查询

func MoveEdge

func MoveEdge(query *xorm.Session, table string, base, offset int) error

左右边界整体移动

func NegativeOffset

func NegativeOffset(offset, pagesize, total int) int

调整从后往前翻页

func Paginate

func Paginate(query *xorm.Session, pageno, pagesize int) *xorm.Session

使用翻页

func Qprintf

func Qprintf(engine *xorm.Engine, format string, args ...interface{}) string

对参数先进行转义Quote

func RebuildNestedByDepth

func RebuildNestedByDepth(query *xorm.Session, table string) error

按照深度重建,即用之前比它深度小且最近的一个作为父节点

func SessListJoin

func SessListJoin(data []string) string

func SessListSplit

func SessListSplit(data string) []string

Types

type ClusterMixin

type ClusterMixin struct {
	Date            time.Time
	Suffixes        sort.StringSlice
	TableNamePrefix string
	Kind, Format    string
}

按月分表

func GetClusterMixinFor

func GetClusterMixinFor(kind, prefix string, engine *xorm.Engine) *ClusterMixin

func NewClusterDaily

func NewClusterDaily(t time.Time) *ClusterMixin

func NewClusterHourly

func NewClusterHourly(t time.Time) *ClusterMixin

func NewClusterMixin

func NewClusterMixin(kind string, t time.Time) *ClusterMixin

func NewClusterMonthly

func NewClusterMonthly(t time.Time) *ClusterMixin

func NewClusterQuarterly

func NewClusterQuarterly(t time.Time) *ClusterMixin

func NewClusterWeekly

func NewClusterWeekly(t time.Time) *ClusterMixin

func (ClusterMixin) GetSuffix

func (m ClusterMixin) GetSuffix() string

func (*ClusterMixin) Move

func (m *ClusterMixin) Move(n int) *ClusterMixin

func (*ClusterMixin) Next

func (m *ClusterMixin) Next() bool

func (*ClusterMixin) Prev

func (m *ClusterMixin) Prev() bool

func (*ClusterMixin) SetTime

func (m *ClusterMixin) SetTime(t time.Time, toFirst bool) *ClusterMixin

type ClusterQuery

type ClusterQuery struct {
	*ClusterMixin
	*xorm.Session
	// contains filtered or unexported fields
}

分布式查询

func NewClusterQuery

func NewClusterQuery(engine *xorm.Engine, cluster *ClusterMixin) *ClusterQuery

func (*ClusterQuery) AddFilter

func (q *ClusterQuery) AddFilter(filter FilterFunc) *ClusterQuery

func (*ClusterQuery) ClearFilters

func (q *ClusterQuery) ClearFilters() *ClusterQuery

func (*ClusterQuery) ClusterCount

func (q *ClusterQuery) ClusterCount(bean ...interface{}) (int64, error)

分布式计数,查询全部表

func (*ClusterQuery) ClusterPaginate

func (q *ClusterQuery) ClusterPaginate(pageno, pagesize int,
	rowsSlicePtr interface{}, condiBean ...interface{}) (int64, error)

分布式计数和翻页,查询全部表,但只获取部分结果集

func (*ClusterQuery) Count

func (q *ClusterQuery) Count(bean ...interface{}) (int64, error)

计数,只查询当前表

func (*ClusterQuery) FindAndCount

func (q *ClusterQuery) FindAndCount(rowsSlicePtr interface{}, condiBean ...interface{}) (int64, error)

计数和获取结果集,只查询当前表

func (*ClusterQuery) GetQuery

func (q *ClusterQuery) GetQuery() *xorm.Session

重新构建当前查询,因为每次 COUNT 和 FIND 等操作会释放查询(只有主表名还保留着)

func (*ClusterQuery) GetTable

func (q *ClusterQuery) GetTable() string

获取当前表名

func (*ClusterQuery) Limit

func (q *ClusterQuery) Limit(limit int, start ...int) *ClusterQuery

func (*ClusterQuery) OrderBy

func (q *ClusterQuery) OrderBy(order string) *ClusterQuery

func (ClusterQuery) Quote

func (q ClusterQuery) Quote(value string) string

type FilterFunc

type FilterFunc = func(query *xorm.Session) *xorm.Session

过滤查询

type ForeignTable

type ForeignTable struct {
	Join  enums.SqlJoin
	Table ITableName
	Alias string
	Index string
}

关联表

func (ForeignTable) AliasName

func (f ForeignTable) AliasName() string

表名或别名,通常用于字段之前

func (ForeignTable) TableName

func (f ForeignTable) TableName() string

表名和别名,通常用于 FROM 或 Join 之后

type IPermission

type IPermission interface {
	CheckPermit(access int, url string) bool
}

type IResetTable

type IResetTable interface {
	ResetTable(curr string, trunc bool) error
	ITableName
}

*

  • 创建或清空表

type ITableComment

type ITableComment interface {
	TableComment() string
}

*

  • 数据表注释

type ITableName

type ITableName interface {
	TableName() string
}

*

  • 数据表名

type IUserAuth

type IUserAuth interface {
	// 用户分类,无法区分内部用户和普通用户
	GetUserType() (utype enums.UserType, err error)

	// 用户拥有的角色
	GetUserRoles() (roles []string, err error)

	// 是否静态资源网址
	IsStaticResourceUrl(url string) bool

	// 获取可公开访问的网址
	GetAnonymousOpenUrls() (urls []string)

	// 获取受限用户黑名单中的的网址,与白名单二选一
	GetLimitedBlackListUrls() (urls []string)

	// 获取受限用户白名单中的的网址,不再检查正常用户权限,与黑名单二选一
	GetLimitedWhiteListUrls() (urls []string)

	// 获取正常用户权限可访问的网址
	GetRegularPermissions(roles []string) (perms []IPermission)

	// 获取超级用户权限可访问的网址,不再检查正常用户权限
	GetSuperPermissions(roles []string) (perms []IPermission)
}

type LeftJoinQuery

type LeftJoinQuery struct {
	Native      ITableName
	ForeignKeys []string
	Foreigns    map[string]ForeignTable
	*xorm.Session
	// contains filtered or unexported fields
}

Left Join 联表查询

func NewLeftJoinQuery

func NewLeftJoinQuery(engine *xorm.Engine, native ITableName) *LeftJoinQuery

native 为最左侧的主表,查询其所有字段

func (*LeftJoinQuery) AddFilter

func (q *LeftJoinQuery) AddFilter(filter FilterFunc) *LeftJoinQuery

func (*LeftJoinQuery) AddLeftJoin

func (q *LeftJoinQuery) AddLeftJoin(foreign ITableName, pkey, fkey, alias string) *LeftJoinQuery

添加次序要和 struct 定义一致

func (*LeftJoinQuery) ClearFilters

func (q *LeftJoinQuery) ClearFilters() *LeftJoinQuery

func (*LeftJoinQuery) Count

func (q *LeftJoinQuery) Count(bean ...interface{}) (int64, error)

计数,由于左联接数量只跟主表有关,这里不去 Join

func (*LeftJoinQuery) FindAndCount

func (q *LeftJoinQuery) FindAndCount(
	rowsSlicePtr interface{}, condiBean ...interface{}) (int64, error)

计数和获取结果集

func (*LeftJoinQuery) FindPaginate

func (q *LeftJoinQuery) FindPaginate(pageno, pagesize int,
	rowsSlicePtr interface{}, condiBean ...interface{}) (int64, error)

计数和翻页,只获取部分结果集

func (*LeftJoinQuery) GetQuery

func (q *LeftJoinQuery) GetQuery() *xorm.Session

重新构建当前查询,因为每次 COUNT 和 FIND 等操作会释放查询(只有主表名还保留着)

func (*LeftJoinQuery) LeftJoin

func (q *LeftJoinQuery) LeftJoin(foreign ITableName, fkey string) *LeftJoinQuery

foreign 为副表,只查询其部分字段,读取字段的 json tag 作为字段名

func (*LeftJoinQuery) Limit

func (q *LeftJoinQuery) Limit(limit int, start ...int) *LeftJoinQuery

func (*LeftJoinQuery) OrderBy

func (q *LeftJoinQuery) OrderBy(order string) *LeftJoinQuery

func (LeftJoinQuery) Quote

func (q LeftJoinQuery) Quote(value string) string

type ModifyFunc

type ModifyFunc = func(tx *xorm.Session) (int64, error)

修改操作,用于事务

type NestedMixin

type NestedMixin struct {
	Lft   int `json:"lft" xorm:"notnull default 0 comment('左边界') INT(10)"`           // 左边界
	Rgt   int `json:"rgt" xorm:"notnull default 0 comment('右边界') index INT(10)"`     // 右边界
	Depth int `json:"depth" xorm:"notnull default 1 comment('高度') index TINYINT(3)"` // 高度
}

嵌套集合树

func (*NestedMixin) AddToParent

func (n *NestedMixin) AddToParent(parent *NestedMixin, query *xorm.Session, table string) (err error)

添加到父节点最末

func (NestedMixin) AncestorsFilter

func (n NestedMixin) AncestorsFilter(backward bool) FilterFunc

找出所有直系祖先节点

func (NestedMixin) ChildrenFilter

func (n NestedMixin) ChildrenFilter(rank int, depthFirst bool) FilterFunc

找出所有子孙节点

func (NestedMixin) CountChildren

func (n NestedMixin) CountChildren() int

有多少个子孙节点

func (NestedMixin) GetDepth

func (n NestedMixin) GetDepth() int

func (NestedMixin) IsLeaf

func (n NestedMixin) IsLeaf() bool

是否叶子节点

type NestedRow

type NestedRow struct {
	Id                  int `json:"id" xorm:"notnull pk autoincr INT(10)"`
	ParentIdNihility996 int `json:"-" xorm:"-"` // 阻止对象被混入其他 Model 的特殊字段
	*NestedMixin        `json:",inline" xorm:"extends"`
}

type Session

type Session struct {
	*redisw.RedisHash
	// contains filtered or unexported fields
}

func NewSession

func NewSession(reg *SessionRegistry, key string, timeout int) *Session

func (*Session) AddFlash

func (sess *Session) AddFlash(messages ...string) (int, error)

添加临时消息

func (*Session) BindRoles

func (sess *Session) BindRoles(uid string, roles []string, kick bool) (string, error)

绑定用户角色,返回旧的sid

func (*Session) GetFlashes

func (sess *Session) GetFlashes(n int) ([]string, error)

数量n为最大取出多少条消息,-1表示所有消息

func (*Session) GetKey

func (sess *Session) GetKey() string

func (*Session) WrapExec

func (sess *Session) WrapExec(cmd string, args ...interface{}) (interface{}, error)

type SessionRegistry

type SessionRegistry struct {
	Onlines *redisw.RedisHash
	*redisw.RedisWrapper
	// contains filtered or unexported fields
}

func NewRegistry

func NewRegistry(w *redisw.RedisWrapper) *SessionRegistry

func (*SessionRegistry) DelSession

func (sr *SessionRegistry) DelSession(token string) bool

func (SessionRegistry) GetKey

func (sr SessionRegistry) GetKey(token string) string

func (*SessionRegistry) GetSession

func (sr *SessionRegistry) GetSession(token string, timeout int) *Session

type TimeMixin

type TimeMixin struct {
	CreatedAt time.Time `json:"created_at" xorm:"created comment('创建时间') TIMESTAMP"`       // 创建时间
	UpdatedAt time.Time `json:"updated_at" xorm:"updated comment('更新时间') TIMESTAMP"`       // 更新时间
	DeletedAt time.Time `json:"deleted_at" xorm:"deleted comment('删除时间') index TIMESTAMP"` // 删除时间
}

*

  • 时间相关的三个典型字段

Jump to

Keyboard shortcuts

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