entity

package
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: May 20, 2024 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Err_0100010001 err.ErrCode = err.New(
	"0100010001",
	"Add Connection failed, tag is empty.",
	"",
)

Err_0100010001 添加连接时,配置中的tag为空。

View Source
var Err_0100010002 err.ErrCode = err.New(
	"0100010002",
	"Add Connection failed, driverName '%s' not support.",
	"",
)

Err_0100010002 添加连接时,配置中的driverName不支持。

Verbs:

0: 配置中的driverName。
View Source
var Err_0100010003 err.ErrCode = err.New(
	"0100010003",
	"Received a connection error because the connection tag '%s' does not exist.",
	"",
)

Err_0100010003 得到连接错误,因为连接信息标签不存在。

Verbs:

0: 连接信息标签。
View Source
var Err_0100010004 err.ErrCode = err.New(
	"0100010004",
	"Add Connection failed, the connection tag '%s' already exists.",
	"",
)

Err_0100010004 添加连接错误,因为连接信息标签已经存在。

Verbs:

0: 连接信息标签。
View Source
var Err_0100010005 err.ErrCode = err.New(
	"0100010005",
	"unknown driver %q.",
	"1. check import driver package.",
)

Err_0100010005 创建数据库实例时,遇到未知的驱动,可能是忘记导入驱动包。

View Source
var Err_010001000x err.ErrCode = err.New(
	"010001000x",
	"%s.",
	"",
)

Err_010001000x 初始化时遇到的未知错误。

Verbs:

0: 未知的错误。
View Source
var Err_0100020001 err.ErrCode = err.New(
	"0100020001",
	"new database %q : %v",
	"1.传入的数据库名与Go中的关键字冲突。",
)

Err_0100020001 调用New命令创建Schema,在创建数据库时验证数据库名出现错误。

Verbs:

0: 数据库名。
1: 错误信息。
View Source
var Err_0100020002 err.ErrCode = err.New(
	"0100020002",
	"database %q' must begin with uppercase",
	"",
)

Err_0100020002 调用New命令创建Schema,输入的数据库名不是大写字母开头。

Verbs:

0: 数据库名。
View Source
var Err_0100020003 err.ErrCode = err.New(
	"0100020003",
	"execute template %q: %v",
	"",
)

Err_0100020003 执行模板时出现错误。

Verbs:

0: 模板文件名。
1: 错误信息。
View Source
var Err_0100020004 err.ErrCode = err.New(
	"0100020004",
	"load schema: %v",
	"",
)

Err_0100020004 在加载Shema时出现错误。

Verbs:

0: 错误信息。
View Source
var Err_0100020005 err.ErrCode = err.New(
	"0100020005",
	"not entity found  in %s",
	"",
)

Err_0100020005 在加载Shema时,发现没有找到entity。

Verbs:

0: Schema的路径
View Source
var Err_0100020006 err.ErrCode = err.New(
	"0100020006",
	"format template: %v",
	"",
)

Err_0100020006 格式化模版时出现错误。

View Source
var Err_0100020007 err.ErrCode = err.New(
	"0100020007",
	"create '.gen' directory: %v",
	"",
)

Err_0100020007 创建'.gen'目录时出现错误。

View Source
var Err_0100020008 err.ErrCode = err.New(
	"0100020008",
	"write file %s: %v",
	"",
)

Err_0100020008 通过模版写入文件时出现错误。

Verbs:

0: 文件路径。
1: 错误信息
View Source
var Err_0100020009 err.ErrCode = err.New(
	"0100020009",
	"unmarshal schema config %s: %v",
	"",
)

Err_0100020009 反序列化Shema配置文件时出现错误。

Verbs:

0: 出现问题的内容。
1: 错误信息。
View Source
var Err_010002000x err.ErrCode = err.New(
	"010002000x",
	"taurus_go/entity: %s.",
	"",
)

Err_010002000x codegen遇到的未知错误。

View Source
var Err_0100020010 err.ErrCode = err.New(
	"0100020010",
	"load package: %v",
	"",
)

Err_0100020010 加载Schema和entity.Interface中的Go package时出现错误。

Verbs:

0: 错误信息。
View Source
var Err_0100020011 err.ErrCode = err.New(
	"0100020011",
	"missing package information for: %s",
	"",
)

Err_0100020011 加载Schema时没有发现package信息。

Verbs:

0: 加载的Schema的路径。
View Source
var Err_0100020012 err.ErrCode = err.New(
	"0100020012",
	"invalid declaration %T for %s",
	"",
)

Err_0100020012 在断言为 *ast.TypeSpec 类型时出现错误。

Verbs:

0: 断言的类型。
1: 断言的字段名。
View Source
var Err_0100020013 err.ErrCode = err.New(
	"0100020013",
	"invalid spec type %T for %s",
	"",
)

Err_0100020013 在断言为 *ast.StructType 类型时出现错误。

Verbs:

0: 断言的类型。
1: 断言的字段名。
View Source
var Err_0100020014 err.ErrCode = err.New(
	"0100020014",
	"invalid field type %T for %s",
	"",
)

Err_0100020014 在断言为 *ast.Ident 类型时出现错误。

Verbs:

0: 断言的类型。
1: 断言的字段名。
View Source
var Err_0100020015 err.ErrCode = err.New(
	"0100020015",
	"invalid package identifier: %s",
	"",
)

Err_0100020015 无效的包名。

Verbs:

0: 包名。
View Source
var Err_0100020016 err.ErrCode = err.New(
	"0100020016",
	"parse entity file: %v",
	"",
)

Err_0100020016 调用parser.ParseFile解析go代码出现错误

Verbs:

0: 错误信息。
View Source
var Err_0100020017 err.ErrCode = err.New(
	"0100020017",
	"format node: %v",
	"",
)

Err_0100020017 把解析的代码格式化,并添加到模板中时出现错误。

Verbs:

0: 错误信息。
View Source
var Err_0100020018 err.ErrCode = err.New(
	"0100020018",
	"marshal entity %q : %v",
	"",
)

Err_0100020018 序列化实体时出现错误。

Verbs:

0: 实体名。
1: 错误信息。
View Source
var Err_0100020019 err.ErrCode = err.New(
	"0100020019",
	"dependent field%q.%q type %q is not equal to principal field %q.%q type %q",
	"",
)

Err_0100020019 在创建实体关系时,出现依赖字段类型不等于主键字段类型。

Verbs:

0: 依赖字段所在的表名。
1: 依赖字段名。
2: 依赖字段类型。
3: 主键字段所在的表名。
4: 主键字段名。
5: 主键字段类型。
View Source
var Err_0100020020 err.ErrCode = err.New(
	"0100020020",
	"entity attrName %q already exists",
	"",
)

Err_0100020020 在读取实体时,存在相同AttrName的实体

Verbs:

0: 实体的AttrName。
View Source
var Err_0100020021 err.ErrCode = err.New(
	"0100020021",
	"entity %q has no primary key",
	"",
)

Err_0100020021 没有给实体设置主键。

Verbs:

0: 实体的结构体名字,不是AttrName。
View Source
var Err_0100030001 err.ErrCode = err.New(
	"0100030001",
	"entity table %s field %s required,but value is nil.",
	"",
)

Err_0100030001 在创建语句中,必填但没有默认值的字段的值为空。

Verbs:

0: 实体表的名字。
1: 字段名。
View Source
var Err_0100030002 err.ErrCode = err.New(
	"0100030002",
	"entity table %s no fields need to update.",
	"",
)

Err_0100030002 在升级语句中,没有需要更新的字段。

Verbs:

0: 实体表的名字。
View Source
var Err_0100030003 err.ErrCode = err.New(
	"0100030003",
	"change entity tracking status to %s failed.The current state needs to be %s.",
	"",
)

Err_0100030003 改变实体类的跟踪状态失败。

Verbs:

0: 需要改变成的状态。
1: 当前应该属于的状态。
View Source
var Err_0100030004 err.ErrCode = err.New(
	"0100030004",
	"Clause Params is too many.",
	"",
)

Err_0100030004 子句中参数超过了最大值。

View Source
var Err_0100030005 err.ErrCode = err.New(
	"0100030005",
	"update set and predicate params count not equal.",
	"",
)

Err_0100030005 在update中set和predicate,参数数量不一致。

View Source
var Err_0100030006 err.ErrCode = err.New(
	"0100010006",
	"invalid entity type %T.",
	"",
)

Err_0100030006 创建实体时,遇到错误的实体类型。

View Source
var Err_0100030007 err.ErrCode = err.New(
	"0100030007",
	"multiple times to include the same relation table.",
	"",
)

Err_0100030007 联表查询,多次传入同一个关联表。

Functions

func AddConnection

func AddConnection(conn ConnectionConfig) error

AddConnection 在添加一个数据库连接配置。

func GetConnection

func GetConnection(tag string) (dialect.Driver, error)

GetConnection 获取一个数据库连接。

func SetConfig added in v0.5.0

func SetConfig(c Config)

Types

type Config added in v0.5.0

type Config struct {
	// BatchSize 单条语句,参数的最大数量,以PostgreSQL为标准。
	BatchSize *int
	// SqlConsole 是否打印sql语句。
	SqlConsole *bool
	// SqlLogger sql语句的日志文件,这个是匹配tlog的日志文件名。
	SqlLogger *string
}

func GetConfig added in v0.5.0

func GetConfig() Config

GetConfig 提供了一个全局访问点

type ConnectionConfig

type ConnectionConfig struct {
	// 数据库驱动
	Driver dialect.DbDriver

	// 用于标记当前的连接,Db通过这个tag绑定连接。
	Tag string
	// 数据库链接。
	Host string
	// 数据库端口。
	Port int
	// 数据库用户。
	User string
	// 数据库密码。
	Password string
	// 数据库名称。
	DBName string

	// 是否开启SSL的verify-ca。
	IsVerifyCa bool
	// 根证书路径。
	RootCertPath string
	// 客户端证书路径。
	ClientCertPath string
	// 客户端私钥路径。
	ClientKeyPath string
}

和数据库连接相关定义。

type Database

type Database struct {
	DbInterface
}

在定义Database时,要添加这个匿名字段,用于生成代码。

func (Database) Config

func (Database) Config() DbConfig

type DbConfig

type DbConfig struct {
	// 数据库名称。
	Name string
	// 连接的标签。
	Tag string
	// 数据库驱动
	Type dialect.DbDriver
}

数据库的配置。

type DbInterface

type DbInterface interface {
	Config() DbConfig
	Relationships() []RelationshipBuilder
}

ORM生成中和数据库相关定义。

type Descriptor

type Descriptor struct {
	// EntityName 字段所属的实体表名。这个会在调用Init时被赋值。
	EntityName string `json:"entity_name,omitempty"`
	// Name 字段在结构体中的名字,这个会在codegen/load中通过Init被赋值。
	Name string `json:"name,omitempty"`
	// AttrName 字段的数据库属性名,
	// 如果为空,会使用Name的名字,,但是会变成snake_case形式
	AttrName string `json:"attr_name,omitempty"`
	// Type 字段的类型。如"entity.Int64"。
	Type string `json:"type,omitempty"`
	// AttrType 字段的数据库类型。如"entity.Int64"在PostgreSQL中对应"int8",
	// 这AttrType的值为"int8",这个通过AttrType()获得,所以自定义类型应该正确定义这个方法。
	AttrType string `json:"attr_type,omitempty"`
	// Size 字段的长度大小。
	Size int64 `json:"size,omitempty"`
	// Required 是否是必填字段,如果为true,在数据表中的表现就是这个字段非空。
	Required bool `json:"required,omitempty"`
	// Primary 字段是否为主键,大于等于1的才会被认为是主键。
	// 在生成的sql中Primary的值越小,越靠前,比如ID的Primary = 1,UUID的Primay = 2,
	// 则在sql中PRIMARY KEY (ID,UUID)会是这样
	Primary int `json:"primary,omitempty"`
	// Comment 字段的注释。
	Comment string `json:"comment,omitempty"`
	// Default 字段默认值。
	Default bool `json:"default,omitempty"`
	// DefaultValue 字段默认值的字符串形式。
	DefaultValue string `json:"default_value,omitempty"`
	// Locked 字段是否被锁定,如果为true,则不能被修改。
	Locked bool `json:"locked,omitempty"`
	// Sequence 字段的序列,
	// 不是所有的字段类型都可以设置序列,内置的类型中只有Int(Int16,Int32,Int64)
	// 才有Sequence()方法,自定义字段要看是否实现了设置序列的相关方法。
	Sequence Sequence `json:"validators,omitempty"`
	// Validators 字段验证函数。
	Validators []any `json:"sequence,omitempty"`
}

包含了关于字段的描述,配置信息等。 这个在生成代码时会被调用。

type Entity

type Entity struct {
	EntityInterface
	// contains filtered or unexported fields
}

在定义Entity时,要添加这个匿名字段,用于生成代码。 例如:

type UseEntity struct {
		entity.Entity
}

func (Entity) Config

func (Entity) Config() EntityConfig

func (Entity) Fields

func (Entity) Fields() []FieldBuilder

type EntityConfig

type EntityConfig struct {
	// AttrName entity的数据库属性名,
	// 如果没有指定,会使用定义的结构体名称,但是会变成snake_case形式。
	//
	// 在codegen中会用于生成entity配置信息的文件和文件夹名,
	// 但是对于entity的结构体名字,还是使用定义的结构体名称,不使用AttrName,
	// 防止和别的database和entity名字冲突。
	AttrName string
	// Comment entity的注释。
	// 在生成的sql中会用于生成表的注释。
	Comment string
}

实体表配置。

type EntityInterface

type EntityInterface interface {
	Config() EntityConfig
	Fields() []FieldBuilder
}

这个接口定义了Entity需要实现的方法。

这个接口在代码生成中会被调用,用于生成代码, 见codengen/load/entity.go中的[Marshal]。

type EntityState

type EntityState = int16

EntityState 实体类状态,用于标识实体类的状态。

const (
	// NotSet 未设置,这个不作为实体类的状态,是用于设置实体类的状态的操作
	NotSet EntityState = -1
	// Detached 未追踪,不存在于数据库中、属性未修改、调用Save()方法时不会执行执行操作。
	Detached EntityState = 0
	// Unchanged 未修改,存在于数据库中、属性未修改、调用Save()方法时,不会执行执行操作。
	Unchanged EntityState = 1
	// Deleted 已删除,存在于数据库中、调用Save()方法时,会执行删除操作。
	Deleted EntityState = 2
	// Modified 已修改,存在于数据库中、属性已修改、调用Save()方法时,会执行更新操作。
	Modified EntityState = 3
	// Added 已添加,不存在于数据库中、属性已修改、调用Save()方法时,会执行插入操作。
	Added EntityState = 4
)

type FieldBuilder

type FieldBuilder interface {
	// codegen中使用,用于初始化字段。
	Init(initDesc *Descriptor) error
	// codegen中使用,用于获取字段的描述。
	Descriptor() *Descriptor
	// codegen中使用,获取字段的数据库中的类型名,如果返回空字符串,会出现错误。
	// 如果dbType没有匹配的返回空字符串
	AttrType(dbType dialect.DbDriver) string
	// 用于设置字段的值的类型名称。例如entity.Int64的ValueType为"int64"。
	ValueType() string
}

这个接口定义了字段在生成代码阶段需要的方法。

type FieldStorager

type FieldStorager interface {
	// 用于扫描数据库返回的值,将值赋值给字段。
	Scan(value interface{}) error
	// 用于打印字段的值。
	String() string
	// 用于内部sql中获取字段的值。如果需要获得值,推荐通过Get()方法获得。
	Value() FieldValue
}

这个接口定义了字段在运行时需要的方法。

type FieldValue

type FieldValue driver.Value

ORM生成中实体表中的字段。

type Mutation

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

Mutation 实体的修改器,用于存储实体的状态以及需要改变的字段。

func NewMutation

func NewMutation(state EntityState) *Mutation

NewMutation 创建一个新的实体的修改器。

Params:

  • state: 实体当前的状态。

Returns:

0: 新的实体修改器。

func (Mutation) Fields

func (m Mutation) Fields() []string

Fields 获取改变值的字段。主要是用于更新操作。

Returns:

0: 需要改变的字段。

func (Mutation) Key added in v0.5.0

func (m Mutation) Key() string

Key 获取修改器的实体的键。

Returns:

0: 实体的键。

func (*Mutation) SetFields

func (m *Mutation) SetFields(fields ...string)

SetFields 设置需要改变的字段。

Params:

  • fields: 需要改变的字段。

func (*Mutation) SetState

func (m *Mutation) SetState(state EntityState)

SetState 设置实体的状态。

Params:

  • state: 实体的状态。

func (Mutation) State

func (m Mutation) State() EntityState

State 获取实体的状态。

Returns:

0: 实体的状态。

type Mutator

type Mutator interface {
	// Exec 根据实体的状态执行操作。
	Exec(ctx context.Context, tx dialect.Tx) error
}

Mutator 是一个接口,用于标记实体的状态以及根据状态执行操作。

type Rel added in v0.5.0

type Rel int

Rel is an edge relation type.

const (
	O Rel = 1
	M Rel = 2
	// O2O,One to one / has one.
	// O<<2 | O = 5
	O2O Rel = 5
	// O2M,One to many / has many.
	// O<<2 | M = 6
	O2M Rel = 6
	// M2O,Many to one (inverse perspective for O2M).
	// M<<2 | O = 9
	M2O Rel = 9
	// M2M,Many to many.
	// M<<2 | M = 10
	M2M Rel = 10
)

Relation types.

type RelOpConstraint added in v0.5.0

type RelOpConstraint string

RelOpConstraint 是用在外键操作中的约束。

const (
	// Null 没有设置约束,会使用数据库的默认的约束。
	Null RelOpConstraint = ""
	// NoAction 这是默认行为。如果父表中被引用的键被更新/删除,且子表中存在依赖这个键的行,则更新/删除操作会失败。
	NoAction RelOpConstraint = "NO ACTION"
	// Restrict 与NoAction类似,但检查是立即进行的。
	Restrict RelOpConstraint = "RESTRICT"
	// Cascade 如果父表中的被引用行被更新/删除,子表中依赖这个行的所有行也会被更新/删除,保持外键关系的一致性。
	Cascade RelOpConstraint = "CASCADE"
	// SetNull 如果父表中的被引用行被更新/删除,子表中依赖这个行的所有行的外键列会被设置为 NULL。
	SetNull RelOpConstraint = "SET NULL"
	// SetDefault 如果父表中的被引用行被更新/删除,子表中依赖这个行的所有行的外键列会被设置为其列定义中的默认值。
	SetDefault RelOpConstraint = "SET DEFAULT"
)

type Relationship added in v0.5.0

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

Relationship 表关系。

func InitRelationship added in v0.5.0

func InitRelationship() *Relationship

InitRelationship 初始化一个表关系。

func (*Relationship) ConstraintName added in v0.5.0

func (r *Relationship) ConstraintName(name string) *Relationship

ConstraintName 设置外键约束名。 如果没有设置会默认使用ForeignKey为ConstraintName。Entity在运行时不使用约束名称,它只在生成的sql中使用。

func (*Relationship) Delete added in v0.5.0

func (r *Relationship) Delete(op RelOpConstraint) *Relationship

Delete 设置外键删除操作。

func (*Relationship) Descriptor added in v0.5.0

func (r *Relationship) Descriptor() *RelationshipDescriptor

Descriptor codegen中使用,用于获取表关系的描述。

func (*Relationship) ForeignKey added in v0.5.0

func (r *Relationship) ForeignKey(f FieldBuilder) *Relationship

ForeignKey 设置外键。

func (*Relationship) HasMany added in v0.5.0

func (r *Relationship) HasMany(e EntityInterface) *Relationship

HasMany 设置当前表在关联中的关系为Many。

func (*Relationship) HasOne added in v0.5.0

HasOne 设置当前表在关联中的关系为One。

func (*Relationship) Init added in v0.5.0

func (r *Relationship) Init(initDesc *RelationshipDescriptor) error

Init codegen中使用,用于初始化表关系的描述。

func (*Relationship) ReferenceKey added in v0.5.0

func (r *Relationship) ReferenceKey(f FieldBuilder) *Relationship

ReferenceKey 设置引用键。如果不设置,默认使用表的主键。如果引用的表没有主键,会出现Panic。

func (*Relationship) Update added in v0.5.0

func (r *Relationship) Update(op RelOpConstraint) *Relationship

Update 设置外键更新操作。

func (*Relationship) WithMany added in v0.5.0

func (r *Relationship) WithMany(e EntityInterface) *Relationship

WithMany 设置关联的实体表在关联中的关系为Many。

func (*Relationship) WithOne added in v0.5.0

func (r *Relationship) WithOne(e EntityInterface) *Relationship

WithOne 设置关联的实体表在关联中的关系为One。

type RelationshipBuilder added in v0.5.0

type RelationshipBuilder interface {
	Init(initDesc *RelationshipDescriptor) error
	// Descriptor codegen中使用,用于获取字段的描述。
	Descriptor() *RelationshipDescriptor
}

RelationshipBuilder 表关系构建器。

type RelationshipDescriptor added in v0.5.0

type RelationshipDescriptor struct {
	// Has 关联的实体表。
	Has EntityInterface
	// With 当前选择的表。
	With EntityInterface
	// HasRel 关联的实体表在关联中的关系。
	HasRel Rel
	// FromRel 当前选择的表在关联中的关系。
	WithRel Rel
	// ForeignKey 外键。
	ForeignKey FieldBuilder
	// ReferenceKey 引用键。如果不设置,默认使用实体的主键。如果引用的实体没有主键,会出现Panic。
	ReferenceKey FieldBuilder
	// ConstraintName 外键约束名。如果没有设置会默认使用ForeignKey为ConstraintName。Entity在运行时不使用约束名称,它只在生成的sql中使用。
	ConstraintName string
	Update         string
	Delete         string
}

RelationshipDescriptor 表关系描述。

type Sequence

type Sequence struct {
	// Name 序列的名称,不能为空字符串。
	Name *string
	// Increment 每次序列递增的值,默认1。
	Increament *int64
	// Min 序列的最小值,默认1。
	Min *int64
	// Max 序列的最大值,默认为9223372036854775807。
	Max *int64
	// Start 序列的起始值,默认1。
	Start *int64
	// Cache 指定序列中要预先分配的值的数量,默认1。
	Cache *int64
}

Sequence 字段使用的序列,序列的类型默认为Int64。

func NewSequence

func NewSequence(name string) Sequence

NewSequence 创建一个Sequence,name不能为空。

type Tracker

type Tracker interface {
	Add(...Mutator)
	Mutators() []Mutator
	Clear()
}

Tracker 是一个接口,用于跟踪实体类的状态。

type Tracking

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

Tracking 用于跟踪实体类的状态。

func (*Tracking) Add

func (t *Tracking) Add(m ...Mutator)

Add 用于添加一个实体到追踪器中。

Params:

  • m: 需要追踪的实体。

func (*Tracking) Clear

func (t *Tracking) Clear()

Clear 用于清空追踪器中的实体。

func (*Tracking) Mutators

func (t *Tracking) Mutators() []Mutator

Mutators 用于获取追踪器中的实体。

Directories

Path Synopsis
cmd
gen
sql

Jump to

Keyboard shortcuts

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