gen

package
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: Jan 21, 2024 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// Templates 保存database将要生成的文件的模版信息
	Templates = []InstanceTemplate{
		{
			Name:   "database",
			Format: pkgf("%s.go"),
		},
		{
			Name:   "sql/table",
			Format: pkgf("sql/%s_table.sql"),
		},
	}
	EntityTemplates = []InstanceTemplate{
		{
			Name:   "entity/builder",
			Format: pkgf("%s/builder.go"),
		},
		{
			Name:   "entity/entity",
			Format: pkgf("%s/entity.go"),
		},
		{
			Name: "entity/meta",
			Format: func(t template.TemplatePathFormat) string {
				return fmt.Sprintf("%[1]s/%[1]s.go", t.Dir())
			},
		},
		{
			Name:   "entity/fields",
			Format: pkgf("%s/fields.go"),
		},
		{
			Name:   "entity/create",
			Format: pkgf("%s/create.go"),
		},
		{
			Name:   "entity/delete",
			Format: pkgf("%s/delete.go"),
		},
		{
			Name:   "entity/query",
			Format: pkgf("%s/query.go"),
		},
		{
			Name:   "entity/update",
			Format: pkgf("%s/update.go"),
		},
		{
			Name:   "entity/where",
			Format: pkgf("%s/where.go"),
		},
	}
	InstanceTemplates = []GenericTemplate{
		{
			Name:   "internal/core",
			Format: "internal/core.go",
		},
	}
	SqlTemplates = []GenericTemplate{}
)

Functions

func PrepareEnv

func PrepareEnv(c *Config) (undo func() error, err error)

PrepareEnv 检查是否有runtime.go,如果存在检查导入部分,避免循环导入

Types

type Builder

type Builder struct {
	*Config
	// Databases 包含了从entity package中加载的所有database。
	Databases []*load.Database
	// Nodes是Schema中的database info的集合。
	Nodes []*Info
}

func NewBuilder

func NewBuilder(c *Config, databases ...*load.Database) (s *Builder, err error)

NewBuilder 根据提供的Entity信息,生成数据库的表。

参数:

  • c: 代码生成的配置。
  • entities: 从entity package中加载的所有entity。

func (*Builder) Gen

func (b *Builder) Gen() error

type Config

type Config struct {
	// 保存生成的代码的目标路径。
	//
	// 默认情况下,代码生成器将生成代码到和Package上一级目录。
	// 例如,"tentity generate ./entity/schema",则生成的代码将放在"./entity"目录下。
	Target string

	BuildFlags []string

	// Package 定义了上面的Target目录下,Go package的路径,比如“package gen”,则
	// Package为"gen"
	//
	// "tentity generate <project>/entity" 或者在项目根目录下 "tentity generate ./entity",
	// 然后会获得执行路径下文件的Go package作为Package
	Package string

	// Header 它允许用户为生成的文件提供一个可选的头部签名。
	// 默认情况下,这个头部签名遵循标准的 'go generate' 格式,
	// 即 '// Code generated by ent, DO NOT EDIT.'
	Header string

	// 可选的hook列表,用于代码生成前、后在表上执行
	Hooks []Hook

	// 指定代码生成中id字段的类型
	// 默认情况下,id字段的类型是int或者string
	IDType *field.TypeInfo

	// 外部传入的template
	Templates []*template.Template
}

代码生成的全局配置,并在所有生成的节点之间共享

type EntityInfo

type EntityInfo struct {
	*Config
	Entity *load.Entity
}

func NewEntityInfo

func NewEntityInfo(c *Config, entity *load.Entity) (*EntityInfo, error)

func (EntityInfo) Dir

func (t EntityInfo) Dir() string

PackageDir 返回包目录名称

type GenerateFunc

type GenerateFunc func(*Builder) error

func (GenerateFunc) Generate

func (f GenerateFunc) Generate(t *Builder) error

type Generator

type Generator interface {
	// Generate 为提供的table生成代码
	Generate(*Builder) error
}

type GenericTemplate

type GenericTemplate struct {
	Name   string
	Format string
	Skip   func(*Builder) bool
}

GenericTemplate 是生成代码中给每个InstanceTemplate使用的通用部分

type Hook

type Hook func(Generator) Generator

type Info

type Info struct {
	*Config
	Database *load.Database
}

Info 表示一个Builder中的一个节点的信息,它所包含的信息

func NewInfo

func NewInfo(c *Config, database *load.Database) (*Info, error)

从提供的database中创建一个Info

func (Info) Dir

func (t Info) Dir() string

PackageDir 返回包目录名称

type InstanceTemplate

type InstanceTemplate = template.FileTemplate[any]

InstanceTemplate 根据数据库结构生成一个模版

Jump to

Keyboard shortcuts

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