Documentation ¶
Index ¶
- Variables
- func AddConnection(conn ConnectionConfig) error
- func GetConnection(tag string) (dialect.Driver, error)
- func SetConfig(c Config)
- type Config
- type ConnectionConfig
- type Database
- type DbConfig
- type DbInterface
- type Descriptor
- type Entity
- type EntityConfig
- type EntityInterface
- type EntityState
- type FieldBuilder
- type FieldStorager
- type FieldValue
- type Mutation
- type Mutator
- type Rel
- type RelOpConstraint
- type Relationship
- func (r *Relationship) ConstraintName(name string) *Relationship
- func (r *Relationship) Delete(op RelOpConstraint) *Relationship
- func (r *Relationship) Descriptor() *RelationshipDescriptor
- func (r *Relationship) ForeignKey(f FieldBuilder) *Relationship
- func (r *Relationship) HasMany(e EntityInterface) *Relationship
- func (r *Relationship) HasOne(e EntityInterface) *Relationship
- func (r *Relationship) Init(initDesc *RelationshipDescriptor) error
- func (r *Relationship) ReferenceKey(f FieldBuilder) *Relationship
- func (r *Relationship) Update(op RelOpConstraint) *Relationship
- func (r *Relationship) WithMany(e EntityInterface) *Relationship
- func (r *Relationship) WithOne(e EntityInterface) *Relationship
- type RelationshipBuilder
- type RelationshipDescriptor
- type Sequence
- type Tracker
- type Tracking
Constants ¶
This section is empty.
Variables ¶
var Err_0100010001 err.ErrCode = err.New(
"0100010001",
"Add Connection failed, tag is empty.",
"",
)
Err_0100010001 添加连接时,配置中的tag为空。
var Err_0100010002 err.ErrCode = err.New(
"0100010002",
"Add Connection failed, driverName '%s' not support.",
"",
)
Err_0100010002 添加连接时,配置中的driverName不支持。
Verbs:
0: 配置中的driverName。
var Err_0100010003 err.ErrCode = err.New(
"0100010003",
"Received a connection error because the connection tag '%s' does not exist.",
"",
)
Err_0100010003 得到连接错误,因为连接信息标签不存在。
Verbs:
0: 连接信息标签。
var Err_0100010004 err.ErrCode = err.New(
"0100010004",
"Add Connection failed, the connection tag '%s' already exists.",
"",
)
Err_0100010004 添加连接错误,因为连接信息标签已经存在。
Verbs:
0: 连接信息标签。
var Err_0100010005 err.ErrCode = err.New(
"0100010005",
"unknown driver %q.",
"1. check import driver package.",
)
Err_0100010005 创建数据库实例时,遇到未知的驱动,可能是忘记导入驱动包。
var Err_010001000x err.ErrCode = err.New(
"010001000x",
"%s.",
"",
)
Err_010001000x 初始化时遇到的未知错误。
Verbs:
0: 未知的错误。
var Err_0100020001 err.ErrCode = err.New(
"0100020001",
"new database %q : %v",
"1.传入的数据库名与Go中的关键字冲突。",
)
Err_0100020001 调用New命令创建Schema,在创建数据库时验证数据库名出现错误。
Verbs:
0: 数据库名。 1: 错误信息。
var Err_0100020002 err.ErrCode = err.New(
"0100020002",
"database %q' must begin with uppercase",
"",
)
Err_0100020002 调用New命令创建Schema,输入的数据库名不是大写字母开头。
Verbs:
0: 数据库名。
var Err_0100020003 err.ErrCode = err.New(
"0100020003",
"execute template %q: %v",
"",
)
Err_0100020003 执行模板时出现错误。
Verbs:
0: 模板文件名。 1: 错误信息。
var Err_0100020004 err.ErrCode = err.New(
"0100020004",
"load schema: %v",
"",
)
Err_0100020004 在加载Shema时出现错误。
Verbs:
0: 错误信息。
var Err_0100020005 err.ErrCode = err.New(
"0100020005",
"not entity found in %s",
"",
)
Err_0100020005 在加载Shema时,发现没有找到entity。
Verbs:
0: Schema的路径
var Err_0100020006 err.ErrCode = err.New(
"0100020006",
"format template: %v",
"",
)
Err_0100020006 格式化模版时出现错误。
var Err_0100020007 err.ErrCode = err.New(
"0100020007",
"create '.gen' directory: %v",
"",
)
Err_0100020007 创建'.gen'目录时出现错误。
var Err_0100020008 err.ErrCode = err.New(
"0100020008",
"write file %s: %v",
"",
)
Err_0100020008 通过模版写入文件时出现错误。
Verbs:
0: 文件路径。 1: 错误信息
var Err_0100020009 err.ErrCode = err.New(
"0100020009",
"unmarshal schema config %s: %v",
"",
)
Err_0100020009 反序列化Shema配置文件时出现错误。
Verbs:
0: 出现问题的内容。 1: 错误信息。
var Err_010002000x err.ErrCode = err.New(
"010002000x",
"taurus_go/entity: %s.",
"",
)
Err_010002000x codegen遇到的未知错误。
var Err_0100020010 err.ErrCode = err.New(
"0100020010",
"load package: %v",
"",
)
Err_0100020010 加载Schema和entity.Interface中的Go package时出现错误。
Verbs:
0: 错误信息。
var Err_0100020011 err.ErrCode = err.New(
"0100020011",
"missing package information for: %s",
"",
)
Err_0100020011 加载Schema时没有发现package信息。
Verbs:
0: 加载的Schema的路径。
var Err_0100020012 err.ErrCode = err.New(
"0100020012",
"invalid declaration %T for %s",
"",
)
Err_0100020012 在断言为 *ast.TypeSpec 类型时出现错误。
Verbs:
0: 断言的类型。 1: 断言的字段名。
var Err_0100020013 err.ErrCode = err.New(
"0100020013",
"invalid spec type %T for %s",
"",
)
Err_0100020013 在断言为 *ast.StructType 类型时出现错误。
Verbs:
0: 断言的类型。 1: 断言的字段名。
var Err_0100020014 err.ErrCode = err.New(
"0100020014",
"invalid field type %T for %s",
"",
)
Err_0100020014 在断言为 *ast.Ident 类型时出现错误。
Verbs:
0: 断言的类型。 1: 断言的字段名。
var Err_0100020015 err.ErrCode = err.New(
"0100020015",
"invalid package identifier: %s",
"",
)
Err_0100020015 无效的包名。
Verbs:
0: 包名。
var Err_0100020016 err.ErrCode = err.New(
"0100020016",
"parse entity file: %v",
"",
)
Err_0100020016 调用parser.ParseFile解析go代码出现错误
Verbs:
0: 错误信息。
var Err_0100020017 err.ErrCode = err.New(
"0100020017",
"format node: %v",
"",
)
Err_0100020017 把解析的代码格式化,并添加到模板中时出现错误。
Verbs:
0: 错误信息。
var Err_0100020018 err.ErrCode = err.New(
"0100020018",
"marshal entity %q : %v",
"1. Check entity field type, the field should implement interfaces FieldStorager and FieldBuilder.",
)
Err_0100020018 序列化实体时出现错误。
Verbs:
0: 实体名。 1: 错误信息。
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: 主键字段类型。
var Err_0100020020 err.ErrCode = err.New(
"0100020020",
"entity attrName %q already exists",
"",
)
Err_0100020020 在读取实体时,存在相同AttrName的实体
Verbs:
0: 实体的AttrName。
var Err_0100020021 err.ErrCode = err.New(
"0100020021",
"entity %q has no primary key",
"",
)
Err_0100020021 没有给实体设置主键。
Verbs:
0: 实体的结构体名字,不是AttrName。
var Err_0100030001 err.ErrCode = err.New(
"0100030001",
"entity table %s field %s required,but value is nil.",
"",
)
Err_0100030001 在创建语句中,必填但没有默认值的字段的值为空。
Verbs:
0: 实体表的名字。 1: 字段名。
var Err_0100030002 err.ErrCode = err.New(
"0100030002",
"entity table %s no fields need to update.",
"",
)
Err_0100030002 在升级语句中,没有需要更新的字段。
Verbs:
0: 实体表的名字。
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: 当前应该属于的状态。
var Err_0100030004 err.ErrCode = err.New(
"0100030004",
"Clause Params is too many.",
"",
)
Err_0100030004 子句中参数超过了最大值。
var Err_0100030005 err.ErrCode = err.New(
"0100030005",
"update set and predicate params count not equal.",
"",
)
Err_0100030005 在update中set和predicate,参数数量不一致。
var Err_0100030006 err.ErrCode = err.New(
"0100010006",
"invalid entity type %T.",
"",
)
Err_0100030006 创建实体时,遇到错误的实体类型。
var Err_0100030007 err.ErrCode = err.New(
"0100030007",
"multiple times to include the same relation table.",
"",
)
Err_0100030007 联表查询,多次传入同一个关联表。
Functions ¶
func GetConnection ¶
GetConnection 获取一个数据库连接。
Types ¶
type Config ¶ added in v0.5.0
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 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 字段的类型。如"filed.Int64"。 Type string `json:"type,omitempty"` // BaseType 字段的基础类型。如"filed.Int64"的基础类型为"int64", "filed.Int64A1"的基础类型也是"int64"。 BaseType string `json:"base_type,omitempty"` // AttrType 字段的数据库类型。如"filed.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"` // Depth 字段的值类型的深度,例如[]int64的深度为1,[][]int64的深度为2。 Depth int `json:"depth,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 // ExtTemplate 用于在使用字段时,调用外部模版生成代码, // 这个相比在 go run github.com/yohobala/taurus_go/entity/cmd generate -t <template>, // `ExtTemplate`是和字段相关联,只要调用字段就会生成代码,避免了每次都要手动调用模版。 // // Returns: // // - 模版的路径。 ExtTemplate() []string }
这个接口定义了字段在生成代码阶段需要的方法。
type FieldStorager ¶
type FieldStorager interface { // 用于扫描数据库返回的值,将值赋值给字段。 Scan(value interface{}) error // 用于打印字段的值。 String() string // SqlParam 用于sql中获取字段参数并赋值。如 INSERT INTO "blog" ( "desc") VALUES ($1),给$1传递具体的值。 SqlParam(dbType dialect.DbDriver) (FieldValue, error) // SqlFormatParam 用于sql中获取字段的值的格式化字符串,这个是进一步处理SqlParam。如 INSERT INTO "blog" ( "desc" ) VALUES ( ST_GeomFromGeoJSON($1) ) 其中$1是SqlParam返回的,值可能是POINT(1,1), SqlFormatParam在这基础上返回ST_GeomFromGeoJSON($1) SqlFormatParam() func(dbType dialect.DbDriver, param string) string // SqlSelectClause 用于sql语句中对SELECT的参数进行格式化,通过这个能够扩展SELECT部分实现复杂的查询,比如 SELECT id, ST_AsText(point)。 SqlSelectFormat() func(dbType dialect.DbDriver, name string) string }
这个接口定义了字段在运行时需要的方法。
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) SetState ¶
func (m *Mutation) SetState(state EntityState)
SetState 设置实体的状态。
Params:
- state: 实体的状态。
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
func (r *Relationship) HasOne(e EntityInterface) *Relationship
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。